09-Tiles a partir de imágenes (II)

Aventuras en Megadrive: Tiles a partir de imágenes (II)

Para comprobar si el SGDK sólo carga en memoria VRAM las tiles necesarias, vamos a repetir el mismo proyecto anterior (consejo: clona), pero con este gráfico:

my64tiles

Se trata de una imagen 64×64 píxels hecha con 2 tiles repetidos constantemente.

¿Cargará 64 tiles o 2? Esto es lo que debe salirte:

Captura3

Como ves hay 3 tiles, la primera en negro (que será el fondo), y a partir de ahí las 2 tiles de la imagen. El SGDK ha hecho el trabajo.

nota: he usado "ind = 0;" para este ejemplo, por eso no salen los primeros 16 tiles reservados

Por tanto, a la hora de crear una imagen para un fondo, hemos de intentar que existan patrones repetidos para ahorrar memoria, tal y como se hacía en la época.

 

MULTI-TILES

Vamos a ver qué debemos hacer para cargar más de una imagen en memoria. Como ejemplo vamos a cargar la imagen de la luna (entrada anterior) y la imagen de los cuadrados del ejemplo de arriba.

Primero clona el proyecto anterior. Copia ambas imágenes en la carpeta res. Ahora modifica el archivo RES así:

IMAGE block "moon.png" 0
IMAGE block2 "my64tiles.png" 0

Como ves, las imágenes serán referenciadas como block y block2.

Ahora modifica el main.c así:

#include <genesis.h>
#include "resources.h"

int main()
{
    u16 ind;			

	//recoje las paletas de cada imagen
	VDP_setPalette(PAL0, block.palette->data);
	VDP_setPalette(PAL1, block2.palette->data);

	//carga las imágenes en VRAM y las dibuja
	ind = TILE_USERINDEX;
	VDP_drawImageEx(PLAN_A, &block ,  TILE_ATTR_FULL(PAL0, 0, 0, 0, ind),  3,  3, 1, CPU);
	ind += block.tileset->numTile;
	VDP_drawImageEx(PLAN_B, &block2 , TILE_ATTR_FULL(PAL1, 0, 0, 0, ind), 15, 15, 1, CPU);
	ind += block2.tileset->numTile;

	while(1)
	{
		VDP_waitVSync();
	}
	return 0;
}

 

Inspeccionemos la memoria (en GensKmod: CPU / Debug / Genesis / VDP).

Por defecto sale seleccionada la primera paleta (flechita roja). Se ven las tiles de la luna perfectamente. Sin embargo no se ven (muy bien) las de la imagen de cuadraditos.

Esto es así porque ha coincidido que las tiles de cuadraditos, con la paleta de la luna, salen muy oscuros.

Captura6

Nada que no tenga solución. Pincha en la segunda paleta, la flechita roja apuntará a la paleta y ahora todas las tiles se muestran con dicha paleta.

Captura7

Ya se ven perfectamente las tiles de la segunda imagen. Verás unos puntitos blancos en los tiles de la luna, no es porque ambas paletas tengan el blanco. Eso son los píxels de los tiles de la luna que tienen el tercer color de paleta, que es blanco en la paleta de la segunda imagen, verde oscuro en la primera.

No tiene mayor importancia. Pero quería aclararlo porque da lugar a confusión.

Como se puede comprobar, los tiles de la segunda imagen aparecen a continuación de los tiles de la primera imagen.

 

TIPOS DE ARCHIVO ADMITIDOS

Para imágenes, podemos usar bitmaps o PNGs (a mi los bitmaps me han dado problemas con esta versión de SGDK, recomiendo usar PNG).

Para comprobar la profundidad de color, en Windows lo podemos ver en las propiedades del archivo:

Captura4

Es recomendable usar un programa de dibujo que trabaje con paletas de colores. La imagen debe ser un PNG sin canal de transparencia. Todo esto lo veremos en otra entrada.

Anuncios