Más sprites en C64: técnica de programación revelada

Fuentes: C64: Putting Sprite Multiplexing to Work

Este artículo del blog de Bumbershootsoft explora una técnica avanzada de programación para la Commodore 64 llamada 'multiplexado de sprites'. La Commodore 64, con su chip gráfico VIC-II, solo puede mostrar 8 sprites simultáneamente en pantalla. El artículo describe cómo superar esta limitación para mostrar más sprites de los disponibles, un problema común en el desarrollo de juegos retro.

Inicialmente, el autor ya había implementado multiplexado de sprites en otras plataformas como el Atari 2600, Amiga 500 y la TMS9918A, y lo utiliza en un proyecto llamado 'Lights-Out' para replicar la apariencia visual de una versión de NES. El Lights-Out original utilizaba 8 sprites para crear sombras y detalles en el tablero de juego. El objetivo ahora es expandir esto para incluir más elementos visuales, específicamente sombras para cada celda del puzzle, requiriendo un total de 33 sprites.

La técnica implica reutilizar los sprites existentes de forma inteligente. Por ejemplo, las sombras de las celdas se reutilizan en cada fila, y los sprites de esquina se pueden usar para las esquinas inferiores. La clave está en la manipulación precisa de los registros del VIC-II, especialmente el registro $D015, que controla la visibilidad de los sprites. El artículo detalla cómo se organizan los sprites según su frecuencia de actualización, priorizando los que cambian con mayor frecuencia (como las sombras de las celdas) con índices de sprite más bajos. Esto optimiza el rendimiento al minimizar el número de escrituras a los registros del VIC-II.

Además del multiplexado, el artículo aborda otros desafíos, como la necesidad de gráficos adicionales para animar los botones del juego y la gestión del modo de color extendido para mostrar texto en la línea de estado. Se describe cómo se redefine el carácter de la fuente para animar las etiquetas de los botones y cómo se manejan los cambios en la posición y apariencia de los sprites a través de tablas de coordenadas y patrones. Finalmente, se explica cómo el manejo de las interrupciones del procesador se vuelve más complejo con la introducción de múltiples puntos de interrupción para actualizar los sprites y el modo de color, requiriendo una lógica más sofisticada en el manejador de interrupciones.