Welcome to the PokéCommunity!

Hi there! Thanks for visiting PokéCommunity. We’re a group of Pokémon fans dedicated to providing the best place on the Internet for discussing ideas and sharing fan-made content. Welcome! We’re glad you’re here.

In order to join our community we need you to create an account with us. Doing so will allow you to make posts, submit and view fan art and fan fiction, download fan-made games, and much more. It’s quick and easy; just click here and follow the instructions.

Research & DevelopmentGot a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!

Research & Development programs in this forum are subject to moderator approval before they are displayed.

Hmmm... one more thing i noticed while trying to extend the regional dex is that the pokemon's numbers dont show up on the summary screen (shows up as ???). Not that much of a big thing, but it would be a little more neater.... if someone had a fix?

Buddy, I had to completely rewrite the Pokédex for it to support regional dexes. It simply is not designed to support a regional dex. The Kanto dex in FR is literally the national dex but cut to only be 151 long.

I built a brand new routine for it to support the Regional Dex, but it's combined with a lot of small changes in other places to make it all work.

Even then, I still have at least one thing which I've overlooked at this stage which will need fixed, so it's not finished.

__________________

Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!

Buddy, I had to completely rewrite the Pokédex for it to support regional dexes. It simply is not designed to support a regional dex. The Kanto dex in FR is literally the national dex but cut to only be 151 long.

I built a brand new routine for it to support the National Dex, but it's combined with a lot of small changes in other places to make it all work.

Even then, I still have at least one thing which I've overlooked at this stage which will need fixed, so it's not finished.

ah no... i was just trying to extend the kanto dex... kinda like "faking" a regional dex, not an actual regional dex like in GSC ... I figured there must be a check for the national dex when the data was being displayed on the summary screen, but I was having trouble finding the routine that does this to check....

Your work is impressive, to say the least, and I wasn't trying to take away from it... but in my hack, i figured around 180 pokemon would be enough, so i wanted to remove the national dex completely and only leave the Kanto Dex, so i figured it would only be a couple of checks that needed bypassing. But what u've found so far are the main things, so its fine. :D

There's a Malloc (Memory Allocation) in the lead up to the Pokédex routine. If you don't hack this to have the correct length of memory, the ROM will simply crash when it attempts to load the NATIONAL dex (The Kanto Dex is loaded separately, but uses the same Malloc as the National Dex).

The Pokédex's Malloc is specifically designed to support a maximum of 386 Pokémon, and you need to raise that limit to 411 to support the Unown remnants. (Among other complicated things too!).

The length of the malloc is determined at 0x1025EC, with a mov r0, #0xC1.

The safest way (and the way I did it personally) was to insert a small routine at this location which branches off to a custom routine.
This is the routine I would have used if I simply wanted the Unown Remnants to be included:

To insert this routine, navigate to 0x1025EC, and change the code there to:

Code:

00 48 00 47 XX XX XX 08

Where the XXXXXX08 stands for your pointer to the routine plus 1 for thumb.

This should help, as everything else is more obvious, and this is the one thing which is truly quite well hidden.

EDIT: I should have said that the "length" is the number of Pokémon in your Pokédex multiplied by 8. So for an unexpanded Pokédex it would be:
(0x182 * 0x8) = 0xC10
For including the Unown remnants, it would be:
(0x19B * 0x8) = 0xCD8
For having 649 Pokémon, it would be:
(0x289 * 0x8) = 0x1448.

So what youre saying is if I put f68 (1ed *8) I can get 493 pokemon just like that after repointing the tables? The game doesnt freeze when i insert the asm, so it must have worked, but theres no way of making sure, because theres no way for me to record the last pokemon to the pokedex, and so i cant see the last pokemon (arceus) in the pokedex.

Hey guys! Can everything Jambo51 provided decrease the number of Pokemon in the Pokedex? For example, I only want 256 Pokemon in my Pokedex but still after catching that 256 Pokemon, I can still get the 100% completion of the Pokedex.

__________________

LET'S PARTY!

robin22gongon

Also Known As:The Superbly Awesome Great Dynamic Fantastic Super High Majestic Robin!

I renamed them all. The fact that the game doesnt freeze is a sign that it CAN support them, just only the names arent appearing. I repointed every table and it all works except names after chimecho. I did expand it since if you try a wildbattle on fire red with unexpanded it freezes. Mine doesnt.

I renamed them all. The fact that the game doesnt freeze is a sign that it CAN support them, just only the names arent appearing. I repointed every table and it all works except names after chimecho. I did expand it since if you try a wildbattle on fire red with unexpanded it freezes. Mine doesnt.

Okay, these are the limiters.
Replace the 2 bytes at these addresses with the number of pokemon IN HEX (reversed)
0x431F4
0x43240
0x4328C
0x459EC
0x7464C
0x7471C
0x7477C
0xCB160
0xCB16C
0x1037D4
0x103870
0x104C28

Replace the 2 bytes at these addresses with the number of pokemon -1 IN HEX (reversed)
0x88EA4
0x103920

That should be enough, but if it still doesn't work, I have a bunch of other limiters that do other things. But if it works, thats great.

Okay, these are the limiters.
Replace the 2 bytes at these addresses with the number of pokemon IN HEX (reversed)
0x431F4
0x43240
0x4328C
0x459EC
0x7464C
0x7471C
0x7477C
0xCB160
0xCB16C
0x1037D4
0x103870
0x104C28

Replace the 2 bytes at these addresses with the number of pokemon -1 IN HEX (reversed)
0x88EA4
0x103920

That should be enough, but if it still doesn't work, I have a bunch of other limiters that do other things. But if it works, thats great.

What i didnt post yesterday was that i made a trainer battle where a guy has darkrai. Darkrai is in the 491 SLOT but it comes up as 412 burmy. Theres like 70 412s and they arent seen yet but ill fix it.

Hey dudes, how do I make the maximum number of pokemon in the pokedex just 200? I want to decrease the number of pokemon for my hack. How do I limit the pokedex to 200 entries and still get the "pokedex complete!" certificate?

__________________

LET'S PARTY!

robin22gongon

Also Known As:The Superbly Awesome Great Dynamic Fantastic Super High Majestic Robin!

Possible, but not easy. Find the limiters (from an early post on pg6 or from dragoon's post)
and decrease them to how many you want.
This is only a suggestion though...
if it doesnt work, compile the asm routine on pg6

Which is already looking wrong to me... Though I did change the 0x22018128 to 0x000014E0 which would always compile to 0x800014E0 and would break the game when an evolution happened... So I changed that back and tried then I changed the 0x4807836A to 0x000014E0 which also kept going to 0x800014E0 which when I tried to evolve The animation did happen correctly the Natu became a Xatu though it still said Natu stopped evolving and left me with Natu...
So yeah.. Im out of ideas... any help would be appreciated..

Hm, for some reason my ROM crashes when I evolve my Mudkip and haven't unlocked the National Dex, even though I changed the bytes as listed in the OP. Has anyone else encountered this?

edit: For clarity, the evolution animation works perfectly, but then, after "Congratulations, your Mudkip evolved into Marshtomp!" appears and the red arrow is drawn on screen, the screen freezes and after a few seconds the game restarts. If I stop the evolution from happening midway then nothing freezes and it works as normal. This is FireRed of course and I'm using VBA.

edit 2: Hm, once I cancel the evolution and then level up Mudkip to 17, the evolution sequence works perfectly - this is true in two different maps. I'm testing a separate Hoenn Pokémon now.

They're stored in the game in metric units and converted to imperial at run time. You would simply have to turn off the conversion routine (pretty easy since it's just nop-ing a few opcodes) and change the strings which are at the end of them (the lbs and the ' " things).

Granted, all of the above requires knowing where this code is, but it's certainly possible to do.

__________________

Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!

Hey guys, link in the OP was down, how do you add the 4th and 5th gen pokedex entries to a fire red rom? Can't figure out how! Or if someone can link me to a patch or something that adds in all of the new pokedex entries, that'd be appreicated! Thanks.

They're stored in the game in metric units and converted to imperial at run time. You would simply have to turn off the conversion routine (pretty easy since it's just nop-ing a few opcodes) and change the strings which are at the end of them (the lbs and the ' " things).

Granted, all of the above requires knowing where this code is, but it's certainly possible to do.

When writing to the Pokémon's data, you risk changing something which should have an effect in the checksum. Without updating this checksum, the Pokémon will instantly become a Bad Egg.

My way of doing the formes avoids this potential problem by not writing to that area of data. It simply keeps the same Pokemon, calling the stat recalculator if necessary. It also takes much less space in terms of seperate data.

The code for gender differences is mixed in with the formes, since I reasoned that they were technically a variation on formes. Like Arceus however, nothing is directly stored to the Pokémon data which determines its gender, it is simply calculated on the fly as necessary. The Sprites are missing however.

Actually, the EGG is sprite 412. But that's nitpicking. To answer your question, I inserted a little bit of extra code at the sprite getting locations, with checks against the Sprite number and the Species ID (both are in the registers at this stage in FR). Simply, If it's Unown, I load a different table offset, and subtract the necessary number of sprites to make it fit, and if it's the EGG sprite ID, I check if the Pokémon the sprite request came from is an egg. Even if it is a Burmy AND an EGG, it will automatically display the EGG sprite until it hatches.

More complicated than necessary, but that's what happens when you forget that the Unown sprites (and EGG sprites) follow directly on from the "Normal" sprites.

EDITED TO ADD: I managed to get formes to recalculate stats when activated based on the current forme.

I just expanded the pokedex of Chinese language Fire Red to 493, all pointers of that translation are just same as US version.
After solving the saveblock problem, I found that the entries of the 412-493 which burmy start becoming bad egg (course I do have all of pokedex entries), it looks like mess up with the egg sprite and unknown...

Said it is possible to recognize EGG/unknown sprite ID with extra code at the sprite getting locations
Could you show me how to do that?
It will help me a lots...

Others like basestats or front pics work fine...(which just left that bag egg pokedex)

And to generate different Unknowns, why don't just make some script to do wildbattle with different unknowns' index id...
I tried it, and it works fine, but you need to repoint the moveset and basestats for them ,so it will be counted as different 28 unknowns
and check the caught flags of them would be possible to achieve DPP storyline...

I just expanded the pokedex of Chinese language Fire Red to 493, all pointers of that translation are just same as US version.
After solving the saveblock problem, I found that the entries of the 412-493 which burmy start becoming bad egg (course I do have all of pokedex entries), it looks like mess up with the egg sprite and unknown...

Said it is possible to recognize EGG/unknown sprite ID with extra code at the sprite getting locations
Could you show me how to do that?
It will help me a lots...

Others like basestats or front pics work fine...(which just left that bag egg pokedex)

And to generate different Unknowns, why don't just make some script to do wildbattle with different unknowns' index id...
I tried it, and it works fine, but you need to repoint the moveset and basestats for them ,so it will be counted as different 28 unknowns
and check the caught flags of them would be possible to achieve DPP storyline...

Well the 'dex slots for 413-65535 were not supported in Gamefreak's original coding. Instead it uses 412 as the last # possible (changeable, don't know how)
So there's a limit(s) on 412 which we must find to achieve victory. The 649 patch did, but I can't figure out just HOW. And Jambo51 quit hacking a while ago, so he's not helping us.

The PokéCommunity

Meta

Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, or The Pokémon Company International. We just love Pokémon.