07-Tiles (II)

Aventuras en Megadrive: Tiles (II)

 

¿Sería posible rellenar un área determinada con tiles? Con lo que hemos aprendido hasta ahora sería tedioso. La función VDP_fillTileMapRect existe precisamente para esto. Rellena un área de tiles determinada.

	// ... code
	
	// rellena un área de 8x8 tiles desde la posición (12,12)
        //VDP_fillTileMapRect(plano, tile, x, y, ancho, alto)
	VDP_fillTileMapRect(PLAN_A, TILE_ATTR_FULL(PAL2, 0, 0, 0, MI_TILE), 12, 12, 8, 8);
	
	// ... code

Veamos un ejemplo simulando el típico suelo de una fase

Captura2

#include <genesis.h>

#define MI_TILE1 1
#define MI_TILE2 2

const u32 tile[8]=
{
0x00110011,
0x00220022,
0x02220222,
0x22222222,
0x33443444,
0x34443244,
0x44664466,
0x88888888
};

const u32 tile2[8]=
{
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA
};

int main( )
{
//color fondo al color 0 de la paleta 0
VDP_setBackgroundColor(0);
VDP_setPaletteColor(0,RGB24_TO_VDPCOLOR(0x0098e5));

//carga tiles en VRAM
VDP_loadTileData( (const u32 *)tile,  MI_TILE1, 1, 0);
VDP_loadTileData( (const u32 *)tile2, MI_TILE2, 1, 0);

//2 areas de tiles, cesped y suelo
VDP_fillTileMapRect(PLAN_A, TILE_ATTR_FULL(PAL2, 0, 0, 0, MI_TILE1), 0, 21, 40, 1);
VDP_fillTileMapRect(PLAN_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, MI_TILE2), 0, 22, 40, 7);


while(1)
{
VDP_waitVSync();
}

return 0;
}

Nos hemos ayudado de dos funciones nuevas.

VDP_setBackgroundColor(x);  Esta función le indica al SGDK que utilice el color ‘x’ de la paleta para colorear el fondo. En el ejemplo hemos puesto el color 0, que es el primer color de la primera paleta. Podemos elegir cualquiera, del 0 al 63. Los primeros 16 son de la primera paleta (del 0 al 15), los siguiente 16 de la segunda (del 16 al 31), etc.
En este momento es un color negro, pero vamos a cambiarlo.

¿Cómo lo cambiamos? Una forma es usar VDP_setPaletteColor(indice_color,color);
En el ejemplo hemos cambiado el color 0 a un azul.

Si miramos el contenido de la VRAM con GensKmod, veremos el cambio:

Captura3

 

 

Anuncios