Skip to content
PoGoBattler

How Max Battles work

Everything on this page is what our simulator actually implements. Sources for each number are in docs/max-battles.md and in the comments of src/engine/max/constants.ts.

Pokemon artwork comes from the PokeMiners asset dump (the game's own 256x256 icons), with Pokemon HOME renders from PokeAPI for the handful of species PokeMiners has no GO icon for. Pokemon and Pokemon GO are trademarks of Nintendo / Creatures Inc. / GAME FREAK inc. and Niantic; this is an unofficial fan tool.

The two phases

A Max Battle alternates between a real-time attack phase, which plays exactly like a raid, and a Max Phase. Every attack that lands on the boss charges the team's shared Max Meter. The meter holds 100 points and each hit adds an amount proportional to the damage dealt divided by the boss's total HP, with a minimum of one point per hit. Swiping into one of the energy orbs that spawn during the fight adds 10 points.

That one rule shapes every counter list on this site. Against a 100,000 HP Gigantamax boss a fast move is worth the same single point whatever it hits for, so the fastest fast move charges Dynamax quickest and short fast moves such as Dragon Breath take over the top of the list. Against a 13,000 HP Tier 5 boss the proportional part is large enough that hard-hitting charged moves pay for their wind-up. Running no charged move at all is treated as a real option and every counter is simulated both ways.

When the meter fills there is a three second countdown, then the team Dynamaxes for 3 turns. Each turn every active Pokemon picks one Max Move. When the phase ends the meter resets to zero and the cycle repeats until the boss faints or every trainer is out of Pokemon.

Max Moves

Every Dynamax capable Pokemon starts with Max Attack; Max Guard and Max Spirit must be unlocked with Max Particles and Candy. Max Attack takes the type of the Pokemon's current fast move - except for a Gigantamax Pokemon, which always fires its own fixed G-Max Move (Gigantamax Charizard always uses the Fire type G-Max Wildfire, however you TM it), and except for Crowned Sword Zacian and Crowned Shield Zamazenta, whose Max Attack is the Steel type Behemoth Blade or Behemoth Bash whatever fast move they carry. Niantic: they "will be able to level up Behemoth Blade and Behemoth Bash to do more damage in Max Battles - just like other Max Attacks." Those two are also the forms' ordinary Charged Attacks, so the ranked lists equip them outside the Max Phase as well. Eternatus joins a Max Battle without changing size too, but its Dynamax Cannon is an Adventure Effect that raises every Max Move by a level, not a Max Attack of its own, so Eternatus follows the ordinary fast move rule.

Max MoveLevel 1Level 2Level 3Level 4
Max Attack (base power)250300350450
G-Max Move (base power)350400450550
Max Guard (shield HP per use)+20+40+60+80
Max Spirit (heal, % of user max HP)8%12%16%20%

Level 4 exists only while the Dynamax Cannon Adventure Effect is running. Max Guard stacks up to 3 uses on one Pokemon; Crowned Shield Zamazenta is the sole exception, stacking four and starting the battle with one shield already applied. Max Spirit heals the user and every ally that is actively battling.

What the boss does

The boss draws two Charged Attacks from its move pool for the fight and, in the model our lists use (Pokebattler's, read off its own simulator's battle logs in wave 9), throws no Fast Attacks at all. One of the two is the spread attack: it hits every trainer in the battle. The other targets a single trainer. It throws one every ~10.5 s (~7 s on the Gigantamax tier), and each is multiplied: the spread attack by 1x and the targeted one by 2x on Tiers 1-4 and 6, 2x and 3x on Legendary Tier 5 - Duraludon's Dragon Claw lands for 57 on a Blissey, twice the 28 a raid boss would deal. While the lobby is Dynamaxed the boss waits.

The targeted attack goes to the Pokemon holding the most active Max Guard shields. That is the whole reason a shielder works: shielding pulls the boss's aim off your attackers and onto someone who can absorb it. After about 30 attacks that took HP off someone (~310 s; 33 and ~230 s on Tier 6) the boss enrages and hits 9x as hard (3x on Tier 6). A hit Max Guard swallows whole does not count, so a well-shielded lobby holds the enrage off. The Lobby tab's dodge setting cuts a dodged targeted attack to a quarter; Pokebattler's lists never dodge, and neither do ours.

Parties and lobbies

You bring up to 3 Pokemon, at least one of which must be Dynamax capable. Switching has no cooldown. A trainer whose whole party has fainted can still Cheer, which trickles into the team's Max Meter. Tiers 1 to 5 hold four trainers; the Gigantamax tier splits a much larger lobby into teams of four, each with its own meter.

TierBoss HPBoss CPMMax ParticlesTrainersRewards
G-Max Tier 6100,0000.76448004025,000 XP + 25,000 Dust
Legendary Max Tier 513,0000.69771800415,000 XP + 15,000 Dust
Max Event Tier 420,0000.6800410,000 XP
Max Tier 310,0000.540047,500 XP
Max Tier 25,6000.37540046,000 XP
Max Tier 11,7000.1525045,000 XP

The numbers on our counter lists

  • How every row is fought - the way Pokebattler fights its own lists, read off its API in wave 9: the row's trainer with three of the Pokemon, plus Pokebattler's helpers - a Blissey on Max Spirit and a trainer of random Dynamax Pokemon for the Attackers and Chargers tabs (and a Blissey on Max Guard on Tier 6), and its "Auto" lobby for Healers and Shielders (Tiers 3-4: one Blissey in the same role; Tiers 5-6: a Blissey in the other support role and two random attackers). The Defenders tab keeps the wave-8 measurement (two trainers of the Pokemon, no enrage, rejoining after a wipe), which reproduces Pokebattler's Defender Rating column best (its Articuno #1 Gigalith, 195%, reads 203% that way). The battle is cut at Pokebattler's limit: 480 s of battle clock (400 s on Tier 5).
  • Estimator - trainers needed, Pokebattler's way: the Pokemon the row loses over its Time to Win, divided by three, plus (below Tier 6) the share of the battle limit the win takes, shrunk by those faints. A Pokemon that never faints and needs half the limit reads 0.5: Pokebattler's Zacian on Articuno is 124.5 s / 400 s = 0.31, its Excadrill on Duraludon 176 s / 480 s = 0.37. Until wave 9 ours counted faints alone, which is why our Duraludon read about twice Pokebattler's.
  • Power - 100 divided by the Estimator, as Pokebattler prints it.
  • Time to Win - the boss's HP over the row's own damage per second while its Pokemon are on the field: how long its trainer alone would need. A healer on Max Spirit only counts its Fast and Charged Attacks, which is why the Healers tab reads thousands of seconds, as Pokebattler's does. Shielders print Time: when their battle ended.
  • Sort by - each tab is ordered as Pokebattler orders it (Attack Rating, Defender Rating, Survives 2 Spreads then Charger Rating, Heal Rating, Survives 2 Spreads then Charger Rating), and can be re-ordered by Time to Win or by CP. Sorting never changes which 30 Pokemon are on the list.
  • Hidden Power is printed with the type we assumed, e.g. Hidden Power (Rock). In Pokemon GO the move is never Normal type, whatever the Game Master says: it is one of 16 types, fixed per Pokemon and rerollable with a Fast TM, so a counter list answers "what is this Pokemon worth if you TM it for this boss" and takes the best of the 16. It is off by default, as on Pokebattler's lists today.
  • Shielder Rating - shield uptime times the boss damage soaked per Pokemon lost, holding Max Guard in Pokebattler's lobby, relative to the best shielder for this boss. Survives to Enrage is the share of that battle its first Pokemon stands. The list itself is ordered as Pokebattler's Shielders tab is - Survives 2 Spreads, then the shielder's own Charger Rating to one decimal - with Shielder Rating breaking ties.
  • Heal Rating - HP restored per second of the battle, times the share of it the healer's first Pokemon stands, over a per-tier constant: 14.2 HP/s on Tiers 1-3 and 5, 25 on Tier 4, 62.5 on Tier 6. That is Pokebattler's own Heal Rating, recovered from its published fields (one constant per tier across 10 bosses, e.g. Machop 14.2 on all 8 rows read). Total Heal is the HP its three healers restore across the lobby in that battle - Max Spirit heals every active Pokemon by a share of the healer's own HP - so it does not grow with the Time to Win.
  • The ×N badge on a counter is how many of its Pokemon fainted.

What the model is least sure about

Niantic publishes the Max Phase length, the 100-point meter, the Max Attack / Guard / Spirit power tables and every boss stat. It publishes nothing about how often a boss spends its energy, how much meter one hit is worth, how many Max Guards stack, or who the boss aims at. Those are the numbers a counter list is actually built on, and ours are calibrated guesses, each marked UNVERIFIED in the engine.

Wave 9 replaced the biggest of those guesses with readings. Pokebattler's Lobby simulator asks its server for single battles with the whole combat log, and its counter lists come with every column it computes, so its boss (no Fast Attacks; a Charged Attack every ~10.5 s; spread and targeted multipliers), its meter (one point per Fast Attack, ten per energy orb, an orb per trainer every ~15 s), its lobby helpers, its enrage, its Estimator and its Heal Rating can now be read rather than fitted. Still guesses: the random helper (one generic Pokemon here, a random team there), the Attack and Defender Rating formulas (fits to its columns), and why its Crowned Zacian and Zamazenta Shielders rows run ~360-400 s where every other Shielder on that boss ends near 150 s.

So we measure them instead of arguing about them. npx tsx gauntlet/validate-max.ts --calibrate re-ranks 8 bosses' attacker lists and 2 tank lists against Pokebattler's own published top 10s, once per candidate setting, changing one mechanic at a time and leaving every other one alone. The spread inside a row is exactly "how much would getting this one mechanic right move our agreement with the reference site".

MechanicWhat we assumeSensitivityHeadroom
Max meter fill rate1 point per hit minimum, 12 more per 1% of the boss's HP dealtbest tried: 1 point per hit minimum, 6 more per 1% of the boss's HP dealt12.7 pts0.2 ptsnoise
Max Guard stacking3 shields stack on one Pokemonalso the best setting tried1.4 pts0.0 ptsnoise
Boss targetingaims at whoever holds the most Max Guard shieldsbest tried: aims at a uniformly random trainer0.1 pts0.1 ptsnoise
Large-attack timingspends its energy half the time it has any; half of those are the large attackalso the best setting tried3.2 pts0.0 ptsnoise
Max Phase turn length2.5 seconds per Max Move turnalso the best setting tried0.6 pts0.0 ptsnoise
Boss moveset samplingwalks the boss's Charged Attack pairs in Game Master orderalso the best setting tried1.3 pts0.0 ptsnoise
Fast-moves-only buildsoffered, because no Charged Attack is a real Max Battle strategyalso the best setting tried0.6 pts0.0 ptsnoise
Ranking metricorders the list on party members the boss eats, ignoring how long it takesbest tried: party members eaten x (solo time to win / 100) ^ 0.23.6 pts0.3 ptsnoise
Tank Rating bulk termshield uptime x (damage soaked per Pokemon lost) ^ 0.25best tried: shield uptime x (damage soaked per Pokemon lost) ^ 0.54.2 pts0.1 ptsnoise

Sensitivity is how far apart the best and worst settings of that one mechanic land, in points of top-10 agreement with Pokebattler, with every other mechanic held at the value we ship. A big sensitivity means the mechanic matters a lot and getting it wrong would be expensive. Headroom is how much better than our own setting the best one did — that is the number that says whether changing it would help. Noise floor: 3.7 points (9 seeds). Anything smaller is a coin flip, and we do not ship it as an improvement.

The result, plainly: no mechanic in the sweep beats the value we already ship by more than Monte Carlo noise, so the four the question names are not where our remaining disagreement with Pokebattler lives. The one the list is most sensitive to by a wide margin is the Max Meter fill rate - 12.7 points between its best and worst settings, against 0.1 to 3.2 for the other three - and almost all of that spread comes from the one-point-per-hit floor rather than the damage-proportional term: remove the floor and agreement collapses from 44% to 37%.

Two things are worth saying out loud about that. The first is that a mechanic with a large spread and no headroom is not unimportant - it is the one we would most regret getting wrong, and the reason the Max Meter's one-point-per-hit floor is the single most consequential line in the engine. The second is that the remaining disagreement with Pokebattler is therefore not hiding in these knobs, so the next place to look is the reference data itself: the two sites do not agree on attacker level defaults, on which Pokemon are even eligible, or in one case on the boss's own HP.

Back to the Max Battle boss list