
Hello again, we have a few minor updates from our ongoing research to share, this time will be more in-depth information, specifically about the CPM Chaos and Power-Up Cost Anomalies (they are actually linked).
Max Energy Formula
Last time we talked about GMax Meowth having a modified Max Energy Formula which actually made charge moves worth it, and we now have some more information to share about this:
During GMax Meowth Battles, 2 changes were done to the max formula:
All max energy gained was multiplied by a factor of 15 and max energy now is measured with decimal values
This is an easy one, on the max energy formula before the result is rounded down to an integer (or is set to 1 if it's below 1), damage related max energy gain was multiplied by 15 (compared to the usual). Additionally, now the max energy values are decimal numbers and not integers, so you could have one move that generates 1.5 max energy, and two of them would generate 3 energy. However we saw some evidence that they are still flooring the values to 2 decimal places during the final calculation, at least for Dynamax Regice. GMax Meowth had 80k HP and a CPM value of 3.0 (the highest ever recorded) and under the usual formula you’d only gain 1 max energy per 400 damage dealt, so you’d need to deal more than 800 damage in one hit in order to gain more than 1 max energy, which obviously enough, is flat out impossible even against a meowth, given the cpm value of 3.0. With the new formula though you’d gain 1 max energy per 26.67 damage dealt, and in order to gain more than 1 max energy you’d only need to deal 27 damage, which would then generate 1.0125 max energy. While this didn’t mean much for low damage fast moves, it did increase the max energy gain of some stronger super effective charge moves beyond what would be needed in order to make them worth using (from a max energy gain perspective), especially when using a max shroom. For instance a Level 50 Zamazenta with no helpers and active max shroom dealt 162 damage with Close Combat against GMax Meowth which resulted in 6.075 max energy being created over a duration of 5 turns (2.5 sec), meaning it actually generated more max energy then just spamming fast moves.
Later on with Dmax Regice this trend continued. However the multiplier was not 15 for Regice, it was just 2, which still made some charge moves worth it though. Zacian with Behemoth Blade this time, generating 4.32 Max Energy against Regice without any bonuses at all and a whopping 8.64 max energy while just being under the effect of a shroom.
And last but not least we just had the fat rat GMax Pikachu in max battles, which had a CPM of 1.7 with 80k HP and it showed the same max energy formula as GMax Meowth did with a multiplier of 15. However, low tier bosses (from tier 1 to tier 3) still have max energy values as integers. These new changes only applied to Legendary and GMax bosses.
Max Energy Jank due to float shenanigans
We noticed something else though and luckily enough we had enough time with DMax Regice in order to get to the bottom of it (while not being able to fully solve this behaviour with GMax Pikachu though):
Some damage values did not generate the expected max energy amount, but slightly less. We were actually lucky that one of our test values, being 115 damage, was one of such values. When dealing 115 damage against regice you’d expect a max energy gain of 2.3 max energy, however in reality, only 2.29 max energy was being created. We proved this due to a jank in the Max Meter bar Segment display of the max battle:
Remember that bosses HP bars only show 100 segments and lose 1 segment whenever you deal damage equal to 1% of their health or more? Initially we believed there to be some obfuscation happening, because at some values it did not lose a segment when you dealt the exactly required amount of damage for it, but would lose it 1 damage point later. This was not some obfuscation but in fact a rounding error. In particular, this happens at exactly 15%, 27%, 30%, 54% and 60%, because for example with 54% the operation
Ceiling(54/100) = 55
when using floats. And the Max Meter has this behaviour as well, and this enabled us to prove whether or not we’re at a max energy value that is an exact integer or not. This can be easily seen when filling the max meter with 100 fast moves that generate 1.0 energy, and you will see a jump from 14% to 16% followed by a small stop before it jumps to 17%, and the same for the other 4 glitched points.
So because when we use charge moves that dealt 2 * 115 damage (2 * 2.29 = 4.58 energy) + 71 damage (1.42 energy) and other than that only used fast moves worth 1.0 max energy, we observed one of this jumps in the max energy meter, where one fast move would let it jump from 53% to 55%, but the next fast move did not visually generate any max energy at all, which would only happen at an integer value, in particular at 54.0 (6.0 from the charge moves and 48.0 from 48 fast moves), as if we had 53.01 or 53.99 max energy it would correctly show as 54%.
Interestingly enough, 2.3 is one of the few values that on the operation Floor(2.3 * 100) / 100 = 2.29 it results in a different value than the original one when working with floats. Another of these values is 1.16, when dealing 58 damage, which should actually be 1.15. To verify it, we made another test using charge moves that dealt 2 * 58 damage (2 * 1.15 = 2.3 energy) + 85 damage (1.7 energy), and we also observed the double jump from 53% to 55%. This proved that the max energy values on Regice had only 2 decimal places.
Currently we are using this max battle formula, which creates results which we believe are accurate for Regice and close to accurate for GMax Pikachu and Meowth (pseudocode):
GetMaxEnergy (int Damage, int HP, int ME_Mult, int ME_Decimals)
{
double Max_Energy_Gain = Damage * 200 * ME_Mult / HP;
Max_Energy_Gain = Floor(Max_Energy_Gain * 10^ME_Decimals) / (10^ME_Decimals);
Max_Energy_Gain = Max(Max_Energy_Gain, 1);
return (Max_Energy_Gain);
}
ME_Decimals = 2 for Regice, Meowth and Pikachu, 0 for everything else
ME_Mult = 15 for Meowth and Pikachu, 2 for Regice, 1 for everything else
Due to the 3 hour limitation though we noticed some additional weird behaviours on GMax Pikachu which were NOT explained by this formula, so we still have some work to do in that regard.
Max Battle Boss Attack Rate
This new buff to max energy generation didn’t come alone, as the boss attack rate has also been slightly buffed. With Regice the target moves duration decreased in 1 turn (0.5s), from 10.0s to 9.5s (+ move duration), and the spread moves duration decreased in 2 turns (1.0s), from 9.5s to 8.5s (+ move duration). With Pikachu and Meowth the target moves duration decreased in 1 turn (0.5s) as well, from 5.0s to 4.5s (+ move duration), but spread moves duration remains the same at 2.5s + move duration (thankfully because they are already extremely fast). However not everything is bad news, as after a Max Phase, the first boss attack will be delayed by 1 additional turn (0.5s), making the first hit land roughly at the same time as before, but subsequent moves happening earlier. This change unfortunately made it impossible to execute the stun-lock strategy on Regice (with 4 players reaching Max Phase before its first move lands) as the first spread move will land 1 turn earlier.
CPM Chaos & Power-Up Costs
Short Info on what the ‘CPM Chaos’ is:
Last year we discovered that each Pokémon you catch has at least 2 cpm values: a catch_cpm and a powerup_cpm. catch_cpm stays the same all the time and is equal to the commonly known cpm values for the level that you caught the pokémon at, and powerup_cpm is equal to all cpm added on top of the catch_cpm to reach the cpm for the level that you powered your pokémon up to. But these numbers being floats, and in this case especially, 2 floats which can be in different floating point error ranges, the result of the sum of the 2 values does not always equal the expected cpm for that level, resulting in some pokémon being ever so slightly stronger or weaker than the expected for that level, depending on the level it was caught at.
While we still were not able to perfectly recreate this cpm formula ourselves, we are getting closer and also have some datamined cpm information thanks to the CalcyIV devs work: PoGO Power-Up CPM
(disclaimer: the CalcyIV app itself did NOT mine this data from its users, this was done by the devs themselves in a private setting using their own accounts).
This led us down another rabbit hole: slight anomalies in the Power-Up Cost for some levels.
Sometimes when you power-up a pokémon, power-up cost on specific levels did not align with the expected values, but of a previous level. This seems to be connected to CPM Chaos as whenever the sum of the 2 CPMs is lower than the expected CPM for that level, it adds the previous levels power-up costs, letting us to believe that the game simply looks up on the cpm table and it shows the power-up costs for the next lower or equal cpm value.
One of our members managed to assemble a power-up calculator that has these anomalies built in:
PoGO – Power Up Cost
Research Team:
u/flyfunner (Lead Researcher, coding, Data Analysis)
u/bmenrigh (Co-Lead, coding, Data Analysis)
'alexelgt' (Data collection, Data analysis, coding, gamemaster supply)
CalcyIV-Team (Data collection)
u/eli5questions (Data Collection & Analysis)
u/MocTalox (Data Collection & Analysis, coding)
u/CreatorBeastGD (Data Collection & Analysis)
u/Key-Bag-4059 (Data Collection)
by Flyfunner