Sprites, BOBs y otras criaturas mágicas (VIII): DESTRIPANDO… Apidya

 

Introducción

Después de dar un buen repaso a muchos de los componentes fundamentales de la arquitectura del Amiga, abandonamos por un momento la teoría y vamos a dedicar este capítulo a conocer algunos de los entresijos de Apidya, un juegazo en el que ya basé algunos de los ejemplos de capítulos anteriores.

 

Destripando con WInUAE

Cada vez son menos los que dudan de que WinUAE es uno de los mejores emuladores disponibles en la actualidad. Su flexibilidad y robustez lo han convertido en una de las mejores opciones posibles, no sólo para disfrutar del Amiga como usuario, sino como herramienta ideal para el desarrollo, de juegos, demos y aplicaciones.

Antes de meternos de lleno con Apidya, vamos a dar un breve repaso a algunos de los comandos presentes en WinUAE y que nos ayudarán a destripar no sólo el juego que ahora nos ocupa sino los que pudieran venir en próximas ocasiones.

Disminuir el número de frames por segundo al que se ejecuta el emulador nos permitirá descubrir detalles imposibles de ver a la velocidad normal de ejecución. Por ejemplo, seremos capaces de determinar con facilidad cada cuantos frames se actualizan ciertos elementos del mismo, como BOBs, sprites o el propio scroll. Esto es tan sencillo como pulsar F12 para abrir la configuración de WinUAE y usar el slide o la caja de texto asociados a ‘FPS adj.’. (presente en la sección ‘Display’), para alterar el frame rate original, que será 50 o 60, en función de si tenemos el emulador configurado como PAL o NTSC, respectivamente. Bajadlo a 1 FPS… ¡y ríete tú de Neo en Matrix!

WinUAE dispone de un depurador (debugger) bastante completo y que no sólo será de gran ayuda para los desarrolladores, sino que nos permitirá simplemente trastear con la memoria, los registros y el hardware en general del Amiga, haciendo cosas como las que describiré  continuación. Para abrir la ventana del depurador hay que usar la combinación de teclas Mays+F12. Una vez dentro, siempre que tengamos que especificar un número, hay que tener en cuenta que el sistema por defecto es el hexadecimal (lo cual podemos explicitar anteponiendo el símbolo ‘$’), pero es posible también usar los sistemas decimal (‘!’) y binario (‘%’). Ejemplo: 0F = $0F = !15 = % 00001111.

 

  • Activar / desactivar bitplanes (Mb <máscara de bitplanes>): empleando está opción “encendemos” o “apagamos” los distintos planos que componen la memoria gráfica del Amiga. La <máscara de bitplanes> no es más que un número en el que un bit a 0 significa que no queremos mostrar el bitplane correspondiente a esa posición y un bit a 1 indica justo lo contrario. Ejemplo: Mb %00000111 o Mb $07, activaría sólo los bitplanes 0, 1 y 2, puesto que son precisamente esos tres bits los que están a 1 en el argumento usado para el comando Mb.
  • Activar / desactivar sprites (Ms <máscara de sprites): análoga a la anterior, nos permitirá decidir en cada momento qué sprites hardware queremos mostrar y cuáles queremos ocultar. Ejemplo: Ms %10101010 o Ms $AA, activaría sólo los sprites 1, 3, 5 y 7.

 

Destripando… Apidya

Vamos a aplicar los comandos vistos en el apartado anterior para “destripar” este magnífico juego y conocer algunas de sus características técnicas más en detalle. Partiremos de la siguiente imagen del nivel 1, en la que aparecen el marcador, el fondo, la abeja protagonista, enemigos, balas propias, balas enemigas y una espiga que aparece en primer plano y se mueve a una mayor velocidad que el fondo:

 

Instante del primer nivel, con los diferentes elementos gráficos en pantalla.

 

BOBs

En primer lugar vamos a ver en cuántos colores está el juego o, mejor dicho, cuantos planos emplea, puesto que el número de colores podría ser mayor si se emplean sprites o si hay cambios de paleta durante cada frame. Hay varias formas de hacer esto, unas más fiables que otras. Nosotros vamos a emplear el comando Mb, descrito previamente. Podemos simplemente ir activando (o desactivando) uno a uno los planos hasta dar con el número exacto. Además, vamos a desactivar los sprites mediante el comando Ms 0. Este es el resultado de mostrar de manera aislada cada uno de los planos del 1 al 5 y, finalmente, todos de manera combinada:

 

Resultado de ir activando individual y conjuntamente los bitplanes 1 a 5.

 

Por tanto, está claro que el juego emplea 5 planos y que, por tanto está en 2^5 = 32 colores. En el caso del Amiga, el salto de los 16 a los 32 colores es especialmente crítico, puesto que (simplificando un poco) a partir de 5 planos el 68k dispondrá de algunos ciclos menos de acceso a memoria chip. Esto es debido a que dichos ciclos pasan a ser necesarios para leer los datos, precisamente, de ese quinto plano.

Apidya hace un uso intensivo del Blitter (y, por tanto, de los BOBs). Si nos fijamos en las imágenes anteriores, podemos ver claramente como tanto el mapeado, como la abeja protagonista, los enemigos y las balas (propias y enemigas) son BOBs. Los programadores decidieron reservar los sprites hardware para tareas no tan “convencionales”, como veremos a continuación.

 

Sprites

Una de las cosas que más me sorprendió cuando comencé a analizar juegos de Amiga en detalle, es el escaso uso de los sprites hardware que hacen algunos de los mejores, como Project-X, Turrican 2 o el propio Apidya. Aunque no se trate de una ciencia exacta, ni mucho menos, podríamos decir que algunos de los usos estándar de los sprites hardware (sea en el Amiga o en cualquier otra plataforma que disponga de ellos) serían éstos:

  • Pintar al protagonista, para evitar tener que preocuparnos por salvar y restaurar el fondo tras él o, quizás, para que disponga de una paleta que lo diferencie claramente de los enemigos, que serían BOBs.
  • Pintar las balas, tanto propias como enemigas. Empleando alguna técnica para reutilizar los 8 sprites hardware (en el caso del Amiga), podríamos mostrar un buen número de ellas en pantalla sin preocuparnos del fondo. Además, el hecho de que las balas suelan ser objetos relativamente pequeños, los hace ideales para ser implementados mediantes sprites, a pesar de que el ancho máximo de éstos sea de 16 pixels.

            ¿Qué ocurre si volvemos activar los sprites (que desactivamos en el punto anterior) y desactivamos todos los bitplanes en esta misma sección del primer nivel? Como ya seguro que sabéis a estas alturas, esto lo haremos mediante los comandos Ms $FF y Mb 0, respectivamente:

 

Así de “triste” se queda esta sección del primer nivel al activar los sprites y desactivar los bitplanes.

 

Menudo panorama, ¿no? Vayamos por partes:

  • El sprite 0 se reutiliza 2 veces para mostrar las balas de ese arma especial en concreto. Como quizás ya sabéis, es posible reutilizar varias veces un mismo sprite hardware siempre y cuando ambos no coincidan en las mismas líneas.
  • En un alarde de originalidad, los programadores de Kaiko decidieron emplear los sprites 2, 3, 4 y 5 para mostrar, de tanto en tanto, una espiga o una flor que aparecen en primer plano, en algunos puntos concretos del primer nivel. Recordad que el ancho máximo de un sprite es de 16 pixels, pero la espiga es claramente más ancha. Además, un sprite por sí mismo sólo proporciona 4 colores pero la espiga está en 16, por lo que los 4 sprites se emplean combinados por parejas: el 2 y el 3 constituyen la parte izquierda de la espiga, mientras que el 4 y el 5 conforman la derecha.
  • Por último, parte los sprites 6 y 7 se emplean de manera individual (4 colores), puesto que se usan para ese parpadeo rojo que podemos ver en el marcador.

 

Un ejemplo más de cómo sacar partido al hardware y además, en este caso, de forma bastante original. Os dejo el resultado de activar individualmente cada uno de estos 6 sprites, así como los comandos necesarios para que podáis reproducirlo desde WinUAE:

 

Resultado de ir activando individual y conjuntamente los sprites 0 a 7.

 

Otras criaturas mágicas…

En el juego hay otros usos especiales de los sprites:

  • En la fase de bonus en la que tenemos que recoger ángeles y esquivar demonios la abeja protagonista deja de ser un BOB, como en el resto de niveles, y es implementada mediante sprites hardware. Otra demostración más de versatilidad por parte de los programadores.
  • En la fase en la que la abeja protagonista se transforma en su versión mecánica (mundo 4), se emplean los 8 sprites en modo manual (ver capítulo 6) para componer el fondo lleno de engranajes y mecanismos de todo tipo. En la animación de la izquierda se puede ver sucesivamente como cada uno de los 8 sprites se usa para pintar varias franjas verticales de 16 pixels de ancho, hasta componer el fondo completo. Así queda este nivel mostrando sólo sprites y sólo bitplanes:

 

Demostración total de poderío por parte de los programadores de Kaiko.

 

Conclusiones

No son muchos los juegos del catálogo de Amiga en los que podemos ver un despliegue de recursos técnicos y conocimiento del hardware de la máquina como en este Apidya, destacando por encima de todo la versatilidad en el uso de los sprites, que tanto se usan para pintar a la abeja protagonista en ciertos niveles, como para montar parte del marcador o construir todo un fondo animado y sobre el que se hace scroll horizontal. Tratad de destripar el juego con las pautas.

 

Publicado 27/01/2018

 

 

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. 

 

 

 

 

 

4 Comentarios sobre “Sprites, BOBs y otras criaturas mágicas (VIII): DESTRIPANDO… Apidya

  1. Skynet

    Genial artículo, como siempre, y muy interesante para desentrañar los “trucos” usados en los juegos.

  2. kikems

    Gracias, impecable como siempre.

  3. Fideo

    Después de tantos años, descubrir este tipo de “secretos” de nuestro querido Amiga es una pasada. Muchísimas gracias por compartir toda esta información con nosotros.

Responder a Skynet Cancelar la respuesta

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