lunes, 14 de febrero de 2011

Capítulo 1: Todo sobre los sprites del C64

'El término más antiguo (y curioso)  es el que se empleaba antes del nacimiento de  la palabra sprite: "Player-Missile Graphics" (Gráficos Jugador-Proyectil)'


Hoy toca hablar, a petición de varios lectores, de un tema fascinante, que es además el principal responsable de que los juegos para el c64 sean tan especiales... ¡Sí! como dice claramente en el título, ¡aquí vamos a hablar de Sprites!
Aunque es un termino bien conocido actualmente, ¿Qué es un Sprite, en realidad?

patrón de puntos que definen un sprite  

Cuando se hace referencia al término sprite ("duende" en inglés), estamos refiriéndonos a cualquier objeto gráfico que pueda colocarse en la pantalla. Dicho esto, seria razonable considerar un simple punto dibujado en cualquier modo gráfico, como un sprite, pero para definir un punto no se habria tenido que definir un vocablo... Así pues, podríamos ampliar la definición diciendo que los objetos que definen a los sprites, son algo más que un punto: una sucesión de puntos (pixels) encendidos o apagados según un patrón de datos (definidos en la memoria) los cuales determinan su color, reservándose uno de ellos para representar al color del fondo de la pantalla (A menudo transparente: ideal para dibujar sobre el fondo). Dicha matriz, tiene un ancho y un alto (en pixels) bien definidos.

Para representar la forma de cada objeto en la pantalla, deberiamos hacer un programa que pintara, cada punto en su lugar correspondiente, con el color de éste (almacenado en los datos de la matriz del sprite). Algo que puede sobrecargar de trabajo a la CPU, sobretodo si son muchos los objetos a representar...

En el C64, con su CPU (chip MOS 6510) apenas trabajando a 1 Mhz, es una tarea realmente lenta tener que dibujar varios sprites de un tamaño mas o menos medio. Así pues, entonces... ¿como es posible que los videojuegos que se publicaron, no parezcan tener problemas en mover los sprites? 

Este chip es el responsable de todo ;) MOS 6569 (Vic II)


En realidad se emplea un "truco" para liberar a la CPU de la carga de tener que administrar los sprites, dejándole esta tarea a su chip gráfico (el VIC II). De esta manera la CPU no gastará ni un solo ciclo para pintar los sprites (o incluso cambiarlos de tamaño o color), pues cada vez que se genera la pantalla (60 veces por segundo), el chip gráfico tendrá en cuenta la posición de cada uno de los sprites y los pintará por nosotros (con la forma y color que tengan definidas) a la velocidad del rayo. A este tipo de sprites se les llama sprites Hardware, ya que es el hardware el que se ocupa de todas sus operaciones. A los que presentábamos anteriormente, se les conoce como sprites Software, esto es, para ser representados, necesitan ser manejados mediante un programa (software), o una rutina propia, consumiendo con ello valiosos ciclos de la CPU, que podrían emplearse para otras tareas del juego.

Sin embargo al usar los sprites por hardware, en el c64, hemos de tener presente que, aunque ganamos potencia de proceso, perdemos cierta versatilidad, ya que el tamaño de éstos esta prefijado, y deberemos crear nuestros sprites dentro de una "caja" rectangular de 24x21 pixels (12x21 en modo multicolor)...en el caso del c64, por que cada sistema tiene sus dimensiones específicas (incluso algunos presentan varios tamaños), por ahora lo dejaremos aquí, ya profundizaremos acerca de estos temas (más técnicos) en los siguientes capitulos.

Los sprites por software en sistemas con procesadores más rápidos son viables. De hecho muchos de los sistemas de aquellos tiempos, como son el caso del Zx Spectrum, los BBC micro, el Amstrad, o incluso, dentro de la familia Commodore: el C16 y el Plus 4, suplen su falta de sprites por hardware, con sprites por software, que son administrados a una mayor velocidad gracias a sus CPU ligeramente más rápidas, y, lógicamente podremos diseñar los sprites del tamaño que deseemos (claro está respetando las dimensiones de la pantalla, y sin "ahogar" al procesador).

Así pues, debe quedar bien claro que sin el chip VIC II y sus sprites por hardware, no habria sido posible disfrutar de los fabulosos juegos que el Commodore 64 nos ha venido ofreciendo o por lo menos, seguro que habrian sido mucho más mediocres, gráficamente hablando, y con toda seguridad, simples.

Los sprites por hardware son toda una delicia para programar videojuegos, ya que aunque pueden ser usados para muchas otras cosas, la idea surgió para facilitar la tarea de la programación de éstos.
Los sprites del Creatures, al descubierto...

Aparte del C64 (y por supuesto de las máquinas arcade, que usaban -y abusaban- esta técnica)  también se beneficiaron de esta interesante característica, en 8 bits,  por ejemplo el sistema MSX, las consolas NES y Master System, o en el mundo de las 16 bits, el AMIGA. Como véis, pocos  son los ordenadores que disfrutaron de este privilegio.

Es importante saber que, a pesar de que este es el nombre más popular, hay más formas de referirse a los "sprites" (Tanto de software, como de hardware). Para que no os confundáis al leer en otros sitios, cuando empecéis a programar sprites, creo que puede ser muy útil conocer estos otros nombres.

El más popular fue MOB (de "movable object block", en español: bloque objeto movible), y en Commodore, os encontrábais con este término, en el manual de la expansión del Basic "Simon's Basic". Sin embargo Commodore prefirió emplear el término Sprite mayoritariamente, y es el que vais a encontrar en todos sus manuales.

De nombre parecido tenemos BOB (Blitter Objects), popular en el mundo del Amiga, y debe su nombre en referencia al Blitter, que es el nombre del coprocesador dedicado del amiga a mover "sprites".

En otros ámbitos (principalmente en el mundo de las consolas), también se les conoce simplemente como OBJ (acrónimo de Objeto).  

El término más antiguo (y curioso)  es el que se empleaba antes del nacimiento del término sprite: "Player-Missile Graphics" (Gráficos Jugador-Proyectil) ¡así, a lo bruto! ¿pero se entiende verdad? Es un término que usaron sobretodo en Estados Unidos en los primeros videojuegos, y que se siguió utilizando mucho también en el mundillo de los Atari de 8 bits (de hecho el nombre viene de la Atari VCS). Este nombrecito deja patente que los primeros videojuegos se basaban en pegar tiros (¡y esquivarlos!).

   Fue muy afortunada la idea de crear chips dedicados para los sprites por parte de los diseñadores del Commodore 64. ¡Bendito sea el VIC II!


y con esto llegamos al final de este capitulo.

En los siguientes capítulos se verán con detalle, información técnica sobre los modos y límites que tenemos a la hora de usarlos,  trastearemos con el VIC II para programar sprites en el Commodore 64, aprenderemos  como moverlos, cambiarles su tamaño y color, hacer sprites animados, control de las colisiones... primero en BASIC y luego en código máquina. Tambien hablaremos de algunos de los mejores editores de sprites (para C64) que existen actualmente para PC y de como exportarlos a nuestros proyectos.

Editor que creé hace años, para "moldear" mis sprites.


¡Hasta la próxima entrega, amigos!
* Enlace recomendado: (click!) 








 Es todo un museo de sprites del c64





12 comentarios:

SyX dijo...

La verdad es que está genial encontrarse artículos técnicos para el C64 en castellano, pues seguro que ayudan a que el personal se anime a aprender, y lo estabas bordando si no fuera por un par de detalles que chirrían el conjunto, para empezar los Atari ST carecen de sprites hardware; los BOBs del Amiga son el equivalente a los sprites por software, ya que de los sprites hardware se encarga el custom chip Denise, no el popular Fat Agnus ó Blitter; luego la terminología de PMG (Player-Missile Graphics) aparece en la Atari VCS pues así es como se llaman en ella y de esa máquina se deriva al resto de consolas y ordenadores de 8 bits de Atari, pero fuera del mundo del Atari se usa en exclusiva el término Sprite; y por último y lo que más me ha sorprendido, es que no mencionarás la multiplexación de sprites, algo tan normal en el C64 y que permite superar la limitación de los 8 sprites.

Animo con la iniciativa que son estas cosas las que se echan de menos :)

Bieno dijo...

Que bueno que eres. Estos reportajes son los que realmente nos enseñan como es nuestro ordenador y las diferencias con los demás.

Josepzin dijo...

El tema de los sprites siempre fue lo que mas me atrajo de las C64, para mi que soy un negado en lo sonoro-musical los sprites era "la magia" de este ordenador.

Me gusto mucho el articulo y espero los siguientes!!

Lobogris dijo...

Gracias a Bieno y Josezpin, me alegro que os guste el artículo, y pronto habrá mas... ;)

Lobogris dijo...

@Syx:
Cuando digo que los "sprites" se les llama de otra forma... no me refiero a los sprites por hardware, sino a todos los tipos de sprites. Sobre los Amiga BOBs: ok, blitter para soft sprites, pero no dije que fuera para los hard sprites.

El Atari ST carece de sprites hardware? NO lo sabia, ¿de verdad? Eso tengo que mirarlo bien...
Nunca tuve un Atari (aunque lo probé de un amigo, me gusta más el Amiga)

Cuando digo que PMG viene del mundillo de Atari de 8 bits, me referia a las consolas tambien (¿o no son de 8 bits tambien?), incluida la VCS, de todas formas, he añadido una explicación adicional, para evitar lios...

Una última cosa: ¿Por que iba a mencionar la multiplexación de sprites en el primer capitulo? ¡Pacienca! que todo llegará... Ten en cuenta que ni siquiera quise mencionar que el c64 tiene un limite standard de 8 sprites... estas cosas, creo que queda claro en el articulo, que las comentaré en el próximo capítulo.

Gracias por tus aclaraciones (siempre van bien las matizaciones) y por darme animos ;)

Bovirtual dijo...

Magnifico articulo, Lobogris!!! Detallado, ademas de no centrarte unicamente en el c64, sino tambien en otras maquinas de la epoca :-)

Como bien dice Bieno, con articulos como este es facil aprender

Lobogris dijo...

¡Gracias! Me alegro que te guste Bo. Espero que los interesados, aprendan de todo esto, y les ayude a sacar nuevas cosas para nuestro querido c64!

SyX dijo...

Considera que el ST es el equivalente al Spectrum y el Amiga a los C64 y Atari 800. En el ST tienes que hacer todo con la cpu... aunque modelos posteriores añadieron su correspondiente blitter, pero llegaron demasiado tarde a la pelea de los 16 bits y como siempre, la mayoría de los juegos deben ser compatibles con la máquina base, la que no lleva blitter.

Parece que leí muy rápido y no me di cuenta de que en la parte de los BOBs hablabas de sprites en general, sin distinguir entre hardware y software... sorry, jejeje.

Pues lo de la multiplexación es porque para mí es algo tan característico del C64, que no lo veo como algo especial, sino como una característica de la máquina, incluso aparece un ejemplo en el "Programación Avanzada del C64" del John P. Gibbons de Anaya ó en aquel artículo de la Commodore World 50 del scroll de estrellitas (el primer material impreso de C64 que llegó a mis manos en los 80) y de hecho esa fue mi primera rutina en 6502 para C64

Pero bueno, como te decía es que me ha dejado muy buen sabor de boca el artículo y yo soy de esa clase de personas que primero necesita un repaso general de todo lo que ofrece el hardware, antes de meterme con cada detalle, por lo que llamame impaciente xDDD

Lobogris dijo...

impaciente XDD

Si, incluso en el manual de referencia para programadores de c64, se alude a la multiplexación. Este truco no es propio solo del C64, es un truco bien conocido en otros sistemas, ya se hacian esas cositas con las recreativas, por ejemplo.

Tu eres de los mios: te gusta saber todos los detalles técnicos jeje, pero hemos de respetar a los que se estan introduciendo en esto, y se marearian si comenzara a poner más tecnicismos de los necesarios, de entrada. Primero una breve introducción general, luego ya vendrá lo técnico. Por cierto, como veo que estas muy puesto en el tema, si quieres colaborar para los siguientes artículos, bienvenido eres!

Anónimo dijo...

Muy interesante, te sigo! sigueme si te gusta mi blog:) http://cuantodevida.blogspot.com

Toni dijo...

Muy bueno el artículo, me ha encantado! La verdad es que no entiendo demasiado de tecnicismos y eso ha servido para aprender algo más.

Por cierto, me encanta el gif de bruce lee machacando al gordo verde ;)

Buen trabajo!

Te agrego en la lista de blogs que sigo en pixelsmil.com

un saludo

Lobogris dijo...

Gracias, jeje el bruce lee es la caña ;)

Publicar un comentario