So I'm working on a branch of the Universal Pokémon Randomizer, and have managed to make an option to alter the Gen II Newdex to follow the post-randomization distribution of Pokémon. The randomized starters are placed at the start of the dex no matter what they are, early route Pokémon following right after, legendaries at the end etc.. The way the routine works, the re-ordering of the dex is independent to the structure of the game's data, and can be implemented as long as I can write the data wherever the Pokédex order is stored in the rom.
...However, moving over to the Gen I games I am dumbfounded, as I can't figure out how the game decides the order of the in-game Pokédex.
What I've got is two ROM indexes for Red (U) that might be part of the answer:
The first is 0x41024, it is a list in order of the in-game Pokémon indexes, listing the Pokédex index of the Pokémon at that index. It starts with a 7016(11210) for Rhydon, then a 7316(11510) for Kangaskhan, 2016(3210) for Nidoran♂, 2316(3510) for Clefairy etc.. However, simply changing these does not make the Pokédex change order, but instead it has lots of other strange effects. I'll get to them later.
The second index is 0x383DE. Here, we have the Pokémon's base stats, in Pokédex order. These base stats structures include various things, such as the actual stats, the types, base xp yield, TM & HM flags for what moves the Pokémon can learn, and the Attacks known at lvl 1. It also includes a the dimensions of the Pokémon's frontsprite, pointers to the frontsprite and backsprite, and at the very start the Pokémon's Pokédex index.
...Changing this index does not seem to do anything at all, though.
This does not mean 0x383DE is totally worthless though (or at least so I think). After all, it is sorted in Pokédex order. Turns out, when you change the values at 0x41024, the game looks at another part of 0x383DE, and uses different base stats for that Pokémon. Using this method, I managed to create an amalgamation between Charmander and Caterpie, with Caterpie's stats, typing, and initial moves (and a horribly jumbled sprite), that was given out by prof. Oak.
Interestingly, it learned ember at lvl 9, as the level-up moves are stored somewhere else, presumably in in-game index order. Its cry is also Charmander's.
...And there, I am stuck. I can't figure out the next step to take from here, and it feels like there still is some necessary index missing. Seeing people have made major rom hacks to the Gen I games, the method should really be out there and known, but I can't find anything on it. Basically what I need to know is how to move a Pokémon around in the Pokédex of the Gen I games, preferably using Red (U) indexes, but I can work with most of them if necessary.
"I See now that the circumstances of one's birth are irrelevant.
It is what you do with the gift of life that determines who you are."