Professional Documents
Culture Documents
Pokemon Formulas
Pokemon Formulas
3 ∗ 𝐴𝑣𝑔([𝑆𝑡𝑎𝑡]) + 𝑀𝐴𝑋([𝑆𝑡𝑎𝑡])
[𝑆𝑡𝑎𝑡]𝑦 =
4
Which when you look at the results comes out to be:
𝐴𝑡𝑘𝑦 = 2 ∗ 𝑙 + 80
𝐷𝑒𝑓𝑦 = 2 ∗ 𝑙 + 80
𝐹𝑝𝑤𝑟𝑦 = 10
𝐷𝑃𝑆𝑦 = 0.6 ∗ 𝑙 − 3
2𝑙 + 4
𝑓(𝑙, 𝐴𝑡𝑘, 𝐹𝑝𝑤𝑟) = ∗ 𝐴𝑡𝑘𝑦 ∗ 𝐹𝑝𝑤𝑟𝑦 = 40 ∗ 𝑙 − 300
100
Poke Level 𝑙 Definition
Values from Game file, or can be calculated via formulas and Bulbapedia Base Stats of Gen VI Pokemon Base Stat Formulas
𝐵𝑎𝑠𝑒 𝑆𝑡𝑎𝑚𝑖𝑛𝑎 = 2 ∗ 𝐻𝑝
𝐵𝑎𝑠𝑒 𝐴𝑡𝑡𝑎𝑐𝑘 = 2 ∗ 𝑅𝑂𝑈𝑁𝐷(𝐴𝑡𝑘 0.5 ∗ 𝑆𝑝𝐴0.5 + 𝑆𝑝𝑒 0.5 )
𝐵𝑎𝑠𝑒 𝐷𝑒𝑓𝑒𝑛𝑐𝑒 = 2 ∗ 𝑅𝑂𝑈𝑁𝐷(𝐷𝑒𝑓 0.5 ∗ 𝑆𝑝𝐷0.5 + 𝑆𝑝𝑒 0.5 )
CpM CpM values from the Game master file: 0.094, 0.166398, 0.215732, 0.25572….
One Trainer level increases max Pokemon Leve by One = 2 Power Ups
Which means defending Pokemon will use their Special moves a lot more than attacks (Energy per HP lost)
Back Calculating
10 ∗ 𝐶𝑃
Stats 𝐶𝑝𝑀𝑙 = √
(𝐵. 𝐴𝑡𝑘 + 𝐼. 𝐴𝑡𝑘) ∗ (𝐵. 𝐷𝑒𝑓 + 𝐼. 𝐷𝑒𝑓)0.5 ∗ (𝐵. 𝑆𝑡𝑎 + 𝐼. 𝑆𝑡𝑎)0.5
Damage of Thanks to /u/Fourier864 for completing some tests with Jiggly Puff, we believe the formula is actually not Modified to Max
Move dependant on level at all. Level 40
50 𝐴𝑡𝑘𝑥 𝐶𝑟𝑖𝑡𝑥
𝑀𝑑𝑚𝑔 = ( ∗ ( ) ∗ 𝑀𝑝𝑤𝑟𝑥 + 𝐶) ∗ 𝑆𝑇𝐴𝐵𝑥 ∗ (1 + ) ∗ 𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦 ∗ 𝑀𝑢𝑙𝑡𝑖𝑥
100 𝐷𝑒𝑓𝑦 2
84 ∗ 18%
𝐶= ≈ 0.8
15 ∗ 1.25
Please other people do this test, especially if you know the exact HP of the opponent you are attacking with
Magikarp.
Damage has shown to be rounded, we’re not sure if it’s up, down, or mid. For now we assume mid in which case
𝐶 = 0.5
https://www.reddit.com/r/TheSilphRoad/comments/4uffha/pokemon_dps_total_damage_calculator/d5xnq1c
DPS If DPS(f) is higher than DPS(s) then there is no need to use the special move
Approximation
𝐼𝑓 𝐷𝑃𝑆𝑓 > 𝐷𝑃𝑆𝑠 𝑡ℎ𝑒𝑛 𝐷𝑃𝑆𝑥 = 𝐷𝑃𝑆𝑓
Attacker
Else
𝐸𝑟𝑒𝑞
( + 𝐸𝑟𝑟) 𝐹𝑑𝑚𝑔 + 𝑆𝑑𝑚𝑔 ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔
𝐷𝑃𝑆𝑥 =
𝐸𝑟𝑒𝑞
( + 𝐸𝑟𝑟) 𝐹𝑑𝑢𝑟 + (𝑆𝑑𝑢𝑟 + 0.5) ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔
Err is the energy overrun by the player, such as the player doing 1 extra move more than what is required to
generate 100 energy, but also ensures the number of moves required is rounded up, otherwise it’s asking you to do
5.3 attacks instead of 6.
𝑥𝐹 + (1 − 𝑥)𝑆 = 𝐷
𝑥𝐹 − 𝑥𝑆 = 𝐷 − 𝑆
𝑥𝐹 − 𝑥𝑆 = 𝐷 − 𝑆
𝐷−𝑆
𝑥=
𝐹−𝑆
DPS
Approximation 𝐸𝑟𝑒𝑞
𝐹𝑑𝑚𝑔 + 𝑆𝑑𝑚𝑔 ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔
𝐷𝑃𝑆𝑦 =
Defender 𝐸𝑟𝑒𝑞 𝐸𝑟𝑒𝑞
𝐹𝑑𝑢𝑟 + 𝑆𝑑𝑢𝑟 ∗ 𝑆𝑐 + 2 ∗ (𝑆𝑐 + − 𝑗)
𝐹𝑒𝑛𝑔 𝐹𝑒𝑛𝑔
It’s been shown that the first two fast moves are done with a 1 s delay, and then every move after that has a 2
second delay.
Therefore the total delay time for the entire battle is
𝐷𝑒𝑙𝑎𝑦. 𝑇𝑖𝑚𝑒 = 2 ∗ (𝑛 − 1)
But this requires us to assume how long the batter needs to go on for, so is best left for j = 0 for now.
And now we need to approximate how many rounds of attacks it takes to kill an attacker; Perhaps 2?
𝐸𝑟𝑒𝑞
𝐹𝑑𝑚𝑔 + 𝑆𝑑𝑚𝑔 ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔
𝐷𝑃𝑆𝑦 =
𝐸𝑟𝑒𝑞 𝐸𝑟𝑒𝑞
𝐹𝑑𝑢𝑟 + 𝑆𝑑𝑢𝑟 ∗ 𝑆𝑐 + 2 ∗ (𝑆𝑐 + )
𝐹𝑒𝑛𝑔 𝐹𝑒𝑛𝑔
Number of Hits The number of hits you will take is simply your HP divided by how much damage each hit does. Damage Formula
𝐻𝑃𝑥
ℎ𝑥𝑦 =
𝐹𝑑𝑚𝑔𝑦
Effective Health Effective Health is how much damage you can sustain, based on your defence. We leave the Type modifiers on the Re-arrange
outside, to allow the calculation to be completed for each type. Damage formula
𝐻𝑃𝑥 1
𝐸𝐻𝑃𝑥 = ∗
𝐷𝑎𝑚𝑎𝑔𝑒𝑅𝑒𝑑𝑢𝑐𝑡𝑖𝑜𝑛 𝑀𝑢𝑙𝑡𝑖𝑦
But the damage can never be zero, there is a minimum. And we already use an estimated defence in the damage
formula, so as dmg ~ 1/Def then EHP ~ Def and the modifier for y
𝐷𝑒𝑓𝑥 1
𝐸𝐻𝑃𝑥 = (𝐻𝑃𝑥 − 𝐶𝑜𝑛𝑠𝑡𝐷) ∗ ∗
𝐷𝑒𝑓𝑦 𝑀𝑢𝑙𝑡𝑖𝑦
The constant damage is the minimum damage times by the number of hits
𝐶𝑜𝑛𝑠𝑡𝐷 = ℎ𝑥𝑦 ∗ 𝐶 ∗ 𝑆𝑇𝐴𝐵 ∗ 𝑀𝑢𝑙𝑡𝑖𝑦
𝐷𝑒𝑓𝑥 1
𝐸𝐻𝑃𝑥 = (𝐻𝑃𝑥 − ℎ𝑥𝑦 ∗ 𝐶 ∗ 𝑆𝑇𝐴𝐵 ∗ 𝑀𝑢𝑙𝑡𝑖𝑦 ) ∗ ∗
𝐷𝑒𝑓𝑦 𝑀𝑢𝑙𝑡𝑖𝑦
Substituting in h
(𝐻𝑃𝑥 ∗ 𝐷𝑒𝑓𝑥 ) 𝐷𝑒𝑓𝑥 1
𝐸𝐻𝑃𝑥 = (𝐻𝑃𝑥 − 𝐶 ∗ )∗ ∗
𝑓(𝑙, 𝐴𝑡𝑘, 𝐹𝑝𝑤𝑟) + 𝐶 ∗ 𝐷𝑒𝑓𝑥 𝐷𝑒𝑓𝑦 𝑀𝑢𝑙𝑡𝑖𝑦
But ignore the type modifier because we don’t want to deal with it here (wait for TDO):
(𝐻𝑃𝑥 ∗ 𝐷𝑒𝑓𝑥 ) 𝐷𝑒𝑓𝑥
𝐸𝐻𝑃𝑥 = (𝐻𝑃𝑥 − 𝐶 ∗ )∗
𝑓(𝑙, 𝐴𝑡𝑘, 𝐹𝑝𝑤𝑟) + 𝐶 ∗ 𝐷𝑒𝑓𝑥 𝐷𝑒𝑓𝑦
Health Lost The Health lost in the pursuit to charge up 100 energy Continuation
𝐻𝑃. 𝐿𝑜𝑠𝑡 = 𝐷𝑃𝑆𝑦 ∗ 𝐷𝑎𝑚𝑎𝑔𝑒𝑅𝑒𝑑𝑢𝑐𝑡𝑖𝑜𝑛 ∗ 𝑡𝑖𝑚𝑒
We can substitute in HP and effective Health as Damage Reduction, and the amount of time is equal to the number
of attacks required to generate the required Energy, and then the time to use all the special moves.
𝐸𝑟𝑒𝑞
𝑡𝑖𝑚𝑒 = ∗ 𝐹𝑑𝑢𝑟𝑥
𝐹𝑒𝑛𝑔𝑥
𝐻𝑃𝑥 𝐸𝑟𝑒𝑞
𝐻𝑃. 𝐿𝑜𝑠𝑡 = 𝐷𝑃𝑆𝑦 ∗ ∗ 𝑀𝑢𝑙𝑡𝑖𝑦 ∗ ∗ 𝐹𝑑𝑢𝑟𝑥
𝐸𝐻𝑃𝑥 𝐹𝑒𝑛𝑔𝑥
Where Energy Required is
𝐸𝑟𝑒𝑞 = 100 − 𝐻𝑃. 𝐿𝑜𝑠𝑡 ∗ 𝐸𝑝𝐻𝑃
Health Lost v2 There is an error in the above equation. The time to generate all 100 energy ongoing, actually needs to include the
time you spend using the special moves:
𝐸𝑟𝑒𝑞
𝑡𝑖𝑚𝑒 = ∗ 𝐹𝑑𝑢𝑟𝑥 + (𝑆𝑑𝑢𝑟𝑥 + 0.5) ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔𝑥
But you don’t get this benefit on the first special, so if you do (n) 100 energy special moves
𝐸𝑟𝑒𝑞
𝑛∗ ∗ 𝐹𝑑𝑢𝑟𝑥 + (𝑛 − 1) ∗ (𝑆𝑑𝑢𝑟𝑥 + 0.5) ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔𝑥
𝑡𝑖𝑚𝑒 =
𝑛
Then we need to make an assumption of n; I’d hazard a guess you would only do 2 special move sets in each game,
but you would only need to wait for the energy needed for 1 special attack, so n*Sc where n is 2
𝐸𝑟𝑒𝑞
2 ∗ 𝑆𝑐 ∗ ∗ 𝐹𝑑𝑢𝑟𝑥 + (2 ∗ 𝑆𝑐 − 1) ∗ (𝑆𝑑𝑢𝑟𝑥 + 0.5) ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔𝑥
𝑡𝑖𝑚𝑒 =
2 ∗ 𝑆𝑐
Simplify:
𝐸𝑟𝑒𝑞 (2 ∗ 𝑆𝑐 − 1)
𝑡𝑖𝑚𝑒 = ∗ 𝐹𝑑𝑢𝑟𝑥 + ∗ (𝑆𝑑𝑢𝑟𝑥 + 0.5) ∗ 𝑆𝑐
𝐹𝑒𝑛𝑔𝑥 2 ∗ 𝑆𝑐
The added bonus to this is it gives an advantage to multiple charge special moves, which is something everyone
would predict but hard to show how in the maths.
𝐻𝑃𝑥 𝐸𝑟𝑒𝑞 (2 ∗ 𝑆𝑐 − 1)
𝐻𝑃. 𝐿𝑜𝑠𝑡 = 𝐷𝑃𝑆𝑦 ∗ ∗ 𝑀𝑢𝑙𝑡𝑖𝑦 ∗ ( ∗ 𝐹𝑑𝑢𝑟𝑥 + ∗ (𝑆𝑑𝑢𝑟𝑥 + 0.5) ∗ 𝑆𝑐)
𝐸𝐻𝑃𝑥 𝐹𝑒𝑛𝑔𝑥 2 ∗ 𝑆𝑐
With Ereq still being:
𝐸𝑟𝑒𝑞 = 100 − 𝐻𝑃. 𝐿𝑜𝑠𝑡 ∗ 𝐸𝑝𝐻𝑃
Again, Iteration is required.
Health Lost v2
The defender equation would be slightly different to account for the 1.5s delay between attacks:
Defender
𝐻𝑃𝑦 𝐸𝑟𝑒𝑞 (2 ∗ 𝑆𝑐 − 1) 𝐸𝑟𝑒𝑞
𝐻𝑃. 𝐿𝑜𝑠𝑡 = 𝐷𝑃𝑆𝑥 ∗ ∗ 𝑀𝑢𝑙𝑡𝑖𝑥 ∗ ( ∗ 𝐹𝑑𝑢𝑟𝑦 + ∗ (𝑆𝑑𝑢𝑟𝑦 ) ∗ 𝑆𝑐 + 2 ∗ ( + 𝑆𝑐))
𝐸𝐻𝑃𝑦 𝐹𝑒𝑛𝑔𝑦 2 ∗ 𝑆𝑐 𝐹𝑒𝑛𝑔𝑦
With Ereq still being:
𝐸𝑟𝑒𝑞 = 100 − 𝐻𝑃. 𝐿𝑜𝑠𝑡 ∗ 𝐸𝑝𝐻𝑃
Again, Iteration is required.
However this equation produces a non-converging iteration, so it had to be modified by assuming Ereq = 25 less
than the attacking result.
It also produced incorrect results, as the defender generally attacks an extra fast attack than what they need energy
to produce, possibly due to when the AI decides to complete the next attack.
Total Damage The total damage that a pokemon can do is it’s DPS for the length of time it’s alive Continuation
Output 𝑇𝐷𝑂𝑥 = 𝐷𝑃𝑆𝑥 ∗ 𝐴𝑙𝑖𝑣𝑒𝑇𝑖𝑚𝑒
Alive time is how much damage you can sustain by the rate it’s applied
𝐸𝐻𝑃𝑥
𝑇𝐷𝑂𝑥 = 𝐷𝑃𝑆𝑥 ∗
𝐷𝑃𝑆𝑦
And now we apply the Type Modifiers:
𝐸𝐻𝑃𝑥 𝑀𝑢𝑙𝑡𝑖𝑥
𝑇𝐷𝑂𝑥 = 𝐷𝑃𝑆𝑥 ∗ ∗
𝐷𝑃𝑆𝑦 𝑀𝑢𝑙𝑡𝑖𝑦
Summary CP The game ranks Pokemon based on CP where it is proportion to the three main stats:
𝐶𝑃 ∝ 𝐴𝑡𝑘 ∗ 𝐷𝑒𝑓 0.5 ∗ 𝐻𝑃0.5
You will notice that Defence has diminishing returns due to the minimum damage each attack will do.
If you wanted to ignore the minimum damage (as at higher level it’s quite small addition):