1 puntos por GN⁺ 2024-02-26 | 1 comentarios | Compartir por WhatsApp

Programar la pantalla de animación "woosh" en Amiga

  • Cuando salió en 1985, la Amiga ofrecía gráficos y sonido asombrosos.
  • Mostrar imágenes coloridas en la Amiga es sencillo, pero en el contexto de un motor de juego hay muchos desafíos.

Desafío 1: requisitos de RAM

  • Una Amiga 500 típica tiene 512 KB de "chip RAM" y 512 KB de RAM de expansión.
  • Solo la chip RAM puede usarse para mostrar gráficos y sonido, así que es más valiosa.
  • Un gráfico de personaje de pantalla completa (CG) es un bitmap de 320x240 con 32 colores y ocupa 48 KB de RAM sin compresión.
  • Para soportar compresión de assets, se agregó el formato de compresión ZX0, y al comprimir el CG se reduce a 8 KB, lo que lo vuelve aceptable.
  • Cuando se cargan los assets del nivel, el CG comprimido se carga en la RAM de expansión y se descomprime en la chip RAM justo antes de mostrarse.
  • En lugar de buscar 48 KB de chip RAM, se reutilizan otras partes de la memoria de pantalla.

Desafío 2: efecto de "pantalla dividida"

  • Al principio se consideró un wipe vertical para la transición de pantalla.
  • Pero para que se viera bien, hacía falta un wipe con degradado que ajustara la paleta de colores en cada scanline.
  • El efecto de pantalla dividida es más fácil de implementar y se ve más impresionante para el espectador promedio.
  • Dos funciones especiales de la Amiga trabajan juntas para hacer posible este efecto:
    1. El coprocesador (copper) funciona en paralelo con la CPU y se le puede indicar que cambie registros de hardware en líneas específicas de la pantalla.
    2. La memoria de pantalla puede cambiarse a cualquier lugar de la chip RAM configurando el puntero de pantalla en los registros de hardware.

Desafío 3: "líneas de movimiento"

  • Para completar el efecto de animación, hacen falta líneas que hagan "woosh" en el fondo.
  • Usar sprites para dibujar las líneas es una buena opción porque pueden dibujarse y moverse independientemente de la memoria de pantalla.
  • Los sprites de Amiga son muy limitados y complejos.

Colores de los sprites

  • Los sprites comparten bitplanes y la paleta de colores, así que conviene usar la menor cantidad posible de colores.
  • Los sprites usan solo 3 colores, dejando 28 colores para el CG y 1 color para el fondo.
  • Distintos sprites usan colores diferentes de la paleta.

Reutilización de gráficos de sprites

  • Los primeros 4 bytes de los gráficos de sprites son los "bits de control" que indican la posición y altura del sprite.
  • Esto se vuelve un problema cuando se quiere dibujar el mismo gráfico en varias posiciones.
  • En su lugar, se crean 8 sprites falsos que solo tienen bits de control, y los punteros de sprite se configuran a estos sprites falsos.

Los sprites no se dibujan cuando los bitplanes están desactivados

  • Antes de que el CG llegue a la parte superior de la pantalla, hay mucho espacio vacío entre la parte superior de la pantalla y el inicio del CG.
  • Si los bitplanes están activos durante este tiempo, se dibujan datos basura en la pantalla.
  • Si se desactivan los bitplanes, tampoco se dibujan los sprites.
  • La solución es activar solo 1 bitplane y configurar el puntero de pantalla a datos vacíos.

Conclusión

  • Al principio no estaba claro si se incluiría CG en el juego por los requisitos de RAM.
  • La implementación de compresión de datos demostró que el overhead es muy razonable.
  • Aprovechar las características únicas del hardware de Amiga resulta especialmente interesante.

Opinión de GN⁺:

  • Este artículo muestra muy bien la capacidad de procesamiento gráfico de la computadora Amiga y las técnicas de optimización de memoria durante el desarrollo de juegos.
  • Explica cómo implementar efectos impresionantes dentro de recursos limitados usando compresión de datos y funciones especiales del hardware.
  • Entender y aprovechar el hardware de computadoras clásicas como la Amiga es un tema muy interesante para desarrolladores de juegos retro o personas interesadas en la historia de la computación.

1 comentarios

 
GN⁺ 2024-02-26
Comentarios de Hacker News
  • Resumen de comentarios sobre "Racing the beam":

    • Un usuario recordó que conocía bien la técnica de "beam racing" y que la usó para calcular el tiempo de CPU por cuadro.
    • Mencionó que usaba la dirección $dff180 para establecer colores en el borde de la pantalla, y que aprendió esta técnica de boca en boca, no por internet.
    • Se preguntó si todavía hay gente intentando exprimir al máximo este chipset y expresó curiosidad sobre el perfil de quienes desarrollan juegos para computadoras Amiga.
    • Expresó agradecimiento por compartir el interés en Amiga.
  • Resumen de comentarios sobre la configuración de memoria de la Amiga 500:

    • Un usuario señaló que la Amiga 500 venía por defecto con 512 kB de chip RAM, y que muchos usuarios ampliaban con 512 kB adicionales de fast RAM.
    • Explicó que esa RAM expandida no podía ser accedida directamente por el hardware gráfico y que era más lenta que la fast RAM real.
  • Resumen de comentarios sobre el potencial de juegos de consola japoneses en Amiga:

    • Un usuario se preguntó cómo se verían los juegos de consola japoneses en Amiga y planteó la duda de si a la Amiga le faltaba rendimiento o si simplemente no le gustaba el diseño de la mayoría de los juegos.
    • Puso como ejemplo la conversión de Bonk hecha por Factor 5 y elogió que eran desarrolladores casi mágicos.
  • Resumen de comentarios sobre el atractivo de programar dentro de restricciones:

    • Un usuario expresó que programar dentro de restricciones le resulta muy atractivo.
  • Resumen de comentarios sobre experiencias personales con Amiga y el hecho de compartir cómo se hacían estas animaciones:

    • Un usuario comentó que la Amiga que él usó se sentía distinta de la que otros experimentaron, y mencionó que, en comparación con la Nintendo NES, no le genera tanta nostalgia.
    • Aun así, reconoció que mostrar cómo se hacían estas animaciones es algo muy genial.