Stat Mechanics

Welcome to the first Game Mechanics page of The Cave of Dragonflies: Pokémon Stats. As you should all know (or at least I hope so), every Pokémon has six stats named HP (Hit Points), Attack, Defense, Sp. Atk (Special Attack), Sp. Def (Special Defense), and Speed. Here I will walk you through exactly how these values are determined, the relevant terms, and the formulas used in the game.

The Stat Formula

The stat formula for Attack, Defense, Special Attack, Special Defense and Speed is this:

Stat = Math.Floor(Math.Floor((2 * B + I + E) * L / 100 + 5) * N)

Meanwhile, the HP formula is a little different:

Stat = Math.Floor((2 * B + I + E) * L / 100 + L + 10)

You may have noticed that the HP formula is essentially exactly the same as the normal stat formula except for not multiplying by N (or having the rounding there) and replacing the 5 with L + 10; by all means think of it that way if the two formulas are confusing you. Math.Floor, by the way, stands for rounding down; don't let it scare you. The letters in the formula are variables which will now be explained one by one.

B (Base Stat)

A base stat is a constant for each of the six stats of each Pokémon species from which all stats for individuals of this species are calculated. Most online Pokédexes, including Veekun, will show base stats as the Pokémon's stats; the highest possible value for them is 255, which incidentally is exactly the value of Blissey's base HP stat. Base stats never change and they do not vary between individuals.

When the second generation split R/B/Y's Special stat into Special Attack and Special Defense, the old Special base stat was always used for one of the new stats while the other was new.

I (Individual Value)

Individual Values, or IVs as they are most commonly referred to (pre-Advance, they were often referred to as DVs, standing for either Deter Values or Diversification Values, but "IVs" is almost exclusively used today), are values that determine the statistical difference between individual Pokémon. In the pre-Advance games (Red, Blue, Yellow, Gold, Silver and Crystal), there were five IVs: HP, Attack, Defense, Speed and Special; even as Special was split into two stats in Gold, Silver and Crystal, the games maintained compatibility with Red, Blue and Yellow and thus had only one Special IV to apply to both Special Attack and Special Defense. In the Advance games onwards, there is one IV for each of the six stats.

The stat IVs are randomly determined when you battle a wild Pokémon and can never be changed after that. Their value could in the pre-Advance games range from 0 to 15 but in the Advance games onwards from 0 to 31. The HP IV is a little different in the pre-Advance games, too; it is not random, but determined from the other IVs as follows:

  1. Make a variable, say X, and set its value to 0.
  2. If the Attack IV is odd, add 8 to X.
  3. If the Defense IV is odd, add 4 to X.
  4. If the Speed IV is odd, add 2 to X.
  5. If the Special IV is odd, add 1 to X.
  6. Make the HP IV equal to X.

This means that if a R/B/Y/G/S/C Pokémon has a perfect 15 for Attack, Defense, Speed and Special, it will automatically have a 15 for HP too. This also, in a twist of fate, means that shiny Pokémon in those games, which is defined as any Pokémon with Defense, Speed and Special IVs of 10 and an Attack IV of 2, 3, 6, 7, 10, 11, 14 or 15, will always have either average HP IV (8), for an odd Attack but even everything else, or the worst it can be (0), for all the other IVs even. In the pre-Advance games, gender was also determined by IVs or more specifically the Attack IV, which simply had a cutoff value for each species where anything with an Attack IV equal to or below it would be female and the others male. Thus, if the genders for a species were 50/50, a female Pokémon had an Attack IV of 7 or below, and a male Pokémon had an Attack IV of 8 or above, while if it had a 75% chance of being male, females would be ones with an Attack IV of 3 or less. Note that none of this applies to the post-Advance games, where shininess and gender are determined according to a hidden value called a personality value which is unconnected to IVs, and the HP IV is random like the others.

The actual value I in the formula is the IV itself in the Advance games onwards, but twice the IV in the pre-Advance games. The IV therefore accounts for exactly 30 or 31 points of the stat at level 100 (in Advance onwards, this is provided the stat is not affected by the Pokémon's nature); this is because a level of 100 (L) and a neutral nature of 1 (N) simplify the formula to 2 * B + I + E + 5, which is obviously just a few numbers, including the I value, added together. This ultimately means that in Ruby and Sapphire, all neutral nature max stats rose by one since G/S/C - instead of the I value in the formula for a max-stat Pokémon being 30 (2*15), it is 31.

People commonly want to find out the IVs of their Pokémon; to do this, it is best to use one of the many IV calculators found on the Internet, such as this one.

E (Effort Value or Stat Experience)

This E value also changed between G/S/C and Advance - and rather drastically at that, being one of the most important novelties that Ruby and Sapphire brought to the battle system.

Pre-Advance - Stat Experience

In R/B/Y/G/S/C, Pokémon acquired Stat Experience for battling, which was what caused wild-caught Pokémon to have generally worse stats than a trained Pokémon at the same level. There was one Stat Experience value for each R/B/Y stat - HP, Attack, Defense, Speed and Special. These values all started out at 0 for each stat of every Pokémon caught, and could then only be raised until they reached 65025, the maximum value.

So how were they raised? Every time a Pokémon battled another Pokémon, it would gain a number of Stat Experience points for each stat, equal to the base stat for that particular stat of the Pokémon species battled. In G/S/C, the Special Stat Experience would be raised according to the opponent's base Special Attack. Remember that the base stats are not affected by level, so battling a level 5 Pidgey would give the same Stat Experience as battling a level 20 Pidgey. If multiple Pokémon took part in the battle (or in the case of EXP All or EXP Share), it would be split between Pokémon like ordinary battle experience.

What the vitamins (Protein for Attack, Iron for Defense, Carbos for Speed and Calcium for Special) actually did was add 2550 Stat Experience points to their respective stat, which is also the reason G/S/C, with two Special stats, only had one vitamin for both. However, once a Pokémon had reached 25500 points of Stat Experience in a particular stat, it would no longer be able to be affected by vitamins - the game makers, after all, did not want people to just raise their Pokémon's levels to 100 using Rare Candies and then make up for their lack of Stat Experience using vitamins. To max out a Pokémon's individually achievable stats, it is therefore necessary to train.

Once a Pokémon reaches level 100, it will no longer level up and thus its stats will ordinarily not increase even though you give it Stat Experience. However, using the so-called Box Trick, you can continue maxing out your Pokémon's Stat Experience even after it reaches level 100: to force the game to recalculate the stats and give you the increases governed by your Stat Experience, simply deposit the Pokémon into a box on the PC and then withdraw it again to find its stats slightly higher. This can be repeated until your Pokémon's stats are completely maxed out for its IVs.

To get the actual E value for the stat formula, you must use the formula E = Math.Floor((sqrt(Stat Experience - 1) + 1) / 4). sqrt, if you didn't know, stands for taking the square root of something. This means that with the maximum of 65025 Stat Experience points in a stat, the E value is 63 thanks to that rounding down.

Post-Advance - Effort Values

Effort Values replace the Stat Experience of the first and second generation in the third onwards. There is one Effort Value for each of the six stats. Each and every Pokémon you battle gives the Pokémon that fought it a certain amount of Effort Points in a specific stat, determined specially for each Pokémon species. For example, if you defeat a Sceptile, the Pokémon you used will get three Effort Points in Speed because Sceptile gives three Speed Effort Points. The number of Effort Points given by each Pokémon species can be found in most online Pokédexes under something like "Effort Points" or "Effort Given".

Even if many Pokémon share the level experience, whether thanks to the usage of an EXP Share or because many Pokémon took part in the battle, all the Pokémon will get the same number of Effort Points as one Pokémon would for battling it alone - so if you have a Pokémon holding an EXP Share and another one of your Pokémon defeats a Sceptile, both of them will get three Effort Points in Speed - it is not split. The actual number of Effort Points you have in a stat is called an Effort Value, abbreviated EV.

Effort Points, like Stat Experience, can also be gained through the use of vitamins, which this time each will give 10 Effort Points in their designated stat (Protein for Attack, Iron for Defense, Carbos for Speed, Calcium for Special Attack and Zinc for Special Defense). Like before, there is a cap on how many of your Effort Points can come from vitamins: once a Pokémon has 100 Effort Points in a stat, that stat's vitamin will no longer have an effect on the Pokémon.

The most significant difference between Stat Experience and Effort Points, however, is that a Pokémon can only gain a total of 510 Effort Points at the most and only 255 Effort Points at the most can go into any one stat. This forces the player to specialize his or her Pokémon, as only a maximum of two of the six stats of any given Pokémon can actually reach their full potential.

Because of this, players have a good reason to want to remove unwanted Effort Points so that they can be used in some other stat. This was not possible in Ruby, Sapphire, FireRed or LeafGreen, to many people's frustration, but since Emerald, there have been six Berries which each will raise a Pokémon's happiness but lower its Effort Value in a particular stat by ten points:

BerryEV lowered
Pomeg BerryHP
Kelpsy BerryAttack
Qualot BerryDefense
Hondew BerrySpecial Attack
Grepa BerrySpecial Defense
Tamato BerrySpeed

The way to determine the actual E value in the formula is considerably simpler now: it is simply the Effort Value for that stat divided by four and then rounded down. As the maximum Effort Points in a stat are 255 and 255 / 4 is 63.75, rounding down makes those last three points be wasted (as 252 / 4 = 63). Therefore, if you max out two stats, it is always wisest to give only 252 Effort Points in those stats and use the remaining six points to boost another stat by one point.

L (Level)

L is simply the current level of the Pokémon in question.

N (Nature)

A Pokémon's nature is basically its personality and is displayed on every Pokémon's summary screen in the Advance games onwards. In R/B/Y/G/S/C, always regard N as being 1.

Natures can either be neutral or they can increase one stat while decreasing another. Hit Points are never affected by natures. There is one nature for each possibility of increasing and decreasing a pair of the other five stats:

NatureIncreasesDecreases
HardyNoneNone
LonelyAttackDefense
BraveAttackSpeed
AdamantAttackSpecial Attack
NaughtyAttackSpecial Defense
DocileNoneNone
BoldDefenseAttack
RelaxedDefenseSpeed
ImpishDefenseSpecial Attack
LaxDefenseSpecial Defense
SeriousNoneNone
TimidSpeedAttack
HastySpeedDefense
JollySpeedSpecial Attack
NaiveSpeedSpecial Defense
BashfulNoneNone
ModestSpecial AttackAttack
MildSpecial AttackDefense
QuietSpecial AttackSpeed
RashSpecial AttackSpecial Defense
QuirkyNoneNone
CalmSpecial DefenseAttack
GentleSpecial DefenseDefense
SassySpecial DefenseSpeed
CarefulSpecial DefenseSpecial Attack

Incidentally, Pokémon also have different PokéBlock/Poffin flavor preferences depending on their nature. Each flavor corresponds to one stat (Spicy for Attack, Sour for Defense, Sweet for Speed, Dry for Special Attack and Bitter for Special Defense) and the Pokémon will like the flavor associated with the stat their nature raises but dislike the one associated with the stat it lowers.

The N value in the formula will take on one of three values:

  • 1.1 if the Pokémon's nature raises the stat in question;
  • 1 if the Pokémon's nature does not affect the stat in question;
  • 0.9 if the Pokémon's nature lowers the stat in question.

Therefore, it basically increases one stat by 10% and decreases another by 10%.

An Example

To show how this all magically works, let's go through the stat formula for my Diamond version Butterfree, whose IVs I have calculated and whose EVs I have monitored, for a demonstration of how this all works. My Butterfree is level 53 at the moment of writing and has a Modest nature, and has been EV trained to have 4 Effort Points in HP, 254 in Special Attack and 252 in Speed but nothing in everything else. Butterfree's (rather shoddy) base stats and this particular one's (strangely good, considering it was only the fourth egg I hatched) IVs are as follows:

StatBaseIV
HP6028
Attack454
Defense5017
Special Attack8030
Special Defense8027
Speed7031

HP

HP = Math.Floor((2 * 60 + 28 + 1) * 53 / 100 + 53 + 10)

HP = Math.Floor(149 * 53 / 100 + 63)

HP = Math.Floor(149 * 53 / 100 + 63)

HP = Math.Floor(141.97)

HP = 141

Yup, perfect match.

Attack

Attack = Math.Floor(Math.Floor((2 * 45 + 4 + 0) * 53 / 100 + 5) * 0.9)

Attack = Math.Floor(Math.Floor(94 * 53 / 100 + 5) * 0.9)

Attack = Math.Floor(Math.Floor(54.82) * 0.9)

Attack = Math.Floor(54 * 0.9)

Attack = Math.Floor(48.6)

Attack = 48

Right again.

Defense

Defense = Math.Floor(Math.Floor((2 * 50 + 17 + 0) * 53 / 100 + 5) * 1)

Defense = Math.Floor(Math.Floor(117 * 53 / 100 + 5) * 1)

Defense = Math.Floor(Math.Floor(67.01) * 1)

Defense = Math.Floor(67 * 1)

Defense = 67

Again correct.

Special Attack

Special Attack = Math.Floor(Math.Floor((2 * 80 + 30 + 63) * 53 / 100 + 5) * 1.1)

Special Attack = Math.Floor(Math.Floor(253 * 53 / 100 + 5) * 1.1)

Special Attack = Math.Floor(Math.Floor(139.09) * 1.1)

Special Attack = Math.Floor(139 * 1.1)

Special Attack = Math.Floor(152.9)

Special Attack = 152

Whooo.

Special Defense

Special Defense = Math.Floor(Math.Floor((2 * 80 + 27 + 0) * 53 / 100 + 5) * 1)

Special Defense = Math.Floor(Math.Floor(187 * 53 / 100 + 5) * 1)

Special Defense = Math.Floor(Math.Floor(104.11) * 1)

Special Defense = Math.Floor(104 * 1)

Special Defense = 104

Exactly.

Speed

Speed = Math.Floor(Math.Floor((2 * 70 + 31 + 63) * 53 / 100 + 5) * 1)

Speed = Math.Floor(Math.Floor(234 * 53 / 100 + 5) * 1)

Speed = Math.Floor(Math.Floor(129.02) * 1)

Speed = Math.Floor(129 * 1)

Speed = 129

And that's how the game calculated the stats that I see on my Butterfree's stat screen. Through the formula, I can also find out for certain that at level 100 my Butterfree will have 259 HP, 89 Attack, 122 Defense, 283 Special Attack, 192 Special Defense and 239 Speed, unless I start giving it Effort-lowering Berries and EV training it differently (which I won't).

I hope this has taught you something about the inner workings of the Pokémon games. If you liked it, there are more mechanics coming. ;)

Page last modified August 19 2007 at 20:03 GMT


I hereby promise to all of my visitors that my site should only contain accurate, up-to-date information. For example, all cheats on this site have been personally tested by me. All information you will find here will therefore be true, unless I a) clearly state that said information is false, b) do not know the truth, or c) did not know it at the time of writing said information, and have not updated the section since. If you spot cases of b) or c), please report them via this form and they will be fixed as soon as possible.

Pokémon, Pikachu and all other Pokémon characters are © 1995-2008 Nintendo, GAME FREAK and Creatures. Inc. This website is purely the work of a fan.
All layouts, non-official graphics and content © 2002-2008 Butterfree/Dragonfree/antialiasis unless otherwise stated.