Home » , » New Details About Trading and Battle Mode in Pokemon GO

New Details About Trading and Battle Mode in Pokemon GO

New Details About Trading and Battle Mode in Pokemon GO
We are continuing to research the global-metadata.dat we dumped from the 0.37.1 APK yesterday. Previously we reported that there are no Ditto references in the code and today we’re covering everything we found on Trading inside the code dump.

A quick summary in layman terms:
  • You are able to search for “Trading Players”
  • You are able to create, cancel and complete Trade Offers
  • You can currently trade only Pokemon
  • No info on the visibility and range of Trade Search – it’s too early to say if you’ll be able to trade worldwide or not
  • The trading seems resilient to “connection loss” and will retry once the connection is available again
  • It’s inconclusive what type of connection trading will use... although it does communicate with the server side to load Trade offers and responses
The following paragraphs contain code excerpts, technical discussion and they touch a lot of topics that are common for Pokemon GO reverse engineering. If you’re not comfortable with the terminology, make sure to read more about reverse engineering on /r/pokemogodev.

Code analysis

Surprisingly, the code leverages quite a few ProtoBuf requests that are currently not used in the app’s network traffic:

TradingSearchProto
TradingOfferProto

  • TradingOfferOutProto
PollForTradeResponseProto

  • PollForTradeResponseOutProto
TradingResultProto

  • TradingResultOutProto
By the look of it, a Trading player will set up a Trading Offer and the app will start polling for Trade Responses. The unanswered question is if the polling is going to be limited to local area or will it be global.

The code suggest it is not limited to a local area nor there is any mention of Bluetooth or NFC – the app communicates with the server over Protobuf to load trade offers and responses. What will Niantic enable in terms of Search visibility and range, remains to be seen.

A part of extracted code is here, broken and half references are omitted for brevity:
 m__24F.AccessTokenFieldNumber.accessToken_.AccessToken.TradingReflection.TradingSearchProto.<_parser>
 m__250.TradingSearchOutProto.get_PlayerNames.<_parser>
 m__251.PlayerNamesFieldNumber._repeated_playerNames_codec.playerNames_.PlayerNames.TradingOfferProto.get_TradingPlayer.set_TradingPlayer.<_parser>
 m__252.TradingPlayerFieldNumber.tradingPlayer_.TradingPlayer.TradingOfferOutProto.get_TradeId.set_TradeId.<_parser>
 m__253.TradeIdFieldNumber.tradeId_.TradeId.CONNECTION_LOST.PollForTradeResponseProto.get_RequestCancel.set_RequestCancel.<_parser>
 m__254.RequestCancelFieldNumber.requestCancel_.RequestCancel.PollForTradeResponseOutProto.get_ReturnPokemon.set_ReturnPokemon.<_parser>
 m__255.ReturnPokemonFieldNumber.returnPokemon_.ReturnPokemon.ACCEPT_OFFER.TRADE_CANCELED.TradingResultProto.get_PlayerAccept.set_PlayerAccept.<_parser>
 m__256.PlayerAcceptFieldNumber.playerAccept_.PlayerAccept.TradingResultOutProto.<_parser>
 m__257.TRADE_COMPLETE.TRADE_CANCELLED_OFFER.TRADE_SEARCH.TRADE_OFFER.TRADE_RESPONSE.TRADE_RESULT
Note that the code mentions only Pokemon in the context of trade – set_ReturnPokemon and get_ReturnPokemon fields respectively. There is no mention of in game items such as PokeBalls and Potions, but the variable naming is generic enough to support any kind of “trade response”.
It’s possible you’ll be able to offer a Pokemon and get various “trade responses”. If you decline all of them or cancel the trade, the Pokemon will return to you. That could include offering 1 Pokemon and getting 5 Pokemons as a Trade Response.

Another interesting piece of code we found shows that search can collect multiple player names at once, hinting that Trade offers are not tied 1 on 1 with a player:

 m__250.TradingSearchOutProto.get_PlayerNames.<parser>
But in all honesty, this doesn’t mean the game will display all of them at once. It yet remains to be seen how many player trades you’ll be able to see.

Data mining methodology

We used HxD hex editor to extract strings and methods from the .dat file. Afterwards, we used Sublime Text editor to reformat the text and break it into new lines. Find option was used to count occurrences of strings.

On other Pokemon GO news, the Pokemon Company CEO Tsunekazu Ishihara told The Wall Street Journal that Niantic Labs is taking its time releasing new features for the game so as not to overwhelm newcomers.

A player-versus-player battle system is on the company's radar. "Battling is a category that we do best at Pokemon, after all," Ishihara said. "It's important to really carefully consider any feature that may increase the difficulty and raise the barrier to entry for more casual users." Expect to see a Pokemon battle like this in the future (well, not literally like this).


Pokemon Go multiplayer has been in the works for a long time, Niantic's Archit Bhargava said this back in July. Early tests are promising, but there is still much work to be done.

"The multiplayer aspect is still something we're exploring, we're still trying to figure out what's the best way to do that," Bhargava said. "So far we've learned that multiplayer battles are a lot of fun. When two people from different teams show up at a rival gym, if they collaborate and both have their Pokemon deployed to battle at the same time, they can take down a stronger gym faster."

"But we're trying our best to rethink what the experience should be; what that real-world Pokemon experience should be like. Obviously we're learning from Ingress, but it's going to be a pretty different game. We have a vision for Pokemon, we're gonna execute on it, but we're gonna learn based on what the community reaction is."

Also in the WSJ interview, Ishihara said he hopes to launch Pokemon Go in China and South Korea, but that could be a problem since those countries limit Google Maps.