nolddor escribió:Otra cosa que me trae loco es el Code::Blocks las palabras que no forman parte del codigo por ejemplo un comentario que escribo
//Esto es un comentario
Me viene subrayado en rojo y me mareo que no veas, alguien sabe decirme como quitar eso? llevo un rato mirandolo pero no logro dar con la opcion.
Manveru Ainu escribió:Pues si hay algo por ahí en C o similares mejor que SGDK que rule
bertobp escribió:Mejor es el compilador SGCC, pero las librerias te las tienes que currar tu.
El SGDK es un SDK para la MD de proposito general, para hacer cosas de forma mas rapida.
Cuando SGDK se os quede corto, tendreis que ir a la vieja escuela; opcodes, registros de las CPUs, manejar las interrupciones del bus, etc... y con eso hacer librerias para el proyecto que os interese
Manveru Ainu escribió:bertobp escribió:Mejor es el compilador SGCC, pero las librerias te las tienes que currar tu.
El SGDK es un SDK para la MD de proposito general, para hacer cosas de forma mas rapida.
Cuando SGDK se os quede corto, tendreis que ir a la vieja escuela; opcodes, registros de las CPUs, manejar las interrupciones del bus, etc... y con eso hacer librerias para el proyecto que os interese
Gracias bertobp por la info, siendo así apuraré lo que pueda el SGDK y cuando no pueda avanzar más tendré que dejarlo porque yo de programación a tan bajo nivel soy tan ignorante como poca paciencia tengo
#include <genesis.h>
// Creamos nuestra tile de una cara sonriente
const u32 tile_carita[8]=
{
0x00144100, // Línea 1: pixels 1 a 8
0x02400420, // Línea 2
0x14000041, // Línea 3
0x40400404, // Línea 4
0x40000004, // Línea 5
0x14044041, // Línea 6
0x02400420, // Línea 7
0x00144100 // Línea 8: píxels 57 a 64
};
int main () {
// Cargamos la tile en la posicion 1 de la VRAM
VDP_loadTileData( (const u32 *)tile_carita, 1, 1, 0);
//Ejemplo Sobre Prioridades ¿Cual se verá?
// PRIORIDAD ALTA > PRIORIDAD BAJA | SI LA PRIORIDAD ES IGUAL PLANOA > PLANOB |SI PRIORIDAD Y PLANO SON IGUALES SE DIBUJA EL ULTIMO COMANDO PREVALECE
VDP_setTileMap(APLAN, TILE_ATTR_FULL(PAL1, 1, 0, 0, 1), 7, 7); // ROJO PRIORIDAD ALTA PLANO_A <<--
VDP_setTileMap(BPLAN, TILE_ATTR_FULL(PAL3, 0, 0, 0, 1), 7, 7); // AZUL PRIORIDAD BAJA PLANO_B
VDP_setTileMap(APLAN, TILE_ATTR_FULL(PAL1, 0, 0, 0, 1), 8, 7); // ROJO PRIORIDAD BAJA PLANO_A
VDP_setTileMap(BPLAN, TILE_ATTR_FULL(PAL3, 1, 0, 0, 1), 8, 7); // AZUL PRIORIDAD ALTA PlANO_B <<--
// Rellena un cuadrado de 2x1 del tile 1 con paleta gris en la posición (7,7)
VDP_fillTileMapRect(BPLAN, TILE_ATTR_FULL(PAL0, 0, 0, 0, 1), 7, 7, 2, 1); // GRIS PRIORIDAD BAJA PLANO_B
while(1){
// sincroniza la pantalla
VDP_waitVSync();
}
return 0;
}
Manveru Ainu escribió:Pues si hay algo por ahí en C o similares mejor que SGDK que rule
nolddor escribió:Deberia aparecer en pantalla mi tile de color ROJO(7,7) y AZUL(8,7).
Sin embargo aparecen los dos de Color ROJO.... :S
Manveru Ainu escribió:Supongo que será que al ejecutar el VDP_fillTileMapRect cambias la prioridad del tile 8,7 en el plano B a baja, por lo que queda debajo del rojo. Si quitas esta llamada o si cambias las coordenadas para que no coincidan con las de las caras roja y azul verás que funciona bien.
nolddor escribió:Manveru Ainu escribió:Supongo que será que al ejecutar el VDP_fillTileMapRect cambias la prioridad del tile 8,7 en el plano B a baja, por lo que queda debajo del rojo. Si quitas esta llamada o si cambias las coordenadas para que no coincidan con las de las caras roja y azul verás que funciona bien.
Ese es el problema que se ve rojo y debería de verse AZUL que de los tres tiles que coinciden en el punto 8,7 es el unico que tiene prioridad alta,
El rojo tiene prioridada baja y el gris del VDP_fillTileMapRect también...
Segun pocket_lucho es así a ver si el sabe explicarme porque no se muestra el azul que es el que tiene prioridad alta.
VDP_setTileMap(APLAN, TILE_ATTR_FULL(PAL1, 0, 0, 0, 1), 8, 7); // ROJO PRIORIDAD BAJA PLANO_A
VDP_setTileMap(BPLAN, TILE_ATTR_FULL(PAL3, 1, 0, 0, 1), 8, 7); // AZUL PRIORIDAD ALTA PlANO_B <<--
// Rellena un cuadrado de 2x1 del tile 1 con paleta gris en la posición (7,7)
VDP_fillTileMapRect(BPLAN, TILE_ATTR_FULL(PAL0, 0, 0, 0, 1), 7, 7, 2, 1); // GRIS PRIORIDAD BAJA PLANO_B
O es que SGDK (o la propia MD) no es capaz de comparar tres tiles en una misma posición?
Con lo que hay aqui tienes mas que de sobra y si llegas a entender y usar todo o gran parte, estas mas que preparado para probar a hacer un juego o mas bien primero alguna demo/prueba. Otro aspecto muy muy pero que muy importante es meterse a estudiar C a fondo, pues sgdk no deja de ser un enlace intermedio que facilita el acceso al hardware de megadrive pero la programacion va ser como la de cualquier otro programa en c.jmmanson escribió:esto es muy interesante, parece que ya no actualizan con nuevo tutos, no? es una pena
nolddor escribió:Como creais vosotros la imágenes para que las reconosca dp el SGDK porque yo con el photoshop mas meto en la carpeta res y no se ven, en cambio cojo la de ejemplo de la luna y funcionar perfectamente asi que no se como crear el bmp con 16 colores.
Usais algun programa especifico???
pocket_lucho escribió:Tambien existe la herramienta imagenesis que conoceréis si mirasteis el tutorial de basic de theelf, la pega es que el formato que exporta no nos sirve pero vamos a ver como solucionarlo. Abrimos la imagen (file, open image), elegimos el tipo de conversión (si queremos optimizar los tiles -> mode, 15 color 4bpp 1 plane 8x8 tiles optimized, si es un sprite tendremos que cambiar el orden x-y... lo veremos en el tutorial siguiente sobre estos últimos), el color transparente (enable transparency, select transparent color). Pulsamos Actions -> Quantize Now y tendremos la imagen convertida a la paleta de megadrive y lista para exportar. La paltea si la podemos exportar sin modificarla con Export Palette Data y eligiendo como salida C, el mapa de tiles lo mismo, ya veremos como usarlo en posteriores tutoriales. El problema son los tiles, para usaremos el pequeño conversor que he escrito, el megagfx. Exportamos los tiles como basic y nos fijamos en el número de tiles que se han generado, lo pegamos en el fichero output.txt que viene en el rar que adjunto, pulsamos run.bat, elegimos un nombre para el vector de salida y por último la cantidad de tiles a covertir que vimos al convertirla en imagenesis. Se generará un fichero llamado tiles.txt, cuyo contenido podréis copiar sin problema en vuestro código y que será completamente compatible con las funciones de manejo de tiles de las SGDK.
nolddor escribió:con genres es que me dice que no esta definida la variable, aunque si estadefinida osea que creo que tampoco coge bien el bmp y por eso no es capaz de compilar.
metiendola en res o no se visualiza o se visualiza con basura
y mediante codigo directo imagenesis + megagfx se me ve basura...
osea que soy de lo peor...

void VDP_setHorizontalScrollLines(u16 plan, u16* lines, s8* values)
{
vu16 *pw = (u16 *) GFX_DATA_PORT;
vu32 *pl = (u32 *) GFX_CTRL_PORT;
u16 addr = 0;
u8 i;
for(i = 0; i < 40; i++)
{
addr = HSCRL + ((lines[i] & 0xFF) << 2);
if (plan == BPLAN) addr += 2;
*pl = GFX_WRITE_VRAM_ADDR(addr);
switch(i)
{
case 0: /*case 39:*/ *pw = values[0]; break;
case 1: /*case 38:*/ *pw = values[1]; break;
case 2: /*case 37:*/ *pw = values[2]; break;
case 3: /*case 36:*/ *pw = values[3]; break;
case 4: case 5: /*case 34: case 35:*/ *pw = values[4]; break;
case 6: case 7: /*case 32: case 33:*/ *pw = values[5]; break;
case 8: case 9: case 10: /*case 29: case 30: case 31:*/ *pw = values[6]; break;
case 11: case 12: case 13: /*case 26: case 27: case 28:*/ *pw = values[7]; break;
case 14: case 15: case 16: /*case 23: case 24: case 25:*/ *pw = values[8]; break;
case 17: case 18: case 19: /*case 20: case 21: case 22:*/ *pw = values[9];
}
}
}nolddor escribió:Le voy a preguntar a lucho a ver si el tiene alguna solución mas factible que ir escribiendo uno a uno los tiles de forma ordenada xD sin tener que añadir a la VRAM los duplicados.
Porque claro el imagenesis me da un datatile optimizado pero no me dice ni cual es el que esta repetido ni con cual se repite osea que es un trabajazo para un tile grande hacerlo uno a uno..... más que nada por buscar a pelo tu como montarlo....