How to Calculate Comprehensive DPS

Submit Feedback or Error
Article by


This article introduces the Comprehensive DPS model. The model takes into account of:

  • Energy gained from taking damage
  • Energy wasted when fainting

when calculating a Pokemon's DPS. Inspired by this work, I have improved the DPS model and made several applications:


We are given two input variables:

  • $x$: the energy left of the Pokemon when the battle ends
  • $y$: the DPS of the enemy

The following parameters are from the Game Master file or calculated by the damage formula:

  • $FDmg$: the Damage per use of the fast move
  • $CDmg$: the Damage per use of the charge move
  • $FE$: the Energy gained per use of the fast move, positive
  • $CE$: the Energy used per use of the charge move, positive
  • $FDur$: the Duration of the fast move in seconds
  • $CDur$: the Duration of the charge move in seconds
  • $CDWS$: the Damage Window Start of the charge move in seconds
  • $Def$: the current Defense stat of the subject Pokemon
  • $HP$: the effective HP of the subject Pokemon

We further define:

  • $FDPS$: the DPS of a fast move, which equals to $\frac { FDmg }{ FDur } $
  • $FEPS$: the EPS of a fast move, which equals to $\frac { FE }{ FDur } $
  • $CDPS$: the DPS of a charge move, which equals to $\frac { CDmg }{ CDur } $
  • $CEPS$: the EPS of a charge move, which equals to $\frac { CE }{ CDur } $

Our metrics of interest are:

  • $DPS_{0}$: the Simple Cycle DPS
  • $DPS$: the Comprehensive DPS


$$ DPS = DPS_{0} + \frac{ CDPS - FDPS } { CEPS + FEPS } \cdot (0.5 - \frac{ x }{ HP }) \cdot y $$ where $$ DPS_{0} = \frac { FDPS \cdot CEPS + CDPS \cdot FEPS }{ CEPS + FEPS } $$ Special adjustment for one-bar charge moves: $$ CEPS' = \frac{ CE + 0.5 FE + 0.5 y \cdot CDWS }{ CDur } $$

DPS Theory


Aside from assumed game mechanics (e.g., damage is converted to energy at a ratio of $0.5$), the Comprehensive DPS model makes the following assumptions:


This is almost always true, as it is the very incentive to use charge move. There are some exceptions though. For example, when a Confusion/Low Sweep user battles against Gengar, spamming fast move yields higher DPS. One could alleviate the issue by simply taking the maximum of $FDPS$ and $DPS$.

x and y are independent variables

This implies that the enemy's DPS ($y$) is steady and independent of our DPS. This isn't always true in solo gym battles or short-man raids, where if you hit the enemy harder, the enemy gets charged energy faster and hits you with more charge moves in return. The dynamics in such cases are better modeled by a simulator; Comprehensive DPS best models populous PvE battles.

No time is wasted

While the Pokemon is on field, it is either in fast move cooldown or in charge move cooldown. It never sits idle.



  • $n$: the total number of fast moves used by the Pokemon in the battle
  • $m$: the total number of charge moves used by the Pokemon in the battle
  • $T$: the duration of the battle

Since the Pokemon never sits idles, we have:

$$ n \cdot FDur + m \cdot CDur = T $$

By the conservation of energy, we have:

$$ n \cdot FE + 0.5 HP = m \cdot CE + x $$

For one-bar charge moves, to account for overcharge, we adjust $CE$ by treating it as if it requires more energy to fire. The overcharge energy results from fast move overcharging (on average $0.5 FE$ per cycle) and losing the energy from damage before the energy actually gets used ($CDWS$ since charge move activation):

$$ CE' = CE + 0.5 FE + 0.5 y \cdot CDWS $$

Solve the above linear system for $n$ and $m$:

$$ n = \frac { T \cdot CE + CDur \cdot (x - 0.5 HP) }{ FDur \cdot CE + CDur \cdot FE } $$ $$ m = \frac { T \cdot FE - FDur \cdot (x - 0.5 HP) }{ FDur \cdot CE + CDur \cdot FE } $$

Last but not least:

$$ T = \frac { HP }{ y } $$

Finally, by the definition of DPS (total damage over time):

$$ DPS = \frac { n \cdot FDmg + m \cdot CDmg } { T } $$ $$ = ... $$ $$ = DPS_{0} + \frac{ CDPS - FDPS } { CEPS + FEPS } \cdot (0.5 - \frac{ x }{ HP }) \cdot y $$

Relationship with Simple Cycle DPS

How does the Comprehensive DPS ($DPS$) relate to the traditional Simple Cycle DPS ($DPS_{0}$)?

Recall that:

$$ DPS = DPS_{0} + \frac{ CDPS - FDPS } { CEPS + FEPS } \cdot (0.5 - \frac{ x }{ HP }) \cdot y $$

Some implications:

  • When $y = 0$ (the enemy does not deal damage; the battle lasts forever), $DPS = DPS_{0}$.
  • Denote the term $$ \frac{ CDPS - FDPS } { CEPS + FEPS } $$ as $EE$ ("Energy Efficiency"). By assumption, $CDPS > FDPS$, therefore $EE > 0$.
  • Since $y > 0$ and $EE > 0$, the relationship between $DPS$ and $DPS_{0}$ depends only on the sign of $(0.5 HP - x)$:
    • When $x > 0.5 HP$ (more energy is wasted than gained from damage), $DPS < DPS_{0}$
    • When $x < 0.5 HP$ (less energy is wasted than gained from damage), $DPS > DPS_{0}$


Comprehensive DPS Spreadsheet

When making a DPS spreadsheet, we want to compute the average value of $DPS(x,y)$ when $x$ and $y$ take different values. To do this, we need to make two more assumptions:

x and y are independent of each other

This is expected in the general sense (all possible matchups). The specific the matchup is, however, the more likely that $x$ correlates with $y$. Again, Comprehensive DPS evaluates the "general performance"; for very specific matchups, it is better to consult a simulator.

All other terms don't depend on x or y

For multi-bar moves, this holds. For one-bar moves, however, since we apply punishment to $CE$, $CEPS$ depends on $y$. That said, the relative error is minimal, so we can live by.

With all said, we have:

$$ E[DPS(x,y)] = DPS(E[x], E[y]) $$

Then the next question is how to find $E[x]$ and $E[y]$. Basing on empirical simulation data, the following formulas are used in a neutral setting (against a generic enemy):

$$ \begin{cases} E[x] = 0.5 CE + 0.5 FE \\ E[y] = \frac { 900 } { Def } \end{cases} $$

In a specific setting (when the enemy is specified), some more sophisticated formulas are used:

$$ \begin{cases} E[x] = 0.5 CE + 0.5 FE + 0.5 \frac{ \lambda \cdot FDmg_{enemy} + CDmg_{enemy} } { \lambda + 1 } \\ E[y] = \frac{ \lambda \cdot FDmg_{enemy} + CDmg_{enemy} } { \lambda \cdot (FDur_{enemy} + 2) + CDur_{enemy} + 2 } \end{cases} $$


  • $\lambda = 3$ if the enemy has one-bar charge move
  • $\lambda = 1.5$ if the enemy has two-bar charge move
  • $\lambda = 1$ if the enemy has three-bar charge move

On an extra note, the damage formula in DPS spreadsheet doesn't use $floor() + 1$; instead, it adds $0.5$ after the fraction term $(0.5 \cdot \frac{Atk}{Def} \cdot Power \cdot Multipliers)$.