» Tutorials » Fancy Knowledge #5 - Editing The Catch-Areas In The Pokedex

Fancy Knowledge #5 - Editing The Catch-Areas In The Pokedex

I received another request concerning the worldmap these days. This time somebody informed me that the catch-areas of FR/LG are not automatically updated if you change the worldmap(s) of the game and look on the map in the pokedex. That's why I started to search for the conection between pokemondata and the data displayed in the pokedex. Here is what I came up with:

The good news: It's again about tables and data stored in arrays.
The bad news: This won't be included in the next version of Advance Map and therefore is a really anoying job you have to do by hand.

Okay, the game (use FR US for reference) uses a new set of numbers which hasn't been investigated so far. Before we were dealing with the "worldmap values", this time we will talk about the "catchmap values" (that's how I'll call them. doesn't it sound cool, eh? :-) ) The first action is that the game assigns a catchmap value to every worldmap value. This conversion is stored in a table at $464148. Do not forget to update the amount of entries of catchmap values stored in that table which is defined by the byte at $13CA9C. If you haven't changed the catchmap values yet, the standard length should be 0x37. The table looks like this:

XXXX = worldmap value
YYYY = linked catchmap value

The "normal" form of this table contains the following entries:

ROM:08464148                 DCW   0x58              ; worldmap_value
ROM:08464148                 DCW      1              ; catchmap_value
ROM:0846414C                 DCW   0x59              ; worldmap_value
ROM:0846414C                 DCW      2              ; catchmap_value
ROM:08464150                 DCW   0x5A              ; worldmap_value
ROM:08464150                 DCW      3              ; catchmap_value
ROM:08464154                 DCW   0x5B              ; worldmap_value
ROM:08464154                 DCW      4              ; catchmap_value
ROM:08464158                 DCW   0x5C              ; worldmap_value
ROM:08464158                 DCW      5              ; catchmap_value
ROM:0846415C                 DCW   0x5D              ; worldmap_value
ROM:0846415C                 DCW      6              ; catchmap_value
ROM:08464160                 DCW   0x5E              ; worldmap_value
ROM:08464160                 DCW      7              ; catchmap_value
ROM:08464164                 DCW   0x5F              ; worldmap_value
ROM:08464164                 DCW      8              ; catchmap_value
ROM:08464168                 DCW   0x60              ; worldmap_value
ROM:08464168                 DCW      9              ; catchmap_value
ROM:0846416C                 DCW   0x61              ; worldmap_value
ROM:0846416C                 DCW    0xA              ; catchmap_value
ROM:08464170                 DCW   0x62              ; worldmap_value
ROM:08464170                 DCW    0xB              ; catchmap_value
ROM:08464174                 DCW   0x63              ; worldmap_value
ROM:08464174                 DCW    0xF              ; catchmap_value
ROM:08464178                 DCW   0x64              ; worldmap_value
ROM:08464178                 DCW   0x15              ; catchmap_value
ROM:0846417C                 DCW   0x65              ; worldmap_value
ROM:0846417C                 DCW    0xC              ; catchmap_value
ROM:08464180                 DCW   0x66              ; worldmap_value
ROM:08464180                 DCW    0xD              ; catchmap_value
ROM:08464184                 DCW   0x67              ; worldmap_value
ROM:08464184                 DCW    0xE              ; catchmap_value
ROM:08464188                 DCW   0x68              ; worldmap_value
ROM:08464188                 DCW    0xF              ; catchmap_value
ROM:0846418C                 DCW   0x69              ; worldmap_value
ROM:0846418C                 DCW   0x10              ; catchmap_value
ROM:08464190                 DCW   0x6A              ; worldmap_value
ROM:08464190                 DCW   0x11              ; catchmap_value
ROM:08464194                 DCW   0x6B              ; worldmap_value
ROM:08464194                 DCW   0x12              ; catchmap_value
ROM:08464198                 DCW   0x6C              ; worldmap_value
ROM:08464198                 DCW   0x13              ; catchmap_value
ROM:0846419C                 DCW   0x6D              ; worldmap_value
ROM:0846419C                 DCW   0x14              ; catchmap_value
ROM:084641A0                 DCW   0x6E              ; worldmap_value
ROM:084641A0                 DCW   0x15              ; catchmap_value
ROM:084641A4                 DCW   0x6F              ; worldmap_value
ROM:084641A4                 DCW   0x16              ; catchmap_value
ROM:084641A8                 DCW   0x70              ; worldmap_value
ROM:084641A8                 DCW   0x17              ; catchmap_value
ROM:084641AC                 DCW   0x71              ; worldmap_value
ROM:084641AC                 DCW   0x18              ; catchmap_value
ROM:084641B0                 DCW   0x72              ; worldmap_value
ROM:084641B0                 DCW   0x19              ; catchmap_value
ROM:084641B4                 DCW   0x73              ; worldmap_value
ROM:084641B4                 DCW   0x1A              ; catchmap_value
ROM:084641B8                 DCW   0x74              ; worldmap_value
ROM:084641B8                 DCW   0x1B              ; catchmap_value
ROM:084641BC                 DCW   0x75              ; worldmap_value
ROM:084641BC                 DCW   0x1C              ; catchmap_value
ROM:084641C0                 DCW   0x76              ; worldmap_value
ROM:084641C0                 DCW   0x1D              ; catchmap_value
ROM:084641C4                 DCW   0x77              ; worldmap_value
ROM:084641C4                 DCW   0x1E              ; catchmap_value
ROM:084641C8                 DCW   0x78              ; worldmap_value
ROM:084641C8                 DCW   0x1F              ; catchmap_value
ROM:084641CC                 DCW   0x79              ; worldmap_value
ROM:084641CC                 DCW   0x20              ; catchmap_value
ROM:084641D0                 DCW   0x7A              ; worldmap_value
ROM:084641D0                 DCW   0x21              ; catchmap_value
ROM:084641D4                 DCW   0x7B              ; worldmap_value
ROM:084641D4                 DCW   0x22              ; catchmap_value
ROM:084641D8                 DCW   0x7C              ; worldmap_value
ROM:084641D8                 DCW   0x23              ; catchmap_value
ROM:084641DC                 DCW   0x7D              ; worldmap_value
ROM:084641DC                 DCW   0x24              ; catchmap_value
ROM:084641E0                 DCW   0x7E              ; worldmap_value
ROM:084641E0                 DCW   0x25              ; catchmap_value
ROM:084641E4                 DCW   0x7F              ; worldmap_value
ROM:084641E4                 DCW   0x27              ; catchmap_value
ROM:084641E8                 DCW   0x80              ; worldmap_value
ROM:084641E8                 DCW      6              ; catchmap_value
ROM:084641EC                 DCW   0x81              ; worldmap_value
ROM:084641EC                 DCW    0xB              ; catchmap_value
ROM:084641F0                 DCW   0x82              ; worldmap_value
ROM:084641F0                 DCW    0xB              ; catchmap_value
ROM:084641F4                 DCW   0x83              ; worldmap_value
ROM:084641F4                 DCW   0x26              ; catchmap_value
ROM:084641F8                 DCW   0x84              ; worldmap_value
ROM:084641F8                 DCW   0x2F              ; catchmap_value
ROM:084641FC                 DCW   0x85              ; worldmap_value
ROM:084641FC                 DCW      7              ; catchmap_value
ROM:08464200                 DCW   0x86              ; worldmap_value
ROM:08464200                 DCW    0xB              ; catchmap_value
ROM:08464204                 DCW   0x87              ; worldmap_value
ROM:08464204                 DCW   0x2E              ; catchmap_value
ROM:08464208                 DCW   0x88              ; worldmap_value
ROM:08464208                 DCW   0x2C              ; catchmap_value
ROM:0846420C                 DCW   0x89              ; worldmap_value
ROM:0846420C                 DCW   0x2F              ; catchmap_value
ROM:08464210                 DCW   0x8A              ; worldmap_value
ROM:08464210                 DCW   0x29              ; catchmap_value
ROM:08464214                 DCW   0x8B              ; worldmap_value
ROM:08464214                 DCW   0x2D              ; catchmap_value
ROM:08464218                 DCW   0x8C              ; worldmap_value
ROM:08464218                 DCW   0x2B              ; catchmap_value
ROM:0846421C                 DCW   0x8D              ; worldmap_value
ROM:0846421C                 DCW   0x28              ; catchmap_value
ROM:08464220                 DCW   0x8E              ; worldmap_value
ROM:08464220                 DCW   0x2A              ; catchmap_value

Taking the first two examples this means 0x58 (Pallet Town) has catchmap value 1, 0x59 (Viridian City) has catchmap value 2 and so on... It shouldn't be hard to edit this one. In case you are running out of space: the pointer 0x08464148 is located at $13CAC8 - change it to extend the list. (And again don't forget to update the length of the list as mentioned before!!)

As far as the other maps are concerned, they're sorted by island number meaning that you find this list seven times - this is needed because of the seven different island pictures in the pokedex. It works like this:

ROM:084642BC                 DCD word_8464224
ROM:084642C0                 DCD 4
ROM:084642C4                 DCD word_8464234
ROM:084642C8                 DCD 2
ROM:084642CC                 DCD word_846423C
ROM:084642D0                 DCD 5
ROM:084642D4                 DCD word_8464250
ROM:084642D8                 DCD 2
ROM:084642DC                 DCD word_8464258
ROM:084642E0                 DCD 7
ROM:084642E4                 DCD word_8464274
ROM:084642E8                 DCD 7
ROM:084642EC                 DCD word_8464290
ROM:084642F0                 DCD 0xB

As you can see, the combination [Pointer][Length of the data table] is found seven times. If you follow the pointer you get a list like the one above assigning the catchmap values for each of the islands.

Now that we have come so far we should care about how a catchmap value should be interpreted. This is done via another table, this time it's located at $463580. Always 4 bytes represent 1 catchmap value entry - meaning that the first 4 bytes are loaded for catch map value 0x00 the second 4 bytes for catchmap value 0x01 and so on. Pretty easy to understand. The structure is:

TT = Shape of the catch area
XX = X-coordinate of the area on the worldmap in the pokedex
YY = Y-coordinate of the area on the worldmap in the pokedex
00 = Padding

Note that the x- and the y-coordinate count from the top leftmost pixel of the map (not the pixel in the upper left corner of the GBA-screen). Since their meaning is quite obvious, the TT-byte needs a little further explanation. When you enter the pokedex, the ROM uncompresses LZ-picture data located at $46343c and copies it in the VRAM section which is used for sprites:

LZ77UnCompWram: 0x0846343c,0x0201c000 (VCOUNT=97)
CpuSet: 0x0201c000,0x06011000,0x00000250 (VCOUNT=110)

The picture shows all the different shapes which could be displayed as areas where a certain pokemon can be obtained. But one picture says more than 1000 words, have a look to this:

The red box shows all the values that the TT-byte could be and its graphical representation on the worldmap. So this is everything you need to know. =)

"Pokémon" ist ein eingetragenes Warenzeichen der Firma Nintendo
"Action Replay" ist ein eingetragenes Warenzeichen von Datel Interact.
© by Mastermind_X
© 2006 - 2008