› Foros › Retro y descatalogado › Consolas clásicas
weirdzod escribió:Ok, ya he conseguido mostrar tiles trasteando un poco, pero tengo una duda... me ha pasado algo un poco extraño
Metí en la carpeta "res" el archivo "moon.bmp" y me decia algo así como "no such file", después de unos cuantos intentos, meto junto a el archivo el moon.h que viene en tu proyecto... y me lo compila sin problemas.
Ahí pensé que había que generar el .h de alguna forma, pero borro el moon.h en res y también borro la carpeta res que hay dentro de la carpeta out para copiar el mensaje de error y postearlo aqui... y me compila sin problemas xD no entiendo qué ha pasado.
pocket_lucho escribió:He encontrado mi vieja demo del street fighter 2...
****************************************************/
// LIBRERIAS ////////////////////////////////////////
#include <genesis.h>
// DATOS GLOBALES ///////////////////////////////////
const u32 spriteTiles[4*8]=
{
0x00001111, // Tile izquierda arriba
0x00001111,
0x00111144,
0x00111144,
0x11112244,
0x11112244,
0x11112244,
0x11112244,
0x11112222, // Tile izquierda abajo
0x11112222,
0x11112222,
0x11112222,
0x00111122,
0x00111122,
0x00001111,
0x00001111,
0x11110000, // Tile derecha arriba
0x11110000,
0x44111100,
0x44111100,
0x44221111,
0x44221111,
0x44221111,
0x44221111,
0x22221111, // Tile derecha abajo
0x22221111,
0x22221111,
0x22221111,
0x22111100,
0x22111100,
0x11110000,
0x11110000
};
struct genresSprites
{
u16 *pal; // Puntero a los datos de la paleta
u32 **sprites; // Puntero a los datos de los sprites
u16 count; // Numero de sprites
u16 width; // Ancho de cada sprite en pixels
u16 height; // Ancho de cada sprite en pixels
u16 size; // como usamos el ancho/alto en pixels, informacion importante en el tamaño del sprite
};
extern struct genresSprites sonic;
SPRITE sonic "data/sonic.bmp" 24 32 0 7
/////////////////////////////////////////////////////////////
// MAIN
/////////////////////////////////////////////////////////////
int main( ){
// Dibujamos la cabecera austera de turno con VDP_drawText()
VDP_drawText("Ejemplo de dibujo de SPRITES", 5, 1);
VDP_drawText("----------------------------", 5, 2);
// VDP_loadTileData(const u32 *data, u16 index, u16 num, u8 use_dma):
// - data: puntero a los datos de nuestro tile
// (o al primero de nuestra ristra tiles si es el caso)
// - index: en qué posición de la memoria de vídeo (VRAM) vamos a
// almacernarlo (o a partir de qué dirección si son varios)
// - num: cuántos tiles vamos a almacenar a partir de esa posición
// - use_dma: ¿usaremos o no "Acceso Directo a Memoria"?
// "spriteTiles" es el nombre que le dimos al array con la información
// gráfica de nuestro sprite-bola de 2x2 tiles.
VDP_loadTileData( (const u32 *)spriteTiles, 1, 4, 1);
VDP_resetSprites();
// void VDP_setSprite(u16 index, u16 x, u16 y, u8 size, u16 tile_attr, u8 link)
// - index: índice numérico que identifica al sprite (desde 0 a 79)
// - x: coordenada x en pantalla en la que se situará
// - y: coordenada y en pantalla en la que se situará
// - size: tamaño en tiles (desde 1x1 a 4x4 tiles). Nos valdremos de la
// macro "SPRITE_SIZE()" para indicarlo
// - tile_attr: atributos de los tile(s), (paleta, prioridad, vflip, hflip, pos_tile_VRAM)
// - link: índice del sprite que sucede al actual, cada sprite debe enlazar
// al siguiente, teniendo el último que enlazar con el primero
VDP_setSprite(0, 40, 40, SPRITE_SIZE(2,2), TILE_ATTR_FULL(PAL0,1,0,0,1), 1);
SpriteDef spriteBola2;
// typedef struct
// {
// s16 posx, posy;
// u16 tile_attr;
// u8 size, link;
// } SpriteDef;
// Los atributos se corresponden con cada uno de los parámetros requeridos por
// VDP_setSprite() salvando la ausencia de uno para el índice del sprite
spriteBola2.posx = 0;
spriteBola2.posy = 0;
spriteBola2.size = SPRITE_SIZE(2,2);
spriteBola2.tile_attr = TILE_ATTR_FULL(PAL0,1,0,0,1);
spriteBola2.link = 2;
// void VDP_setSpriteP(u16 index, const SpriteDef *sprite)
// - index: índice numérico que identifica al sprite (desde 0 a 79)
// - sprite: dirección de memoria donde se encuentra el struct
// con la información de nuestro sprite
// (nos valemos del operador & para ello)
VDP_setSpriteP(1, &spriteBola2);
u16 nbTiles = (sonic.height>>3) * (sonic.width>>3);
extern struct genresSprites sonic;
SpriteDef spriteErizo;
VDP_setPalette(PAL1, sonic.pal);
spriteErizo.posx = 128;
spriteErizo.posy = 128;
spriteErizo.size = sonic.size>>8;
spriteErizo.tile_attr = TILE_ATTR_FULL(PAL1,1,1,1,5);
spriteErizo.link = 0; // Como éste va a ser el último sprite que definiremos
// lo hemos de enlazar ya con el primero cuya id es 0.
// Si se te olvida hacer esto no veremos sprite alguno.
VDP_setSpriteP(2, &spriteErizo);
u8 frame = 0;
// BUCLE PRINCIPAL ==================================================
while(1){ // Bucle infinito al canto
spriteBola2.posx++;
spriteBola2.posy++;
VDP_setSpriteP(1, &spriteBola2);
VDP_loadTileData(sonic.sprites[frame + 1], 5, nbTiles, 1);
frame++;
frame%=3; // solo tenemos 3 frames, volvemos al primero
spriteErizo.posx+=10;
VDP_setSpriteP(2, &spriteErizo);
VDP_updateSprites();
VDP_waitVSync();
VDP_waitVSync();
VDP_waitVSync();
VDP_waitVSync();
VDP_waitVSync();
VDP_waitVSync();
VDP_waitVSync();
VDP_waitVSync();
VDP_waitVSync();
}
return (0); // Return cero, y hasta aquí hemos llegado en esta ocasión.
}
pocket_lucho escribió: - Máximo 80 sprites definidos simultáneamente.
- Máximo 20 sprites sobre una misma scanline ("en línea"), si te pasas... parpadean.
pocket_lucho escribió:El próximo tuto va a ser muy sencillo para desatascar un poco las neuronas después de tanto tile, capas y sprites... va a ser como dibujar texto de forma bonita, cambiando la fuente que trae por defecto las SGDK por una bitmap!!
pocket_lucho escribió:xDD Es que si los tutos ya son densos empiezo a mentar los 2 modos gráficos puedo empezar a inducir suicidios colectivos, pero vamos, que lo dices es correcto. Pero vamos, ¿quien iba a querer usar ese modo de resolución inferior digna de snes? Ah, si, capcom para el sf2' xD
Por ciertoooo, ¿alguien sabria programar un programita para partir bmps? Es que necesito formatear unos gráficos en un formato concreto y a mano es un coñazo...
Lo de la rutina de fuentes... si alguién la necesita y no le importa compartirla bienvenida será pero vamos, a mi con letras de 8x8 me vale, para un rpg evidenteme no... pero no me gusta programar rpgs asi que
¿por metasprite que quieres decir? Pq seria algo que es como un sprite, que se comporta como un sprite... pero no es un sprite... vamos, tiles en una capa ¿no? ¿O te refieres a sprites grandes que se componen de sprites pequeños? La de mo del sf2 son varios sprites para hacer un personaje, pero vamos, no los considero como nada especial, solo varios sprites que he de mover/actualizar a la vez.
Por cierto, la limitación de 320 pixels de sprites por scanline... a mi me parpadea los últimos xD (me hará unos 300).
TriggerHappy escribió:Hola!
El programa me da un error:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/wave/gfx/
TileRelocator : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.wave.gfx.TileRelocator. Program will exit.
Debo tener alguna versión de Java en concreto instalada?
Gracias y un saludo,
pocket_lucho escribió:Si, si, no hay problema de usar 24x24 con el programita en java que ha hecho wave
¿De que va lo que estas haciendo Manveru?
wave escribió:Pues lo he hecho con la version 7 aunque quiza podria hacer una compatible hasta la 5, le echare un vistazo.
EDIT:
Prueba con esta version que adjunto si tienes java >= 5, asi compruebo tambien si funciona porque yo solo tengo la 7.
TriggerHappy escribió:wave escribió:Pues lo he hecho con la version 7 aunque quiza podria hacer una compatible hasta la 5, le echare un vistazo.
EDIT:
Prueba con esta version que adjunto si tienes java >= 5, asi compruebo tambien si funciona porque yo solo tengo la 7.
Efectivamente con esta me va perfecto!
Gran trabajo, gracias!!!
Una solución rápida y elegante.
Si te apetece mejorarla aún más, podrías poner la opción de elegir fichero de entrada y de salida?
Un saludo y gracias de nuevo,
wave escribió:Bueno en el fichero .bat los ultimos 2 parametros son fichero de entrada y salida, si lo editas lo verás
TriggerHappy escribió:wave escribió:Bueno en el fichero .bat los ultimos 2 parametros son fichero de entrada y salida, si lo editas lo verás
Sí, lo he visto. Pero creo que me resulta más cómodo renombrar el fichero, que entrar dentro del .bat a editarlo.
Ya que estamos, ¿puedo hacer otra petición de programa bastante parecido?
Uno que uniera dos bmp, uno a continuación (a la derecha) del otro.
Así podríamos crear fácilmente un gráfico "master" e ir añadiendo los que creáramos nuevos a continuación...
O quizá conocéis alguno que te lo haga en 2 clicks? (que es lo que interesa, no ir cortando y pegando...)
Saludos!!
pocket_lucho escribió:Wave, he encontrado una cosilla, al convertir una imagen con tiles impares como 88x24, no convierte el último tile, genera una imagen de 128x16, cuando deberia ser 136x16 dejando el último tile como vacio, ¿eso se puede hacer?
Y garcias de nuevo por el programa
Manveru Ainu escribió:Mientras espero pacientemente el siguiente tutorial, por aquí sigo toqueteando código y ahora he llegado a un punto donde me vendría bastante bien poder usar la librería stdarg.h para manejar funciones con un número de argumentos variables, pero veo que esta versión del gcc no la trae, ¿se puede añadir de alguna manera o no es posible o aconsejable?
Manveru Ainu escribió:Chavales a ver si algún alma caritativa que tenga tiempo hace algún tutorial para todo el tema de dibujar el mundo, la cámara, la carga de sprites según estén en zona visible o no, etc. He estado leyendo un poco y estoy bastante confuso con el tema de las coordenadas del nivel, las de la pantalla, de los personajes... Si no se agradecería un enlace a algún wiki o tuto para poder aprender cómo se hace ésto en la Megadrive.
Manveru Ainu escribió:Ya ya jejeje, es que con otras librerías todo este tema de cámaras y tal se hacían ejecutando 2 funciones y todo automático, y aquí parte de la magia es hacerlo todo en manual, aunque claro a mí me pilla en bragas