Abro este tema para documentar todos los casos de información duplicada en el ROM que podamos encontrar.
Empiezo con el caso de los cabezales de mapa.
Un cabezal de mapa tiene la siguiente forma:
map_data_ptr - ptr
event_data_ptr - ptr
level_script_ptr - ptr
connections_ptr - ptr
song_index - short
map_ptr_index - short
label_index - byte
is_a_cave - byte
weather - byte
map_type - byte
null - short
show_label - byte
battle_type - byte
El primer elemento es un puntero a un segundo set de datos:
w - long
h - long
border_ptr - ptr
tilemap_ptr - ptr
global_tileset_ptr - ptr
local_tileset_ptr - ptr
border_w - byte
border_h - byte
(Los últimos dos elementos solo están en FR).
Hasta aquí todo bien. El problema llega cuando cambiamos ese puntero al de otro mapa, y no pasa nada. O lo dejamos a 0, y todo sigue funcionando. Y nos fijamos en ese map_ptr_index.
Si buscamos el map_data_ptr de cualquier mapa, lo encontraremos, además de en el cabezal del mapa, en:
0x304f18+((map_ptr_index-1)*4)
Es decir, en 0x304f18 hay una lista de todos los map_data_ptr, que se accede a través de map_ptr_index con índices a partir de 1.
No estoy seguro de que no se use el map_data_ptr como tal, pero he estado haciendo pruebas y al dejarlo a 0 todo seguía funcionando.
Ni AM 1.92, ni AM 1.95, ni Blue Spider tienen ni idea de esto, y usan map_data_ptr para conseguir la información en lugar del índice y la tabla.