Cuando implemente las animaciones de Sprites, para la aplicación de veejingSX, me di cuenta que periódicamente se ocultaban todos los Sprites durante un instante. Desconocía el motivo y pensé que se debía a un error en la programación y lo deje así. En la 39 RU de MSX de Barcelona, sucedió que estuve en el lugar y en el momento adecuado: lo vio SapphiRe y me resolvió el enigma, (aprovecho para darle las gracias! 🙂 ), y para que no quede en el olvido he querido hacer este artículo y compartirlo para aquellos que se inicien en el uso de Sprites de MSX.

A la hora de visualizar un Sprite en la pantalla veremos que el TMS9918 y el V9938, tienen sus peculiaridades.

Lo primero que tenemos que saber es que si queremos situar un Sprite en la primera linea, tenemos que usar el valor 255. La segunda linea será la 0.

Si queremos que un Sprite desaparezca de forma gradual por la parte inferior de la pantalla, en los modos gráficos 1 al 3 del TMS9918 y el 4 del V9938 (modos de 192 lineas), solo tendremos que ir incrementando el valor de la coordenada y hasta que llegue a la posición 191 donde ya permanecerá totalmente oculto.

En el caso de los modos 5 al 8 del V9938, que contienen 212 lineas, la posición donde se ocultarán completamente nuestros Sprites, será la 211.

Si por lo contrario lo que queremos es que aparezcan de forma gradual por la parte superior, deberíamos situarlo a partir del cálculo de la posición 256 menos el tamaño del Sprite (8 o 16, x 2 si esta ampliado), que es donde empezaría a mostrar la parte inferior de estos. que incrementaríamos hasta llegar a 255.

Pero aquí no acaba la cosa. El VDP de los MSX nos guarda una funcionalidad extra. Si colocamos un Sprite en la coordenada 208, este se desactivará junto a todos los que están en los planos inferiores. Si quisiéramos ocultar todos los Sprites tan solo tendríamos que situar el del plano 0 en la posición 208.

Para los nuevos modos gráficos del V9938, esta posición específica es la 216, ya que la posición 208 estaría dentro de la zona visible.

Para ocultar un Sprite concreto, lo podemos posicionar en cualquier coordenada que lo sitúe fuera de la pantalla, exceptuando la 208/216.

Ejemplos

Adjunto un programa en Basic con el que se puede probar la ocultación de sprites.

  • F1- Coloca el Sprite rojo (plano 1) en la posición 100 (se muestran todos)
  • F2- Coloca el Sprite rojo en la posición 208 (se oculta junto con el cían – plano 2)
  • F3- Coloca el Sprite rojo en la línea 217 (oculta solo el rojo)
  • F4- Sale al Basic.
 

10 REM Ejemplo de posicionamiento vertical
20 SCREEN 1,2:KEY OFF
21 WIDTH 32
22 PRINT "F1 Sprite 1 - y=100"
23 PRINT "F2 Sprite 1 - y=208"
24 PRINT "F3 Sprite 1 - y=217"
25 PRINT "F4 Salir"
30 PAT=BASE(9):REM tabla de patrones de sprite
40 FOR BC=PAT TO PAT+31:VPOKE BC,255:NEXT
50 PUT SPRITE 0,(100,80),1,0
51 PUT SPRITE 1,(100,100),6,0
52 PUT SPRITE 2,(100,140),7,0
60 ON KEY GOSUB 100,200,300,320
70 KEY(1) ON:KEY(2) ON:KEY(3) ON:KEY(4) ON
80 GOTO 80
100 PUT SPRITE 1,(100,100),6,0
110 RETURN
200 PUT SPRITE 1,(100,208),6,0
210 RETURN
300 PUT SPRITE 1,(100,217),6,0
310 RETURN
320 END

 

Descargar ejemplo 1: OAMV.BAS

Nota: Si usas el emulador meisei, puedes seleccionar y copiar el programa Basic y pegarlo directamente con ctrl+v en la ventana del emulador.

Referencias

  • Portar Specifications>VDP>Sprites
  • Debate sobre el posicionamiento vertical en la MRC: Sprites.