Programar la pantalla de animación "woosh" en Amiga
(dansalva.to)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:
- 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.
- 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
Comentarios de Hacker News
Resumen de comentarios sobre "Racing the beam":
Resumen de comentarios sobre la configuración de memoria de la Amiga 500:
Resumen de comentarios sobre el potencial de juegos de consola japoneses en Amiga:
Resumen de comentarios sobre el atractivo de programar dentro de restricciones:
Resumen de comentarios sobre experiencias personales con Amiga y el hecho de compartir cómo se hacían estas animaciones: