Sponsored By

A Theory on Pokémon Go's Location System

In this post we're going to try to crack open Pokémon Go and determine how and why each pokémon are placed.

Scott Fine, Blogger

July 29, 2016

10 Min Read
Game Developer logo in a gray background | Game Developer

Continuing with the pokémon theme this week we're going into part three of my series on Pokémon Go. Today we'll be discussing how the pokémon locations are determined. If you haven't read my last couple posts on Pokémon Go I recommend checking them out! While they aren't necessary to understand the concepts we will be discussing today, they will help to give a broader picture of the game and how individual functions work. They can be found at:

Part 1 - Basic Pokémon Go

Part 2 - Pokémon Go: Gym Battles

Now, let’s dive into how I believe the pokémon locations are determined. A disclaimer if you will, the only way to 100% find out for sure how it works is to ask Niantic how they did it. What I am presenting here today is based on my observations and discusses how I believe it to work. While their system is much larger, I have attempted to miniaturize it and discuss it in a smaller more manageable version. I hope by doing so the concepts will be more approachable and less daunting. With that out of the way, let’s get to it!

The Grid:

Imagine a grid over Los Angeles, like this:

Within each section of the grid, the player can see up to nine different pokémon. The player can see which pokémon are within their grid space via checking the nearby section of the app.

These pokémon might be in F2 (in the square with Museum of Contemporary Art), while in G2 there is a whole different set of pokémon. When a player moves to a different grid space, different pokémon will populate in their “Nearby” page.

Side note: The pokémon also seem to cycle in and out based on time elapsed. Each pokémon will disappear after a certain amount of time has passed.

But how do they decide which pokémon will be in each grid space?

Enter a random number generator! For simplicity sake, I’m going to use only five pokémon in my example.

Now imagine you have a twenty sided dice. You’re going to roll the dice nine times, and those nine dice rolls will determine the nine pokémon in the K1 grid space. You can try this exercise out using the grid as follows:

Just from looking at this chart you can see a few things:

●      25% chance the pokémon will be a Pidgey

●      25% chance the pokémon will be a Rattata

●      25% chance the pokémon will be a Zubat

●      10% chance the pokémon will be a Growlithe

●      5% chance the pokémon will be a Goldeen

●      10% chance there will be no pokémon

(If you don’t have a D20 lying around, you can check out WIZARD'S DICE TOOL and use their digital dice)

Try it out! Roll the dice nine times. What did you get?

My rolls are:

4, 1, 2, 17, 20, 1, 5, 13, 4

This means that the 9 pokémon in K1 are:

1.     Pidgey

2.     Pidgey

3.     Pidgey

4.     Growlithe

5.     Nothing

6.     Pidgey

7.     Pidgey

8.     Zubat

9.     Pidgey

As you can see the results are random, but there is a higher chance of certain pokémon appearing over others. If we were to check a different space, we’d see different results. Maybe we’d find a space with mostly Zubats instead of Pidgeys.

So how does geography affect pokémon placement?

Let’s say, for example, we go to the pier. Now we’re over water, so there are more water pokémon appearing. How has our chart changed? Let’s take a look:

As you can see from the chart, things have changed. Now we have:

●      15% chance the pokémon will be a Pidgey

●      5% chance the pokémon will be a Rattata

●      15% chance the pokémon will be a Zubat

●      5% chance the pokémon will be a Growlithe

●      50% chance the pokémon will be a Goldeen

●      10% chance there will be no pokémon

Now, if we run our simulation with the updated chart, what do you get? I got:

2, 8, 16, 17, 2, 10, 6, 16, 19

This means that the nine pokémon in the space with water are:

1.     Pidgey

2.     Goldeen

3.     Goldeen

4.     Growlithe

5.     Pidgey

6.     Goldeen

7.     Rattata

8.     Goldeen

9.     Nothing

As you can see, while on land we had more Pidgeys, Rattatas and Zubats, but Goldeen rains supreme by the ocean. This is because there is a higher chance of Goldeen appearing based on the player's proximity to water. It’s safe to say then, if the player were near a volcano for example the number of Growlithes would increase just like the number of Goldeens increased when the player was near the water. Because of the random number generator, it is possible to find an area that has no pokémon, or even only one kind of pokémon. Though this is unlikely because Niantic is working with 150 different pokémon instead of just five.

Is it possible to catch any pokémon at any location?

I believe so. I know it sounds crazy, but at times I’ve found Goldeens and Goldducks in the middle of downtown L.A. miles away from the water. I think the possibility of a Goldeen showing up though is so miniscule that it will almost never happen. While our example used only 20 slots to choose pokémon from, Niantic’s would be using hundreds of slots resulting in some pokémon appearing less than .001% of the time.

Side note: Imagine you lived in the middle of Kansas with your dog Toto. What if a super rare pokémon to the area, like Venasaur, popped up? You’d race towards that Venasaur. This is the kind of effect they’re creating in players by allowing pokémon to appear anywhere just at an incredibly small probability. Players’ excitement will be rekindled again long after the initial excitement has dwindled because of this rare find. Additionally, they may have done it this way to simulate wandering pokémon who maybe got lost.

So, what factors cause the chart to adjust?

Niantic has come out and said that there are a couple of factors which influence pokémon appearing:

●      Location - Geography and location on the planet

●      Time of day - different pokémon come out at night than during the day

●      Pokémon rarity - how rare is the pokémon?

So, your location at midday might cause you to run into more Pidgeys, but at night the chart readjusts and there may be a higher chance of Growlithes.

Now that you understand the basics of how pokémon are distributed, we’re going to add one additional layer, common, uncommon, rare and legendary. This is actually a third factor, which influences which pokémon appear. Common pokémon, like Pidgeys, will appear in greater numbers than an uncommon pokémon. Uncommon pokémon will appear in greater numbers than rare pokémon and rare pokémon will appear in greater numbers than legendary pokémon. To help you visualize the distribution of these kinds of pokémon, check out this chart:

Side note: This is assuming the legendary pokémon are not attached to public events. Though the commercial for Pokémon Go made it seem like they were.

The distribution of pokémon rarity might look like this, with considerable amounts of common pokémon vs. the other types. Then we’ll see a few less uncommon pokémon and even fewer rare pokémon, with the legendries being almost nonexistent.

This affects our chart by adjusting the rarity of pokémon. For example, we know we’ll find more water pokémon near the water, as you can see in the slots listed as Goldeen in our charts above. If we expand to add more pokémon to the mix, you’re still going to see more Goldeens than you would a Blastoise. This is because Blastoise is a rare pokémon and Goldeen is common. There is a greater chance of Blastoise appearing because the player is closer to the water. But due to the rarity of Blastoise there may still be a higher chance of the player encountering a Pidgey instead.

Side note: The best way I can think of to explain it is a little more technical. Each pokémon already has a percentage of appearing based on their rarity. The system checks the location of the grid space. From the environment/geography, the chance of a pokémon appearing adjusts by increasing or reducing the percentage based on if the area is near water, or in a city, near a volcano, etc. The system will then select nine random numbers and select the pokémon for placement in the world. It then selects nine random locations within the single grid space to place the pokémon. This is why three different people can all see the same pokémon at the same space.

For those who like math, a simple algorithm for pokémon chance of spawning might look like:

Pokémon rarity x (D + G) = % Spawn chance

·       D = Day/night cycle modifier

·       G = Geographical modifier

Most of the pokémon would be less than 1% because there are 150 of them.

But what about incense and lures?

Pokémon can’t move independently in the world. They are tethered to the global system. Additionally, when two players are using incense at the same time, which way do the pokémon go? What about ten players?  Because of this, and that pokémon can’t move towards the player who is also moving across grid lines, it causes too much confusion and stress on the system. So incense actually creates a virtual space around the player spawning in additional pokémon. This is why when I activate incense; someone next to me won't always see the same pokémon I do. It is also why sometimes I’ll see rare pokémon that my friends standing right next to me can’t see. Additionally, there is a check to see if the player is moving. When the player is on the move more pokémon will appear for the player. You can tell incense specific pokémon by noticing a slight purple glow when they appear on the map.

Lures on the other hand are stationary. They work similarly to the incense; the space around the lure spawns an additional set of pokémon, acting as it’s own grid space. Because it is tethered to a stationary position and not player specific all players can see these pokémon. Due to this benefit of attracting pokémon for all players, we oftentimes see players congregate around lured pokestops. This helps to bring players together and creates a sense of community.

I hope this post has helped you to think about how Niantic distributes pokémon across the world. Like I mentioned before, this is based on my research I’ve conducted and I may be wrong. The only way to know for sure is to ask the designers at Niantic or find a copy of the games source code. Do you agree? Do you think I missed something? Let me know in the comments below and we can discuss it further.

I’ll see you guys next time,

Scott

More posts like this one can be found on Scott's Blog/Portfolio www.ScottFineGameDesign.com

Read more about:

Featured Blogs

About the Author

Daily news, dev blogs, and stories from Game Developer straight to your inbox

You May Also Like