How Pokemon GO calculates stats and Max CP

Posted in

Last updated by Kratos on Jan 2022 to include L50 calcs & CP rework formulae.

Pokemon GO’s stat system is a little bit different from the main series Pokemon games. While main series games had 6 different stats (HP, Attack, Defense, Special Attack, Special Defense and Speed), Pokemon GO uses a simplified system with just 3 stats: HP, Attack and Defense, which are then used to compute the Combat Power (CP).

Pokemon GO Stats

Apart from HP and CP that we can notice at first, every Pokemon in Pokemon GO has base stats and they are Attack, Defense and Stamina. Pokemon GO ditches the Physical and Special Attack/Defense stat and the Speed stat in favor of a single Attack and Defense stat, but believe it or not each stat from the main series games is taken into account even with the simplified system PoGO uses.

All those base stat values are in the game data, but you just can’t see them in-game. If you want to know them you could use our GOHUB database or compute them yourself based off their stats from the main series games.

Professor Willow

Base stats calculation

It’s important to keep in mind that base stats aren’t the same as the actual stats of a given Pokémon at a specific level. And base stats in Pokémon GO are calculated by using the stats from the main series games.

We’ll use Blissey’s stats (255/10/10/75/135/55) to illustrate how the different formulas work. The stats you just saw correspond to Blissey’s HP/ATK/DEF/SP.ATK/SP.DEF/SPEED stats respectively.

In order to fully understand the formulas you’ll see attached below, keep in mind that higher refers to the highest stat out of the physical/special split (for example, Blissey’s base ATK is 10 whereas its base Special ATK is 75, thus higher = 75). Similarly, lower corresponds to the lowest value out of that same split.

Last (but not least), you’ll see a SpeedMod term. This is a speed modifier used to compute the base stats. The scaled values are computed first and the actual base stats are computed by multiplying that scaled term times the speed modifier. That’s how you convert from the scaled values to the actual base stats. And if you were wondering, round just means rounding, whereas floor takes as input a number and gives as output the greatest integer less than or equal to that number.

As you can see, the scaled attack is computed first by using Blissey’s highest (75) and lowest (10) attack values. Then, the value is rounded and the speed modifier is applied. That’s how you calculate Blissey’s base attack stat (129), which is the one you’ll see online and in our database.

The same happens with defense, but this time the weights given to the highest and lowest stats are a bit different (5/8 and 3/8, respectively).

The HP stat is computed a bit differently, as you can see below.

And there you have it, that’s how you compute the BASE stats of a Pokémon.

Actual stats calculation

Now that you know how to compute the base stats of a given Pokémon, you might be wondering whether or not these stats are the actual stats of a Pokémon in battle. And the answer is NO.

If that was the case, then powering up a Pokémon would be worthless, as the stats would be fixed regardless of the level of a given Pokémon and its IVs (Individual Values).

First of all, the IVs of a given Pokémon need to be factored in. Let’s assume our Blissey is a hundo (100%, or 15/15/15):

atkdefsta

Using the base stats just computed (129/169/496) yields:

You might be wondering, what the hell are these? These are still the BASE stats BUT with the IVs factored in. The next step is to compute the actual stats for a given Pokémon at a given level, the actual stats so to say.

Let’s say we want to compute the actual stats of our Blissey at level 50. Pokémon GO uses a constant called CP Multiplier (CPM), whose only purpose is to multiply the stats just computed based on the given level of a Pokémon. You can check the value of the CP Multiplier at each level in this article.

Since the CP Multiplier at level 50 is 0.84029999, a 15 attack Blissey at level 50 will have 144*0.84029999 = 121.0 ATK. That will be Blissey’s actual attack stat at level 50 if it has a 15 attack IV.

In fact, when you power up a Pokémon, what the game does is multiply the BASE stats (after considering the Pokémon’s IVs) by the corresponding CP Multiplier. Since the stats go up, so does the CP, which is computed from the stats we just saw.

Combat Power (CP)

Now that you know how to calculate the stats of a given Pokémon at a specific level, let’s see how the Combat Power (CP) is computed. Combat Power is Niantic’s way to measure the overall battle strength of a Pokemon’s battle strength, but CP itself is not actually used in any calculations during battle, it’s there just to give you a rough idea of a Pokemon’s strength. Thus, it’s not always a case that a Pokemon with a higher CP is necessarily better than one with a lower CP.

Going straight to the point, here’s the formula used to compute the CP of a given Pokémon at a given level. In the example below, Blissey’s stats are used once more to help the reader understand how the formula is applied. Both L40 and L50 calcs have been done, and as you can see the only difference is the value of the CP Multiplier.

If you take a look at our database entry for Blissey, you will see that the max CP values match the ones you see above. Feel free to play around with the formula and the different CPM values and you should be able to compute the max CP at any given level.

If you want to know more about CP or how CP is calculated, feel free to check out the Combat Power Mechanics Wiki article written by Kratos.

The 9% nerf

Right before Mewtwo was first released in Pokémon GO, Niantic decided to apply a 9% nerf to Pokémon whose CP surpasses the 4000CP mark at level 40.

If a Pokémon’s CP is higher than 4000 at level 40, you can compute its actual stats by multiplying the unnerfed stats by 0.91 (91%).

It might seem a bit arbitrary (and it is), but that’s just how the game works. If your calcs don’t match with the values you see in the GAME_MASTER file or our database, that’s probably why.

Author & tags

BinetCauchy
BinetCauchy
I am 25 years old math student from Croatia that doesn't really look like Achilles from the movie Troy.

Further reading

Popular today

Latest articles

Support us

Buy GO Hub merch

Get your very own GO Hub t-shirt, mug, or tote.