Sprites, BOBs  y otras criaturas mágicas (I): INTRODUCCIÓN

 

Desde las naves de ‘Battle Squadron’, hasta los futbolistas de ‘Sensible Soccer’, pasando por los protagonistas de ‘Turrican’ o ‘Shadow of the Beast’, el 99% de los elementos gráficos presentes en los juegos de Amiga son Sprites o BOBs (Blitter Objects), cada uno de los cuales, como iremos viendo, con sus propias ventajas e inconvenientes.

 

the_ultimate_amiga_standoff_by_melomonster

“Sprite, que eres un sprite!”

 

Veamos todo esto con un ejemplo… Imagina un folio en blanco. Vamos a suponer que esa es la memoria de vídeo de nuestro Amiga. Supongamos que, en dicho folio, dibujamos la superficie de un planeta sobre la que tendremos que mover la nave protagonista. Veamos cómo podríamos hacer esto, en función de si decidimos dibujar nuestra nave como un BOB o como un sprite:

 

 

BOB: se trata de elementos gráficos que se dibujan directamente sobre la memoria de vídeo con la ayuda del Blitter, uno de los coprocesadores del Amiga. En el caso de la máquina de Commodore, dicha zona de memoria se organiza en forma de bitplanes o planos de bits.

 

Siguiendo con nuestro ejemplo, en este caso, dibujamos la nave directamente sobre el folio (es decir, sobre los bitplanes), tal y como hicimos con el fondo. Para simular el movimiento de la nave tendremos que borrarla de su posición actual antes de dibujarla en sus nuevas coordenadas. Pero, si lo hacemos así, no es difícil ver que, con el movimiento de la nave, también iremos borrando el fondo a su paso. Esto sería perfecto si el protagonista de nuestro juego fuera un agujero negro… pero, como no es el caso, está claro que habrá que hacer algo más elaborado. En concreto, cada vez que queramos desplazar la nave haremos lo siguiente:

    1. Restaurar la porción del fondo que nuestra nave machacó al moverse a su posición actual, y que habremos guardado previamente.
    2. Hacer una copia de la porción del fondo que quedará machacado por la nave cuando la dibujemos en su nueva posición.
    3. Dibujar la nave en esa nueva posición.

El inconveniente de que nuestra nave sea un BOB está claro: por cada paso tenemos que hacer 3 operaciones que serán más o menos costosas en función del tamaño y número de colores del elemento a copiar en cada caso (fondo o nave). La ventaja sería que las limitaciones en cuanto a tamaño y número de colores, más que por los BOBs en sí, vendrían impuestas sólo por el tamaño y número de colores de nuestro fondo.

 

 

Sprite: no se dibujan sobre la memoria de vídeo, sino que se trata de elementos que se muestran de manera independiente y que, según un sistema de prioridades, pueden aparecer por delante o por detrás de los bitplanes.

Los sprites tienen las siguientes limitaciones:

  • Solo es posible emplear 8 sprites en una misma línea.
  • Tienen un ancho máximo de 16 píxeles.
  • Cada sprite, de manera aislada, puede mostrar un máximo de 4 colores (3 + transparente). Si emparejamos 2 sprites, ese límite de colores ascenderá a 16 (15 + transparente).

 

¿Qué pasa con nuestro ejemplo? En lugar de dibujar la nave directamente sobre el folio (es decir, sobre los bitplanes), podríamos dibujarla aparte, recortarla y moverla libremente por encima de nuestro escenario, sin tener que preocuparnos de salvar y restaurar el fondo cada paso de la nave. Esa es sin duda la mayor ventaja de emplear sprites para elementos gráficos móviles. Los inconvenientes vendrían dados por las limitaciones de los propios sprites, comentadas previamente.

 

Como ya podréis imaginar, una de las tareas fundamentales durante el diseño de un juego para Amiga, es decidir qué elementos gráficos de nuestro juego serán BOBs y cuáles serán sprites, teniendo en cuenta las ventajas y desventajas de cada uno de ellos, que quedan resumidas en la siguiente tabla:

Tabla comparativa Bobs vs Sprites

 

En fin, si has llegado hasta este punto del artículo: ¡enhorabuena! En primer lugar, por continuar despierto… Y en segundo lugar, pero no menos importante, porque ya tienes la base teórica necesaria para afrontar las próximas entregas de ‘Sprites, BOBs y otras criaturas mágicas’, en las que, entre otras cosas, analizaremos los diferentes usos de BOBs y sprites en algunos de los grandes juegos que pasaron por el Amiga.

 

 

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

 

10 Comentarios sobre “Sprites, BOBs y otras criaturas mágicas (I): INTRODUCCIÓN

  1. Spiral World

    Que alegría mas Amiguera me habéis dado…pillines xDD
    Esto si es HotStuff del auténtico.

    Que no pare la fiesta Commodoriana

    • Fernando Cabrera

      Spiral, eres un liante! xD El objetivo real de esta sección es que consigas acabar algún día una demo, una intro, un juego o lo que se te ocurra… tú puedes!!! 😉

      • Spiral World

        Jajaja Es una de mis ilusiones y seguro qlo hago. Ya estas tú para instruirnos y consultarte :)))

  2. Frankyoaks

    Grande! Me aprece una sección muy interesante de la que seguro aprendo mucho.

    Dicho esto tengo una serie de dudas… A que te refieres a 8 sprites por línea? A la hora de detectectar colisiones son iguales de buenos/malos?

    Ah! que las preguntas no van aquí? jajaj

    • Fernando Cabrera

      Muchas gracias por tu comentario! Espero que estos artículos sirvan para que más gente se interese por estos temas y a ver si alguien se anima a aprender lo necesario para programar alguna cosita sencilla en Amiga, para empezar. Dicho esto:

      – El funcionamiento del Amiga está dirigido en gran parte por el barrido de pantalla. En cada línea de dicho barrido hay slots asignados para la obtención de datos para los sprites, los bitplanes o los canales de audio (por ejemplo) a través de los correspondientes canales de DMA. En una línea cualquiera del display hay un slot que permite leer 2 palabra (32 bits) de memoria chip para cargar los datos de cada uno de los 8 sprites hardware del Amiga en esa línea (de ahí que los sprites no puedan tener un ancho superior a 16 píxeles: 32 bits componen 2 planos de 16 bits que confieren al sprite sus 4 colores máximos). Si en una misma línea o líneas del display intentamos mostrar más de 8 elementos gráficos mediante los 8 sprites hardware se produciría el típico parpadeo que podemos apreciar en algunos juegos.

      – El Amiga dispone de una detección “automática” de colisiones tanto entre los sprites (por grupos) y los playfields (bitplanes) como entre los propios sprites y entre los playfields. Sin embargo (y esta es una opinión que no he contrastado) creo que no era la manera más habitual de detectar las colisiones en los juegos de Amiga. Entiendo que lo más normal era emplear las típicas AABB (Axis Aligned Bounding Boxes) para detectar colisiones entre elementos de cualquier tipo (sprites y BOBs). Otra manera de detectar colisiones (empleada en juegos como Menace, si no me equivoco!) es emplear el Blitter y su zero flag. Son los sprites mejores o peores a la hora de detectar colisiones? Centrándonos en las AABB, lo que tendrías es una “caja” que delimita un elemento gráfico genérico para detectar las colisiones y que, por tanto, es igual de válida para sprites y para BOBs.

      Muy interesantes tus dudas, espero no haberte liado más! xD Pero para explicarlo en detalle haría falta más tiempo y espacio, jeje.

  3. Commodore Spain

    Fernando! Muchas gracias. Nos hacía falta a alguien que pusiera la cordura por aquí XDD. Ahora en serio, agradezco mucho que estés entre nosotros y que nos cuentes con esa facilidad la parte de atrás de los videojuegos. Enseñar de esta forma tan amena no está al alcance de todos. Sigue así MAESTRO!!

    • Fernando Cabrera

      Gracias a ti! 🙂 Ahora toca elegir un juegaco y contar algunas cosillas sobre el uso que hace de sprites y BOBs para la próxima entrega de la serie ;).

    • frankyoaks

      Para nada liado, dudas resueltas aunque… Ahora surgen más jaja seré paciente y no me convertiré en el alumno pesado que siempre está con la mano en alto. Gracias!

      • Fernando Cabrera

        Encantado de ayudar, siempre que pueda! 😉 Te recomiendo que te pases por el hilo que ha enlazado Commodore Spain en otra respuesta.

  4. Commodore Spain

    Para los interesados. Josepzin ha abierto un tema en el foro de Commodoremanía sobre algunas reflexiones del artículo. Aquí tenéis el link: http://goo.gl/GCMYOK ¡Gracias Jose 😉 !

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