1. Welcome to Smogon Forums! Please take a minute to read the rules.
  2. New to the forums? Check out our Mentorship Program!
    Our mentors will answer your questions and help you become a part of the community!

[on site] The Process of PID and IV Creation of Non-Bred Pokemon

Discussion in 'Archives' started by X-Act, Aug 26, 2008.

  1. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a CAP Contributor Alumnusis a Researcher Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    Check out http://www.smogon.com/dp/articles/pid_iv_creation for the version on the website. The applet for PID generation using the IVs is available here. Part 2 is in http://www.smogon.com/forums/showthread.php?t=45230.



    The Process of PID and IV Creation of Non-Bred Pokemon


    0. Credits

    Before I even start, I need to give credit to loadingNOW (a.k.a. pika) and yamipoli for providing me with invaluable information regarding this topic.


    1. Preliminaries

    We start by providing preliminary information, without which the reader will have a very hard time understanding this article.

    1.1 The Binary System

    In a computer, numbers are not stored normally, but in a format called binary. The numbers we normally use are said to be in the decimal system. Every number in the decimal system is written as a series of digits, each of which can be one of the following ten: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. In the binary system, the same thing is true, but there are only two possible digits: 0 and 1. Each of these binary digits is called a bit (short for binary digit). For example, the binary number 10001110 has 8 bits.

    The Game Boy Advance and Nintendo DS systems, on which the Pokemon games Ruby, Sapphire, Emerald, Fire Red, Leaf Green, Diamond and Pearl run, are, in effect, small computers, and thus also utilise binary numbers. The Pokemon games, however, have an extra simplification: they always use non-negative whole numbers only. This makes our discussion of binary numbers easier.

    How do we interpret a binary number? To do this, let’s think for a moment about how we interpret decimal numbers. What does the number 635, say, mean? It means a number that has 5 units, 3 tens (= 1 × 10) and 6 hundreds (= 10 × 10) added together. Notice that the value of a digit in the decimal system is ten times as big as that of the digit immediately to the right of it. So the number 635 really means 600 + 30 + 5.

    The same thing happens in binary, except that the value of a digit in the binary system is twice as big as that of the bit immediately to the right of it, not ten times as big.

    Let’s provide an example. Say we need to interpret the binary number 10001110 as a number in the decimal (i.e. normal) system. We have 0 units, 1 twos (= 1 × 2), 1 fours (= 2 × 2), 1 eights (= 4 × 2), 0 sixteens (= 8 × 2), 0 thirty-twos (= 16 × 2), 0 sixty-fours (= 32 × 2) and 1 one-hundred-and-twenty-eights (= 64 × 2). Thus, the binary number 10001110 is equal to 2 + 4 + 8 + 128 = 142.

    Another example: let’s interpret the 12-bit binary number 101110010101 as a number in decimal. It is equal to 1 units, 0 twos, 1 fours, 0 eights, 1 sixteens, 0 thirty-twos, 0 sixty-fours, 1 one-hundred-and-twenty-eights, 1 two-hundred-and-fifty-sixes (= 128 × 2), 1 five-hundred-and-twelves (= 256 × 2), 0 one-thousand-and-twenty-fours (= 512 × 2) and 1 two-thousand-and-forty-eights (= 1024 × 2). Hence it is equal to 1 + 4 + 16 + 128 + 256 + 512 + 2048 = 2965.

    1.2 The Hexadecimal System

    Binary numbers tend to have quite a large number of digits. A way to write binary numbers in a shorter way is the hexadecimal system.

    In the hexadecimal system, a binary number is first grouped into groups of four bits each. If the number of bits in the binary number is not divisible by 4, extra 0 bits are added at the start of the binary number so that the number of digits is divisible by 4. Then each group of four bits is replaced by a symbol as follows:

    Code:
    0000 is replaced by 0
    0001 is replaced by 1
    0010 is replaced by 2
    0011 is replaced by 3
    0100 is replaced by 4
    0101 is replaced by 5
    0110 is replaced by 6
    0111 is replaced by 7
    1000 is replaced by 8
    1001 is replaced by 9
    1010 is replaced by A
    1011 is replaced by B
    1100 is replaced by C
    1101 is replaced by D
    1110 is replaced by E
    1111 is replaced by F
    For example, the binary number 10001110 is written in hexadecimal as 8E. The first 4 bits are 1000, written as 8 in hexadecimal, while the last 4 bits are 1110, written as E. The binary number 101110010101 is written as B95 in hexadecimal (1011 = B, 1001 = 9, 0101 = 5). The binary number 1110000001 has 10 bits. We first add two zeros at the beginning so that it has 12 bits: 001110000001. Then we convert it to hexadecimal as 381 (0011 = 3, 1000 = 8, 0001 = 1).

    Of course, we can also convert hexadecimal numbers to binary numbers easily by doing the reverse process. For example, the hexadecimal number 5AF7 is equal to 0101101011110111 in binary (5 = 0101, A = 1010, F = 1111, 7 = 0111).

    From now on, a hexadecimal number will be written surrounded by square brackets [] so as not to possibly confuse it with a decimal number. This is because the hexadecimal number [4680] is a different number from the decimal number 4680.

    1.3 What is a PID?

    Whenever a Pokemon is created in the games, the first thing that is generated is a 32-bit number called a PID (Pokemon IDentification number). This number is sometimes also called the Personality Value of a Pokemon, and is not visible anywhere in the game. It can only be found by looking into the Pokemon save file... or by an applet that will be revealed soon. A lot of information about the Pokemon can be found using just the PID alone. In particular, the nature of a Pokemon is found just from its PID. Where applicable, the gender, ability and Unown letter shape are also found just from the PID of the Pokemon in question.

    1.4 The Pokemon Random Number Generator

    Whenever a random event occurs in the Pokemon games, and indeed in the majority of games, the randomness of the event is not truly random, but is governed by a mathematical formula that generates so-called pseudo-random numbers. When we say pseudo-random, we mean that the numbers generated are not truly random numbers, but are sort-of fake random numbers.

    There are various methods that can be used to generate pseudo-random numbers. One of the simplest types of random number generators is the class of linear congruential random number generators. Many computer applications adopt this method of random number generation, as, while it is very simple to implement, it produces good random numbers when given particular values. By "good random numbers" we mean that if the numbers were to be listed next to each other, we wouldn’t have a clue as to what the next pseudo-random number would be in the list unless we apply the formula.

    The random number generator (RNG) used in all the Pokemon games from Ruby and Sapphire onwards works as follows. When the game loads, the program assigns a number to a 32-bit variable which we shall call seed. The way this is done varies from game to game (you can read loadingNOW’s article for more information). Then, whenever the random number generator is invoked, the following steps are executed:

    Code:
    Make seed equal to the last 32 bits of (seed × [41C64E6D] + [6073])
    Output first 16 bits of seed as the next pseudo-random number
    Thus, as you can see, the Pokemon RNG produces pseudo-random 16-bit numbers, i.e. numbers between 0 and 65535 (or between [0000] and [FFFF]).

    For instance, given the seed [1A56B091], what is the random number that the above RNG outputs?

    First we need to multiply [1A56B091] by [41C64E6D]. Using a calculator, the answer of this multiplication is [6C469F301DB5BBD]. We now add [6073] to this, becoming [6C469F301DBBC30]. Remember that a computer adds and multiplies numbers only in binary, so multiplying and adding hexadecimal numbers is very easy for it. Windows’ own calculator application allows multiplication and addition of hexadecimal numbers to be done easily, if you want to do them yourself. We now make the new seed equal to the last 32 bits of this hexadecimal number, or [01DBBC30] (remember that a hexadecimal digit is 4 bits). The random number produced is thus the first 16 bits of this new seed, or [01DB].

    Repeatedly invoking the RNG produces the following list of pseudo-random numbers:

    [01DB], [7B06], [5233], [E470], [5CC4], [36BB], ...

    It can be shown that the seed variable will become the same as it was at the start of the program only after the RNG is invoked 4,294,967,296 times. In all those RNG invocations, the variable seed would have become equal to every number between 0 and 4,294,967,295 (or between [00000000] and [FFFFFFFF]) exactly once. This essentially means that the random number sequence won’t repeat itself until after that amount of invocations.


    2. Pokemon Creation

    2.1 How the PID of a Pokemon is created

    The game creates a PID from two RNG calls. Since each RNG call results in a 16-bit number, appending these two 16-bit numbers together results in a 32-bit number, which becomes the PID of the Pokemon. The second random number becomes the first 16 bits of the PID, and the first random number becomes the second 16 bits.

    For example, suppose the two random numbers generated were [01DB] and [7B06] as above. Then the PID of the Pokemon would be [7B0601DB], or 2063991259 in decimal.

    2.2 How to extract information about the Pokemon from its PID

    As was said before, a lot of things about a Pokemon can be known from just its PID. Here, we shall mention only three of these: nature, gender and ability.

    2.2.1 How to find the nature of a Pokemon from its PID

    First, convert the PID to decimal as described at the start of the article, and consider only this decimal number’s last two digits. If the number having these two digits is greater than 24, subtract 25 from it, and repeat this procedure until it becomes a number between 0 and 24. This number then corresponds to a particular nature according to the following table:

    Code:
    Number   Nature
    -----------------
       0     Hardy
       1     Lonely
       2     Brave
       3     Adamant
       4     Naughty
       5     Bold
       6     Docile
       7     Relaxed
       8     Impish
       9     Lax
      10     Timid
      11     Hasty
      12     Serious
      13     Jolly
      14     Naive
      15     Modest
      16     Mild
      17     Quiet
      18     Bashful
      19     Rash
      20     Calm
      21     Gentle
      22     Sassy
      23     Careful
      24     Quirky
    2.2.2 How to find the gender of a Pokemon from its PID

    This only applies to Pokemon that can be either male or female. If a Pokemon is always genderless (for example Staryu), always male (for example Tauros) or always female (for example Chansey), the Pokemon will, of course, always assume that gender.

    For the other Pokemon, first take the last two digits of the PID in hexadecimal form and convert that number to decimal. This number should be between 0 and 255.

    As is commonly known, some Pokemon are more probable to be of one gender than another (for example Bulbasaur). There are four gender categories in all, other than the genderless, always male and always female categories:
    1. Pokemon that have a 12.5% chance of being female In this case, the Pokemon will be female if the number found above is between 0 and 30 inclusive, otherwise it will be male.
    2. Pokemon that have a 25% chance of being female In this case, the Pokemon will be female if the number found above is between 0 and 63 inclusive, otherwise it will be male.
    3. Pokemon that have a 50% chance of being female In this case, the Pokemon will be female if the number found above is between 0 and 126 inclusive, otherwise it will be male.
    4. Pokemon that have a 75% chance of being female In this case, the Pokemon will be female if the number found above is between 0 and 190 inclusive, otherwise it will be male.
    2.2.3 How to find the ability of a Pokemon from its PID

    This only applies to Pokemon that can have one of two possible abilities. If a Pokemon can have only one ability, then it will have that ability, of course.

    For the other Pokemon that can have one of two abilities, first convert the PID to binary, and look at the last bit. If it is 0, the Pokemon will have its first possible ability, while if it is 1, it will have the second possible ability.

    The following table lists all Pokemon having two possible abilities, showing which ability corresponds to 0 and which corresponds to 1 in Diamond and Pearl (thanks yamipoli for providing this chart):

    Code:
    Pokemon     Ability 0     Ability 1
    --------------------------------------
    Pidgey      Keen Eye      Tangled Feet
    Pidgeotto   Keen Eye      Tangled Feet
    Pidgeot     Keen Eye      Tangled Feet
    Rattata     Run Away      Guts
    Raticate    Run Away      Guts
    Ekans       Intimidate    Shed Skin
    Arbok       Intimidate    Shed Skin
    Nidoran-F   Poison Point  Rivalry
    Nidorina    Poison Point  Rivalry
    Nidoqueen   Poison Point  Rivalry
    Nidoran-M   Poison Point  Rivalry
    Nidorino    Poison Point  Rivalry
    Nidoking    Poison Point  Rivalry
    Cleffa      Cute Charm    Magic Guard
    Clefairy    Cute Charm    Magic Guard
    Clefable    Cute Charm    Magic Guard
    Paras       Effect Spore  Dry Skin
    Parasect    Effect Spore  Dry Skin
    Venonat     Compoundeyes  Tinted Lens 
    Venomoth    Shield Dust   Tinted Lens 
    Diglett     Sand Veil     Arena Trap 
    Dugtrio     Sand Veil     Arena Trap 
    Meowth      Pick Up       Technician 
    Persian     Pick Up       Technician 
    Psyduck     Damp          Cloud Nine 
    Golduck     Damp          Cloud Nine 
    Mankey      Vital Spirit  Anger Point 
    Primeape    Vital Spirit  Anger Point 
    Growlithe   Intimidate    Flash Fire 
    Arcanine    Intimidate    Flash Fire 
    Poliwag     Water Absorb  Damp 
    Poliwhirl   Water Absorb  Damp 
    Poliwrath   Water Absorb  Damp 
    Politoed    Water Absorb  Damp 
    Abra        Synchronize   Inner Focus 
    Kadabra     Synchronize   Inner Focus 
    Alakazam    Synchronize   Inner Focus 
    Machop      Guts          No Guard 
    Machoke     Guts          No Guard 
    Machamp     Guts          No Guard 
    Tentacool   Clear Body    Liquid Ooze 
    Tentacruel  Clear Body    Liquid Ooze 
    Geodude     Rock Head     Sturdy 
    Graveler    Rock Head     Sturdy 
    Golem       Rock Head     Sturdy 
    Ponyta      Run Away      Flash Fire 
    Rapidash    Run Away      Flash Fire 
    Slowpoke    Oblivious     Own Tempo 
    Slowbro     Oblivious     Own Tempo 
    Slowking    Oblivious     Own Tempo 
    Magnemite   Magnet Pull   Sturdy 
    Magneton    Magnet Pull   Sturdy 
    Magnezone   Magnet Pull   Sturdy 
    Farfetch’d  Keen Eye      Inner Focus 
    Doduo       Run Away      Early Bird 
    Dodrio      Run Away      Early Bird 
    Seel        Thick Fat     Hydration 
    Dewgong     Thick Fat     Hydration 
    Grimer      Stench        Sticky Hold 
    Muk         Stench        Sticky Hold 
    Shellder    Shell Armor   Skill Link 
    Cloyster    Shell Armor   Skill Link 
    Onix        Rock Head     Sturdy 
    Steelix     Rock Head     Sturdy 
    Drowzee     Insomnia      Forewarn 
    Hypno       Insomnia      Forewarn 
    Krabby      Hyper Cutter  Shell Armor 
    Kingler     Hyper Cutter  Shell Armor 
    Voltorb     Soundproof    Static 
    Electrode   Soundproof    Static 
    Cubone      Rock Head     Lightningrod 
    Marowak     Rock Head     Lightningrod 
    Tyrogue     Guts          Steadfast 
    Hitmonlee   Limber        Reckless 
    Hitmonchan  Keen Eye      Iron Fist 
    Hitmontop   Intimidate    Technician 
    Lickitung   Own Tempo     Oblivious 
    Lickilicky  Own Tempo     Oblivious 
    Rhyhorn     Lightningrod  Rock Head 
    Rhydon      Lightningrod  Rock Head 
    Rhyperior   Lightningrod  Solid Rock 
    Happiny     Natural Cure  Serene Grace 
    Chansey     Natural Cure  Serene Grace 
    Blissey     Natural Cure  Serene Grace 
    Tangela     Chlorophyll   Leaf Guard 
    Tangrowth   Chlorophyll   Leaf Guard 
    Kangaskhan  Early Bird    Scrappy 
    Horsea      Swift Swim    Sniper 
    Seadra      Swift Swim    Sniper 
    Kingdra     Swift Swim    Sniper 
    Goldeen     Swift Swim    Water Veil 
    Seaking     Swift Swim    Water Veil 
    Staryu      Illuminate    Natural Cure 
    Starmie     Illuminate    Natural Cure 
    Mime Jr.    Soundproof    Filter 
    Mr. Mime    Soundproof    Filter 
    Scyther     Swarm         Technician 
    Scizor      Swarm         Technician 
    Smoochum    Oblivious     Forewarn 
    Jynx        Oblivious     Forewarn 
    Pinsir      Hyper Cutter  Mold Breaker 
    Tauros      Intimidate    Anger Point 
    Lapras      Water Absorb  Shell Armor 
    Eevee       Run Away      Adaptability 
    Porygon     Trace         Download
    Porygon2    Trace         Download 
    Porygon-Z   Adaptability  Download 
    Omanyte     Swift Swim    Shell Armor 
    Omastar     Swift Swim    Shell Armor 
    Kabuto      Swift Swim    Battle Armor 
    Kabutops    Swift Swim    Battle Armor 
    Aerodactyl  Rock Head     Pressure 
    Munchlax    Pick Up       Thick Fat 
    Snorlax     Immunity      Thick Fat 
    Sentret     Run Away      Keen Eye 
    Furret      Run Away      Keen Eye 
    Hoothoot    Insomnia      Keen Eye 
    Noctowl     Insomnia      Keen Eye 
    Ledyba      Swarm         Early Bird 
    Ledian      Swarm         Early Bird 
    Spinarak    Swarm         Insomnia 
    Ariados     Swarm         Insomnia 
    Chinchou    Volt Absorb   Illuminate 
    Lanturn     Volt Absorb   Illuminate 
    Togepi      Hustle        Serene Grace 
    Togetic     Hustle        Serene Grace 
    Togekiss    Hustle        Serene Grace 
    Natu        Synchronize   Early Bird 
    Xatu        Synchronize   Early Bird 
    Azurill     Thick Fat     Huge Power 
    Marill      Thick Fat     Huge Power 
    Azumarill   Thick Fat     Huge Power 
    Bonsly      Sturdy        Rock Head 
    Sudowoodo   Sturdy        Rock Head 
    Aipon       Run Away      Pick Up 
    Ambipom     Technician    Pick Up 
    Sunkern     Chlorophyll   Solar Power 
    Sunflora    Chlorophyll   Solar Power 
    Yanma       Speed Boost   Compoundeyes 
    Yanmega     Speed Boost   Tinted Lens 
    Wooper      Damp          Water Absorb 
    Quagsire    Damp          Water Absorb 
    Murkrow     Insomnia      Super Luck 
    Honchkrow   Insomnia      Super Luck 
    Girafarig   Inner Focus   Early Bird 
    Dunsparce   Serene Grace  Run Away 
    Gligar      Hyper Cutter  Sand Veil 
    Gliscor     Hyper Cutter  Sand Veil 
    Snubbull    Intimidate    Run Away 
    Granbull    Intimidate    Quick Feet 
    Qwilfish    Poison Point  Swift Swim 
    Heracross   Swarm         Guts 
    Sneasel     Inner Focus   Keen Eye 
    Teddiursa   Pick Up       Quick Feet 
    Ursaring    Guts          Quick Feet 
    Slugma      Magma Armor   Flame Body 
    Magcargo    Magma Armor   Flame Body 
    Swinub      Oblivious     Snow Cloak 
    Piloswine   Oblivious     Snow Cloak 
    Mamoswine   Oblivious     Snow Cloak 
    Corsola     Hustle        Natural Cure 
    Remoraid    Hustle        Sniper 
    Octillery   Suction Cups  Sniper 
    Delibird    Vital Spirit  Hustle 
    Mantyke     Swift Swim    Water Absorb 
    Mantine     Swift Swim    Water Absorb 
    Skarmory    Keen Eye      Sturdy 
    Houndour    Early Bird    Flash Fire 
    Houndoom    Early Bird    Flash Fire 
    Stantler    Intimidate    Frisk 
    Smeargle    Own Tempo     Technician 
    Miltank     Thick Fat     Scrappy 
    Poochyena   Run Away      Quick Feet 
    Mightyena   Intimidate    Quick Feet 
    Zigzagoon   Pick Up       Gluttony 
    Linoone     Pick Up       Gluttony 
    Lotad       Swift Swim    Rain Dish 
    Lombre      Swift Swim    Rain Dish 
    Ludicolo    Swift Swim    Rain Dish 
    Seedot      Chlorophyll   Early Bird 
    Nuzleaf     Chlorophyll   Early Bird 
    Shiftry     Chlorophyll   Early Bird 
    Ralts       Synchronize   Trace 
    Kirlia      Synchronize   Trace 
    Gardevoir   Synchronize   Trace 
    Shroomish   Effect Spore  Poison Heal 
    Breloom     Effect Spore  Poison Heal 
    Makuhita    Thick Fat     Guts 
    Hariyama    Thick Fat     Guts 
    Nosepass    Sturdy        Magnet Pull 
    Probopass   Sturdy        Magnet Pull 
    Skitty      Cute Charm    Normalize 
    Delcatty    Cute Charm    Normalize 
    Sableye     Keen Eye      Stall 
    Mawile      Hyper Cutter  Intimidate 
    Aron        Sturdy        Rock Head 
    Lairon      Sturdy        Rock Head 
    Aggron      Sturdy        Rock Head 
    Electrike   Static        Lightningrod 
    Manectric   Static        Lightningrod 
    Volbeat     Illuminate    Swarm 
    Illumise    Oblivious     Tinted Lens 
    Budew       Natural Cure  Poison Point 
    Roselia     Natural Cure  Poison Point 
    Roserade    Natural Cure  Poison Point 
    Gulpin      Liquid Ooze   Sticky Hold 
    Swalot      Liquid Ooze   Sticky Hold 
    Wailmer     Water Veil    Oblivious 
    Wailord     Water Veil    Oblivious 
    Numel       Oblivious     Simple 
    Camerupt    Magma Armor   Solid Rock 
    Spoink      Thick Fat     Own Tempo 
    Grumpig     Thick Fat     Own Tempo 
    Spinda      Own Tempo     Tangled Feet 
    Trapinch    Hyper Cutter  Arena Trap 
    Barboach    Oblivious     Anticipation
    Whiscash    Oblivious     Anticipation
    Corphish    Hyper Cutter  Shell Armor 
    Crawdaunt   Hyper Cutter  Shell Armor 
    Shuppet     Insomnia      Frisk 
    Banette     Insomnia      Frisk 
    Tropius     Chlorophyll   Solar Power 
    Absol       Pressure      Super Luck 
    Snorunt     Inner Focus   Ice Body 
    Glalie      Inner Focus   Ice Body 
    Spheal      Thick Fat     Ice Body 
    Sealeo      Thick Fat     Ice Body 
    Walrein     Thick Fat     Ice Body 
    Relicanth   Swift Swim    Rock Head 
    Bidoof      Simple        Unaware 
    Bibarel     Simple        Unaware 
    Shinx       Rivalry       Intimidate 
    Luxio       Rivalry       Intimidate 
    Luxray      Rivalry       Intimidate 
    Pachirisu   Run Away      Pick Up 
    Shellos     Sticky Hold   Storm Drain 
    Gastrodon   Sticky Hold   Storm Drain 
    Drifloon    Aftermath     Unburden 
    Drifblim    Aftermath     Unburden 
    Buneary     Run Away      Klutz 
    Lopunny     Cute Charm    Klutz 
    Glameow     Limber        Own Tempo 
    Purugly     Thick Fat     Own Tempo 
    Stunky      Stench        Aftermath 
    Skuntank    Stench        Aftermath 
    Bronzor     Levitate      Heatproof 
    Bronzong    Levitate      Heatproof 
    Chatot      Keen Eye      Tangled Feet 
    Riolu       Steadfast     Inner Focus 
    Lucario     Steadfast     Inner Focus 
    Skorupi     Battle Armor  Sniper 
    Drapion     Battle Armor  Sniper 
    Croagunk    Anticipation  Dry Skin 
    Toxicroak   Anticipation  Dry Skin 
    Finneon     Swift Swim    Storm Drain 
    Lumineon    Swift Swim    Storm Drain
    2.3 How the IVs of a Pokemon are created

    The six IVs of the Pokemon are also created from just two RNG calls. Since each IV consists of 5 bits (because the binary number 11111 is equal to 31 in decimal), the first random number would contain 3 of these IVs (5 × 3 = 15), with one redundant bit, while the second random number would contain the other 3.

    The IVs would be extracted from the two random numbers as follows:

    Code:
    First Random Number:  x|xxxxx|xxxxx|xxxxx
                          -|DefIV|AtkIV|HP IV
     
    Second Random Number: x|xxxxx|xxxxx|xxxxx
                          -|SpDIV|SpAIV|SpeIV
    For example, given the subsequent two random numbers [5233] and [E470] as above, we would have:

    First Random Number = [5233] = 0|10100|10001|10011. Hence, the Defense IV would be 10100 = 20, the Attack IV would be 10001 = 17 and the HP IV would be 10011 = 19.

    Second Random Number = [E470] = 1|11001|00011|10000. Hence, the Special Defense IV would be 11001 = 25, the Special Attack IV would be 00011 = 3 and the Speed IV would be 10000 = 16.

    Thus, our Pokemon would have the IVs 19/17/20/3/25/16, written in the usual format of HP IV/Atk IV/Def IV/SpA IV/SpD IV/Spe IV.

    2.4 How the RNG is called in the games to generate a Pokemon

    There are basically three different ways of how the RNG is invoked to produce a Pokemon, depending on the game and the Pokemon:
    • Method 1: Four RNG calls are made, two to generate the PID and two to generate the IVs. It can be illustrated as [PID] [PID] [IVs] [IVs].
    • Method 2: Five RNG calls are made. The first two are used to generate the PID and the last two are used to generate the IVs. The third RNG call is not used for anything. It can be illustrated as [PID] [PID] [xxxx] [IVs] [IVs].
    • Method 3: Five RNG calls are made. The first and third are used to generate the PID and the last two are used to generate the IVs. The second RNG call is not used for anything. It can be illustrated as [PID] [xxxx] [PID] [IVs] [IVs].
    Methods 2 and 3 are only used in Pokemon Ruby, Sapphire, Emerald, Fire Red and Leaf Green (RSEFRLG) to produce wild Pokemon. All the Pokemon you catch in these games that are not wild Pokemon are created using Method 1. Examples of non-wild Pokemon that you can catch or be given in the game are:
    • Legendary Pokemon
    • Starter Pokemon
    • Eevee in Fire Red and Leaf Green
    • Castform and Beldum in Ruby, Sapphire and Emerald
    Method 1 is also used for some RSEFRLG wild Pokemon and for all Diamond and Pearl Pokemon, whether they are wild or not.

    The criterion for choosing whether to use Method 1, 2 or 3 in the creation of wild Pokemon in Ruby, Sapphire, Fire Red and Leaf Green seems to be arbitrary, although it might be related to the terrain where they are situated.

    To summarise, here are the methods used for each game depending on the Pokemon being caught or given:

    Code:
     Game    Wild Pokemon Methods    Non-wild Pokemon Methods
    ---------------------------------------------------------
    RSFRLGE        1, 2 or 3                    1
      DP              1                         1

    3. A Complete Example

    Suppose you meet a wild Tentacool in Emerald. Let’s assume that Method 2 is chosen for Tentacool to be generated. Also we assume that the current RNG seed is [560B9CE3].

    The game calls the RNG and gets the number [2751]. The game calls the RNG again and gets the number [7E48]. Thus, the PID of this Tentacool is [7E482751].

    This hexadecimal number is the 32-bit binary number

    01111110010010000010011101010001

    which is equal to 2118657873 in decimal. The last two digits of this decimal number are 73. Since this number is greater than 24, we subtract 25 from it. 73 minus 25 is equal to 48. 48 is still greater than 24, so we again subtract 25 from it, becoming 23. Hence this Tentacool would have a Careful nature, since that is the nature that the number 23 corresponds to.

    The last two digits of the PID in hexadecimal are 51, which is equal to 01010001 in binary, or 81 in decimal. Tentacool has a 50% chance of being female. Since the number 81 is between 0 and 126, this Tentacool would be female.

    The last digit of the binary representation of the PID is 1. Thus, this Tentacool would have the second possible ability, i.e. Liquid Ooze.

    The game now calls the RNG for a third time, getting the number [CAB4]. This number is discarded since we’re using Method 2 to generate the Pokemon. A fourth call to the RNG yields the number [629C]. This number is equal to

    0|11000|10100|11100

    in binary. The Defense IV would then be the binary number 11000, which is 24 in decimal, the Attack IV would be 10100, which is 20 in decimal, and the HP IV would be 11100, which is 28 in decimal.

    A final invocation to the RNG gives us the number [5EE9]. This number is equal to

    0|10111|10111|01001

    in binary. The Special Defense IV would thus be the binary number 10111, which is 23 in decimal, the Special Attack IV would be 10111, which is 23 in decimal and the Speed IV would be 01001, which is 9 in decimal.

    To recapitulate, you would have encountered a female Tentacool having a Careful nature, the Liquid Ooze ability and 28/20/24/23/23/9 IVs.
  2. Tortured_Soul

    Tortured_Soul

    Joined:
    Jul 7, 2008
    Messages:
    763
    Excellent X-Act, very well done. I cannot say that I know much on PID, as I haven't really taken much notice of it in the past, but from what I see this is very well constructed. Can't wait for the Applet that you say is coming, looking forward to it!
  3. yamipoli

    yamipoli the only person more obsessive than jumpman
    is an Artist Alumnus

    Joined:
    Nov 2, 2006
    Messages:
    373
    Excellent and well written as usual. However I also noticed something odd and you should probably add that method 1 is used for "some" ruby/sapphire/emerald/firered/leaf green wilds as well, I've got an alakazam and a tentacool that both validate as method 1.
  4. Toothache

    Toothache Let the music play!
    is a Forum Moderator Alumnus

    Joined:
    Dec 27, 2004
    Messages:
    3,730
    Do you know what conditions affect what method is used to generate the wild Pokemon by different methods?
  5. yamipoli

    yamipoli the only person more obsessive than jumpman
    is an Artist Alumnus

    Joined:
    Nov 2, 2006
    Messages:
    373
    If I had to guess, I would think it is the terrain it is caught on. Such as the difference between diving, surfing, wild grasses, tall grasses, and fishing. For fishing, all of my pokemon are showing up as method 3, and the tenta was by surfing, the abra/alakazam was by grass.
  6. Syberia

    Syberia [custom user title]
    is a Pre-Contributor

    Joined:
    Jun 22, 2005
    Messages:
    5,005
    You win at the internet.
  7. jujuomi

    jujuomi

    Joined:
    Oct 21, 2007
    Messages:
    1,698
    This is really helpful. But can you explain something?

    On the PID, what would you need to look for to know if wurmple would evolve into a silcoon or a cascoon? And where on the PID would I look for to know spinda's spots?

    Bulbapedia explained wurmple, but I couldn't understand.

    http://www.freewebs.com/gatorshark/Spinda Painter.htm

    The above generater can determine spinda's spots via hex and DEC, 2 variables I don't know anything bout.Can you explain how the hex and DEC are related to the spinda's PID?
  8. Syberia

    Syberia [custom user title]
    is a Pre-Contributor

    Joined:
    Jun 22, 2005
    Messages:
    5,005
    Hex is base 16. Dec is the same number, just in base 10.

    Hex is what you would use if you were editing the PID directly into the .pkm file, dec is what you would type into the attribute box on pokesav.
  9. chaos

    chaos
    is a member of the Site Staffis a Battle Server Administratoris a Programmeris a Smogon IRC SOPis a Contributor to Smogonis an Administratoris a Tournament Director Alumnusis a Researcher Alumnus
    Owner

    Joined:
    Dec 18, 2004
    Messages:
    9,456
    Lets get this on the site ASAP.
  10. VoiceOfReason

    VoiceOfReason

    Joined:
    Sep 11, 2007
    Messages:
    27
    Brilliant article, incredible resource.

    Are you not worried however that this could spell doom for people with real SR'ed legends etc??

    As an afterthought could you perhaps edit in a link to pika's article on PRNGs and seeds?

    Outstanding piece of work though, the Pokemon community has been long in wait of this!
  11. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a CAP Contributor Alumnusis a Researcher Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    Well, all my RSFRLG Pokemon I checked were all Method 2 or 3. I haven't checked them all, though, and I trust you, so I'll edit my article. :)
  12. Mario With Lasers

    Mario With Lasers Why am I so shit
    is a Forum Moderator Alumnusis a CAP Contributor Alumnus

    Joined:
    Nov 15, 2006
    Messages:
    7,109
    X-Act for king of internet. An excellent article, I must say.


    I have one doubt, though: Doesn't emerald have a glitched RNG, or something like that, that makes you get a lot of the same pokémon while soft-resetting? Will you add more info about it on the article?
  13. ryubahamut

    ryubahamut
    is a Site Staff Alumnusis a Programmer Alumnusis a Forum Moderator Alumnusis a Contributor Alumnus

    Joined:
    Jan 18, 2007
    Messages:
    999
    X-Act, I would like to volunteer for HTMLizing this article, if you're not on it already :)
  14. Arseus

    Arseus
    refuses to accept Contributor

    Joined:
    Oct 13, 2006
    Messages:
    869
    From what I understand from lodadingNOW's Emerald RNG Analysis, the only difference would be

    1. Emerald always starts with the same seed.
    2. Emerald calls the RNG every 1/60 seconds, rather than when only creating a Pokémon.

    Is this correct, X-Act?

    So given a certain Trainer ID, the seed will generate the same random numbers after the same amount of time.
  15. Syberia

    Syberia [custom user title]
    is a Pre-Contributor

    Joined:
    Jun 22, 2005
    Messages:
    5,005
    The Emerald RNG seeds itself exactly the same way most of the time. However, the pokemon it produces from that seed will, as far as I know, still follow the normal formula for validation.
  16. Arseus

    Arseus
    refuses to accept Contributor

    Joined:
    Oct 13, 2006
    Messages:
    869
    I also have a question on the seeds. Assuming you know the number last randomly generated by the RNG (in the Tentacool's case, [5EE9]), is it possible to calculate the current seed, thus finding the next set of random numbers?

    Also, I read somewhere that a Trainer ID can be between 0 and 65535, not unlike the random number output. Supposedly, another number is created alongside it, called a "Secret ID", which is also between 0 and 65535. Since these are two 16-bit numbers, they can be simply placed beside each other to create a 32-bit number, which is the length of a seed. Does Emerald simply use a "fusion" of the Trainer ID and the Secret ID as the starting seed every time?

    I also remember hearing that most people get IDs in a similar range, due to spending a similar time in the "introduction sequence" where the Professor explains everything, asks for Trainer name, etc. Would this explain why users seem to find the same IV spreads "common" in Emerald, while many others go unnoticed? Or am I just totally off?
  17. hrc969

    hrc969

    Joined:
    Jul 24, 2007
    Messages:
    58
    Well there had already been a guide up since Aug. 21st elsewhere. It was also planned that an english guide would be released last night. It wasn't released until this morning.

    But anyways, slowly the information was going to get out anyways.

    We might as well have a guide from someone that is more qualified to write one.

    X-Act: Great guide. Glad that you decided to post it.

    EDIT: Wow, I finally posted something after more than a year of being a member.
  18. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a CAP Contributor Alumnusis a Researcher Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    No, unless you have further information about the Pokemon.

    The problem with this is that the Trainer ID and Secret ID are generated at different times in the game. Thus, you cann't map a Trainer ID with a Secret ID.

    Emerald always starts with the same seed (0). Hence, players have a high chance of getting the same few Trainer IDs if they take roughly the same time to start the game. This only happens in Emerald, though.
  19. Nutty

    Nutty

    Joined:
    Sep 18, 2007
    Messages:
    56
    Nice work X-Act. It's really a excellent article.
  20. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a CAP Contributor Alumnusis a Researcher Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    Wurmple evolves like this. Look at the PID's last 16 bits, and convert them to decimal. If the last digit of this decimal number is between 0 and 4, Wurmple will evolve into Silcoon, otherwise it will evolve into Cascoon.

    Example: Say a Wurmple has a PID of [5CF4091C]. The last 16 bits of the PID are [091C], which is equal to 2332 in decimal. Since the last digit of this decimal number is 2, this Wumple would evolve into Silcoon.

    Spinda's spots work as follows. Suppose a Spinda has PID [5B3E948D]. Consider each of these hexadecimal digits one by one and convert each of them to decimal. Thus, we have
    5 = 5, B = 11, 3 = 3, E = 14, 9 = 9, 4 = 4, 8 = 8, D = 13.

    Thus we construct the following co-ordinates: (5,11), (3,14), (9,4), (8,13).

    Now Spinda always has 4 spots: two on its face and one on each of its ears. The game would correspond each of the above co-ordinates with the relative position of the centre of the spot next to some kind of starting position (a different starting position for each of the spot) which I don't know about.

    EDIT: After playing a bit with that Spinda Painter you linked, the first co-ordinate is for the spot on Spinda's face (from its centre to its right in the front sprite), the second co-ordinate is for the spot on Spinda's face (from its left to its centre in the front sprite), the third co-ordinate is for the spot on Spinda's left ear (from its centre to its right in the front sprite) and the fourth co-ordinate is for the spot on Spinda's right ear (from its left to its centre in the front sprite).

    This article probably won't. But the applet that's going to be revealed soon might.

    Yes please.

    Yes. Though I would like to add that the RNG is used for every random decision that happens in the game, not just for Pokemon creation. It's used to see whether a move is a Critical hit or not, whether Stone Edge misses, and even whether or not a person sprite on the screen turns around to look in a different direction!

    Not quite. As long as you keep soft-resetting, Emerald will generate the same random numbers. It doesn't have anything to do with the Trainer ID.
  21. hrc969

    hrc969

    Joined:
    Jul 24, 2007
    Messages:
    58
    So are you going to be releasing such an applet?
  22. yamipoli

    yamipoli the only person more obsessive than jumpman
    is an Artist Alumnus

    Joined:
    Nov 2, 2006
    Messages:
    373
    It's very few, like say, out of three boxes of randoms, only two showed as method 1.

    More explanation: The game generates your secret id when you first talk to Birch or Rowan. It then generates your ID right before sending you into the world of Pokemon.
  23. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a CAP Contributor Alumnusis a Researcher Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    Yes I am. The algorithm is ready. What still needs to be done is to make it appear 'pretty'.
  24. Arseus

    Arseus
    refuses to accept Contributor

    Joined:
    Oct 13, 2006
    Messages:
    869
    Okay, so you would need the full PID to be able to find the seed? Or would this only work for method 1 Pokémon, due to the useless RNG call in methods 2 and 3?

    Ah, I see. So if Emerald always starts with the same seed, then theoretically, it should be possible to follow the "random" numbers until they created a desirable PID, at whatever time, correct? I say theoretically because 1/60 of a second is going to be awful hard to pinpoint. But it's better than nothing.

    I was aware that the RNG is also used in battles, though the trainer turning tidbit is interesting!

    I remember there was earlier speculation that it had to do with Trainer ID, but I guess now that we know that's not the case, it definitely explains the "common" IV spreads.
  25. tsanth

    tsanth

    Joined:
    Nov 29, 2007
    Messages:
    8
    Kudos on the write-up. I'm glad to see that this is finally being properly released into the wild.

Users Viewing Thread (Users: 0, Guests: 0)