Jump to content

[Tutorial] Gen 3 EmuRNG - Tutorials for basic methods

Recommended Posts

Status : Incomplete / In progress 

Edit 1 : Method 1 is complete (maybe in the future I will make small edits, like adding tips or a couple of additional examples)

Edit 2 : Method H is complete (as stated above, future alterations are possible)

Hello ! In this thread, I will try to show you how to RNG abuse in 3rd Gen (R/S/E/FR/LG) using an emulator. RNGing in emulators has many benefits, like save states, speed boosts, memory viewing and the ability to use lua scripts (which will be used very extensively in this tutorial).  The guide will focus on 3 basic methods : 

Method 1 (for static, starter and gift pokemon), Method H (for wild pokemon encountered in tall grass, caves, while surfing/ fishing etc.) and the method to breed pokemon in Emerald. 

Regardless of the method you want to choose, there are certain tools you need to have :   


      -     A VBA emulator that can run lua scripts and has memory viewer (I use vba-rerecording-svn480 in this tutorial)

      -     RNG Reporter (any version is fine)

      -     A rom of the game you want to try RNGing on and a proper save file

      -     A save editor file (like A-Save or PKHeX), in order to get the .pkm file and to find SID if you want to abuse shinies

      -    Lua scripts (there are many on this site and additionally try finding “pokemonstats”, which covers every game and language and has many useful features)


      -   A calculator program on your PC

             -     A notepad file to keep track of frames etc.

      Other things to note :



      - Emulators have certain key combos that are really useful when RNGing, like Ctrl + P (Pauses game), Ctrl + N (When the game is paused, this advances frame one by one. Use it to reach the exact frame you go for) ,  Ctrl + [|\] (ß key between backspace and enter) + direction key  (While paused, the player can move and the first step takes place on the frame you have paused. This is used mainly in RNG Breeding)

      - Pokemon Ruby, Sapphire and Emerald must be played with a dry battery (Options > Emulation > Uncheck "Real time clock"). This always makes the initial seed of R/S "5A0" and "0" in Emerald.

      - Initial seed : This information is essential to put into your RNG, if you want correct results. As mentioned above, for R/S it is always "5A0' and for Emerald is "0" (just leave it blank in RNG Reporter). Unfortunately, this is not the case for FR/LG. Every time the game resets, a new one is created after you press "A" at the Charizard/ Venusaur screen. In order to locate it, you have to go to (Tools > Debug > Memory Viewer). On the new window that appears, type on the empty box “02020000” and press “Go”. The initial seed is found on the 4 first bytes of that line.



      1) Method 1



   This is the easiest form of RNG Abuse.  It applies to static pokemon (pokemon you encounter when you interact with their overworld sprite), like legendaries. Also, this method applies to gift, game corner and starter pokemon, as well as to roaming pokemon (Lati@s in RSE and Crown Trio in FR/LG). 

  Short note : If you look for (near) perfect IVs, you are probably out of luck (if you are impatient). (Near) perfect IVs occur at insanely high frames so you have to wait a lot to reach them. This method is aimed mainly towards people who want to obtain shiny pokemon, or pokemon with specific natures (and maybe decent stats).

  The key to success is to find the exact moment the PID we want is generated, and make this creation happen at the frame we want. It is easier than it sounds.

 But first, let's take a glimpse at the RNG Reporter program and its basic functions :





Light Green : Method tab. In our case, it is always Method 1.

Blue : This determines how many (and what) frames the program will show you

Red : Here you paste your Initial Seed (see above how to find it in "other things to note")

Yellow : TID/ SID info. It is used only if you want shiny Pokemon. If that’s the case, don’t forget to check the “Shiny only box”

Purple : You can fill in additional info if you look for specific nature, IVs, ability or gender for your Pokemon. If you don’t bother about this stuff, just leave everything as is.



After you fill the required info, press “Generate”. A list of frames and PIDs will be generated, based on your search criteria (yellow and purple box). Just pick a PID you like and then you are ready to go. 

   Also, let's take a glimpse at the game screen, while we run a lua script   (tools > lua scripting > new lua script window )  



Red : frame counter

Orange : IVs

Blue : PID, Nature 


 - The first thing to do is to open up the emulator, load the game and save at an appropriate location (in front of the static pokemon we want to abuse for example). 

 Just in case, I would reset and save again, to be sure that the memory viewer will display the correct values (for initial seed for FR / LG)

 - Reset, skip the intro and once you enter the game, pause. This is the moment to run the lua script and search for the initial seed (if on FR / LG). 

 In order for the lua script to show up appropriately on your screen, un-pause and re-pause the game. 

 - Now open the RNG Reporter and search for your desired frame.

  VERY IMPORTANT NOTE : Make save states !!! At least make one approx. 1000 - 2000 frames earlier than your desired frame. In case of any mistake, you will be able to recover everything without a single loss. Also, you need it for the calibration process (see below).

 - Now, try to reach that frame in - game. To do so, pause the game approx. 100-200 frames before your target, and then try to reach it manually with Ctrl + N combo.

  IMPORTANT NOTE : You must be sure that when you press "A", the game will proceed to create the PID . In the case of static pokemon, "talking" to it and triggering the encounter is all you have to do (for Navel Rock Ho-oh things are a bit different, since the encounter is triggered when you take a specific step). But in all other cases, you have to find that specific time you press "A" yourselves (or ask me, hehehehe). 

 Here are instructions on how to find that specific moment :


   Every gift, starter and roamer is generated when you press "A" at a certain point to advance the dialog (since in every case there is a dialog before you obtain the pokemon or release it in the wild).

  It is highly recommended that you use the "pokemonstats" lua script, since it displays stats for both your party pokemon (player 1) and the wild pokemon (enemy). 

 With the script running, just open the dialog that results to the PID creation (select the starter pokeball for example if you go for the starter in any game), press carefully "A" every time to advance the dialog and simultaneously, keep an eye at the lua script to see when exactly the PID is created.

 If it is a gift or a starter, check for info under (Player 1). Be careful to select the correct Party slot that the gift pokemon will go to after you recieve it. When the PID is created, the info will change from "Empty" to the gift pokemon's info.

 As for roamers, you can use every lua script you want, since this counts as a "Wild" pokemon PID creation. When you trigger the creation, you will see a sudden change in the wild (enemy) pokemon info.

  To be able to have easy access to that specific point, just reach it and make a save state. So, when you load this state, you will have to just press "A" to get your Pokemon.

 - Press "A" followed by the Ctrl + P combo, to un-pause and simultaneously trigger the PID creation at that specific frame.

 - No matter what you opted to get, it is certain that you didn't get what you wished for. Don't panic, it's normal ! You just need to hit "A" at a specific frame, higher or lower than the frame we hit before. To get that specific frame, you have to enter the calibration process.

 Calibration Process

 - First of all, take note of the IVs or the PID of the Pokemon generated when you hit "A" and then input them at the RNG Reporter, so that we can find on what frame we actually landed (the PID generation process does not start actually right away from the moment you hit "A", thus the different PID. However, there are cases when the PID is generated at a previous frame (I don't know why, it just happens...). Let's name the frame when you hit "A" target frame (t-frame) and the frame that the RNG Reporter shows after we input the IVs and search, actual frame (a-frame).

  If t-frame < a-frame, then for new frame : (n-frame) = (t-frame) - [(a-frame) - (t-frame)] 

In other words, we substract the difference between these frames from the target frame. This way, we hit it earlier, so that the PID creation will land exactly on the target frame.

 If t-frame < a-frame, then for new frame : (n-frame) = (t-frame) + [(t-frame) - (a-frame)]

This time, we have to add the difference to the target frame, so that we hit it later. 

  - After the calibration process, you just have to try and hit the new frame. In most of the cases, you are done.

But there is a slim possibility (especially in FR / LG) that you may need to calibrate again (usually the new frame is off +- 3 or so frames). Of course, you will have to hit the newer frame, but this time success is almost 100 % guaranteed.


 1) Shiny Deoxys capture in Emerald (U)


 1) I have saved in front of the triangle. Once I press "A", the encounter is triggered (and thus the PID creation).


Ignore the frame counter, the photo is just for reference to the exact position I have saved.

2) My target frame will be 6460.


3) I arrive at frame 6460.


4) However, the result is not what I opted for. Take note of the red box with the IVs. These will be input to the RNG Reporter in order to get the actual frame.


5) RNG Reporter says that my actual frame is 6697.


6) difference : 6697 - 6460 = 237. So new frame = 6460 - 237 = 6223


7) I press "A" and then... Success !



  2) Shiny Articuno - Pokemon Leaf Green (J)


1) I have saved in front of Articuno. First, let's find the Initial Seed :


2) I will go for target frame 13907 


3) I arrive at 13907


4) Of course I didn't get the correct PID


5) After i input the IVs in RNG Reporter, I get actual frame 13278 (An example of a PID created at a lower frame than target frame !)


6) difference = 13907 - 13278 = 629. So new frame = 13907 + 629 = 14536. I eventually arrive at it.


7) But again, no luck... 


8) I input the IVs again and I get new actual frame 13910 .


9)new difference= 13910 - 13907 = 3. So newer frame = 14536 - 3 = 14533. I arrive at it and press "A".


10) AAAAND Success !!!



  3) Lati@s - Roaming - Pokemon Emerald (U)


1) This time, after you enter the game, quickly arrive at this spot and make a save state : (again photo is for reference, do not pay attention to frame counter)

When you press "A", the PID will be created.


2) My target frame is 16733


3) I arrive at 16733


4) Unsuccessful attempt - take note of the IVs for calibration process


5) From RNG Reporter, I get actual frame 16476


6) difference = 16733 - 16476 = 257. New frame = 16733 + 257 = 16990. I arrive at it. Meanwhile, I decided that I wanted Latios, hence the "blue" choice. In this particular example, pokemon species does not affect the (calibration) process at all. At any other case, be careful, as the difference between actual and target frame depends also on the cry (the length to be exact) of each pokemon


7) Success ! IVs, nature and PID match those of my target PID, so at this moment, I have just released a Shiny Latios in the wild. The PID will never change, so when I encounter it, it will still be shiny.


4) Raikou (roamer) - Pokemon Leaf Green (J)



 The correct point of the game to press "A", is when the dialogue with Celio is about to end, after you hand him the sapphire.

Side note : In this particular case of the beasts, if the beast is shiny, it wil always have total IVs = 3 (usually 4 IVs will be 0s). Nevertheless, in the RNG process, we follow the usual process. The script will not display the actual IVs it will have, but it will show you the IVs it would have, if you landed on the correct frame.


1) In my example, first I find the initial seed.


2) I will go for target frame 10813.


3) I arrive at that frame. Take note of the "Enemy" indication on the script. This means that the PID we want will be that of a wild pokemon.


4) As expected, I missed my target, so calibration is needed. Take note of the IVs as usual.


5) This is the actual frame I hit, 10178. 


6) difference = 10813-10178 = 635. So new frame = 10813 + 635 = 11448. I eventually I arrive at that frame. I press A, and...


7) Success ! The PID will remain the same, so when you encounter that Pokemon, it will be shiny. 



5) Treeko (starter) - Pokemon Emerld (U)


 This is another case that needs a bit explaining. You must not use a script that displays info on wild encounters, for 2 reasons :

Fistly, the starter will end up on your Party and the game does not consider it a wild encounter.

Secondly, should you display wild encounter info, you will RNG the zigzagoon that attacks Prof. Birch ! (Yes, I ended up at first fighting a wild Zigzagoon...)

Again, I recommend using pokemonstats, configured to show player 1 info, at party slot 1.

1) The starter PID is generated, right after you press "A" to select "Yes" for your choice. (Photo is just for reference, ignore frame counter)


2) My target frame will be 3120.


3) I reach that frame.


4) A miss. Take note of the IVs for calibration.


5) My actual frame is 2866.


6) difference  3120 - 2866 = 254, so new frame is 3120 + 254 = 3374. I reach it, press "A", and...


7) Success ! 


6) Chamander (starter) - Pokemon Fire Red (U)


 Kanto starters' PID is not generated after you select them (after pressing "A" at "YES" option), rather it is created at the end of this dialogue .

(Again, ignore frame).

Side note : Again, you need a script that displays your party's info (Player 1), as this doesn't count as a wild encounter.


1) As usual with FR / LG, first thing to do is find the initial frame.


2) My target frame is 4416.


3) I reach it and press "A".


4) A miss (as the script displays). I take note of the IVs as usual.


5) The actual frame is 3798.


6)difference = 4416 - 3798 = 618, so new frame = 4416 + 618 = 5034. I reach it, press "A", and...


7) Success ! I know I got what I wanted, since the script displays the correct stats.


...and a summary confirmation 






        2) Wild Pokemon (Method H)    



I assume that you have previously read Method 1 RNG, so in this guide I will not refer to things or processes that are mentioned in Method 1 guide. 

It is possible to RNG abuse wild pokemon (encounters while in tall grass,safari zone, caves, water (surfing), fishing, even while using rock smash). 

Note : Rock smash encounters happen randomly, so it is nearly impossible to RNG abuse in that case (pokemon you encounter that way include geodude (found in wild in FR/LG), nosepass (RSE only), shuckle(E only), graveler (found also in wild in FR/LG), slugma (found in wild in RSE), magcargo (found in wild in RSE). 

So rock smash will be avoided, unless you want so badly an RNGed nosepass, or shuckle.

The Method (or methods to be exact) we use in RNG Reporter are H-1, H-2 and H-4.

In most cases, Method H-2 is used, but often the game may use another from these to generate the wild pokemon PID.

  Why bother ?

- This is the only way to obtain shiny Ditto and shiny Unown (even though Unown is a pain to RNG, since its PID is created in a different way than for any other pokemon)

- You can obtain parents that will lead to an offspring with perfect IVs

 Extra tools needed

- A list of the encounter slots for your target game : https://sites.google.com/site/pokemonslots/gen-iii

 Pokemon and in - game tools needed

- A pokemon in your party that knows Sweet Scent (needed at almost every case apart from fishing and rock smashing)

- Fishing rods, if you want to RNG pokemon obtained while fishing

- A pokemon that knows Rock Smash, if you want to RNG abuse pokemon from smashing rocks


- A pokemon with the Synchronize ability at the first slot of your party

 Features in RNG Reporter :



 Red : The method we use, in this case Methods H-1, H-2 or H-4

 Green :  Encounter type : Could be Wild pokemon, Water (surfing), Water (old rod), Water (super rod), Water (good rod), stationary pokemon (not used)

For Rock Smash encounters, select Water (surfing). This also applies when while surfing, you use Sweet Scent to force an encounter.

Obviously, this is selected based on how and where you encounter the pokemon you want. 

This tab exists for the correct selection of encounter slots of the results output at the RNG Reporter

 Yellow : The nature of the Synchronize pokemon (if any). It may make it possible to generate more encounter slots with the PID you want



 Blue : The encounter slots . Each number corresponds to a specific Pokemon in a specific route with a specific level . You can check them each time at pokemonslots' encounter tables. While many slots (in the same route) may correspond to the same Pokemon species, each slot is different, because the levels are different. You will never find two slot numbers that refer to the same situation (Pokemon & Level).

 Also, take note of the "Encounter Slot" search criteria between ability & gender. Very useful for the calibration process.

   A look at an encounter table :




Pay attention to the bottom. As you see, there are different encounter slots for grass (land), surfing,.. These correspond to the "Encounter Type" selection in the RNG Reporter.




  The philosophy is the same as Method 1. Basically, you just find a frame you like and try to hit it. Calibration is inevitably a part of the process and can be trickier than Method 1, because it sometimes gives 2 actual frames...

Steps :

- Find initial seed (if on FR/LG) and configure the RNG Reporter to your liking. Start with Method H-2. Pay attention to the encounter slots, as you may go for an unwanted pokemon !

- Get your target frame

- As usual, you will have to first try and reach the target frame, just before you press "A".

1) If you DON'T fish, that means you have to use a pokemon with sweet scent. Here is where you have to reach your target frame :



After you press "A", the gaame will eventually create the PID.

2) If you fish, here is where you have to reach your target frame :



3) If you want to trigger a "rock smash" encounter, neither option is for you

- As usual, get ready for calibration. This time, you will have to pay attention to the pokemon species as well as level that appeared to you and to its possible encounter slots, as well. Also, it would be good to input the nature, to help with calibrating. 

Before calibrating, find first your situation's encounter slot number (find it at the tables) and input is at search criteria as well on the RNG Reporter (pokemon species & level determine exact slot number). 

- While in calibration, there are 3 possibilities :

1) You get one actual frame.

    Just find the new frame and try hitting it. Probably you will get your target PID.

2) You get 2 or more actual frames with the same encounter slot numbers (while inputing the nature the IVs and the encounter slot as search criteria).

     Time to narrow down the results.

     Check the encounter slots . It is common that at least one of them is not one of the possible ones the pokemon that landed to you has.

     If you end up with a single actual frame, calculate your new frame according to it. Probably you wil get your target PID.

     If you end up with multiple actual frames, you will have to test all of them unfortunately. (TIP :Work first with the larger frame, since it is more possible to be the correct one).

     TIP : If the new frame is still off and after calibrating gives you other multiple actual frames, it is the wrong one, almost 100 % of the time.

3) You get no results. If you are sure you did everything right, don't panic.

   This means that the pokemon that landed on you, is generated from another method !

   So, just change Method to H-1 or H-4 and one of those two will generate a result.

 - Hit the new frame. Probably, you will be done. Otherwise, repeat calibration.



   Shiny Ditto - Emerald (U) 


 1) My target frame is 16661. Encounter slot is "2", which is a Ditto in desert underpass.



 2) I reach that frame.


 3) I get a Whismur. I take note of the IVs (take note of nature as well, even though I did not).


 4) Actual seed time. I get luckily one result. I cross - check the encounter slot and nature and they match. So, I am on the right way.



 5) differnce = 16682 - 16661 = 21. So new seed = 16661 - 21 = 16640. I reach it, press "A", and...


 6) Success !!!


   Shiny Growlithe - Fire Red (U)


  My target will be a shiny Growlithe.

  1) My initial seed is A8AC.


  2) My target frame is 31531, encounter slot 4.



  3) I reach it.


  4) A Rattata (28lvl), lands, encounter slot 5.



  5) Calibration time... With method H-2, I get no fitting match ! Wrong nature, wrong encounter slot. So, this Rattata apparently is created with a different method.


  6) As it seems, the game chose to create Rattata's PID with Method H-1. Another thing to note, is that I get 2 fitting results. There is no way to choose which is correct, so I will pick first the one with the higher frame number, assuming it is the actual frame. Should this lead to further confusion, probably I picked the wrong one... We 'll see...


  7) The bigger from those two is frame 31181, so I assume that this is the actual frame.

 difference = 31531 - 31181 = 350 frames. So new frame is 31531 + 350 = 31881. I reach it, press "A" and..


  8) Success !!! I got my shiny Growlithe !







          3) Pokemon Breeding RNG (Emerald focus only)



To be updated



       I hope this guide will help you !

     Pokemonstats lua script : http://forums.pokemonspeedruns.com/viewtopic.php?t=314

     There are instructions to use it on this site, apart from the dl link.


      You can also check these guides at reddit :

      EmuRNG Emerald stationary abuse :   https://www.reddit.com/r/pokemonrng/comments/1nz3x7/guide_emerald_emurng_stationary_abuse_repost/

      Emerald EmuRNG Breeding Abuse : https://www.reddit.com/r/pokemonrng/comments/2c5ipb/guide_emerald_emurng_breeding_abuse/





Edited by Blackwing
  • Like 3
Link to post
Share on other sites
  • 2 months later...

Well, I have RNGed a shiny Unown in the past (it is in the Emerald save I have uploaded with all the shinies). It uses Method H. Additionally, the process involves a special python script along with the use of the RNG reporter, because Unown 's PID is generated in a unique way (instead of ABCDEFG it is DEFGABCD or something like that). I really hated this process, as it is really tedious and needs many tries before you get the hang of it. 

 Someday, I may include this in the guide, but I'm not sure yet... Also, in the next few days I will try to write the breeding guide.

  • Like 2
Link to post
Share on other sites
  • 1 year later...

First off, thank you so much for this guide, it's been very helpful. Anyway, I had been struggling to RNG a fossil (not a shiny, but a female one with a really good IV spread) in Sapphire. The difficulty with RNGing in this particular scenario is that the PID isn't generated immediately upon pressing "A" at a certain point, it's a certain amount of frames after pressing "A" at that point. This is due to the pokemon being given to the player automatically at a certain point in the dialogue ("The fossil was an ancient Pokemon. Lileep/Anorith," or so). After some trial and error (or more likely dumb luck) I determined that it takes exactly 150 frames for the PID to be generated after "A" is pressed to trigger the automatic portion of the dialogue. As result, to RNG a fossil, you need to reach a frame exactly 150 frames earlier than your target frame.

Let me use my RNGing as an example. (I have no pictures though):

  1. Using RNGReporter, I settled on a target frame of 17212.
  2. Due to the frame gap, the frame I actually needed to reach was 17212 - 150 = 17062.
  3. Upon reaching that frame and pressing "A," my result was, as expected, a miss.
  4. RNGReporter determined that my actual frame was 17225
  5. 17225 - 17212 = 13, so the frame I actually needed to reach (again, accounting for the gap) was 17212 - 150 - 13 (or simply 17062 -13) = 17049
  6. I reached that frame, pressed "A," and Success!

I am so happy to have figured this out, so I thought I'd post it here in case anybody else had the same trouble. Also, in case it wasn't clear, the steps I described only works in Ruby and Sapphire (as far as I know, anyway). And in case anybody out there is wondering, I was RNGing for a female Lileep with IVs as follows: HP 30, ATK 30, DEF 29, SP. ATK 31, SP. DEF 27, and SPD 30. 

Again, thanks for the guide, and I hope this helps somebody out there who's had this problem. And to finish on a completely unrelated note, this is my first ever post here, so hello, world!

EDIT 10/8/18: I just discovered Castform's RNG follows the exact same method as the fossils in R/S; it makes me wish these scientists would just shut up and give me the 'mon(s).

EDIT #2: Kecleon follows this method too, apparently. #IGiveUp

EDIT #3: Wow, I keep finding these things, don't I? Anyway, I've discovered that in Ruby/Sapphire (or at least in Sapphire) the mascot legendary has a frame gap of 750 frames (meaning you need to reach a frame 750 frames earlier than the target frame). Also, the game should be paused at the dialogue of the orb glowing.

P.S. I know there was supposed to be a guide for Breeding RNG in Emerald, and while I understand if it never came to fruition, I do hope to see it someday.



Edited by VioletHelianthus
  • Like 1
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...