• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Research: Battle Tower Pokémon Offsets (Pokémon Ruby)

1,323
Posts
16
Years
  • Seen Dec 9, 2023
After some researching, I managed to find out how to edit the Battle Tower Pokemon. The offset of the Pokemon Data base starts at 0x4038E0 (Pokemon Ruby).

The offset in Emerald is somewhere around 0x5D97CC. I tried porting Emerald's list into Ruby, but I hit a brick wall when I couldn't find the offset. I thought the pointer in Ruby was at 0x134F54, but when I changed the bytes there to repoint to where I pasted the Emerald Pokemon list, the Battle Tower Pokemon were exactly the same as Pokemon Ruby & Sapphire. So then I tried simply pasting Emerald's list directly over Ruby's (even though Emerald has a much larger list than Ruby's, lol), all that did was crash the game when I tried to make a Battle Room challenge.

Anyways, I don't think I need to explain how to change it, but at 0x4038E0 you see the bytes 19 00, right? Yeah, and if you use GoldFinger, if you look up at the top while 19 is highlighted, you should see, "19 (25)". And Pikachu's hex number is also 25, meaning that the first byte is the species of the Pokemon. According to this page, there are only two Pikachu you will encounter in the Battle Tower, so at 0x4038E0, change 19 to 18, and congratulations, 50% of all Pikachus will now turn into Arboks.

I'm too lazy to figure out how to edit their moveset, but it's pretty easy, since the move bytes are very close to the species byte(s).

So here's some screenshots to prove that I'm not making up stuff:
ohwow.png
crabhammer.png

leech.png
drain.png


I didn't edit the movesets, I just changed random 01s into 00s to change some of their species numbers, which is why you see non Hoenn-Pokemon using illegal moves (their movesets originally belonged to Hoenn Pokemon).

Obviously, I'm no advanced hacker, but the reason why I'm posting this is because hopefully some of you advanced hackers can figure out how to port Emerald's Pokemon list over Ruby's.

EDIT: I did a little more experimenting, I pasted part of Emerald's list over Ruby's, and that doesn't exactly work correctly. Usually it freezes right before you battle a trainer, but if you manage to make it into battle, the Pokemon use glitchy moves. One time where I made it into a Battle, when my foe Dustox attacked, it said, "Dustox used EXIT" and then it froze.


Credits:
*Serebii.net - for posting the Battle Tower list that helped me find Ruby's offset
*Peterko (a member at Smogon) - for making this thread that helped me find Emerald's offset
*HackMew - for making A-Trainer, which I used to mimic some Battle Tower Pokemon to help me find the offsets for both Ruby and Emerald
*Whoever made GoldFinger, the hex editor I used to find everything.

Also, this might help with research, but here's a patch for Ruby that makes some Kanto Pokemon appear in the Battle Tower with unfitting movesets:
 
Last edited:
2,048
Posts
16
Years
  • Age 31
  • Seen Sep 7, 2023
The reason it doesn't work if you just copy and paste is that the data format in Emerald is different. Also, even if you did repoint it, you'd have to change the number of Pokémon the game thinks there are in the list (if you just copied Emerald's list, Ruby would only consider the first part of the list, up to however many Pokémon are in Ruby's Battle Tower).

Here's the structure of the Battle Tower data for both Emerald and Ruby:
Code:
Emerald:

Pokémon List Offset: 0x5D97BC
Slateport Tent Offset: 0x5DE02C
Verdanturf Tent Offset: 0x5DEC28
Fallarbor Tent Offset: 0x5DF69C
Item List Offset: 0x5CECB0

Species (2 bytes)
Move 1 (2 bytes)
Move 2 (2 bytes)
Move 3 (2 bytes)
Move 4 (2 bytes)
Item (1 byte)
EVs (1 byte)
Nature (1 byte)
Padding (3 bytes)

Ruby:

Pokémon List Offset: 0x4038E0
Item List Offset: 0x403860

Species (2 bytes)
Item (1 byte)
?? (1 byte)
Move 1 (2 bytes)
Move 2 (2 bytes)
Move 3 (2 bytes)
Move 4 (2 bytes)
EVs (1 byte)
Nature (1 byte)
Padding (2 bytes)

Firstly, does anyone know what the unknown byte in Ruby does? It's not present in Emerald...

Secondly, is there not an editor for this yet? Looks like I have something to do :)

EDIT: By the way, the Item byte isn't an item ID, it refers to the Battle Tower's own item list. The item list is simply a list of 2-byte item IDs used in the Battle Tower.

EDIT2: Whoops, seems like I accidentally added a byte to the Ruby ROM, so the format was wrong. I've now corrected it.
 
Last edited:
Back
Top