Registrarse

Duda sobre el worldmap

Estado
Cerrado para nuevas respuestas.

Samu

Miembro insignia
Miembro insignia
Ayer estuve pegándome un rato para insertar el worldmap en Emerald, cosa que conseguí fácilmente tras descubrir que era imbécil. No obstante, el mapa en emerald tiene una restricción que me gustaría poder evitar, la verdad.
En fin, voy a exponeros las cosas tal y como están:

El worldmap en los juegos de gba es una imagen de 240x160 que se construye a partir de un tileset (que contiene los tiles que constituyen la imagen) y un tilemap (que contiene la información que indica como han de ordenarse dichos tiles).
Típicamente en estos juegos, el tileset tiene una longitud de 128x256 pixeles (con 4 bits de información por pixel) lo que nos deja con un máximo de 512 tiles. Ahora bien, en emerald, el tileset del mapa utiliza 8bpp (el doble de info por pixel) lo que provoca que como máximo el tileset pueda ser de 128x128, que son 256 tiles (gracias a estos 8bpp utiliza también todas las paletas del background, cosa que es innecesaria ya que solo usa 2 en realidad)

El problema del tileset de 8bpp es que no te permite insertar mapas muy detallados (directamente algo detallados) y bueno, lo que quiero preguntar es si alguien sabe como hacer de forma relativamente sencilla que el rom admita un tileset de 4 bpp para el mapa. (Meterlo a lo bruto obviamente no funciona, el juego intenta leer el tileset de 4bpp como si fuera de 8bpp, dejando la mitad de los tiles en blanco).

Puede que la respuesta a esto sea una tontería ya que tampoco es que sea un "experto" en esto de insertar imágenes, pero ayer me ofusqué mucho en este tema (hasta llegué a plantearme hacer una rutina propia para cargar el mapa) por lo que espero que alguien pueda arrojar algo de luz.

Gracias.
 
Última edición:

Kaiser de Emperana

Called in hand
La plantilla con los que la carga de mapas configura lo bgs están en: 0x5e506c y 0x5a1eec.
Son los bytes:
Código:
CA 2D 00 00
En pokemerald está definida:
Código:
static const struct BgTemplate gUnknown_085A1EE4[] = {
    { .bg = 0, .charBaseIndex = 0, .mapBaseIndex = 31, .screenSize = 0, .paletteMode = 0, .priority = 0 },
    { .bg = 1, .charBaseIndex = 3, .mapBaseIndex = 30, .screenSize = 0, .paletteMode = 0, .priority = 1 },
    [B]{ .bg = 2, .charBaseIndex = 2, .mapBaseIndex = 28, .screenSize = 2, .paletteMode = 1, .priority = 2 }[/B]
};
(El importante es el 2)

Siendo:
Código:
struct BgTemplate
{
    u32 bg:2;                   // 0x1, 0x2 -> 0x3
    u32 charBaseIndex:2;        // 0x4, 0x8 -> 0xC
    u32 mapBaseIndex:5;         // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0
    u32 screenSize:2;           // 0x200, 0x400 -> 0x600
    u32 paletteMode:1;          // 0x800
    u32 priority:2;             // 0x1000, 0x2000 > 0x3000
    u32 baseTile:10;
};
Cambiando el palette mode a 0, para que deje de estar a 256 colores y pase a 16, tal que quede en la rom:
Código:
CA 25 00 00
No parece ser suficiente. El registro BG2CNT del I/O muestra que está configurado en modo de 16 colores, pero sigue leyendo la imagen como si fuera de 8bpp. No se que más habría que hacer pero por si vos si...

Espero que te sirva de algo.
 
Última edición:
Estado
Cerrado para nuevas respuestas.
Arriba