The PokéCommunity Forums Fan Games ROM Hacking Research & Development
Research Battle Tower Pokémon Offsets (Pokémon Ruby)

Research & Development Got 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!

Thread Tools
Old July 16th, 2010 (6:30 PM). Edited July 17th, 2010 by Chaos Rush.
Chaos Rush's Avatar
Chaos Rush Chaos Rush is offline
im sexy and i know it
Join Date: May 2007
Location: Taylor Swift
Gender: Male
Nature: Adamant
Posts: 1,296
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:

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.

* - 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:
Attached Files
File Type: ips RubyBattleTowerMod.ips‎ (1.8 KB, 10 views) (Save to Dropbox)

My projects:
Untitled Pokémon fangame (pictured above) | Final Fantasy II NES retranslation | Mother 1/EarthBound Beginnings Color Restoration for GBA
Non-Pokémon hacks I support:
Sonic Classic Heroes
Sonic 3 Complete
Reply With Quote

Relevant Advertising!

Old July 21st, 2010 (5:19 AM). Edited July 22nd, 2010 by Wichu.
Wichu's Avatar
Wichu Wichu is offline
Project Amethyst
Join Date: Sep 2007
Location: North Herts, England
Age: 24
Gender: Male
Nature: Naive
Posts: 2,051
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:

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)


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.
Reply With Quote
Quick Reply

Sponsored Links
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

All times are GMT -8. The time now is 10:50 AM.