Registrarse

[Decomp-GBA] Insertar nuevos mapas (MAPSECS) para el Porymap

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Este tutorial está basado en el tuto de Samug en Pokecomunity . Lo traigo a la luz porque me parece relevante para la trilogía de tutos sobre MAPSECS y Porymap que estoy desarrollando. Te recomiendo revisar el primero aquí:

TRILOGÍA DE LOS MAPSEC:
  1. Elimina los MAPSEC de Kanto
  2. Insertar nuevos MAPSECS (Estás aquí)
  3. Muestra tus mapas primero y no último en Porymap
Para este tutorial necesitaremos:
  • VisualStudioCode (O cualquier IDE de tu gusto, Notepad para los valientes >:V )
  • Porymap (Esta vez no es opcional)
  • Editor hexadecimal (preferentemente HxD) ekisdé

Primero, vamos include/constants/region_map_sections.h hasta encontrar

C:
#define MAPSEC_TRAINER_HILL        0xD4
#define MAPSEC_NONE                         0xD5
Y añade el nuevo mapa justo antes del MAPSEC_NONE y procurando actualizar el MAPSEC_NONE sumándole uno más:
Código:
#define MAPSEC_TRAINER_HILL        0xD4
// Nuevos Mapas
#define MAPSEC_NUEVA_AREA                     0xD5
#define MAPSEC_NONE                         0xD6
Si has removido los MAPSEC de Kanto, entonces es posible que no tengas que mover el MAPSEC_NONE, puesto que tendrás espacio disponible desde el 0x58 hasta el 0xD5
En cuyo caso deberás buscar el último de los mapas de Esmeralda, es decir, el TRAINER_HILL
Código:
...
#define MAPSEC_TRAINER_HILL                 0x67 //0xD4 - 0xC5 + FIX_MAPSEC_KANTO
// Nuevos Mapas
#define MAPSEC_NUEVA_AREA                0x68

#define MAPSEC_NONE                         0xD5
En este caso, al hacer la operación 0xD4 - 0xC5 + FIX_MAPSEC_KANTO obtenemos el 0x67.
Técnicamente puedes añadir nuevos MAPSEC sin problema hasta llegar al D4. A partir de ahí tendrás que mover el MAPSEC_NONE como se explica en este tutorial.

Compila el juego.

Segundo, Usando Porymap (después de recaragr el projecto) asigna el mapa que quieras al nuevo MAPSEC. (también podrías hacerlo en data/maps/NuevaArea/map.json añdiendo la línea:

C:
"region_map_section": "MAPSEC_NUEVA_AREA",
Tercero, También será necesario añadir el MapName en src/data/region_map/region_map_entries.h:

Código:
static const u8 sMapName_TrainerHill[] = _("TRAINER HILL");
static const u8 sMapName_NewArea[] = _("NUEVA AREA");
Y más abajo vincularla con el MAPSEC previamente creado, usando la estructura gRegionMapEntries
C:
[MAPSEC_NEW_AREA]          = {x, y, 1, 1, sMapName_NewArea},
Donde x e y vendrían siendo las coordenadas X,Y del mapa regional donde quieras ubicar el mapa) (se pueden ver en el editor de mapas de Porymap)

Cuarto, hora de añadir el letrero de entrada con el nombre del mapa en src/map_name_popup.c en la lista gRegionMapSectionId_To_PopUpThemeIdMapping y usar el tipo de letero deseado. (en mi caso usaré madera) :

C:
[MAPSEC_NUEVA_AREA - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_WOOD,
NOTA: Si has seguido el tutorial para remover los MAPSEC de Kanto, no será necesario incluir la resta del KANTO_MAPSEC_COUNT sino que lo puedes dejar normal [MAPSEC_NUEVA_AREA] = MAPPOPUP_THEME_WOOD,

Quinto, (únicamente si has tenido que cambiar el MAPSEC_NONE)
Si haz movido el MAPSEC_NONE para añadir un mapa nuevo, entonces habrás corrompido los datos de las ubicaciones del mapa, (Ya que estos están en un fichero hexadecimal y en que las zonas sin mapa apuntan al 0xD5 o a donde se supone de debe estar el MAPSEC_NONE. Al añadir un nuevo mapa con esta dirección 0xD5, le haces creer al juego que tu mapa es vacío y debería estar en cualquier parte.
MAP2.png

Créditos Samug (Pokecomunity)
Lo primero que debemos hacer es seleccionar el lugar donde realmente queramos que esté ubicado nuestro mapa. Y asignarle un mapa cualquiera que no sea el nuevo ni el MAPSEC_NONE.

En este caso, Samug utiliza el NAVEL_ROCK2, que está definido como 0xD3. Guarda y abramos graphics/pokenav/region_map_section_layout.bin con un editor hexadecimal.


Ahora tenemos que actualizar todas las 0xD5 (antiguo MAPSEC_NONE) al nuevo (en este caso 0xD6):
MAP4.png


Ahora simplemente recaragamos Porymap de nuevo y reemplazamos el lugar donde habíamos puesto el NAVEL_ROCK2 con nuestro mapa nuevo.

MAP5.png


Felicidades haz arreglado la corrupción!!! y aprendido a mover el MAPSEC_NONE para futuros mapas nuevos. Aunque reocmendaría simplemente elimianar los de Kanto y así no tendrías que mover el MAPSEC_NONE

Pory2.png


Y aquí tienes mapas nuevos en el Porymap....

Aún así, sigue siendo poco práctico tener que desplazarte hasta el final para ver tus mapas nuevos. Mientras que los originales de Emerald que probablemente nunca vayas a tocar sigan de primeros.

¿Es posible cambiar esto?

Lo veremos en la parte final de esta trilogía.


Se despide Juanjo
 
Última edición:
Arriba