📐 Math

Pokemon Go TDO Calculator - Best DPS & Total Damage Tool

Free Pokemon Go TDO calculator to compare total damage output instantly. Enter stats, moves, and weather to find your best battler.

⚡ Free to use 📱 Mobile friendly 🕒 Updated: June 13, 2026
🧮 Pokemon Go Tdo Calculator
function calculate() { const baseAtk = parseFloat(document.getElementById('i1').value) || 0; const baseDef = parseFloat(document.getElementById('i2').value) || 0; const baseSta = parseFloat(document.getElementById('i3').value) || 0; const ivAtk = parseFloat(document.getElementById('i4').value) || 0; const ivDef = parseFloat(document.getElementById('i5').value) || 0; const ivSta = parseFloat(document.getElementById('i6').value) || 0; const level = parseFloat(document.getElementById('i7').value) || 1; const cpMultiplierInput = parseFloat(document.getElementById('i8').value) || 0; const fastPower = parseFloat(document.getElementById('i9').value) || 0; const chargePower = parseFloat(document.getElementById('i10').value) || 0; const stab = parseFloat(document.getElementById('i11').value) || 1; const weather = parseFloat(document.getElementById('i12').value) || 1; const typeEff = parseFloat(document.getElementById('i13').value) || 1; const friend = parseFloat(document.getElementById('i14').value) || 1; // CP Multiplier table for levels 1-50 (half levels) const cpTable = { 1:0.094, 1.5:0.135137, 2:0.166, 2.5:0.192, 3:0.215, 3.5:0.236, 4:0.255, 4.5:0.273, 5:0.29, 5.5:0.306, 6:0.321, 6.5:0.335, 7:0.349, 7.5:0.362, 8:0.375, 8.5:0.387, 9:0.399, 9.5:0.411, 10:0.422, 10.5:0.432, 11:0.443, 11.5:0.453, 12:0.462, 12.5:0.472, 13:0.481, 13.5:0.49, 14:0.499, 14.5:0.507, 15:0.516, 15.5:0.524, 16:0.532, 16.5:0.54, 17:0.549, 17.5:0.557, 18:0.564, 18.5:0.572, 19:0.58, 19.5:0.587, 20:0.597, 20.5:0.605, 21:0.613, 21.5:0.621, 22:0.629, 22.5:0.637, 23:0.645, 23.5:0.653, 24:0.661, 24.5:0.669, 25:0.676, 25.5:0.684, 26:0.692, 26.5:0.7, 27:0.708, 27.5:0.715, 28:0.723, 28.5:0.731, 29:0.739, 29.5:0.747, 30:0.754, 30.5:0.762, 31:0.77, 31.5:0.777, 32:0.785, 32.5:0.793, 33:0.8, 33.5:0.808, 34:0.816, 34.5:0.823, 35:0.831, 35.5:0.839, 36:0.846, 36.5:0.854, 37:0.861, 37.5:0.869, 38:0.876, 38.5:0.884, 39:0.891, 39.5:0.899, 40:0.906, 40.5:0.91, 41:0.915, 41.5:0.92, 42:0.925, 42.5:0.93, 43:0.935, 43.5:0.94, 44:0.945, 44.5:0.95, 45:0.955, 45.5:0.96, 46:0.965, 46.5:0.97, 47:0.975, 47.5:0.98, 48:0.985, 48.5:0.99, 49:0.995, 49.5:1.0, 50:1.0 }; let cpMultiplier; if (cpMultiplierInput > 0) { cpMultiplier = cpMultiplierInput; } else { const roundedLevel = Math.round(level * 2) / 2; cpMultiplier = cpTable[roundedLevel] || 0.5; } // Total stats const totalAtk = (baseAtk + ivAtk) * cpMultiplier; const totalDef = (baseDef + ivDef) * cpMultiplier; const totalSta = (baseSta + ivSta) * cpMultiplier; // CP formula const cp = Math.floor((totalAtk * Math.sqrt(totalDef) * Math.sqrt(totalSta)) / 10); // HP const hp = Math.floor(totalSta); // Damage formula (simplified TDO) const fastDamage = Math.floor(0.5 * fastPower * (totalAtk / totalDef) * stab * weather * typeEff * friend) + 1; const chargeDamage = Math.floor(0.5 * chargePower * (totalAtk / totalDef) * stab * weather * typeEff * friend) + 1; // TDO = Total Damage Output over lifetime (assuming 1 fast + 1 charge per cycle, survive until HP runs out) // Using standard gym battle simulation: fast move every 0.5s, charge every 2s const fastTime = 0.5; const chargeTime = 2; const cycleTime = fastTime + chargeTime; const totalTimeAlive = hp * 0.5; // rough estimate: 0.5s per HP lost from opponent fast moves const cycles = Math.floor(totalTimeAlive / cycleTime); const tdoFast = cycles * fastDamage; const tdoCharge = cycles * chargeDamage; const totalTDO = tdoFast + tdoCharge; // DPS const totalTime = cycles * cycleTime; const dps = totalTime > 0 ? (totalTDO / totalTime) : 0; // Color coding function getColor(value, thresholds) { if (value >= thresholds.good) return 'green'; if (value >= thresholds.warning) return 'yellow'; return 'red'; } const tdoColor = getColor(totalTDO, {good: 500, warning: 200}); const dpsColor = getColor(dps, {good: 15, warning: 8}); const cpColor = getColor(cp, {good: 3000, warning: 1500}); // Primary result const label = 'Total Damage Output (TDO)'; const value = totalTDO.toLocaleString(undefined, {maximumFractionDigits: 0}); const sub = `vs neutral opponent`; // Result grid const gridItems = [ {label: 'CP', value: cp.toLocaleString(), cls: cpColor}, {label: 'HP', value: hp.toLocaleString(), cls: 'green'}, {label: 'DPS', value: dps.toFixed(1), cls: dpsColor}, {label: 'Fast Move Dmg', value: fastDamage.toLocaleString(), cls: fastDamage > 10 ? 'green' : 'yellow'}, {label: 'Charge Move Dmg', value: chargeDamage.toLocaleString(), cls: chargeDamage > 80 ? 'green' : 'yellow'}, {label: 'Attack Stat', value: totalAtk.toFixed(1), cls: 'green'}, {label: 'Defense Stat', value: totalDef
📊 Top Pokémon by Total Damage Output (TDO) in Pokémon Go Raids

What is Pokemon Go Tdo Calculator?

A Pokemon Go TDO Calculator is a specialized analytical tool that computes the Total Damage Output of a specific Pokémon against a given raid boss or Gym defender. Unlike simpler metrics like CP or DPS, TDO accounts for the entire duration of a battle, factoring in the Pokémon's survivability, move set, type effectiveness, and stat product to deliver a realistic measure of how much damage a single Pokémon will deal before fainting. This is the gold standard for serious raiders, PvP enthusiasts, and Gym attackers who need to know which Pokémon will contribute the most to a group effort or solo challenge.

Hardcore players, raid planners, and community leaders use this calculator to optimize their battle parties, conserve resources like Stardust and Rare Candy, and identify hidden gems that outperform popular but fragile attackers. A Pokémon with high DPS but low bulk might look good on paper but will faint quickly, wasting revival items and time; TDO reveals the true workhorses that stay in the fight longer. For anyone aiming to short-man raids, complete solo challenges, or maximize their damage contribution in a group, understanding TDO is non-negotiable.

This free online Pokemon Go TDO Calculator provides instant, accurate results with a step-by-step breakdown of the calculation, requiring no signup or download. Simply input your Pokémon's stats, moves, and the target defender, and the tool handles the complex formula behind the scenes.

How to Use This Pokemon Go Tdo Calculator

Using this calculator is straightforward, even if you are not familiar with the underlying math. The interface is designed to guide you through each required input, ensuring you get a precise TDO estimate for any scenario. Follow these five steps to calculate your Pokémon's true battle performance.

  1. Select Your Attacking Pokémon: Begin by choosing the Pokémon you want to evaluate from the dropdown menu or by typing its name. The calculator automatically loads its base stats (Attack, Defense, Stamina) from the latest game master data. If you have a specific IV combination, you can manually override the base stats by entering your Pokémon's exact Attack, Defense, and HP IVs (e.g., 15/15/15 for a hundo).
  2. Choose the Fast and Charged Moves: Select the Fast Move and Charged Move your Pokémon will use from the respective dropdown lists. The calculator uses the move's base power, duration, energy gain, and type to compute damage per turn. For accurate results, ensure you select the moves you actually plan to use in battle, as different move sets can drastically change TDO—even on the same Pokémon.
  3. Set the Target Defender: Choose the defending Pokémon (the raid boss or Gym defender) from the dropdown. Then, select its own Fast Move and Charged Move. This is critical because the defender's moves influence how much damage your attacker takes, which affects its survivability and total damage output. For raid bosses, you can also set the boss's Tier (Tier 1 through Mega Legendary) to automatically adjust its stats and CP multiplier.
  4. Adjust Battle Conditions: Fine-tune the scenario by setting the weather condition (e.g., Sunny, Rainy, Windy) to apply the 1.2x or 0.833x damage modifier for matching types. You can also toggle whether Friendship or Mega Evolution boosts are active, and set the number of players in the raid (for group scaling). For Gym battles, you can set the defender's motivation level (motivated, decayed, or between) which affects its actual CP and stats.
  5. Click Calculate and Review the Results: Press the "Calculate TDO" button. The tool will instantly display the Total Damage Output number, along with a detailed breakdown: number of turns survived, total damage dealt, damage per second (DPS), and a comparison to the average for that Pokémon's species. A color-coded bar shows how your Pokémon ranks—green for excellent, yellow for average, red for poor. You can also export the result as a shareable image or text summary.

For best accuracy, always double-check that your IVs and move selections match your actual Pokémon. The tool also includes a "Quick Fill" button that auto-populates with the current top-tier raid counters for common bosses, saving you time during raid preparation.

Formula and Calculation Method

The TDO calculation is based on the fundamental battle mechanics of Pokemon Go, combining damage per turn with the total number of turns a Pokémon survives. Unlike simple DPS calculators that ignore survivability, this method multiplies the average damage per turn by the total turns the Pokémon can endure, giving a holistic measure of contribution. The formula is derived from the game's damage equation and stamina mechanics.

Formula
TDO = (Damage per Turn) × (Total Turns Survived)

Where:
Damage per Turn = (0.5 × Power × ATK/DEF × STAB × Type × Weather × Friendship) + 1
Total Turns Survived = Floor( Stamina / (Damage Taken per Turn) )
Damage Taken per Turn = (0.5 × Power_def × DEF_atk / ATK_def × STAB_def × Type_def × Weather_def) + 1

Understanding the Variables

Each variable in the formula represents a specific game mechanic. Power is the base power of the move (e.g., 12 for Dragon Breath). ATK is the attacker's total Attack stat (base + IV). DEF is the defender's total Defense stat. STAB (Same-Type Attack Bonus) is 1.2 if the move type matches the Pokémon's type, otherwise 1.0. Type is the effectiveness multiplier (0.625, 0.8, 1.0, 1.6, or 2.56) based on the move type vs. defender's types. Weather is 1.2 if the weather boosts the move type, 0.833 if it hinders it, else 1.0. Friendship is a multiplier (1.0 to 1.2) based on friend level in the raid. Stamina is the attacker's total HP (base Stamina + IV). Power_def is the defender's move power. DEF_atk is the attacker's Defense stat. ATK_def is the defender's Attack stat. The "+1" at the end of each damage equation is the minimum damage rule, ensuring every hit deals at least 1 damage.

Step-by-Step Calculation

First, compute the damage your attacker deals per turn using the damage formula. For a Level 40 Dragonite with 15 ATK IV using Dragon Breath (Power 12) against a Level 50 Rayquaza with 15 DEF IV, you calculate: Base ATK = 263 + 15 = 278; Base DEF of Rayquaza = 170 + 15 = 185; STAB = 1.2 (Dragonite is Dragon type, Dragon Breath is Dragon type); Type effectiveness = 1.0 (Dragon vs Dragon is neutral); Weather = 1.0 (no boost); Friendship = 1.0. So Damage per Turn = (0.5 × 12 × 278/185 × 1.2 × 1.0 × 1.0 × 1.0) + 1 = (0.5 × 12 × 1.5027 × 1.2) + 1 = (0.5 × 21.6389) + 1 = 10.8194 + 1 = 11.8194 damage per turn. Second, compute the damage the defender deals per turn to the attacker. Assume Rayquaza uses Dragon Tail (Power 15). Defender's ATK (Rayquaza) = 284 + 15 = 299; Attacker's DEF (Dragonite) = 198 + 15 = 213; STAB = 1.2; Type = 1.0; Weather = 1.0. Damage Taken per Turn = (0.5 × 15 × 213/299 × 1.2 × 1.0 × 1.0 × 1.0) + 1 = (0.5 × 15 × 0.7124 × 1.2) + 1 = (0.5 × 12.8232) + 1 = 6.4116 + 1 = 7.4116 damage taken per turn. Third, calculate Total Turns Survived: Dragonite's Stamina = 209 (base) + 15 (IV) = 224 HP. Turns = Floor(224 / 7.4116) = Floor(30.22) = 30 turns. Finally, TDO = 11.8194 × 30 = 354.58 damage. This means Dragonite will deal approximately 355 total damage before fainting.

Example Calculation

Let's walk through a realistic scenario that a level 40 player might encounter during a Mega Rayquaza raid. You are preparing to short-man the raid with three players and need to know if your best Dragonite is worth powering up further or if you should use a different counter.

Example Scenario: A level 40 Dragonite (15/15/15 IVs, CP 3792) with Dragon Breath (Fast) and Outrage (Charged) against a Tier 6 Mega Rayquaza (15/15/15 IVs, CP 56789) with Dragon Tail (Fast) and Ancient Power (Charged). Weather is Windy (boosts Dragon moves for both). No friendship boost. Solo attacker (no other players).

First, compute attacker's damage per turn for the Fast Move (Dragon Breath). Dragonite ATK = 263 + 15 = 278. Rayquaza DEF = 170 + 15 = 185. Dragon Breath Power = 12. STAB = 1.2. Type = 1.0. Weather = 1.2 (Windy boosts Dragon). Damage per Turn (Fast) = (0.5 × 12 × 278/185 × 1.2 × 1.0 × 1.2) + 1 = (0.5 × 12 × 1.5027 × 1.44) + 1 = (0.5 × 25.966) + 1 = 12.983 + 1 = 13.983 damage per turn. For the Charged Move (Outrage, Power 110), the formula is the same but applied once when the move is used. Energy required for Outrage = 50. Dragon Breath generates 4 energy per turn. So it takes 50/4 = 12.5 turns (rounded up to 13 turns) to use Outrage. Over 30 turns, Dragonite can use Outrage twice (at turn 13 and turn 26). Damage per Outrage = (0.5 × 110 × 278/185 × 1.2 × 1.0 × 1.2) + 1 = (0.5 × 110 × 1.5027 × 1.44) + 1 = (0.5 × 238.03) + 1 = 119.015 + 1 = 120.015 damage per Outrage. Over 30 turns, Dragonite uses Dragon Breath 30 times (since each Charged Move consumes one turn but we count turns individually—actually, each Charged Move takes 1 turn, so total turns = 30, with 28 Fast Moves and 2 Charged Moves). Total Fast Move damage = 28 × 13.983 = 391.524. Total Charged Move damage = 2 × 120.015 = 240.03. Total damage = 391.524 + 240.03 = 631.554. Second, compute defender's damage per turn. Rayquaza ATK = 284 + 15 = 299. Dragonite DEF = 198 + 15 = 213. Dragon Tail Power = 15. STAB = 1.2. Type = 1.0. Weather = 1.2. Damage Taken per Turn = (0.5 × 15 × 213/299 × 1.2 × 1.0 × 1.2) + 1 = (0.5 × 15 × 0.7124 × 1.44) + 1 = (0.5 × 15.388) + 1 = 7.694 + 1 = 8.694 damage per turn. Dragonite Stamina = 209 + 15 = 224 HP. Turns survived = Floor(224 / 8.694) = Floor(25.76) = 25 turns. So TDO = 631.554 damage over 25 turns. This means Dragonite will deal approximately 632 total damage before fainting, surviving 25 turns. In a group of 3 players, each dealing similar damage, the boss's 15000 HP would be depleted in about 8 cycles (each player faints 3-4 times). This tells you that Dragonite is a solid choice but you might need to dodge some Charged Moves to extend survivability.

Another Example

Consider a level 40 Machamp (15/15/15 IVs, CP 3056) with Counter (Fast) and Dynamic Punch (Charged) against a Tier 5 Blissey (15/15/15 IVs, CP 27500) in a Gym. Weather is Cloudy (boosts Fighting moves). No friendship. Machamp ATK = 234 + 15 = 249. Blissey DEF = 229 + 15 = 244. Counter Power = 12. STAB = 1.2. Type = 2.56 (Fighting is super effective against Normal). Weather = 1.2. Damage per Turn (Fast) = (0.5 × 12 × 249/244 × 1.2 × 2.56 × 1.2) + 1 = (0.5 × 12 × 1.0205 × 3.6864) + 1 = (0.5 × 45.143) + 1 = 22.5715 + 1 = 23.5715. Dynamic Punch Power = 90. Energy cost = 50. Counter generates 8 energy per turn. Takes 7 turns to charge. Over 30 turns, Machamp uses Dynamic Punch 4 times. Total Fast Move damage = 26 × 23.5715 = 612.859. Total Charged Move damage = 4 × (0.5 × 90 × 249/244 × 1.2 × 2.56 × 1.2) + 1 = 4 × (0.5 × 90 × 1.0205 × 3.6864) + 1 = 4 × (0.5 × 338.58) + 1 = 4 × 169.29 + 1 = 677.16. Total damage = 612.859 + 677.16 = 1290.019. Defender (Blissey) uses Zen Headbutt (Power 12, Psychic type). Blissey ATK = 129 + 15 = 144. Machamp DEF = 159 + 15 = 174. Type = 1.6 (Psychic is super effective against Fighting). STAB = 1.2. Weather = 1.0. Damage Taken per Turn = (0.5 × 12 × 174/144 × 1.2 × 1.6 × 1.0) + 1 = (0.5 × 12 × 1.2083 × 1.92) + 1 = (0.5 × 27.84) + 1 = 13.92 + 1 = 14.92. Machamp Stamina = 207 + 15 = 222 HP. Turns survived = Floor(222 / 14.92) = Floor(14.88) = 14 turns. TDO = 1290.019 damage over 14 turns. This shows Machamp deals massive damage quickly but faints fast, making it a high DPS but low TDO option compared to bulkier Fighting types like Lucario.

Benefits of Using Pokemon Go Tdo Calculator

Understanding TDO is the difference between a mediocre raid performance and being the top contributor. This calculator provides actionable insights that go beyond simple CP rankings, helping you make smarter decisions about powering up, TM usage, and team composition. Here are the key benefits you will gain from regular use.