Registrarse

[Decomp-GBA] Elimina MAPSEC de KANTO en Porymap y embellece tu experiencia

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Sí, lo se, este es un tutorial más bien estético. Sin embargo, bien viene librarse un poco de tantos mapas molestos que estorban el Porymap.

Este tutorial es medio avanzado así que tengan cuidado porque hacerlo mal puede tener malas repercuciones


MOTIVACIÓN
Seguro que si has usado Porymap, habrás notado que existen un montón de carpetas vacías de Kanto que no vale la pena que estén allí, ya que hacen tediosa la navegación hacia los mapas nuevos y añaden mucha contaminación visual cuando quieras buscar los mapas que hayas creado.



Adicionalmente, si añades MAPSEC nuevos, estos quedarán al final de la lista y tendrás que navegar un montón con la ruedita del mouse hasta el final de la lista.

Este tutorial es parte de una trilogía de tutoriales de MAPSEC de Porymap que iré subiendo para mejorar la experiencia.

¡Pero primero, vamos a ver algo de historia!

Game Freak fue fundado el 26 de abril de 1989 por gente que no sabía program... ¡NO TAN ATRÁS!
[...]

Luego de la llegada de la tercera generación de Pokémon a la GBA, surgieron los remakes de Pokémon Red y Pokémon Green. Para esto, GameFreak utilizó el motor de Pokémon Rubí y Zafiro, añadiendo alguna que otra funcionalidad y removiendo otras (como las bayas). Ya entrados en el año 2004, decidieron sacar Pokémon Esmeralda el cual volvía a contar la historia de Rubí y Zafiro, pero con muchísimas mejoras y usando otras funcionalidades que venían de Rojo Fuego y Verde Hoja.

Al final, el códifo fuente de Esmeralda terminó hecho una colcha de retazos de código que venían de RS, FR-LG y su propio código nuevo. Esto explica por qué, entre la nomenclatura interna de los mapas originales de RS y los introducidos en Esmeralda aparecen en la mitad un montón de mapas de Kanto que no deberían estar ahí.

Game Freak, en vez de haber removido esa parte inútil del código, la dejó allí y para evitar los problemas de conteo decidió crear algunos macros interesantes como:

C:
#define KANTO_MAPSEC_START  MAPSEC_PALLET_TOWN
#define KANTO_MAPSEC_END    MAPSEC_SPECIAL_AREA
#define KANTO_MAPSEC_COUNT (KANTO_MAPSEC_END - KANTO_MAPSEC_START + 1)
¿Qué significa esto?

KANTO_MAPSEC_START
indica donde empiezan los mapas de Kanto (es decir en Pueblo Paleta).
KANTO_MAPSEC_END indica donde terminan los mapas de Kanto (es decir en Special Area que venga tú a saber donde es esa chimbada).
KANTO_MAPSEC_COUNT indica donde cuantos mapas de Kanto hay.

De este modo Game Freak podía muy chambón-elegantemente saltarse los mapas de Kanto internamente. Y eso explicaba códigos como éste:

(perdón)

C:
    if (regionMapSectionId >= KANTO_MAPSEC_START)
    {
        if (regionMapSectionId > KANTO_MAPSEC_END)
            regionMapSectionId -= KANTO_MAPSEC_COUNT;
        else
            regionMapSectionId = 0; // Discard kanto region sections;
    }
Ahora sí vamos a lo que nos importa.

¿CÓMO ELIMINAR LOS MAPSEC DE KANTO SIN MORIR EN EL INTENTO?
Para este tutorial necesitaremos:
  • VisualStudioCode (O cualquier IDE de tu gusto, Notepad para los valientes >:V )​
  • Porymap (Opcional xD)​

Primero, vamos a hacer una cirugía en include/constants/region_map_sections.h donde removeremos todos los mapas de KANTO (si no quieres borrarlos, puedes comentarlos también).
Es decir, desde MAPSEC_PALLET_TOWN, hasta MAPSEC_SPECIAL_AREA.

MAPSEC KANTO.png

C:
#define MAPSEC_PALLET_TOWN                  0x58
#define MAPSEC_VIRIDIAN_CITY                0x59
#define MAPSEC_PEWTER_CITY                  0x5A
#define MAPSEC_CERULEAN_CITY                0x5B
#define MAPSEC_LAVENDER_TOWN                0x5C
#define MAPSEC_VERMILION_CITY               0x5D
#define MAPSEC_CELADON_CITY                 0x5E
#define MAPSEC_FUCHSIA_CITY                 0x5F
#define MAPSEC_CINNABAR_ISLAND              0x60
#define MAPSEC_INDIGO_PLATEAU               0x61
#define MAPSEC_SAFFRON_CITY                 0x62
#define MAPSEC_ROUTE_4_FLYDUP               0x63
#define MAPSEC_ROUTE_10_FLYDUP              0x64
#define MAPSEC_ROUTE_1                      0x65
#define MAPSEC_ROUTE_2                      0x66
#define MAPSEC_ROUTE_3                      0x67
#define MAPSEC_ROUTE_4                      0x68
#define MAPSEC_ROUTE_5                      0x69
#define MAPSEC_ROUTE_6                      0x6A
#define MAPSEC_ROUTE_7                      0x6B
#define MAPSEC_ROUTE_8                      0x6C
#define MAPSEC_ROUTE_9                      0x6D
#define MAPSEC_ROUTE_10                     0x6E
#define MAPSEC_ROUTE_11                     0x6F
#define MAPSEC_ROUTE_12                     0x70
#define MAPSEC_ROUTE_13                     0x71
#define MAPSEC_ROUTE_14                     0x72
#define MAPSEC_ROUTE_15                     0x73
#define MAPSEC_ROUTE_16                     0x74
#define MAPSEC_ROUTE_17                     0x75
#define MAPSEC_ROUTE_18                     0x76
#define MAPSEC_ROUTE_19                     0x77
#define MAPSEC_ROUTE_20                     0x78
#define MAPSEC_ROUTE_21                     0x79
#define MAPSEC_ROUTE_22                     0x7A
#define MAPSEC_ROUTE_23                     0x7B
#define MAPSEC_ROUTE_24                     0x7C
#define MAPSEC_ROUTE_25                     0x7D
#define MAPSEC_VIRIDIAN_FOREST              0x7E
#define MAPSEC_MT_MOON                      0x7F
#define MAPSEC_S_S_ANNE                     0x80
#define MAPSEC_UNDERGROUND_PATH             0x81
#define MAPSEC_UNDERGROUND_PATH_2           0x82
#define MAPSEC_DIGLETTS_CAVE                0x83
#define MAPSEC_KANTO_VICTORY_ROAD           0x84
#define MAPSEC_ROCKET_HIDEOUT               0x85
#define MAPSEC_SILPH_CO                     0x86
#define MAPSEC_POKEMON_MANSION              0x87
#define MAPSEC_KANTO_SAFARI_ZONE            0x88
#define MAPSEC_POKEMON_LEAGUE               0x89
#define MAPSEC_ROCK_TUNNEL                  0x8A
#define MAPSEC_SEAFOAM_ISLANDS              0x8B
#define MAPSEC_POKEMON_TOWER                0x8C
#define MAPSEC_CERULEAN_CAVE                0x8D
#define MAPSEC_POWER_PLANT                  0x8E
#define MAPSEC_ONE_ISLAND                   0x8F
#define MAPSEC_TWO_ISLAND                   0x90
#define MAPSEC_THREE_ISLAND                 0x91
#define MAPSEC_FOUR_ISLAND                  0x92
#define MAPSEC_FIVE_ISLAND                  0x93
#define MAPSEC_SEVEN_ISLAND                 0x94
#define MAPSEC_SIX_ISLAND                   0x95
#define MAPSEC_KINDLE_ROAD                  0x96
#define MAPSEC_TREASURE_BEACH               0x97
#define MAPSEC_CAPE_BRINK                   0x98
#define MAPSEC_BOND_BRIDGE                  0x99
#define MAPSEC_THREE_ISLE_PORT              0x9A
#define MAPSEC_SEVII_ISLE_6                 0x9B
#define MAPSEC_SEVII_ISLE_7                 0x9C
#define MAPSEC_SEVII_ISLE_8                 0x9D
#define MAPSEC_SEVII_ISLE_9                 0x9E
#define MAPSEC_RESORT_GORGEOUS              0x9F
#define MAPSEC_WATER_LABYRINTH              0xA0
#define MAPSEC_FIVE_ISLE_MEADOW             0xA1
#define MAPSEC_MEMORIAL_PILLAR              0xA2
#define MAPSEC_OUTCAST_ISLAND               0xA3
#define MAPSEC_GREEN_PATH                   0xA4
#define MAPSEC_WATER_PATH                   0xA5
#define MAPSEC_RUIN_VALLEY                  0xA6
#define MAPSEC_TRAINER_TOWER                0xA7
#define MAPSEC_CANYON_ENTRANCE              0xA8
#define MAPSEC_SEVAULT_CANYON               0xA9
#define MAPSEC_TANOBY_RUINS                 0xAA
#define MAPSEC_SEVII_ISLE_22                0xAB
#define MAPSEC_SEVII_ISLE_23                0xAC
#define MAPSEC_SEVII_ISLE_24                0xAD
#define MAPSEC_NAVEL_ROCK_FRLG              0xAE
#define MAPSEC_MT_EMBER                     0xAF
#define MAPSEC_BERRY_FOREST                 0xB0
#define MAPSEC_ICEFALL_CAVE                 0xB1
#define MAPSEC_ROCKET_WAREHOUSE             0xB2
#define MAPSEC_TRAINER_TOWER_2              0xB3
#define MAPSEC_DOTTED_HOLE                  0xB4
#define MAPSEC_LOST_CAVE                    0xB5
#define MAPSEC_PATTERN_BUSH                 0xB6
#define MAPSEC_ALTERING_CAVE_FRLG           0xB7
#define MAPSEC_TANOBY_CHAMBERS              0xB8
#define MAPSEC_THREE_ISLE_PATH              0xB9
#define MAPSEC_TANOBY_KEY                   0xBA
#define MAPSEC_BIRTH_ISLAND_FRLG            0xBB
#define MAPSEC_MONEAN_CHAMBER               0xBC
#define MAPSEC_LIPTOO_CHAMBER               0xBD
#define MAPSEC_WEEPTH_CHAMBER               0xBE
#define MAPSEC_DILFORD_CHAMBER              0xBF
#define MAPSEC_SCUFIB_CHAMBER               0xC0
#define MAPSEC_RIXY_CHAMBER                 0xC1
#define MAPSEC_VIAPOIS_CHAMBER              0xC2
#define MAPSEC_EMBER_SPA                    0xC3
#define MAPSEC_SPECIAL_AREA                 0xC4

Ahora habrá que cambiar manualmente los macros de los mapas nativos de Emerald para que sigan consecutivos a los de Hoenn (y en caso de existir también los propios que hayas agregado).

Si quieres optimizar el proceso puedes seguir estos pasos:

Simplementa redefine los mapas de Emerald así

C:
#define MAPSEC_AQUA_HIDEOUT                 0x58
#define MAPSEC_MAGMA_HIDEOUT                0x59
#define MAPSEC_MIRAGE_TOWER                 0x5A
#define MAPSEC_BIRTH_ISLAND                 0x5B
#define MAPSEC_FARAWAY_ISLAND               0x5C
#define MAPSEC_ARTISAN_CAVE                 0x5D
#define MAPSEC_MARINE_CAVE                  0x5E
#define MAPSEC_UNDERWATER_MARINE_CAVE       0x5F
#define MAPSEC_TERRA_CAVE                   0x60
#define MAPSEC_UNDERWATER_105               0x61
#define MAPSEC_UNDERWATER_125               0x62
#define MAPSEC_UNDERWATER_129               0x63
#define MAPSEC_DESERT_UNDERPASS             0x64
#define MAPSEC_ALTERING_CAVE                0x65
#define MAPSEC_NAVEL_ROCK                   0x66
#define MAPSEC_TRAINER_HILL                 0x67

Ahora, deberíamos borrar/comentar también estas líneas:
C:
#define KANTO_MAPSEC_START  MAPSEC_PALLET_TOWN
#define KANTO_MAPSEC_END    MAPSEC_SPECIAL_AREA
#define KANTO_MAPSEC_COUNT (KANTO_MAPSEC_END - KANTO_MAPSEC_START + 1)

Sergundo: Borrar también las líneas de la estructura gRegionMapEntries que contengan los mapas de Kanto en src/data/region_map/region_map_entries.h
Este paso puede ser complicado, porque Porymap organiza esta lista en orden alfabético cada tanto.

Aquí mi recomendación es dejar que VSCode te muestre que líneas tienen errores (porque los MAPSEC ya no existen y borrarlas usando CTRL+X (para borrar la línea entera). Si no tienes esta funcionalidad en VSCode, tendrías que revisar la lista que te compartí con todas los MAPSEC borrados y usando el buscador irlas borrando una a una.

Si no has insertado muchos MAPSEC ( o incluso mejor, si no has creado ningún MAPSEC) nuevos tal vez te rentaría copiar las líneas con los MAPSEC tuyos en un bloc de notas temporalmente.

Reemplaza la struct gRegionMapEntries con ésta (a la que le he removido las líneas con los MAPSEC de KANTO.

C:
const struct RegionMapLocation gRegionMapEntries[] = {
    [MAPSEC_ABANDONED_SHIP]             = {6, 14, 1, 1, sMapName_AbandonedShip},
    [MAPSEC_ALTERING_CAVE]              = {6, 8, 1, 1, sMapName_AlteringCave},
    [MAPSEC_AQUA_HIDEOUT]               = {19, 3, 1, 1, sMapName_AquaHideout},
    [MAPSEC_AQUA_HIDEOUT_OLD]           = {19, 3, 1, 1, sMapName_AquaHideoutOld},
    [MAPSEC_ARTISAN_CAVE]               = {22, 12, 1, 1, sMapName_ArtisanCave},
    [MAPSEC_BATTLE_FRONTIER]            = {22, 12, 1, 1, sMapName_BattleFrontier},
    [MAPSEC_BIRTH_ISLAND]               = {0, 0, 1, 1, sMapName_BirthIsland},
    [MAPSEC_CAVE_OF_ORIGIN]             = {21, 7, 1, 1, sMapName_CaveOfOrigin},
    [MAPSEC_DESERT_RUINS]               = {8, 3, 1, 1, sMapName_DesertRuins},
    [MAPSEC_DESERT_UNDERPASS]           = {2, 0, 1, 1, sMapName_DesertUnderpass},
    [MAPSEC_DEWFORD_TOWN]               = {2, 14, 1, 1, sMapName_DewfordTown},
    [MAPSEC_DYNAMIC]                    = {0, 0, 1, 1, sMapName_None},
    [MAPSEC_EVER_GRANDE_CITY]           = {27, 8, 1, 2, sMapName_EverGrandeCity},
    [MAPSEC_FALLARBOR_TOWN]             = {3, 0, 1, 1, sMapName_FallarborTown},
    [MAPSEC_FARAWAY_ISLAND]             = {0, 0, 1, 1, sMapName_FarawayIsland},
    [MAPSEC_FIERY_PATH]                 = {6, 3, 1, 1, sMapName_FieryPath},
    [MAPSEC_FIERY_PATH2]                = {7, 3, 1, 1, sMapName_FieryPath},
    [MAPSEC_FORTREE_CITY]               = {12, 0, 1, 1, sMapName_FortreeCity},
    [MAPSEC_GRANITE_CAVE]               = {1, 13, 1, 1, sMapName_GraniteCave},
    [MAPSEC_INSIDE_OF_TRUCK]            = {0, 0, 1, 1, sMapName_InsideOfTruck},
    [MAPSEC_ISLAND_CAVE]                = {0, 10, 1, 1, sMapName_IslandCave},
    [MAPSEC_JAGGED_PASS]                = {6, 3, 1, 1, sMapName_JaggedPass},
    [MAPSEC_JAGGED_PASS2]               = {7, 2, 1, 1, sMapName_JaggedPass},
    [MAPSEC_LAVARIDGE_TOWN]             = {5, 3, 1, 1, sMapName_LavaridgeTown},
    [MAPSEC_LILYCOVE_CITY]              = {18, 3, 2, 1, sMapName_LilycoveCity},
    [MAPSEC_LITTLEROOT_TOWN]            = {4, 11, 1, 1, sMapName_LittlerootTown},
    [MAPSEC_MAGMA_HIDEOUT]              = {6, 3, 1, 1, sMapName_MagmaHideout},
    [MAPSEC_MARINE_CAVE]                = {0, 0, 1, 1, sMapName_MarineCave},
    [MAPSEC_MAUVILLE_CITY]              = {8, 6, 2, 1, sMapName_MauvilleCity},
    [MAPSEC_METEOR_FALLS]               = {0, 3, 1, 1, sMapName_MeteorFalls},
    [MAPSEC_METEOR_FALLS2]              = {1, 2, 1, 1, sMapName_MeteorFalls},
    [MAPSEC_MIRAGE_ISLAND]              = {17, 10, 1, 1, sMapName_MirageIsland},
    [MAPSEC_MIRAGE_TOWER]               = {8, 2, 1, 1, sMapName_MirageTower},
    [MAPSEC_MOSSDEEP_CITY]              = {24, 5, 2, 1, sMapName_MossdeepCity},
    [MAPSEC_MT_CHIMNEY]                 = {6, 2, 1, 1, sMapName_MtChimney},
    [MAPSEC_MT_PYRE]                    = {16, 4, 1, 1, sMapName_MtPyre},
    [MAPSEC_NAVEL_ROCK]                 = {0, 0, 1, 1, sMapName_NavelRock},
    [MAPSEC_NEW_MAUVILLE]               = {8, 7, 1, 1, sMapName_NewMauville},
    [MAPSEC_OLDALE_TOWN]                = {4, 9, 1, 1, sMapName_OldaleTown},
    [MAPSEC_PACIFIDLOG_TOWN]            = {17, 10, 1, 1, sMapName_PacifidlogTown},
    [MAPSEC_PETALBURG_CITY]             = {1, 9, 1, 1, sMapName_PetalburgCity},
    [MAPSEC_PETALBURG_WOODS]            = {0, 8, 1, 1, sMapName_PetalburgWoods},
    [MAPSEC_ROUTE_101]                  = {4, 10, 1, 1, sMapName_Route101},
    [MAPSEC_ROUTE_102]                  = {2, 9, 2, 1, sMapName_Route102},
    [MAPSEC_ROUTE_103]                  = {4, 8, 4, 1, sMapName_Route103},
    [MAPSEC_ROUTE_104]                  = {0, 7, 1, 3, sMapName_Route104},
    [MAPSEC_ROUTE_105]                  = {0, 10, 1, 3, sMapName_Route105},
    [MAPSEC_ROUTE_106]                  = {0, 13, 2, 1, sMapName_Route106},
    [MAPSEC_ROUTE_107]                  = {3, 14, 3, 1, sMapName_Route107},
    [MAPSEC_ROUTE_108]                  = {6, 14, 2, 1, sMapName_Route108},
    [MAPSEC_ROUTE_109]                  = {8, 12, 1, 3, sMapName_Route109},
    [MAPSEC_ROUTE_110]                  = {8, 7, 1, 3, sMapName_Route110},
    [MAPSEC_ROUTE_111]                  = {8, 0, 1, 6, sMapName_Route111},
    [MAPSEC_ROUTE_112]                  = {6, 3, 2, 1, sMapName_Route112},
    [MAPSEC_ROUTE_113]                  = {4, 0, 4, 1, sMapName_Route113},
    [MAPSEC_ROUTE_114]                  = {1, 0, 2, 3, sMapName_Route114},
    [MAPSEC_ROUTE_115]                  = {0, 2, 1, 3, sMapName_Route115},
    [MAPSEC_ROUTE_116]                  = {1, 5, 4, 1, sMapName_Route116},
    [MAPSEC_ROUTE_117]                  = {5, 6, 3, 1, sMapName_Route117},
    [MAPSEC_ROUTE_118]                  = {10, 6, 2, 1, sMapName_Route118},
    [MAPSEC_ROUTE_119]                  = {11, 0, 1, 6, sMapName_Route119},
    [MAPSEC_ROUTE_120]                  = {13, 0, 1, 4, sMapName_Route120},
    [MAPSEC_ROUTE_121]                  = {14, 3, 4, 1, sMapName_Route121},
    [MAPSEC_ROUTE_122]                  = {16, 4, 1, 2, sMapName_Route122},
    [MAPSEC_ROUTE_123]                  = {12, 6, 5, 1, sMapName_Route123},
    [MAPSEC_ROUTE_124]                  = {20, 3, 4, 3, sMapName_Route124},
    [MAPSEC_ROUTE_125]                  = {24, 3, 2, 2, sMapName_Route125},
    [MAPSEC_ROUTE_126]                  = {20, 6, 3, 3, sMapName_Route126},
    [MAPSEC_ROUTE_127]                  = {23, 6, 3, 3, sMapName_Route127},
    [MAPSEC_ROUTE_128]                  = {23, 9, 4, 1, sMapName_Route128},
    [MAPSEC_ROUTE_129]                  = {24, 10, 2, 1, sMapName_Route129},
    [MAPSEC_ROUTE_130]                  = {21, 10, 3, 1, sMapName_Route130},
    [MAPSEC_ROUTE_131]                  = {18, 10, 3, 1, sMapName_Route131},
    [MAPSEC_ROUTE_132]                  = {15, 10, 2, 1, sMapName_Route132},
    [MAPSEC_ROUTE_133]                  = {12, 10, 3, 1, sMapName_Route133},
    [MAPSEC_ROUTE_134]                  = {9, 10, 3, 1, sMapName_Route134},
    [MAPSEC_RUSTBORO_CITY]              = {0, 5, 1, 2, sMapName_RustboroCity},
    [MAPSEC_RUSTURF_TUNNEL]             = {2, 5, 1, 1, sMapName_RusturfTunnel},
    [MAPSEC_SAFARI_ZONE]                = {16, 2, 1, 1, sMapName_SafariZone},
    [MAPSEC_SCORCHED_SLAB]              = {13, 0, 1, 1, sMapName_ScorchedSlab},
    [MAPSEC_SEAFLOOR_CAVERN]            = {24, 9, 1, 1, sMapName_SeafloorCavern},
    [MAPSEC_SEALED_CHAMBER]             = {11, 10, 1, 1, sMapName_SealedChamber},
    [MAPSEC_SECRET_BASE]                = {0, 0, 1, 1, sMapName_SecretBase},
    [MAPSEC_SHOAL_CAVE]                 = {24, 4, 1, 1, sMapName_ShoalCave},
    [MAPSEC_SKY_PILLAR]                 = {19, 10, 1, 1, sMapName_SkyPillar},
    [MAPSEC_SLATEPORT_CITY]             = {8, 10, 1, 2, sMapName_SlateportCity},
    [MAPSEC_SOOTOPOLIS_CITY]            = {21, 7, 1, 1, sMapName_SootopolisCity},
    [MAPSEC_SOUTHERN_ISLAND]            = {12, 14, 1, 1, sMapName_SouthernIsland},
    [MAPSEC_TERRA_CAVE]                 = {0, 0, 1, 1, sMapName_TerraCave},
    [MAPSEC_TRAINER_HILL]               = {8, 4, 1, 1, sMapName_TrainerHill},
    [MAPSEC_UNDERWATER_105]             = {0, 10, 1, 3, sMapName_Underwater},
    [MAPSEC_UNDERWATER_124]             = {20, 3, 4, 3, sMapName_Underwater},
    [MAPSEC_UNDERWATER_125]             = {24, 3, 2, 2, sMapName_Underwater},
    [MAPSEC_UNDERWATER_126]             = {20, 6, 3, 3, sMapName_Underwater},
    [MAPSEC_UNDERWATER_127]             = {23, 6, 3, 3, sMapName_Underwater},
    [MAPSEC_UNDERWATER_128]             = {23, 9, 4, 1, sMapName_Underwater},
    [MAPSEC_UNDERWATER_129]             = {24, 10, 2, 1, sMapName_Underwater},
    [MAPSEC_UNDERWATER_MARINE_CAVE]     = {0, 0, 1, 1, sMapName_Underwater},
    [MAPSEC_UNDERWATER_SEAFLOOR_CAVERN] = {24, 9, 1, 1, sMapName_Underwater},
    [MAPSEC_UNDERWATER_SEALED_CHAMBER]  = {11, 10, 1, 1, sMapName_Underwater},
    [MAPSEC_UNDERWATER_SOOTOPOLIS]      = {21, 7, 1, 1, sMapName_Underwater},
    [MAPSEC_VERDANTURF_TOWN]            = {4, 6, 1, 1, sMapName_VerdanturfTown},
    [MAPSEC_VICTORY_ROAD]               = {27, 9, 1, 1, sMapName_VictoryRoad},
};
¡NO OLVIDES AÑADIR DE NUEVO LOS MAPSEC PROPIOS AL FINAL!!!

MAPSEC KANTO2.png


Opcional: No es necesario eliminar los map name (puesto que no se se llaman en ningún otro lado así que podrías dejarlos. Pero si quieres los puedes eliminar:

static const u8 sMapName_PalletTown[] = _("PALLET TOWN"); ...

Tercero: Ya que nos libramos del KANTO_MAPSEC_COUNT tenemos que eliminarlo donde aparezca:

En src/map_name_popup.c, línea 151:

C:
[MAPSEC_AQUA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_MAGMA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_MIRAGE_TOWER - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_BIRTH_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_WOOD,
    [MAPSEC_FARAWAY_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_WOOD,
    [MAPSEC_ARTISAN_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_UNDERWATER_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
    [MAPSEC_TERRA_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_UNDERWATER_105 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
    [MAPSEC_UNDERWATER_125 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
    [MAPSEC_UNDERWATER_129 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
    [MAPSEC_DESERT_UNDERPASS - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_ALTERING_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_NAVEL_ROCK - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
    [MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_MARBLE,
Borramos el « - KANTO_MAPSEC_COUNT» (podemos usar CTRL+D para tener una selección múltiple o usar el buscar y reemplazar) en todas las líneas que lo contengan (opcionalmente podemos también definirlo como 0 en include/constants/region_map_sections.h si son peresozos y no queremos eleminar este término de las líneas)

Debería quedar así:
[MAPSEC_MAGMA_HIDEOUT] = MAPPOPUP_THEME_STONE, ....

Más abajo en la línea 377, eliminamos o comentamos las siguientes líneas:

C:
    if (regionMapSectionId >= KANTO_MAPSEC_START)
    {
        if (regionMapSectionId > KANTO_MAPSEC_END)
            regionMapSectionId -= KANTO_MAPSEC_COUNT;
        else
            regionMapSectionId = 0; // Discard kanto region sections;
    }
Finalmente en src/tv.c Eliminamos las líneas que dejo comentadas (las que usan el KANTO_MAPSEC:

C:
void SanitizeTVShowLocationsForRuby(TVShow *shows)
{
    int i;
    for (i = 0; i < LAST_TVSHOW_IDX; i++)
    {
        switch (shows[i].common.kind)
        {
        case TVSHOW_WORLD_OF_MASTERS:
            // if (shows[i].worldOfMasters.location > KANTO_MAPSEC_START)
            //     memset(&shows[i], 0, sizeof(TVShow));
            break;
        case TVSHOW_POKEMON_TODAY_FAILED:
            // if (shows[i].pokemonTodayFailed.location > KANTO_MAPSEC_START)
            //     memset(&shows[i], 0, sizeof(TVShow));
            break;
        }
    }
}
Ahora compila y verifica que el juego corra.

Abre Porymap, recarga el proyecto y comprueba que funcione

pory3.png


¡No más mapas vacíos de Kanto que interrumpen la navegación!


Este tutorial es el primer video de un trilogía que tengo preparada sobre MAPSECS y Porymap.
¿Quieres insertar un nuevo MAPSEC?
¿Quieres que los MAPSEC nuevos aparezcan de primero y no de últimos?


Se despide Juanjo.
 

Adjuntos

Última edición:
Arriba