"Testing Gym Combat Misconceptions 2"
#PokemonGO: The last Testing Misconceptions thread did pretty well. Its claims have become accepted as common knowledge, and it even got me an offer to join the GamePress Research Team.GamePress provided me more resources for research, a great team to collaborate and bounce ideas with, but also a demand for greater rigour. We dived deep into Pokemon Go mechanics, and found many pre-existing assumptions about Gym Combat Mechanics incomplete or flawed.Ironically, this include some of the claims I made in the original Testing Misconceptions thread!MethodologyBulk of the experiments was designed and recorded by fellow GamePress Researcher /u/dondon151, which we analyzed using the free subtitling tool Aegisub. I found the subtitling software ideal for quickly stepping through video, frame-by-frame, back and forth. The ability to create a subtitle track of the timestamps is also handy for reviewing the results.Since we're primarily interested in defender mechanics, tests are recorded largely without attacker action to avoid any introduced errors. We primarily use the "yellow flashes" to time each defender attack, recording both the Game Clock as well as vod time.SpreadsheetTimestamp clipsVODs and subtitlesDefender's DelayReference sheet: Sheet10, 1500+RNG() TestIt has become common knowledge that defenders take a 2 second delay between each quick move. While our data support a 2 second defender's delay on the average, it soon became clear that there's a whole lot of variance between individual attacks:MovesCDDefender CDDefender DelayBug Bite45024862036Tackle110031462046Confusion151034591949Dragon Breath50024511951Bubble230043172017That looks great on the surface, but underneath, something's off. Take for example, Bug Bite, whose Defender CD has an 2486ms average, but varies wildly, ranging from 1488ms to 2967ms. Defender CD for Bug Bite has a massive 301ms standard deviation, well beyond any introduced error (recording, network, client latency) can reasonably contribute. This is true across all our recorded data, so something new must be there.During a discussion with fellow Gamepress Researcher /u/doublefelix921, we noted that an uniform distribution, for example the popular rand() function, also has standard deviation of about 0.3 (to be precise: stdev=1/12.5 ).We quickly plot out all the defender's delay in our existing data, and it looks very flat indeed!Verdict: Defender's Delay is uniformly distributed between 1500ms ~ 2500ms.This also help explains why Game_Master has a "enemyAttackInterval": 1.5," (line 357), in contrast with the 2 seconds delay measured empirically.It makes perfect sense, if Defender's Delay is coded something like:Delay = 1.5 + rand(); Defender's Second AttackReference sheet: Initial AttackResearcher /u/dondon151 did most of the work on this one. After noting that Defender's second attack happens consistently faster than expected, he went about recording initial attacks from a variety of defenders:First AttackSecond AttackTime DeltaMoth 112.63613.5710.935Moth 212.02212.9830.961Moth 311.49812.5011.003Bee 113.17014.0090.839Bee 213.46214.3390.877Bee 314.90715.8160.909Pidgey 112.53313.4840.951Pidgey 214.06815.0731.005Pidgey 315.01515.9830.968Seadra 113.65314.6230.970Seadra 212.87213.7260.854Seadra 312.05612.8870.831Horsea 112.03512.8730.838Horsea 212.09613.0410.945Horsea 311.67712.6460.969Very conclusive evidence for defender's second attack starting 1 second after the first attack, regardless of move CD. This does look odd for slower moves, since the second attack would actually begin before the first's animation can conclude.Tangentially, defender's third attack is timed based on the first attack, not the second.Verdict: Defender squeezes in its 2nd attack between its 1st and 3rd attack, 1 second after the 1st attack.Defender's Delay for Charged MovesReference sheet: Sheet10While testing other areas of gym mechanics for GamePress Researcher /u/PEEFsmash, I noticed that gym battles sometimes take longer than my simulations expect. Something's wrong.Eventually, we came back around to the idea that there's a defender's delay for charged moves as well.To measure that delay, we calculate the time delta between yellow flashes, categorizing them into:Quick Move to Quick Move (QM->QM)Quick Move to Charge Move (QM->CM)Charge Move to Quick Move (CM->QM)Charge Move to Charge Move (CM->CM)Which roughly measures: QM1 |-x--| QM1 delay CM CM delay QM2 |-x--| |-----------*----|---------------|-----------*----|------------|-----------*----| |-------QM->CM------------------|-----------CM->QM------------| As such, if we add QM->CM and CM-> QM together, it would cover: = x + QM delay + CM + CM delay + (QM - x) = [ QM + QM pause] + [CM + CM delay] QM + QM pause also happen to be QM->QM, which as we noted above has been measured to be 1500~2500ms, average 2 seconds.Therefore, CM + CM delay = QM->CM + CM->QM - QM->QM Using the above formula, we measure defender's delay as:MovesCD (ms)Defender CDDefender DelayAerial Ace290048811981twister270047722072bug buzz425063052055Blizzard390062032303Flash Cannon390057441844About 2 seconds average like for Quick Moves. Further look into individual moves points to defender delay for charge moves also being uniformly distributed.Verdict: Defender's Delay for Charge Moves is uniformly distributed between 1500ms ~ 2500ms.Note: Blizzard's delay is higher than expected, this is due to the unusual and bugged nature of the attack, which we're still investigating.Dodge Window TheoryLargely to confirm the challenge made by /u/hilmmas against the Dodge Window theory.The test GamePress done that considered it definitive was against a defender with Twister, chosen because it's a fast charging move with a long dodge window (850-2600ms). We found that no matter how we vary our dodge timing and attempts, damage reduction was always 75% or nothing. We also found that nothing works except dodging within half second of the yellow flash. Which is a clear violation of the 850-2600ms "dodge window" according to the game code.Verdict: The only thing that matters is time your dodge just after the yellow flash from each defender attack.Our research shown that moves do not have a variable dodge window. Instead, dodging is binary: either you take full damage of the attack, or receive a 75% damage reduction from a successful dodge.DamageDamage (Dodge)8320205102312111Damage calculated based on /u/QMike's damage formula:Attack = (Base Attack + Attack IV) * CPM {attacker's} Defense = (Base Defense + Defense IV) * CPM {defender's} Damage = Floor( .5 * Power *( Attack / Defense ) * STAB * Effectiveness) + 1 With dodge:Dodged Damage = max(1, Floor(Damage/4)) Yellow FlashReference Sheet: Yellow FlashBecause Defender's Delay is found to be variable, timing the start of quick moves is a challenge. Instead, we only use the text display for charge moves as the visual cue for the start of an attack. In our testing, we found the timings of yellow flash somewhat sporadic when compared to move CD. However, we did find a strong correlation between yellow flash timing and DamageWindowStartMS variable in the Game Code.Plot of measured text-to-yellow flash vs Game Master CD/DamageWindowStartMSThe strong relationship allows us to nail down that the timing of yellow flash is based on DamageWindowStartMS.Verdict: Yellow Flash is timed to DamageWindowStartMS - 700ms.Further testing by researcher /u/dondon151 determined that for a successful dodge must be initiated after the yellow flash of the attack and before your Pokemon turns orange from taking damage.Charge Move OpportunityReference Sheet: Geometric TestDefender doesn't always use its charged moves on its first opportunity, as explained by GamePress researcher /u/doublefelix921:Let's say after Pidgey's most recent 'Tackle'. It has generated enough energy to use Twister, but it uses Tackle instead. That would be the first opportunity it had that it didn't take. Then it uses Tackle again (that would be 2nd). Finally, it uses Twister. That was the 3rd, so it took until the 3rd opportunity to use Twister.To test the theory that there is a constant probability of using a charge move every time the pokemon has the opportunity, you could check the distribution of how frequently twister is used on the 1st, 2nd, 3rd opportunity. And if the probability of it being used per opportunity is for example 1/3, then you'd expect it to have been used on the 1st opportunity 1/3 of the time, on the second opportunity (1/3)(2/3) = 2/9 of the time, on the third opportunity (1/3)*(2/3)2 = 4/27 of the time and so on.We were able to measure and observed such geometric distribution in charge move opportunities:Measured Charge Move Opportunity versus Geometric Distribution P=.5Verdict: Defender uses charge move about 50% of the time when it has the opportunity to do so.Defender HP roundingTest conducted by GamePress Researcher /u/the_desert_rain. We wanted to know which equation matches how the game calculates defender hp:Defender HP = Floor ( 2 * ( base stamina + stamina iv) * cpm)Defender HP = 2 * Floor ( ( base stamina + stamina iv) * cpm)Results confirm is the second version.Attacker: Jolteon lvl 13, 15/12/8 cp:769 hp:66. Defender: Lickitung lvl 4, 0/12/11 cp: 149 hp: 48 For this test, we found a Lickitung that calculates to 48.8 hp, so it'll either have 96 or 97 hp defending. 12 thunder shocks (8 dmg) caused Lickitung to faint. This confirms that defender HP simply doubles its regular hp, instead of recalculating based on its base stats.Verdict: Defender HP is rounded down before doubling.HP Loss Energy Gain roundingWe wanted to know whether energy rounds, and if so how it rounded.Results is that energy rounds up, so 1 damage attack gives 1 energy; 3 damage attack gives 2 energy, and so on. Full writeup here:http://ift.tt/2cnxUJJ: Energy rounds up!Current attack and defense roundingWe were wondering whether current attack and defense were rounded down by PoGo before plugged into the damage formula, like current stamina aka HP is. Test pair:Bulbasaur Level 1 10/10/10 Tackle; current attack is 12.8Abra Level 2 15/2/7; current defense is 12.98If current stats are rounded down before plugged into the damage formula, then Bulbasaur should do 7 damage against Abra. If it isn't floored, then it should do only 6 damage.Test results were 6 damage, proving the game does not round current attack and defense.Verdict: Attack and Defense aren't roundedA special thanks to all the aforementioned GamePress Researchers, /u/nick_gamepress for putting together an incredible team for Pokemon GO research, and apologies to those that I failed to give proper attributions to.Please write me angry PM for any mistakes. via /r/TheSilphRoad http://ift.tt/2ccuIWI
"Testing Gym Combat Misconceptions 2"
Reviewed by The Pokémonger
on
09:50
Rating:
No comments