Aqui ire anotando los codigos que voy sacando de los tutoriales pero de forma unificada que pueden venir bien para quien quiera ver el codigo de un vistazo que no a cachos.
Control pulsaciones pad..
#include <genesis.h>
void myJoyHandler( u16, u16, u16);
int main( )
{
JOY_init(); // Inicializacion joystick
JOY_setSupport(PORT_1, JOY_SUPPORT_6BTN); // En el puerto 1 se controlara un pad de 6 botones
JOY_setEventHandler( &myJoyHandler ); // Puntero a la clase que controlara el evento disparado
// por cada cambio de estado en algun boton/direccion del pad
while(1)
{
VDP_waitVSync(); // Sincronizacion vertical para evitar parpadeo/flickering
}
return (0);
}
// joy : Puede tomar valor JOY_1 o JOY_2
// changed: Siempre tomara el valor del boton/direccion que haya disparado el evento (pulsado o no)
// state : En caso de ser una pulsacion tomara el mismo valor que changed, caso contrario 0
// La comparacion que se efectua con el operador "&" es sobre bits (binaria)
void myJoyHandler ( u16 joy, u16 changed, u16 state )
{
if (joy == JOY_1)
{
unsigned int esElBoton ( u16 _b ) { if ( _b & changed ) return 1; return 0; }
unsigned int estaPulsado ( u16 _b ) { if ( _b & state ) return 1; return 0; }
if ( esElBoton ( BUTTON_START ) )
if ( estaPulsado ( BUTTON_START ) )
{
VDP_drawText("START button 1", 5, 13);
}
else
{
VDP_drawText("START button 0", 5, 13);
}
if ( esElBoton ( BUTTON_MODE ) )
if ( estaPulsado ( BUTTON_MODE ) )
{
VDP_drawText("MODE button 1", 5, 14);
}
else
{
VDP_drawText("MODE button 0", 5, 14);
}
}
}
Creacion y dibujado de un tile "a mano"..
#include <genesis.h>
const u32 tile[8]=
{
0x00111100,
0x01144110,
0x11244211,
0x11244211,
0x11222211,
0x11222211,
0x01122110,
0x00111100
};
int main( )
{
// Puntero al array/tile o al primero del listado de tiles
// Indice VRAM a partir del cual comenzar a almacenar
// Cuantos tiles son a guardar, 1 o mas
// Modo de acceso directo a memoria o no/0
VDP_loadTileData ( ( const u32 * )tile, 1, 1, 0 );
// Plano A o B, indice en VRAM, coordenadas 5 horizontal 5 vertical
// Al no haber especificado se usa por defecto la paleta 0, escala de grises
VDP_setTileMap ( APLAN, 1, 5, 5 );
// La misma forma de dibujar pero ayudandose de una macro con varios parametros
// Plano, prioridad (0 la mas baja), vflip (1si/0no), hflip, indice VRAM
VDP_setTileMap ( BPLAN, TILE_ATTR_FULL ( PAL2, 0, 1, 0, 1 ), 6, 5 );
while(1)
{
VDP_waitVSync();
}
return (0);
}
Lo mismo pero dando importancia a las prioridades..
#include <genesis.h>
const u32 tile[8]=
{
0x00111100,
0x01144110,
0x11244211,
0x11244211,
0x11222211,
0x11222211,
0x01122110,
0x00111100
};
int main( )
{
// Puntero al array/tile o al primero del listado de tiles
// Indice VRAM a partir del cual comenzar a almacenar
// Cuantos tiles son a guardar, 1 o mas
// Modo de acceso directo a memoria o no/0
VDP_loadTileData ( ( const u32 * )tile, 1, 1, 0 );
// Comprobacion del funcionamiento del parametro prioridad
// Se usa todo el rato el mismo tile en el mismo plano pero con diferente prioridad
// Parametros de la macro: Plano, prioridad (0 la mas baja), vflip, hflip, indice VRAM
VDP_setTileMap ( APLAN, TILE_ATTR_FULL ( PAL1, 1, 0, 0, 1 ), 7, 7 ); // [ 1 ] Tile paleta tonos rojos
VDP_setTileMap ( BPLAN, TILE_ATTR_FULL ( PAL2, 0, 0, 0, 1 ), 7, 7 ); // [ 2 ] ..verdes
VDP_setTileMap ( APLAN, TILE_ATTR_FULL ( PAL1, 0, 0, 0, 1 ), 8, 7 ); // [ 3 ] ..rojos
VDP_setTileMap ( BPLAN, TILE_ATTR_FULL ( PAL2, 1, 0, 0, 1 ), 8, 7 ); // [ 4 ] ..verdes
// El tile 1 y 2 estan en la misma coordenada (7,7) pero 1 tiene priridad mayor con respecto a 2
// y por eso al ejecutar la rom solo se vera el tile en tonos rojos. En cambio en el caso de 3 y 4
// el que tiene mayor prioridad es 4 y se vera el tile en tonos verdes
while(1)
{
VDP_waitVSync();
}
return (0);
}
Y ahora pintando un area determinada repitiendo el tile..
#include <genesis.h>
const u32 tile[8]=
{
0x00111100,
0x01144110,
0x11244211,
0x11244211,
0x11222211,
0x11222211,
0x01122110,
0x00111100
};
int main( )
{
// Puntero al array/tile o al primero del listado de tiles
// Indice VRAM a partir del cual comenzar a almacenar
// Cuantos tiles son a guardar, 1 o mas
// Modo de acceso directo a memoria o no/0
VDP_loadTileData ( ( const u32 * )tile, 1, 1, 0 );
// Se rellenara un area de 8 tile horizontales por 4 verticales comenzando
// desde las coordenadas 12,12
VDP_fillTileMapRect(BPLAN, TILE_ATTR_FULL(PAL2, 0, 0, 0, 1), 12, 12, 8, 4);
while(1)
{
VDP_waitVSync();
}
return (0);
}
Creacion y dibujado de un tile "con sgdk"..
#include <genesis.h>
// Crear carpeta "res" en el raiz del proyecto y meter ahi el grafico/bmp a cargar
#include "moon.h"
int main( )
{
u16 w = moon[0]; // Ancho del tile
u16 h = moon[1]; // Alto del tile
// Sustituir la paleta precargada en PAL1 por la del grafico
VDP_setPalette ( PAL1, &moon[2] );
// Puntero a la informacion del tile/s, indice VRAM, ancho y alto en tiles a guardar
// El ultimo parametro es obligatorio y se ha de indicar el ancho total del bitmap porque igual
// se podria querer cargar solo parte del bitmap que no entero
VDP_loadBMPTileData ( ( u32* ) &moon[18], 2, w / 8, h / 8, w/8 );
// Plano, macro con atributos (paleta, prioridad, vflip, hflip, ind.VRAM), coord.23-6
// Los dos ultimos parametros son el numero de tiles a dibujar en horizontal y en vertical
VDP_fillTileMapRectInc ( BPLAN, TILE_ATTR_FULL ( PAL1, 0, 0, 0, 2 ), 23, 6, w / 8, h / 8 );
while(1)
{
VDP_waitVSync();
}
return (0);
}
Creacion y dibujado de un tile "con genres"..
#include <genesis.h>
// Los graficos se pueden poner en la carpeta que se quiera (en el raiz) pero hay que crear un archivo
// resource.rc en el que la primera y ultima lineas se dejen en blanco o con ";" y en las otras
// se especifiquen los graficos a convertir tal que: BITMAP luna "data/luna.bmp" 0
// Estructura a usar para tratar las imagenes convertidas
struct genresTiles
{
u16 *pal; // puntero a los datos de la paleta
u32 *tiles; // puntero a los datos de los tiles
u16 width; // ancho en tiles
u16 height; // alto en tiles
u16 compressedSize; // 0 en esta demo, mas proximamente
};
extern struct genresTiles luna;
int main( )
{
// Sustituir la paleta precargada por la del grafico
VDP_setPalette ( PAL2, luna.pal );
// Informacion de los tiles del bitmap, indice del primer tile, tiles a cargar, DMA o no
VDP_loadTileData ( luna.tiles, 100, luna.width*luna.height, 0 );
// Plano, macro con atributos (paleta, prioridad, vflip, hflip, ind.VRAM), coord.23-6
// Los dos ultimos parametros son el numero de tiles a dibujar en horizontal y en vertical
VDP_fillTileMapRectInc ( BPLAN, TILE_ATTR_FULL ( PAL2, 0, 0, 0, 100 ), 23, 12, luna.width, luna.height );
while(1)
{
VDP_waitVSync();
}
return (0);
}
Edit: Por cierto, dudita y es que probando con mis propios graficos me va todo de perlas menos el metodo de sgdk mediante la carpeta res. El .h ha de aparecer solo o hay algun paso previo?
Edit 2: Solucionado...ha sido borrar el contenido de out y volver a compilar y listo...me lo apunto pero raro raro xD