Buenas.
Estoy haciendo un proyecto algo gordo, y estoy leyendo los sprites a través de Fat (parcheo DLDI) para que no me limiten los 4 mb.
Hasta ahí fácil. Para el que no lo haya hecho nunca, viene a ser algo tal que así:
FILE* sprite = fopen (nombreSprite, "rb");
u32 tamano;
if(sprite) // Make sure there is a file to load
{
fseek (sprite , 0 , SEEK_END);
tamano = ftell (sprite);
rewind (sprite);
char* spriteBuffer = (char*) malloc (sizeof(char)*tamano);
fread (spriteBuffer,1,tamano,sprite);
fclose (sprite);
PA_CreateSprite(pantalla, numeroSprite, spriteBuffer, OBJ_SIZE_64X64, 1 /*256 colores*/, numeroPaleta, x, y);
El problema es... a la hora de crear el sprite en sí, es necesario pasar como parámetro el tamaño que tiene el sprite (por ejemplo, OBJ_SIZE_64X64). Querría tratar de detectar automáticamente este tamaño para tener una función genérica de creación de sprites. Las constantes OBJ_SIZE_64X64 y demás, están definidas así en PaLib:
#define OBJ_SIZE_8X8 0,0
#define OBJ_SIZE_16X16 0,1
#define OBJ_SIZE_32X32 0,2
#define OBJ_SIZE_64X64 0,3
#define OBJ_SIZE_16X8 1,0
#define OBJ_SIZE_32X8 1,1
#define OBJ_SIZE_32X16 1,2
#define OBJ_SIZE_64X32 1,3
#define OBJ_SIZE_8X16 2,0
#define OBJ_SIZE_8X32 2,1
#define OBJ_SIZE_16X32 2,2
#define OBJ_SIZE_32X64 2,3
El primer número indica la forma del Sprite (0 cuadrado, 1 horizontal, 2 vertical) y el segundo el tamaño mínimo de lado (0->8, 1->16, 2->32, 3->64).
Con la variable tamano, que he obtenido en el código que he puesto arriba con tamano = ftell (sprite); se puede saber fácilmente el tamaño del fichero, y con un switch obtener cada uno de los tamaños. El problema es que esto no me resulta del todo posible, pues con este método me es completamente imposible distinguir el tamaño OBJ_SIZE_32X8 del OBJ_SIZE_8X32 (y del mismo modo para el resto de sprites rectangulares, pues el fichero ocupa lo mismo para el caso vertical que para el horizontal).
¿Sabéis como podría obtener estos parámetros para crear el sprite de forma directa sin tener que preocuparme de los tamaños al llamar a la función?
(por cierto, ¿qué ha sido de la página oficial de PaLib?)