Lección 03 – Tiles y Planos (II)

Aventuras en Megadrive: Tiles (II)

 

 

COLORES

El SGDK por defecto rellena el background con el color 0 de la primera paleta (pal0). Es el color negro por defecto. Es fácil cambiar el color para el background utilizando VDP_setBackgroundColor():

VDP_setBackgroundColor(índice de color a usar 0-63);

Los colores van del 0 al 15 (pal0), del 16 al 31 (pal1), etc.

Por ejemplo, vamos a indicar que use el color 20 para colorear el background:

 VDP_setBackgroundColor(20);

El color será aquel que hallamos asignado al quinto color de la segunda paleta, puede ser cualquiera.

¿Podemos cambiar los colores de las paletas? Por supuesto. Para cambiar individualmente un color determinado de una paleta determinada hay que usar VDP_setPaletteColor(), poniendo el color elegido en formato RGB.

Vamos a cambiar el color índice 0 para que sea un azul en vez de negro:

VDP_setPaletteColor(0,RGB24_TO_VDPCOLOR(0x0098e5));

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

Captura3

Tomar nota que no podemos poner cualquier valor, la mega tiene una paleta de 512 colores. No obstante si trabajamos con emulador no se quejará y si lo hacemos con una  consola real lo que pasará es que el color será diferente. En su momento ampliaré información sobre los colores.

 

SOFT RESET

Si deseamos hacer un soft reset desde el propio juego, nada mejor que utilizar esta función, mano de santo:

SYS_reset(); //hay que añadir #include "sys.h" en la cabecera

La forma manual de hacerlo es esta:

// soft reset
void reset()
{
asm("move #0x2700,%sr\n\t"
"move.l (0),%a7\n\t"
"move.l (4),%a0\n\t"
"jmp (%a0)");
}

 

A tener en cuenta: Un soft reset reinicia la ROM pero no resetea las variables globales, la RAM del sistema no se limpia. Además no se re-leen los puertos de los pads, por tanto si hemos añadido un pad podría no ser detectado.

El motivo de hacer un soft reset en vez de un hard reset es preservar variables como los hi-scores.

 

HARD RESET

Para hacer un hard reset llamaremos a esta función

SYS_hardReset();  //hay que añadir #include "sys.h" en la cabecera

 

 

 

EJEMPLO +COMPLETO

Hay un ejemplo mucho más completo de todo lo tratado en este post, más sofisticado que el anterior. Podéis ir viendo paso a paso el programa y el código, es bastante ilustrativo y está muy bien comentado.

captura21

 

 

GITHUB

El código de esta lección, y de todas las demás, lo podrás encontrar en mi github:

https://github.com/danibusvlc/aventuras-en-megadrive