Registrarse

[Decomp-GBA] Mostrar tus nuevos mapas primero en Porymap

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Hola, qué tal?

Hemos llegado a la parte final de esta trilogía de tutoriales.

TRILOGÍA DE LOS MAPSEC:
  1. Elimina los MAPSEC de Kanto
  2. Insertar nuevos MAPSECS
  3. Muestra tus mapas primero y no último en Porymap (Estás aquí)
MOTIVACIÓN

Para los que venimos del Rom Hacking binario, era bastante sencillo eliminar y sobreescribir mapas existentes sin importar destruir los registros originales.
Sin embargo, cuando hackeamos el código decompilado, no es tan necesario sobreescribir mapas y eliminarlos es un tanto más complicado. Citando al god @Samu sobre este tema nos dice:

Yo crearía los nuevos [mapas] por pereza
xDDD
se pueden eliminar/sustituir todos pero hay que ir cambiando las referencias casi a mano con el replace y es un coñazo
Por lo que ya saben, jóvenes hackers, siempre creen nuevos mapas y no editen los originales de Esmeralda (es una buena práctica).

Sin embargo, puede ser molesto buscar tus nuevos mapas luego de toda uan larga lista de mapas que jamás vas a tocar. Si no te atreves todavía a quitarlos completamente (ya que es una tarea titánica), entonces tal vez te rente más hacer que tus nuevos mapas aparezcan de primeros y evitarte la tarea de bajar hasta el final cada vez que uses Porymap.

Pory2.png

Lo admito, estaba aburrido de usar la ruedita del mouse para acceder a mis mapas.

Motivado por esto (y porque soy extremadamente peresozo) me he tenido que forzar a crear una trilogía de tutoriales que me ayudasen a mejorar mi experiencia con Porymap.

A pesar de que los dos tutoriales anteriores pueden funcionar por separado, para este tutorial, lo más recomendado es que hayas seguido ambos.

Para este tutorial necesitaremos:
  • VisualStudioCode (O cualquier IDE de tu gusto, Notepad para los valientes >:V )
  • Porymap (Opcional)

¡ADVERTENCIA! ESTE TUTORIAL MODIFICARÁ PERMANENTEMENTE LAS UBICACIONES EN EL WORLD MAP DE LOS MAPAS YA EXISTENTES, TEN CUIDADO DE UBICAR CORRECTAMENTE TUS MAPAS E IGNORA EL DESORDEN QUE CAUSE EN LOS MAPAS YA EXISTENTES.

Para entender como funciona este tutorial, primero tenemos que entender como funciona el lector de MAPSEC de Porymap. Este leerá los DEFINES de include/constants/region_map_sections.h y los ordenará en orden por valor.

De este modo siempre
C:
#define MAPSEC_LITTLEROOT_TOWN              0x00
será el primer mapa en aparecer en Porymap. Por lo tanto, si hacemos que nuestros mapas se muestren de primeros tendríamos que definirlos desde el 0. Podríamos reemplazar cada mapa nuevo que agreguemos con los primeros defines y dejar los originales como últimos, pero queremos un proceso más automatizado.

Primero, vamos a include/constants/region_map_sections.h al final donde tengamos los nuevos mapas. (En mi caso he añadido dos, CIUDAD_TAMARA y BUNKER_TAMARA).

Lo que vamos a hacer es redifinir el primer nuevo mapa como 0x00 y así sucesivamente con los mapas. Al final crear un neuvo macro que llamaremos NEW_MAPSEC_COUNTER al cual le añadiremos un valor más que el último mapa.

Debería quedar así:

C:
// Nuevos Mapas
#define MAPSEC_CIUDAD_TAMARA                0x00
#define MAPSEC_BUNKER_TAMARA                0x01
#define NEW_MAPSEC_COUNTER                  0x02
Segundo, ahora, tenemos que reemplazar los defines anteriores para que no se sobrelapen y tengamos dos MAPSECS apuntando a la misma dirección.

Para esto deberemos mover los nuevos mapas con le counter al principio, antes de MAPSEC_LITTLEROOT_TOWN.

Debemos añadir + NEW_MAPSEC_COUNTER a todos los defines existentes a partir de allí (Exceptuando el MAPSEC_NONE el cual debería quedar igual). Para esto podríamos usar la función multine de VSCode.

Y debería quedar así.

C:
// Nuevos Mapas
#define MAPSEC_CIUDAD_TAMARA                0x00
#define MAPSEC_BUNKER_TAMARA                0x01

#define NEW_MAPSEC_COUNTER                  0x02

// Originales de EMERALD
#define MAPSEC_LITTLEROOT_TOWN              0x00 + NEW_MAPSEC_COUNTER
#define MAPSEC_OLDALE_TOWN                  0x01 + NEW_MAPSEC_COUNTER
#define MAPSEC_DEWFORD_TOWN                 0x02 + NEW_MAPSEC_COUNTER
#define MAPSEC_LAVARIDGE_TOWN               0x03 + NEW_MAPSEC_COUNTER
#define MAPSEC_FALLARBOR_TOWN               0x04 + NEW_MAPSEC_COUNTER
#define MAPSEC_VERDANTURF_TOWN              0x05 + NEW_MAPSEC_COUNTER
#define MAPSEC_PACIFIDLOG_TOWN              0x06 + NEW_MAPSEC_COUNTER
....
#define MAPSEC_NONE                         0xD5
Con esto hemos redefinido el valor de nuestros nuevos mapas para que siempre esténd e primeros e los viejos mapas originales se irán actualizando automáticamente cada vez que añadas uno nuevo.

¡Abre Porymap y comprueba que funcione!
MAP8.png


¡Ten cuidado con el NONE!
Llegará un momento en que el último de los mapas originales sumado con el counter alcance el valor del NONE. Debes estar pendiente para actualizarlo como explico en el tutorial anterior Insertar nuevos mapas (MAPSECS) para el Porymap. Si seguiste mi tutorial de remover los MAPSEC de Kanto, entonces deberías estar pendiente del valor del último mapa de Esmeralda:
Código:
#define MAPSEC_TRAINER_HILL                 0x67 + NEW_MAPSEC_COUNTER
Para que ese valor no sea 0xD5 (o el valor que tengas para MAPSEC_NONE), entonces cuando NEW_MAPSEC_COUNTER = 0xD5 - 0x67 = 0x6E deberás comenzar a mover el MAPSEC_NONE. Recomendaría poner un comentario con este número para tener en cuenta y no se te olvide.

C:
#define NEW_MAPSEC_COUNTER                  0x02 // Cuidado cuando el valor sea 0x6E!!!
De esa manera estarás pendiente.

Contraindicaciones:
Si viajas a Hoenn luego de este tutorial, notarás que los letreros al entrar a las ciudades y pueblos estarán mal (lo mismo que las posiciones en el mapa regional). Esto es debido a que si bien modificamos las direcciones del MAPSEC, no se ha modicado las posiciones en el mapa regional en graphics/pokenav/region_map_section_layout.bin.

Como no tenemos pensado usar los mapas de Hoenn y adicionalmente reemplazaremos la posición del mapa de los nuevos mapas y no nos importa los de los mapas de Hoenn esto no es problemático. Eso sí, no olvides actualizar el layout de los nuevos MAPSEC en el Region Map Editor porque podrían haberse movido si ya los tenías asignados desde antes.


Saludos y happy coding.


Juanjo.
 
Arriba