Check out my first novel, midnight's simulacra!
Pokémon Go: Difference between revisions
No edit summary |
|||
| Line 7: | Line 7: | ||
* the plaintext, key-value <tt>text/i18n_en-us.json</tt> (salt for your language) | * the plaintext, key-value <tt>text/i18n_en-us.json</tt> (salt for your language) | ||
* the binary <tt>bin/Data/Managed/Metadata/global-metadata.dat</tt> | * the binary <tt>bin/Data/Managed/Metadata/global-metadata.dat</tt> | ||
===On-device=== | |||
* <tt>Android/data/com.nianticlabs.pokemongo/files/il2cpp/Metadata/global-metadata.dat</tt> (salt for your OS) | |||
** il2cpp is [https://docs.unity3d.com/Manual/scripting-backends-il2cpp.html Unity stuff] fwiw | |||
==Battle mechanics== | ==Battle mechanics== | ||
Revision as of 08:35, 7 May 2025
I know very little about the other Pokémon games.
Fucking with the APK
The APK can be downloaded from APKMirror and analyzed with e.g. Apktool.
Important content includes (in base/assets/):
- the plaintext, key-value text/i18n_en-us.json (salt for your language)
- the binary bin/Data/Managed/Metadata/global-metadata.dat
On-device
- Android/data/com.nianticlabs.pokemongo/files/il2cpp/Metadata/global-metadata.dat (salt for your OS)
- il2cpp is Unity stuff fwiw
Battle mechanics
CP multipliers are defined for all levels 1 through 50, constant across all species and stats. CPMs range from 0.094 to 0.8403.
Each Pokémon species has base stats defined at each of 50 levels.
- Attack: 17 (Shuckle) to 414 (Deoxys (Attack Forme))
- Defense: 32 (Igglybuff) to 396 (Shuckle again)
- Max HP: 1 (Shedinja) to 496 (Blissey)
These are augmented by three IVs, specific to an individual Pokémon, ranging from 0 to 15. Adding the former to the latter and scaling by the appropriate CPM generates an effective attack A, effective defense D, and maximum HP MHP for that Pokémon, all positive rationals.
- Effx = (Basex + IVx) * CPM(Level) = Basex * CPM(Level) + IVx * CPM(Level)
Shadow Pokémon have their A divided by ⅚, and their D multiplied by ⅚.
Each named Attack (both Fast and Charged) has a base power P, a non-negative integer.
Executing an Attack uses the attacker's EffA, the defender's EffD, and the Attack's P.
Multiplier M is defined as the product of:
- the Attack's type effectiveness relative to the defender (see below)
- the Attack's type effectiveness relative to the attacker
- 1.2 if the attacker shares type with the Attack, 1 otherwise
A subsequent multiplier MM is different depending on whether the battle is PvE or PvP.
PvE mode (raids, Team Rocket, gyms, Max battles)
Multiplier MM is defined as the product of
- 0.5
- 0.25 if the Attack is dodged, 1 otherwise
- 1.2 if the Attack is weather-boosted, 1 otherwise
- A friendship bonus: 1 unless
- 1.03 if battling with at least one Good Friend, unless
- 1.05 if battling with at least one Great Friend, unless
- 1.07 if battling with at least one Ultra Friend, unless
- 1.1 if battling with at least one Best Friend
- A Mega bonus: 1 unless
- 1.1 if battling with at least one Mega Pokémon, unless
- 1.3 if battling with at least one Mega Pokémon of the Attack's type
- A Max bonus at Power Stops: 1 unless
- 1.1 for level 1 support (1 placed Pokémon), unless
- 1.15 for level 2 support (2–3 placed Pokémon), unless
- 1.188 for level 3 support (4–14 placed Pokémon), unless
- 1.2 for level 4 support (15+ placed Pokémon)
PvP mode
Multiplier MM is defined as the product of
- 0.65
- Minigame score for Charged Attacks, ranging from 0.25 to 1
- "Excellent!" is necessary and sufficient for a 1
- "Great!" maps to [0.75, 1)
- "Nice!" maps to [0.5, 0.75)
- otherwise [0.25, 0.5)
Damage calculation
At this point, P is a non-negative integer, while EffA, EffD, M, and MM are positive rationals.
Damage = ⌊P * EffA / EffD * M * MM⌋ + 1
Some notes:
- A / D yields a positive rational
- The floor function yields an integer, but A / D is calculated with reasonable precision
- Damage is always a positive integer
- P is typically the dominant term
- Maximum A / D is 414/32 = 12.9375, worst A / D is 17/396 = 0.0429
- Maximum (Base+IV)A / (Base+IV)D is 429/32 = 13.40625, a ~3.6% gain
- Minimum (Base+IV)D / (Base+IV)D is 17/411 = 0.0413625, a ~3.4% loss
- Now make both sides 15: for A, 429 / 47 = 9.12765, a ~29.5% loss
- Now make both sides 15: for D,
- All CPMs are less than 1, shrinking the effective values
- We can factor out the CPM ratio and define a constant 100x100 symmetric matrix
- Minimum value: 0.094 / 0.8403 ~= 0.11186
- Maximum value: 0.8403 / 0.094 ~= 8.939
Type effectiveness
| Attacker | Normal |
|---|---|
| Normal | |
| Fire | |
| Water | |
| Grass | |
| Electric | |
| Ice | |
| Fighting | |
| Poison | |
| Ground | |
| Flying | |
| Psychic |
Catch rate
Stardust rewards
XP rewards
Many events in Pokémon Go result in XP. Lucky Eggs double XP rewards while active (only one can be used at a time). Certain events double XP as well (this stacks with a Lucky Egg). Research can award various amounts of XP; a Research Breakthrough always awards 3000 XP.
Things which typically do not reward XP include:
- opening the game or leaving it running (whether moving or stationary)
- accepting or sending a Friend request
- interactions with Team Rocket
- PvP battles
- buddy hearts and buddy level progression
- trading Pokémon
- use of berries in an encounter
- creation of a Route or Pokéstop
- any non-capturing throws in an encounter
- opening gifts (from Friends or Mateo)
- receiving items (from gifts, Pokéstops, route completion, or battles)
- using items
- and transferring Pokémon to the Professor for soul harvesting.
Of course, XP can result when these are part of Research tasks.
Encounters
An "encounter" includes all interactions with a distinct Pokémon, including those following wins against Team Rocket and those following wins in Raids and Max Battles. Leaving the encounter screen and returning to the same Pokémon, even multiple times, is all one encounter. An encounter does not end until the Pokémon is captured or flees.
- If the Pokémon flees, the reward is 25 XP.
- If the Pokémon is captured, the reward is 100 XP, plus zero or more bonuses:
- A possible bonus for capture with a high-quality throw:
- 1000 XP for Excellent, or
- 100 XP for Great, or
- 20 XP for Nice.
- 20 XP for capture with a curveball.
- 50 XP for capture with the first throw of the encounter.
- 100 XP for 100th collection of each species (all subtypes count as one species) ("Collector")
- 300 XP for using AR Plus ("Expert Handler")
- A possible bonus for first capture of the day:
- 6000 XP for a 7 day streak of at least one capture (the streak resets), or
- 1500 XP otherwise.
- 1000 XP for capture with a Master Ball.
- A possible bonus for capture with a high-quality throw:
Hatching eggs
Hatching an Egg yields XP corresponding to the class of the Egg as expressed in kilometers.
| Km | XP |
|---|---|
| 2 | 500 |
| 5 | 1000 |
| 7 | 1000 |
| 10 | 2000 |
| 12 | 4000 |
Battles
No XP is awarded for battling Team Rocket, nor PvP games.
| Event | XP |
|---|---|
| Giving a berry to a Pokémon in a gym | 50 |
Friendship
200 XP is awarded whenever one sends a Gift (this is awarded when the Gift is sent, not when it is opened). You can open up to 30 and send up to 200 Gifts per day.
XP is awarded whenever a friendship reaches a new level.
| Level | XP |
|---|---|
| Good Friend | 3000 |
| Great Friend | 10000 |
| Ultra Friend | 50000 |
| Best Friend | 100000 |
Removing a friend does not reset the friendship level until 120 days (of Sodom?) have passed. Adding the friend back during this period will reset the counter.
Routes
Completing a Route always awards XP. The first Route completed on a given day yields 4000 XP. Subsequent Routes award 2000 XP each. Route awards are limited only by time.
A streak of seven days with completed Routes awards 12000 XP, and resets the streak counter.
Strategy
Leveling up
Leveling up (through Level 40) is strictly a matter of accumulating XP. Level 2 requires only one thousand XP; Level 40 requires five million beyond Level 39, for twenty million total. Levels 41 through 50 have additional, formidable Research requirements beyond their already brutal XP demands.