I have found something recently not big enough to make a document about, so I hope I am right in posting it here.
In regard to the Overworld (OW) data, I have found three peculiar things that change the way we can edit them.
First of all, after looking at the thumb code, I have found that in Fire Red, the default behaviour in the case it finds a OW sprite numbered after 151 (0x97), isto replace it by the young boy sprite at number 16 (0x10), unless it is also bigger than 238 (0xEE). In that case, the sprite is determined by a value that was placed in the temporary variables used by Union room, so it can give a "random", different sprite to every visitor.
Secondly, I found the code that decrypts the Palette data, and it uses a two byte identifier, not a single byte. For the Hero, for example, it is not palette 0x00, but pallete 0x1100, that being what is called the first mistery byte. Looking at the code, I found that there is a way to get little over 4600 different OW to choose from, as long as no more than 16 different ones appear in the same map. It would only need to repoint the pointer data, that is stored quite ineffectively through a key system, on the format:
with p = pointer to uncompressed palette, reversed; k = key, less than 0x11ff, reversed
in any order and any lenght, as long as the table ends in 00000000 ff110000
Thirdly, I have found that several unused palettes can be found in that same table in Fire Red. Besides the already used in OWEditor, there is also 1101, 1102, 1107, 1108, 1109, 110a, 110c and 1111, having a total of 18 already available palettes.
As I work only with the Fire Red (US), I can only give the offsets for that version. As the data has the same structure in all GBA pokemon games, searches for similar data must bring results.
Code:
0x083a5158 -> start of Palette pointers.
0x0805f4b0 -> palette fetching function. Changing here would increase the number of palettes. this function is bugged, the failsafe was broken
0x0805f2c8 -> Overworld loader function. changing here would allow for 255 different overworld sprites.
0x0805f5a0 -> the confusing function that turns the palette key into an address.
I hope this information may be put to good use.