Cada sprite se define mediante una matriz de 24 x 21 puntos o pixels, 24 en sentido horizontal y 21 en sentido vertical. Es decir, cada sprite es una matriz de 504 pixels, y cada pixel se codifica con un bit. El bit será 1 si el pixel está activado, y será 0 si el pixel está desactivado. Y así es como se define el aspecto gráfico del sprite.
A continuación, se muestra un ejemplo de diseño de un sprite, concretamente una pulga. En el ejemplo se han omitido los 0’s para facilitar la identificación de la figura:
1 | 1 | ||||||||||||||||||||||
1 | 1 | ||||||||||||||||||||||
1 | 1 | ||||||||||||||||||||||
1 | 1 | ||||||||||||||||||||||
1 | 1 | 1 | 1 | ||||||||||||||||||||
1 | 1 | 1 | 1 | ||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||||||
1 | 1 | 1 | 1 | ||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||||||
1 | 1 | 1 | 1 | ||||||||||||||||||||
1 | 1 | ||||||||||||||||||||||
1 | 1 | ||||||||||||||||||||||
1 | 1 | ||||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Lógicamente, la definición del sprite tendrá que acabar en memoria bajo la forma de bytes de información. Esto se consigue de la siguiente manera: los bits o pixels se agrupan 8 en 8 de izquierda a derecha y de arriba abajo. Y cada grupo de 8 bits/pixels da lugar a un byte.
Por tanto, 504 bits equivalen a 63 bytes. Otra forma de obtener el mismo resultado es multiplicando los 3 bytes por fila por las 21 filas: 63 bytes.
En el ejemplo de la pulga, los 63 bytes que definen el sprite son los siguientes:
BYTE $00,$00,$00 BYTE $00,$00,$00 BYTE $00,$00,$00 BYTE $01,$00,$80 BYTE $00,$81,$00 BYTE $00,$42,$00 BYTE $00,$42,$00 BYTE $00,$5A,$00 BYTE $00,$3C,$00 BYTE $00,$7E,$00 BYTE $00,$5A,$00 BYTE $06,$7E,$60 BYTE $05,$7E,$A0 BYTE $04,$FF,$20 BYTE $02,$7E,$40 BYTE $02,$3C,$40 BYTE $02,$18,$40 BYTE $01,$00,$80 BYTE $01,$00,$80 BYTE $01,$00,$80 BYTE $1F,$00,$F8
En resumen, un sprite se codifica o define con 63 bytes. Pero 63 bytes es un número un poco extraño, porque no es potencia de dos, y ya sabemos que en informática casi siempre se utilizan potencias de dos. La potencia de dos más cercana a 63 es 64, porque 64 es 2^6.
De hecho, a la hora de almacenar en memoria los 63 bytes de un sprite no se puede hacer en una posición arbitraria, hay que hacerlo siempre empezando en una posición de memoria que sea múltiplo de 64. De otro modo, el VIC no sería capaz de localizar y tratar correctamente la información.
En definitiva, un sprite ocupa 63 bytes, pero en la práctica podemos actuar como si ocupara 64 bytes. Al último byte se le suele llamar “padding” o relleno, y a veces se utiliza para guardar la información del color.
Hay aplicaciones que permiten la definición y tratamiento de sprites, como es el caso del “Editor de Sprites” de CBM prg Studio. Merece la pena darse una vuelta por alguna de estas herramientas, porque facilitan mucho el trabajo con sprites. Por ejemplo, “Editor de Sprites” permite hacer cosas como:
- Diseñar y visualizar sprites.
- Obtener los bytes equivalentes en diferentes formatos (ficheros binarios, directivas “byte” del ensamblador, etc.).
- Importar sprites desde diferentes formatos.
- Definir el color (caso monocolor) o colores (caso multicolor).
- Rotar sprites.
- Voltear sprites.
- Invertir sprites.
- Expandir sprites.
- Animar sprites.
- Etc.