Resource [FireRed] Levels Above 100

Started by esipode September 21st, 2016 9:43 PM
  • 11081 views
  • 36 replies
Seen 4 Days Ago
Posted October 17th, 2018
52 posts
10.3 Years
Hello, everyone!

I'm here to show you how to expand the level cap in FireRed. How to do this in Emerald can be found here

However, there is currently a fairly important bug that I am trying to fix.
  1. Levels over 100 won't display needed XP and will instead show 0. The leveling will work correctly, but display XP wrong.
  2. Stat growth is completely wrong. Turned out the problem was just my ROM. Should work fine.
  3. Cannot display EXP numbers 7 digits and higher.
  4. 4 digit health not displaying correctly in Pokemon menu.

You will need a hex editor, I personally recommend HxD.
You will also need Free Space Finder.

EXP TABLE POINTERS

Spoiler:


These offsets point to the location of the beginning of the EXP table. We are going to need to point them to the location of wherever you are placing the new table.

I recommend using Free Space Finder to find an offset for your new table. I have already created a new EXP table in the attached file for this post, which is set to accommodate up to 255 levels.
The amount of space needed for my table is 6,144 (or 0x1800) bytes.

0802FFB8 - Replace E4 3A 25 08 with XX XX XX 08
080300E4 - Replace E4 3A 25 08 with XX XX XX 08
080301F4 - Replace E4 3A 25 08 with XX XX XX 08
0803DCC8 - Replace E4 3A 25 08 with XX XX XX 08
0803E828 - Replace E4 3A 25 08 with XX XX XX 08
0803E894 - Replace E4 3A 25 08 with XX XX XX 08
0804199C - Replace E4 3A 25 08 with XX XX XX 08
08043B88 - Replace E4 3A 25 08 with XX XX XX 08
08043C0C - Replace E4 3A 25 08 with XX XX XX 08
08049F48 - Replace E4 3A 25 08 with XX XX XX 08
080E7F10 - Replace E4 3A 25 08 with XX XX XX 08
080E803C - Replace E4 3A 25 08 with XX XX XX 08
080E814C - Replace E4 3A 25 08 with XX XX XX 08
08136790 - Replace E4 3A 25 08 with XX XX XX 08
0813AADC - Replace E4 3A 25 08 with XX XX XX 08
081569E8 - Replace E4 3A 25 08 with XX XX XX 08
08156B14 - Replace E4 3A 25 08 with XX XX XX 08
08156C24 - Replace E4 3A 25 08 with XX XX XX 08


LEVEL 100 CHECKS

Spoiler:


These offsets are what checks for the max level a pokemon can grow to. Keep in mind these are hex values! For example, I have my table set to level 250, which is FA. You can set yours higher/lower, so long as it remains 1 byte in length.

0804A216 - change 64 to YOUR LEVEL HEX
08021CFA - change 64 to YOUR LEVEL HEX
08021FB6 - change 64 to YOUR LEVEL HEX
0803E806 - change 64 to YOUR LEVEL HEX
0803E872 - change 64 to YOUR LEVEL HEX
08041834 - change 64 to YOUR LEVEL HEX
08041B1E - change 64 to YOUR LEVEL HEX
08041B22 - change 64 to YOUR LEVEL HEX
080420E8 - change 64 to YOUR LEVEL HEX
080420EC - change 64 to YOUR LEVEL HEX
0804274E - change 64 to YOUR LEVEL HEX
08045684 - change 64 to YOUR LEVEL HEX
08041B0E - change 63 to YOUR LEVEL HEX MINUS 1
08032F6E - change 63 to YOUR LEVEL HEX MINUS 1


EXP TABLE SIZE POINTERS

Spoiler:


By default, FireRed will have 6 different exp growth rates assigned for different Pokemon. Each of which is 404 bytes long. That accounts for 100 levels + level 0. Since we need this to be larger to accommodate the new 255 level limit, each growth rate needs to be 1,024 bytes long. Which means that the pointers need to have the size they look for changed.

0803E7F2 - Replace CA 25 6D 00 with 20 25 6D 01
0803E85E - Replace CA 25 6D 00 with 20 25 6D 01

0802FF34 - Replace CA 21 49 00 with 20 21 49 01
080E7E8C - Replace CA 21 49 00 with 20 21 49 01
08156964 - Replace CA 21 49 00 with 20 21 49 01

08043B64 - Replace C8 21 49 00 with 20 21 49 01

08030094 - Replace CA 20 40 00 with 20 20 40 01
08049ED4 - Replace CA 20 40 00 with 20 20 40 01
0803DBF8 - Replace CA 20 40 00 with 20 20 40 01
08156AC4 - Replace CA 20 40 00 with 20 20 40 01
08156BCC - Replace CA 20 40 00 with 20 20 40 01
081366AA - Replace CA 20 40 00 with 20 20 40 01
0813A9F4 - Replace CA 20 40 00 with 20 20 40 01
080E7FEC - Replace CA 20 40 00 with 20 20 40 01
080E80F4 - Replace CA 20 40 00 with 20 20 40 01
0803019C - Replace CA 20 40 00 with 20 20 40 01
08043BE0 - Replace CA 20 40 00 with 20 20 40 01
08043B5E - Replace CA 20 40 00 with 20 20 40 01
08041860 - Replace CA 20 40 00 with 20 20 40 01


RARE CANDY PAST 100

Spoiler:

Now we need to allow the use of Rare Candies for Pokemon over level 100.

081262D2 - Replace 64 with YOUR LEVEL HEX


EXP Display Summary

Spoiler:


We need to change a few values so that EXP will display correctly after passing level 100.

08136684 - Replace 63 with YOUR LEVEL HEX minus 1

0813A9DC - Replace 63 with YOUR LEVEL HEX minus 1

0813664C - Replace 07 with 09

081366C0 - Replace 07 with 09



Stat Display Digits

Spoiler:


We now need to change a few more values so that stats can have up to 4 digits.

08136378 - Replace 03 with 04

0813639C - Replace 03 with 04

08136534 - Replace 03 with 04

0813656E - Replace 03 with 04

081365A4 - Replace 03 with 04

081365DA - Replace 03 with 04

08136610 - Replace 03 with 04

0811E9B2 - Replace 03 with 04



Stat overflow fix

Spoiler:


A few values have to be changed so that stats don't show incorrect values.

436D4 - 0B
436DC - 09
436E4 - 0A




Lastly we need to copy the EXP Table I have attached and paste the table at the offset you found with the appropriate free space.

And with that, you're done!

Keep in mind I tested this on a FireRed US v1.0 ROM, so it may or may not work on other versions.

Big thanks to DizzyEgg and BluRose for helping me find some of these values!

Lunos

Random Uruguayan User

Male
Montevideo (Uruguay)
Seen 5 Minutes Ago
Posted 1 Day Ago
2,503 posts
11.7 Years
So.. I've tried it, but my Starter (Squirtle) doesn't get any new exp. in battles. Even after leveling up it stayed at Lv5.
I've inserted the attached Exp. Table at F567A0, the pointer should be A0 67 F5 08 and I don't think that I've messed up, I mean, it was as simple as to copy the offset right here, go to it, copy the pointer on my notepad, and Ctrl+B in each situation :/ ... here's the IPS, just in case.

EDIT: Yep, I've checked just in case and everything should be correct, I didn't messed up.
Seen 4 Days Ago
Posted October 17th, 2018
52 posts
10.3 Years
EDIT: Yep, I've checked just in case and everything should be correct, I didn't messed up.
You would be correct, it's all right. And I took another fresh rom and tried it and it worked still.

Delete the save file for the game. I found that it causes weird glitches and doesn't work on an existing save. You have to start fresh once it's setup.
It's also possible that there is a difference in the ROM bases we used. You may want to find a download from a different source.

Lunos

Random Uruguayan User

Male
Montevideo (Uruguay)
Seen 5 Minutes Ago
Posted 1 Day Ago
2,503 posts
11.7 Years
You would be correct, it's all right. And I took another fresh rom and tried it and it worked still.

Delete the save file for the game. I found that it causes weird glitches and doesn't work on an existing save. You have to start fresh once it's setup.
It's also possible that there is a difference in the ROM bases we used. You may want to find a download from a different source.
1) I started a fresh save and a Clean ROM to try this, I never re-use a save because I simply don't have one.
2) It's the exact same ROM I use to patch different .IPS and .UPS from different FireRed v1.0 ROM Hacks, so I totally doubt that its the problem over here.
Here's a video of me, doing the entire process, just in case.
Btw, thanks to it, I've noticed that Squirtle did got experience, the thing is that it apparently needs 17k for leveling up to Lv6 and it also apparently got 600k since the very beginning.
Also, again, here's the .IPS after doing the video and you'll be able to see that it fits with no problems at all into a v1.0 Clean FireRed USA ROM.
If you see anything wrong in the process that I've made on the video, please tell me ;_; ..

EDIT: Removed the .IPS because it's pointless to keep it in my DropBox Account anymore.
Seen 4 Days Ago
Posted October 17th, 2018
52 posts
10.3 Years
Aha! I have found the source of your problem! (Thank you for making that video, it clears this right up)
It may have been a clerical error on my part, so allow me to explain. In the "EXP TABLE SIZE POINTERS" list, you HAVE to to enter those values into the offsets. What I had meant was that if you wanted to go over level 200 then the value that you need to replace would be different than the one I am saying to enter. The section should not be ignored.

Lunos

Random Uruguayan User

Male
Montevideo (Uruguay)
Seen 5 Minutes Ago
Posted 1 Day Ago
2,503 posts
11.7 Years
Aha! I have found the source of your problem! (Thank you for making that video, it clears this right up)
It may have been a clerical error on my part, so allow me to explain. In the "EXP TABLE SIZE POINTERS" list, you HAVE to to enter those values into the offsets. What I had meant was that if you wanted to go over level 200 then the value that you need to replace would be different than the one I am saying to enter. The section should not be ignored.
I'm such an idiot. I totally misunderstood it in the very first place, dang it.. I'm sorry.
This certainly is working perfectly, and god freaking damn it just look at this beast:

And that's basically 864 stat points on SpAtk with a Light Ball, it's brutal xDD
Seen 4 Days Ago
Posted October 17th, 2018
52 posts
10.3 Years
Just a little question, can we maybe allow only the other tranier's pokemon to go beyond 100 ? I'd find this interesting
That should technically be possible. You would just have to change the "Level Check" values back to 0x64. That should, in theory, make it possible for only trainers to go above.

Ayonn-

The Unbelivable

Male
FRANCE
Seen March 16th, 2020
Posted May 19th, 2018
209 posts
6 Years
That should technically be possible. You would just have to change the "Level Check" values back to 0x64. That should, in theory, make it possible for only trainers to go above.
I'd find this interesting in the way it will make the game harder, but I don't have the knowledge to do this on my own in my rom, too bad...

DizzyEgg

Age 22
Male
Poland
Seen 4 Days Ago
Posted April 23rd, 2020
795 posts
6.3 Years
Got it working first try. This is absolutely wonderful. Best thing I can see this being used for is continuing into another region, IE Kanto -> Johto and starting Johto at 100; Fabulous!
You're welcome pal.
Spoiler:

xD
Spoiler:

( ͡° ͜ʖ ͡°)

Seen 4 Days Ago
Posted October 17th, 2018
52 posts
10.3 Years
Best thing I can see this being used for is continuing into another region, IE Kanto -> Johto and starting Johto at 100; Fabulous!
That's actually the exact reason I was attempting this in the first place! I've actually been making a hack that incorporates Kanto, Johto, and Hoenn. (Which is actually fairly well along, I'm about 1/4 way done making Hoenn) Wish I had more time so I could get it done! Stupid real life and responsibilities.

BluRose

blu rass

Age 19
Male
michigan tech
Seen 1 Day Ago
Posted March 11th, 2020
778 posts
6.1 Years
Spoiler:
Hello, everyone!

I'm here to show you how to expand the level cap in FireRed. How to do this in Emerald can be found here

However, there is currently a fairly important bug that I am trying to fix.
  1. Levels over 100 won't display needed XP and will instead show 0. The leveling will work correctly, but display XP wrong.
  2. Stat growth is completely wrong. Turned out the problem was just my ROM. Should work fine.
  3. Cannot display EXP numbers 7 digits and higher.
  4. 4 digit health not displaying correctly in Pokemon menu.

You will need a hex editor, I personally recommend HxD.
You will also need Free Space Finder.

EXP TABLE POINTERS

Spoiler:


These offsets point to the location of the beginning of the EXP table. We are going to need to point them to the location of wherever you are placing the new table.

I recommend using Free Space Finder to find an offset for your new table. I have already created a new EXP table in the attached file for this post, which is set to accommodate up to 255 levels.
The amount of space needed for my table is 6,144 (or 0x1800) bytes.

0802FFB8 - Replace E4 3A 25 08 with XX XX XX 08
080300E4 - Replace E4 3A 25 08 with XX XX XX 08
080301F4 - Replace E4 3A 25 08 with XX XX XX 08
0803DCC8 - Replace E4 3A 25 08 with XX XX XX 08
0803E828 - Replace E4 3A 25 08 with XX XX XX 08
0803E894 - Replace E4 3A 25 08 with XX XX XX 08
0804199C - Replace E4 3A 25 08 with XX XX XX 08
08043B88 - Replace E4 3A 25 08 with XX XX XX 08
08043C0C - Replace E4 3A 25 08 with XX XX XX 08
08049F48 - Replace E4 3A 25 08 with XX XX XX 08
080E7F10 - Replace E4 3A 25 08 with XX XX XX 08
080E803C - Replace E4 3A 25 08 with XX XX XX 08
080E814C - Replace E4 3A 25 08 with XX XX XX 08
08136790 - Replace E4 3A 25 08 with XX XX XX 08
0813AADC - Replace E4 3A 25 08 with XX XX XX 08
081569E8 - Replace E4 3A 25 08 with XX XX XX 08
08156B14 - Replace E4 3A 25 08 with XX XX XX 08
08156C24 - Replace E4 3A 25 08 with XX XX XX 08


LEVEL 100 CHECKS

Spoiler:


These offsets are what checks for the max level a pokemon can grow to. Keep in mind these are hex values! For example, I have my table set to level 250, which is FA. You can set yours higher/lower, so long as it remains 1 byte in length.

0804A216 - change 64 to YOUR LEVEL HEX
08021CFA - change 64 to YOUR LEVEL HEX
08021FB6 - change 64 to YOUR LEVEL HEX
0803E806 - change 64 to YOUR LEVEL HEX
0803E872 - change 64 to YOUR LEVEL HEX
08041834 - change 64 to YOUR LEVEL HEX
08041B1E - change 64 to YOUR LEVEL HEX
08041B22 - change 64 to YOUR LEVEL HEX
080420E8 - change 64 to YOUR LEVEL HEX
080420EC - change 64 to YOUR LEVEL HEX
0804274E - change 64 to YOUR LEVEL HEX
08045684 - change 64 to YOUR LEVEL HEX
08041B0E - change 63 to YOUR LEVEL HEX MINUS 1
08032F6E - change 63 to YOUR LEVEL HEX MINUS 1


EXP TABLE SIZE POINTERS

Spoiler:


By default, FireRed will have 6 different exp growth rates assigned for different Pokemon. Each of which is 404 bytes long. That accounts for 100 levels + level 0. Since we need this to be larger to accommodate the new 255 level limit, each growth rate needs to be 1,024 bytes long. Which means that the pointers need to have the size they look for changed.

0803E7F2 - Replace CA 25 6D 00 with 20 25 6D 01
0803E85E - Replace CA 25 6D 00 with 20 25 6D 01

0802FF34 - Replace CA 21 49 00 with 20 21 49 01
080E7E8C - Replace CA 21 49 00 with 20 21 49 01
08156964 - Replace CA 21 49 00 with 20 21 49 01

08043B64 - Replace C8 21 49 00 with 20 21 49 01

08030094 - Replace CA 20 40 00 with 20 20 40 01
08049ED4 - Replace CA 20 40 00 with 20 20 40 01
0803DBF8 - Replace CA 20 40 00 with 20 20 40 01
08156AC4 - Replace CA 20 40 00 with 20 20 40 01
08156BCC - Replace CA 20 40 00 with 20 20 40 01
081366AA - Replace CA 20 40 00 with 20 20 40 01
0813A9F4 - Replace CA 20 40 00 with 20 20 40 01
080E7FEC - Replace CA 20 40 00 with 20 20 40 01
080E80F4 - Replace CA 20 40 00 with 20 20 40 01
0803019C - Replace CA 20 40 00 with 20 20 40 01
08043BE0 - Replace CA 20 40 00 with 20 20 40 01
08043B5E - Replace CA 20 40 00 with 20 20 40 01
08041860 - Replace CA 20 40 00 with 20 20 40 01


RARE CANDY PAST 100

Spoiler:

Now we need to allow the use of Rare Candies for Pokemon over level 100.

081262D2 - Replace 64 with YOUR LEVEL HEX


EXP Display Summary

Spoiler:


We need to change a few values so that EXP will display correctly after passing level 100.

08136684 - Replace 63 with YOUR LEVEL HEX minus 1

0813A9DC - Replace 63 with YOUR LEVEL HEX minus 1

0813664C - Replace 07 with 09

081366C0 - Replace 07 with 09



Stat Display Digits

Spoiler:


We now need to change a few more values so that stats can have up to 4 digits.

08136378 - Replace 03 with 04

0813639C - Replace 03 with 04

08136534 - Replace 03 with 04

0813656E - Replace 03 with 04

081365A4 - Replace 03 with 04

081365DA - Replace 03 with 04

08136610 - Replace 03 with 04

0811E9B2 - Replace 03 with 04


Spoiler:

Lastly we need to copy the EXP Table I have attached and paste the table at the offset you found with the appropriate free space.

And with that, you're done!

Keep in mind I tested this on a FireRed US v1.0 ROM, so it may or may not work on other versions.

Big thanks to DizzyEgg and BluRose for helping me find some of these values!
howdy:
few more values here, mainly for battles (untested):
48492 - change 03 to 04 - max hp in-battle loaded characters
484C6 - change 03 to 04 - current hp in-battle loaded characters
may find menu today if i get to it~
am i cool yet

DizzyEgg

Age 22
Male
Poland
Seen 4 Days Ago
Posted April 23rd, 2020
795 posts
6.3 Years
howdy:
few more values here, mainly for battles (untested):
48492 - change 03 to 04 - max hp in-battle loaded characters
484C6 - change 03 to 04 - current hp in-battle loaded characters
may find menu today if i get to it~
Be careful with just changing max digit numbers. There are cases when you need to move the string a bit left/right depending on where it's put originally.

BluRose

blu rass

Age 19
Male
michigan tech
Seen 1 Day Ago
Posted March 11th, 2020
778 posts
6.1 Years
Be careful with just changing max digit numbers. There are cases when you need to move the string a bit left/right depending on where it's put originally.
mainly why i said untested, but gracias nonetheless <3
am i cool yet
Seen 4 Days Ago
Posted October 17th, 2018
52 posts
10.3 Years
howdy:
few more values here, mainly for battles (untested):
48492 - change 03 to 04 - max hp in-battle loaded characters
484C6 - change 03 to 04 - current hp in-battle loaded characters
may find menu today if i get to it~
Thanks for finding those values! I honestly didn't even know this wasn't working currently. {XD}

That said, the string itself doesn't seem to want to accommodate the 4 digit length. The '/' symbol is gone and the last digit of the max hp gets cut off. Guess I'll add that to my to-do list of things to figure out!

BluRose

blu rass

Age 19
Male
michigan tech
Seen 1 Day Ago
Posted March 11th, 2020
778 posts
6.1 Years
Thanks for finding those values! I honestly didn't even know this wasn't working currently. {XD}

That said, the string itself doesn't seem to want to accommodate the 4 digit length. The '/' symbol is gone and the last digit of the max hp gets cut off. Guess I'll add that to my to-do list of things to figure out!
4849c - FB
484d8 - FF

it'll look a bit weird w/ 4 digits so maybe adjust it 5 more pixels to the left as well as do the same on the graphics for the battle boxes themselves (the "/" is on the image itself)
so then like F6 and then FA at each of the addresses, respectively
am i cool yet
Seen 4 Days Ago
Posted October 17th, 2018
52 posts
10.3 Years
4849c - FB
484d8 - FF

it'll look a bit weird w/ 4 digits so maybe adjust it 5 more pixels to the left as well as do the same on the graphics for the battle boxes themselves (the "/" is on the image itself)
so then like F6 and then FA at each of the addresses, respectively
Dang, now it shows as 2 digits. "/" is back though haha.

DizzyEgg

Age 22
Male
Poland
Seen 4 Days Ago
Posted April 23rd, 2020
795 posts
6.3 Years
Dang, now it shows as 2 digits. "/" is back though haha.
4849c - FB
484d8 - FF

it'll look a bit weird w/ 4 digits so maybe adjust it 5 more pixels to the left as well as do the same on the graphics for the battle boxes themselves (the "/" is on the image itself)
so then like F6 and then FA at each of the addresses, respectively
You won't do it with just bytechanging. You need to hook there and have separate cases for 4-digit HP and less digit HP.

jastolze007

Male
Seen 2 Weeks Ago
Posted 2 Weeks Ago
218 posts
3.4 Years
I apologize for this bump, but wanted to know if there's been an update to this? Every attempt I have has bugs, and will skip levels once reaching around ~40. Lunos mentioned there were some changes, and I think people would benefit from the update. :)

Also, one of the wild Pokemon I encounter (Eevee) doesn't even have a level, it's just 5. (Not Lv. 5) and goes black when evolving it... (Only when used on the fire red 1020 base)