lunes, 28 de diciembre de 2015

Nace Otro Blog Sobre El Amstrad CPC


Como veréis, el blog cambia de nombre. Llevo un tiempo tonteando con el sistema del Sr. Sugar en forma emulada, maravillándome con sus asombrosos juegos (por ello los votaba tanto en #laretrosemana, aunque lo disimulaba con lo de "descubrir nuevos títulos") que me han hecho cambiar de opinión respecto al CPC, y al final he sucumbido a la realidad: el Amstrad CPC es un sistema superior al Commodore 64. Y es por ello que me he comprado un flamante Amstrad CPC con monitor a color. Lo iba a comprar con monitor de fósforo verde por aquello de que como ya estoy acostumbrado a la paleta triste del C64, pasar al monocromo verde tampoco iba a ser ningún trauma, pero he preferido hacerme con el multicolor para disfrutar a tope de esos 27 brillantes colores.
Mi nueva y flamante máquina.

Sí amigos, porque entre sus 27 alegres colores o los 16 deprimentes y apagados del C64, permitidme el chiste fácil, pero es que ¡NO HAY COLOR! Que vale que al cabo de unas horas de estar jugando al Target Renegade con el Amstrad las córneas se me chamuscan un poco (mi oculista ya me ha dado un remedio: unas gafas de sol para ver eclipses de las que usan en la NASA), pero al menos no te induce al suicidio como la panera. Fijaros en este gráfico aparecido en un estudio de la Universidad de Stanford (Michigan) en los años 80, sobre los índices de usuarios con depresión en ambos sistemas. No hay más preguntas, señoría.
Si lo dijo la famosa Universidad de Stanford (Michigan), cierto sería...

Ya que estamos con el apartado gráfico, sólo tenéis que comparar algunas capturas de juegos de CPC con las de C64 para afrontar la realidad, y es que el Amstrad es visualmente superior al Commodore, y no sólo por su colorido. Ya oigo al típico fanboy de Commodore restregarme por el careto las bondades del 64 en este tema, diciendo que claro, que una cosa es una pantalla estática y otra el juego en movimiento. Y yo le digo, parafraseando un diálogo de una famosa película: vale, pero aparte de los sprites por hardware, el suave scroll "al pixel" por hardware, el modo en alta resolución con 16 colores simultáneos en lugar de 4, y una mayor fluidez general a la hora de mover elementos gráficos en pantalla, ¿en qué le gana el C64 al CPC? Cri-cri-cri, silencio...
Las comparaciones son odiosas...

Si hablamos de la CPU, no hay discusión alguna: los 4MHz del Z80 (no hagáis caso a los que dicen que realmente rinden como 3,3MHz, son ultras del Commodore) le ganan al 1MHz del 6510 (que ni llega a 1 en PAL, si es que es lo peor). Ahora vendrá el fan listillo del Creatures (yo lo era, pero ya no más) a decirme que el C64 tiene un chipset que libera a la CPU de ciclos en los apartados sonoro y gráfico que hacen que rinda mejor y etc. Ni caso... que quizás tenga razón... lo más seguro... pero que no, que son 4MHz contra 1 y au!
'Nuff said!!!
Luego está el aspecto sonoro. Aquí los fanboys commodorianos me saltarán al cuello con aquello de que el SID es el mejor chip de sonido de los 8 bits, que si es un sintetizador, que si la mayoría de programadores lo preferían (eso dicen en el libro Ocean: The History, pero para mi que alguien les untó) y bla bla bla. Pero a ver, ¿para qué leches necesitáis un sintetizador en vuestro microordenador para escuchar la melodía del Hunchback? ¿quién sois, Mike Oldfield? Con el chip de Yamaha, el AY... lo que sea, vas que te matas.
"Hola, soy Martin Galway y antes de componer músicas para el C64 tenía cuello...".
Bueno, espero que este cambio de rumbo en el blog traiga nuevos lectores cepeceros y que los commodorianos que me seguían hasta ahora recapaciten y hagan como yo, o sea pasarse al mejor sistema de 8 bits de la historia: el Amstrad CPC.

Salu2, Paco.

domingo, 6 de diciembre de 2015

Una de sprites

Veréis, llevo unos meses aprendiendo a programar en ensamblador de C64 y durante este tiempo he aprendido algunas cosas interesantes sobre cómo funciona internamente nuestra estimada panera, cómo representa los elementos gráficos de mis videojuegos favoritos y qué aplicaciones se usan en la actualidad para crear juegos. Una de las herramientas que muchos desarrolladores del presente usan para crear gráficos para juegos actuales de Commodore es un programa para Windows llamado Sprite Pad. Este editor de sprites permite importar una snapshot o instantánea (fichero .vsf) de ejecución del emulador VICE y extraer la información de los sprites de un juego para usarlos posteriormente o simplemente para cotillear. Y es este programa el que me ha revelado algunas curiosidades que desconocía. Con este artículo pretendo compartir estas curiosidades con vosotros, aunque posiblemente muchos de los que lo leáis ya las conozcáis, pero bueno...
El mítico globo que venía como ejemplo de sprite en el manual del C64, ¿lo recordáis?

¿Cómo funcionan los sprites en C64? La teoría

Esto imagino que ya lo sabréis casi todos: en el C64, un sprite es un conjunto de pixels agrupados en una bloque de 21x24 puntos, que puede ser o bien monocolor (1 solo color y transparencia) o bien multicolor (hasta 3 colores y transparencia pero con resolución de 21x12), y que el Commodore soporta en número de hasta 8 simultáneamente en pantalla. Todos los sprites multicolor comparten 2 colores y cada uno tiene 1 color particular. Estos sprites son manejados y dibujados directamente por hardware (chip MOS 6569 VIC-II) al contrario que otros micros como el ZX Spectrum o el Amstrad CPC, lo cual libera a la CPU de carga y permite sacar más rendimiento a ese 1MHz del 6510. El VIC-II puede detectar colisiones entre sprites y entre sprites y elementos del fondo, lo cual es otra comodidad interesante a la hora de programar.
En el nº22 de Commodore Magazine nos enseñaban cómo hacer sprites múltiples.

Vamos con algunas características y técnicas...

Expansión

El VIC-II puede expandir (duplicar su tamaño) los sprites horizontal y/o verticalmente, lo que implica sprites más grandes pero menos detallados. Un ejemplo de esta expansión horizontal de sprites es el clásico International Soccer, en el que tenemos los jugadores como sprites multicolor expandidos verticalmente y el balón como sprite multicolor. En juegos como Creatures o Mayhem in Monsterland también se usan sprites expandidos en algunos enemigos.
International Soccer y sus sprites marcados.
Los sprites de International Soccer sin expandir en Sprite Pad.

Overlay (superposición)

El C64 permite mezclar sprites monocolor y multicolor en pantalla, y también superponer unos sobre otros. Colocar un sprite monocolor sobre uno multicolor nos puede dar un bonito personaje en alta resolución con 4 colores más transparencia, lo que mejora la calidad gráfica del juego a costa de gastar 2 sprites por personaje en lugar de 1. Un ejemplo de esta técnica está en el Rick Dangerous que tenemos a continuación, pero muchos más juegos la emplean, como Microprose Soccer, Batman The Movie, el infame Human Killing Machine, Rodland o el Mayhem in Monsterland mencionado anteriormente. 

Rick Dangerous.

Aquí tenemos el sprite de "contorno" de Rick...

...y aquí está superpuesto al sprite multicolor de fondo.

Overlay + expansión

Suponed que tenéis que mostrar un personaje de 2 sprites de alto en alta resolución. De entrada uno piensa: pongo 2 sprites multicolor de fondo, 2 monocolor encima y voilà! Pero, ¿y si ponemos un sprite multicolor expandido de fondo y dos monocolor encima? Así conseguimos un sprite doble en alta resolución coloreado y nos ahorramos 1 sprite que podemos usar para otro personaje, el marcador, etc. Este truco se emplea en los personajes del Street Fighter versión EE.UU. que vemos abajo, pero también en el Target Renegade y muchos otros. 

Street Fighter versión EE.UU.

Sprite de fondo de Ryu sin expandir seleccionado, en la parte derecha se ve, con los píxeles negros, el sprite de contorno de la parte superior de Ryu.

Multiplexación

¡Esto es pura magia! ¿Recordáis que antes os he dicho que el C64 puede mostrar hasta 8 sprites simultáneamente? Bueno, pues  no es del todo cierto. Sí, son 8 sprites, pero por línea de refresco de pantalla, y se pueden mostrar más de 8 gracias a las interrupciones de barrido (hay otra manera, pero no la vamos a ver aquí), que es un mecanismo de la CPU que, de manera resumida, permite ejecutar rutinas de código cuando la ejecución del programa coincide con el "pintado" de una determinada línea de la pantalla, ya que ésta se dibuja de izquierda a derecha y de arriba hacia abajo. El funcionamiento sería algo así: el bucle del juego dibuja primero unos cuantos sprites en la zona superior de la pantalla, y cuando el dibujado de la pantalla llega, por ejemplo, a la línea 160, dibuja el resto de sprites del juego, borrándose los que había mostrado anteriormente. Esto también se usa en juegos de pantalla partida como el gran Pitstop II, los Spy vs Spy, el Sanxion que tanto gusta a Bieno o Bonanza Bros.
En la Commodore World de marzo de 1986 nos explicaron cómo mostrar hasta 64 sprites simultáneamente.

Ahora estaréis pensando: ¿esto es lo que provoca que en algunos juegos los sprites parpadeen (Silkworm, por ejemplo). Pues sí, ya que en un mismo frame algunos sprites están y no están a la vez (son los sprites de Schrödinger... olvidadlo), pero al hacer este cambio tan rápidamente (50 fps en PAL y 60 fps en NTSC), nuestro ojo prácticamente no lo detecta. Esta técnica es la llamada multiplexación de sprites, y anteriormente ya se empleaba en la Atari 2600, y microordenadores como el MSX o consolas como la Master System y la NES la soportan. Una de las ventajas de esta técnica es que permite que los sprites mostrados en las diferentes zonas de la pantalla se salten las limitaciones de colores comunes, y así tener 8 sprites con unos colores en la zona superior y otros 8 con colores diferentes en la zona inferior. Las desventajas, bueno, aparte de complicar el código y aumentar el número de variables a usar para mostrar los sprites, la multiplexación consume ciclos de CPU y en algunos casos puede provocar ralentizaciones (esto es visible en el Pang! cuando tenemos muchas burbujas en pantalla). 

Psycho Pigs UXB y los sprites enumerados.

Sprites del juego en Sprite Pad.

Aquí tenéis un par de juegos que usan esta técnica, arriba el divertido Psycho Pigs UXB y abajo el Cabal versión Ocean. Aunque hay centenares de títulos que la emplean, como Tapper, SWIV, R-Type, Smash TV, etc. 

Cabal versión Europa. Fijaros en la impresionante cantidad de sprites mostrados simultáneamente. Nuestro personaje necesita 3.

Cabal emplea sprites expandidos como fondo de sprites en alta resolución, además de multiplexación.

Si queréis "diseccionar" los sprites de vuestros juegos favoritos como lo he hecho yo, los pasos serían estos:

  1. Abrid el emulador VICE y ejecutad el juego.
  2. Cuando comencéis a jugar, vais al menú del programa (en algunas versiones para Linux se accede pulsando F12) y allí vais a Snapshot->Quicksave snapshot.vsf.
  3. Ahora abrís Sprite Pad y vais a File -> Import/Export -> VICE snapshot -> Import sprite data.
  4. En la nueva ventana pulsáis Select Snapshot File, buscáis el fichero .vsf que habéis creado con VICE en la carpeta en la que está el fichero del juego.
  5. Al abrir el fichero, os dará a elegir el banco de memoria que queréis editar. Estos bancos aparecen en la parte de abajo en el apartado Video Bank ( 0 - $0000 - $3FFF, etc). Pulsando cada selector veréis que aparecen sprites y/o basura, que indicará que ahí hay datos que no son sprites. Seleccionáis el banco que queráis y pulsáis Ok.
  6. En la pantalla principal de Sprite Pad ya tendréis todos los sprites cargados y podréis examinarlos y editarlos a vuestro gusto. Incluso podéis guardarlos por si queréis incluirlos en algún proyecto...
Como habéis visto, muchos programadores sabían exprimir al máximo las características del Commodore y sobreponerse a sus limitaciones en cuanto a sprites se refiere, empleando técnicas que incrementaban la calidad gráfica y la jugabilidad de sus títulos para mayor deleite nuestro. Bueno, espero no haberos aburrido con el ladrillo, y si alguno de vosotros ha aprendido algo nuevo sobre nuestra máquina favorita, mejor.


Salu2, Paco.