• 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: Useful Emerald Stuff

1,323
Posts
16
Years
  • Seen Dec 9, 2023
I wish more people would hack R/S/E, so hopefully this might encourage people. Anyways, I have 3 useful Emerald stuff:


How to make the Town Map from FR/LG work in Emerald:

Spoiler:



How to change the Ralts that Wally fights:

Spoiler:



How to make a portable clock:

Spoiler:


Credits:
JPAN - He told me the offset at where the Special table in Emerald is located. I would have figured none of this out if he didn't tell me.

Whoever made the Pointer Calculator - It's awesome

ZodiacDaGreat - Item Manager
 
Last edited:

Logan

[img]http://pldh.net/media/pokecons_action/403.gif
10,417
Posts
15
Years
Good research and stuff, man. I already knew about Wally's Ralts but this will definitely help me (and others, too) when I get around to making a hack on Emerald. :)
 
1,772
Posts
15
Years
Nice, dude (I thought I already posted here..?).
The Town Map info is interesting, people haven't looked too much at the FireRed items in Emerald before, so kudos for making it work. ;)
 
1,323
Posts
16
Years
  • Seen Dec 9, 2023
Added how to make a portable clock. Here's a video:
http://romhacktube.com/video/NAMK43BMRR9D/Portable-Clock-in-Emerald

Once again I figured it out simply by calculating the pointer in the special that activates the clock. So, theoretically, we could turn the effect of any Special into an item, you just have to know the offset that the routine is.

EDIT: Does anyone know what the offset of the special table is in Pokemon Ruby? I'd like to experiment with a few things.
 
Last edited:

Logan

[img]http://pldh.net/media/pokecons_action/403.gif
10,417
Posts
15
Years
Added how to make a portable clock. Here's a video:
http://romhacktube.com/video/NAMK43BMRR9D/Portable-Clock-in-Emerald

Once again I figured it out simply by calculating the pointer in the special that activates the clock. So, theoretically, we could turn the effect of any Special into an item, you just have to know the offset that the routine is.

EDIT: Does anyone know what the offset of the special table is in Pokemon Ruby? I'd like to experiment with a few things.

Well, based on this response I think I'll move this over to R&D and you can use it as a document/research page. :)
 

Amabane~*

Hard Boiled Shinigami
16
Posts
14
Years
  • Seen Sep 11, 2022
Thanks, Chaos. I was just thinking about start a Emerald hack just now^^

But I need to find how to change that Rayquaza's sillouette in the start screeen now...¬¬

Feel yourself welcome to teach us new tricks for Emerald! Is quite hard to find documentation for hacking that game...
 

Shiny Quagsire

I'm Still Alive, Elsewhere
697
Posts
14
Years
Would it be possible to extract the clock routine, edit some pointers, and reinsert it into fire red? It's been puzzling me for a while now :\
 

Gamer2020

Accept no Imitations!
1,062
Posts
15
Years
How to change the Ralts that Wally fights:
Spoiler:

I think I can explain this. (If someone with better ASM knowledge sees a mistake please correct me. My knowledge is very basic :P)

In BPEE this is what is originally at that offset.

Code:
080B0870 21C4     mov     r1,0xC4
080B0872 0049     lsl     r1,r1,0x1
080B0874 2205     mov     r2,0x5
After your edit this is what it looks like.

Code:
080B0870 210D     mov     r1,0x0D
080B0872 004A     lsl     r2,r1,0x1
080B0874 2205     mov     r2,0x5
Ok now let me start explaining. In this case the vaule for the Pokemon is the 0xC4.

Code:
080B0870 21C4     mov     r1,0xC4
Now if you convert that to Decimal you get 196. Now you must be thinking, "That's not RALTS' hex value". Well it isn't.

Code:
080B0872 0049    lsl     r0,r1,0x1
That makes it so it is. lsl = Logical Shift Left (If I remember correctly XD)

So you take 0xC4 and convert it to binary. You get 11000100. (Use windows calclator.)

You then multiply it by 10 so that the values "shift" 1 to the left. You get 110001000. Convert that back to hex and you get 188.

That should be RALTS' value. I am to lazy to check.

Lets take a look at this line.

Code:
080B0874 2205     mov     r2,0x5
I'm pretty sure that 0x5 is the level :P

Now let's look at your edit.

Code:
080B0870 210D     mov     r1,0x0D
080B0872 004A     lsl     r2,r1,0x1
080B0874 2205     mov     r2,0x5
0x0D is WEEDLE's value. Looks good except for one thing.

Code:
080B0872 004A     lsl     r2,r1,0x1
That can be done better.

If you put the following you will have the same result :P Only do it for value 0xFF or lower. Otherwise use the lsl way.

Code:
080B0872 1C00     mov     r0,r0
1986-Pokemon-EmeraldVersionU-Copy_01.png
 

HackMew

Mewtwo Strikes Back
1,314
Posts
17
Years
  • Seen Oct 26, 2011
Would it be possible to extract the clock routine, edit some pointers, and reinsert it into fire red? It's been puzzling me for a while now :\

Nope, it's not easy like that. Either way, what clock routine are you talking about? There are actually many of them.

If you put the following you will have the same result :P Only do it for value 0xFF or lower. Otherwise use the lsl way.

Code:
080B0872 1C00     mov     r0,r0
1986-Pokemon-EmeraldVersionU-Copy_01.png

Actually, it can be done even better. Instead of replacing the logical left shift with an "useless" instruction, it would be better to use an "add r1, #0x0". The way the original routine is made, will always multiply by 2 the Pokémon ID. With the add command instead you might want to do something like:

Code:
mov r1, #0xFF
add r1, #0xXX

Where XX would be an appropriate value for anything from Treecko onwards. Otherwhise, if you don't need anything below Celebi, then XX could simply be set to 00.

EDIT: BTW... even if you can choose any value with the above method, some Pokémon will just not work. There's a sort of check and AFAIK should be intended for legendary Pokémon only. You can eventually patch that (I remember I did it before, you might want to do a quick search).
 
Last edited:

Gamer2020

Accept no Imitations!
1,062
Posts
15
Years
Yes that makes sense.

Alright so,
Code:
mov     r1, 0xXX 'First Pokemon Value.
add     r1, 0xXX 'Added Pokemon Value for Pokemon higher then 0xFF.
mov     r2, 0xXX 'Level of Pokemon.

And yeah legendary Pokemon don't work. They cause the game to freeze.

At least you can see I pay attention when you talk about ASM stuff LOL
I'm learning slowly :P
 
Last edited:
1,323
Posts
16
Years
  • Seen Dec 9, 2023
I have a question: Would it be possible to port the Vs Seeker from FR/LG over to Emerald? I'd like to figure out how to make more useless FR/LG items work in Emerald.
 

HackMew

Mewtwo Strikes Back
1,314
Posts
17
Years
  • Seen Oct 26, 2011
I have a question: Would it be possible to port the Vs Seeker from FR/LG over to Emerald? I'd like to figure out how to make more useless FR/LG items work in Emerald.

Usually anything that doesn't go beyond hardware capabilities is doable. I honestly didn't get the "useless" part.
 

Sierraffinity

Desperately trying to retire from ROM hacking
1,069
Posts
16
Years
I have some useful additions to the thread...
The people above me already figured out the Ralts editing, but what about editing the Zigzagoon Wally uses?
Now, that's contained in another special. The offsets that you have to edit are 0x139472 (PKMN) and 0x139482 (level).
Again, you have to change the lsl command for the add one, but otherwise, you're good to go.

Another thing: disabling the checkgender while flying to Littleroot Town.
Well, the thing is very easy to hack this time: just replace 0x124E62 with 00000000. Or, with some ASM knowledge, you could overwrite the bytes to give you a different situation in a different place.
Also, the bytes around that area are for more special locations: like Ever Grande City, Southern Island, and the Battle Frontier.
 
Last edited:

HackMew

Mewtwo Strikes Back
1,314
Posts
17
Years
  • Seen Oct 26, 2011
I have some useful additions to the thread...
The people above me already figured out the Ralts editing, but what about editing the Zigzagoon Wally uses?
Now, that's contained in another special. The offsets that you have to edit are 0x139472 (PKMN) and 0x139482 (level).
Again, you have to 0000 out the lsl command, but otherwise, you're good to go.

I was able to do the same on Ruby a while ago. However, if you just replace the left shift that way, you won't be able to use anything above Celebi (or 0xFF, for that matter). So the "add method" is preferred IMHO.
 
1,323
Posts
16
Years
  • Seen Dec 9, 2023
Usually anything that doesn't go beyond hardware capabilities is doable. I honestly didn't get the "useless" part.
Useless as in they don't work in Emerald. For instance, the Town Map item in Emerald does absolutely nothing because you're not supposed to obtain it in the game.
 

Zeffy

g'day
6,402
Posts
15
Years
  • Age 27
  • Seen Feb 7, 2024
I actually got to starting how to make the Vs. Seeker work for Emerald. I haven't done much, though.

Anyways, this will really help more in hacking Emerald.
 

>Dante<

Call me Steven
201
Posts
15
Years
Your work it's very very interesting and good...but I've some questions about emerald^^"
- first of all...the town map and the portable clock stuff working also for R/S??
- it's true that there are too possibility that emerald crashed then R/S??
- maybe you know that Emerald (as FR), work with dynamic pointers...it's possible to fix it with static pointers?
for example...if you look this thread that I've opened some time ago...
http://www.pokecommunity.com/showthread.php?t=210193
I explained how, with a easy Writebytetooffset, you can do an instant change of camera becouse Ruby use a static offset...
how can I do it in emerald (for example)??
 
1,323
Posts
16
Years
  • Seen Dec 9, 2023
Your work it's very very interesting and good...but I've some questions about emerald^^"
- first of all...the town map and the portable clock stuff working also for R/S??
- it's true that there are too possibility that emerald crashed then R/S??
- maybe you know that Emerald (as FR), work with dynamic pointers...it's possible to fix it with static pointers?
for example...if you look this thread that I've opened some time ago...
http://www.pokecommunity.com/showthread.php?t=210193
I explained how, with a easy Writebytetooffset, you can do an instant change of camera becouse Ruby use a static offset...
how can I do it in emerald (for example)??

About the Town Map and portable clock, it should definitely be possible on Ruby, since all I did for Emerald was just input the offset of the corresponding special's routine in Item Manager. It's just that no one appears to know the offset of the special table in Ruby...

But I guess you could find out by searching, "?? ?? ?? 08 ?? ?? ?? 08 ?? ?? ?? 08 ?? ?? ?? 08..." in a hex editor.
 
Back
Top