Tutorial de ZX Basic + Fourspriter #7: Pintando fondos: UDG

Hay muchas formas de pintar fondos sobre los que mover nuestros sprites. De hecho, incluso podemos cargar una pantalla completa de cinta. Pero lo más básico, al igual que cuando uno programa en BASIC normal de Spectrum, es aprender a usar los UDG (gráficos definidos por el usuario).

¿Qué son los UDG? Esta explicación me hubiera venido muy bien cuando estaba aprendiendo. Es muy sencillo. Cuando el PRINT de BASIC se encuentra que tienen que imprimir un carácter con código ASCII que vaya de 144 a 164 (ambos inclusive, en total 21), sabe que tiene que pintar un gráfico definido por el usuario. En concreto, tendrá que pintar en pantalla 8 bytes, los que estén en INICIO_UDG + (c – 144) * 8, siendo c el código ASCII del UDG. Inicialmente, INICIO_UDG está situado justo en el tope de la RAM, esto es, en 65536 – 21 * 8 = 65368. Por tanto, si PRINT se encuentra una A en modo gráfico (el carácter 144), sabe que tiene que pintar los 8 bytes que haya en 65368 + 0 * 8, o sea, 65368. Si nosotros POKEamos 8 bytes justo a partir de ahí, cada vez que PRINT encuentre una A en modo gráfico imprimirá nuestro diseño.

Lo más básico, por tanto, para crear un diseño es hacer esto:

' Las direcciones de memoria tienen 16 bits:
Dim direccion as uInteger

direccion = 65368
Poke direccion    , Bin 00011000
Poke direccion + 1, Bin 00011000
Poke direccion + 2, Bin 01111110
Poke direccion + 3, Bin 11011011
Poke direccion + 4, Bin 11011011
Poke direccion + 5, Bin 00111100
Poke direccion + 6, Bin 01100110
Poke direccion + 7, Bin 01100110

Print Chr (144)

Si compilamos y ejecutamos este programa, veremos el muñequito ese en la pantalla. ¿Qué hemos hecho? Hemos modificado un trozo de la memoria que Print usa para mirar qué gráficos tiene que pintar cuando se encuentra un UDG, en este caso, el primero (el 144).

Hay una forma más intuitiva de imprimirlos: los carácteres 144 a 164 se introducían en el propio Spectrum usando las letras de la A a la U en modo gráfico. Imitando un poco esto, podemos imprimirlas así usando el compilador:

Print "\a"

Que es lo mismo que el Print Chr de arriba. Atención a la barra invertida.

Esto de aquí arriba está muy bien, pero imaginate definir así los 21 carácteres. Es un puto coñazo. Nosotros lo vamos a hacer de una forma mucho más virguera que, además, nos permite tener más de un set de UDG – más que nada porque ese INICIO_UDG del que hablamos antes se puede colocar donde queramos.

En el próximo capítulo.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: