diff --git a/lib/cobblemon_ui/application.ex b/lib/cobblemon_ui/application.ex index ea9ffc5..a813c87 100644 --- a/lib/cobblemon_ui/application.ex +++ b/lib/cobblemon_ui/application.ex @@ -13,6 +13,7 @@ defmodule CobblemonUi.Application do {Phoenix.PubSub, name: CobblemonUi.PubSub}, CobblemonUi.CobblemonFS, CobblemonUi.TierListScraper, + CobblemonUi.EvolutionApi, # Start to serve requests, typically the last entry CobblemonUiWeb.Endpoint ] diff --git a/lib/cobblemon_ui/battles_api.ex b/lib/cobblemon_ui/battles_api.ex index dc50f7c..4017674 100644 --- a/lib/cobblemon_ui/battles_api.ex +++ b/lib/cobblemon_ui/battles_api.ex @@ -66,9 +66,10 @@ defmodule CobblemonUi.BattlesApi do ability: p["ability"], nature: p["nature"], shiny: p["shiny"], - moves: Enum.map(p["moves"] || [], fn m -> - %{name: m["name"], pp: m["pp"], max_pp: m["maxPp"]} - end) + moves: + Enum.map(p["moves"] || [], fn m -> + %{name: m["name"], pp: m["pp"], max_pp: m["maxPp"]} + end) } end end diff --git a/lib/cobblemon_ui/evolution_api.ex b/lib/cobblemon_ui/evolution_api.ex new file mode 100644 index 0000000..b0038f1 --- /dev/null +++ b/lib/cobblemon_ui/evolution_api.ex @@ -0,0 +1,141 @@ +defmodule CobblemonUi.EvolutionApi do + @moduledoc """ + Fetches and caches Pokémon evolution data from PokeAPI. + + Provides `get_evolutions/1` which returns the list of species that + a given Pokémon can evolve into (direct next-stage evolutions). + Results are cached in an ETS table to avoid repeated API calls. + """ + + use GenServer + require Logger + + @table :evolution_cache + + # --------------------------------------------------------------------------- + # Client API + # --------------------------------------------------------------------------- + + def start_link(_opts) do + GenServer.start_link(__MODULE__, [], name: __MODULE__) + end + + @doc """ + Returns a list of species names (lowercase strings) that the given species + evolves into. Returns an empty list if there are no evolutions or the lookup + fails. + + Results are cached after the first successful fetch. + """ + @spec get_evolutions(String.t()) :: [String.t()] + def get_evolutions(species) when is_binary(species) do + key = String.downcase(species) + + case :ets.lookup(@table, key) do + [{^key, evolutions}] -> + evolutions + + [] -> + GenServer.call(__MODULE__, {:fetch, key}, 15_000) + end + end + + # --------------------------------------------------------------------------- + # Server callbacks + # --------------------------------------------------------------------------- + + @impl true + def init(_opts) do + :ets.new(@table, [:named_table, :set, :public, read_concurrency: true]) + {:ok, %{}} + end + + @impl true + def handle_call({:fetch, species}, _from, state) do + # Double-check cache (another caller may have populated it) + result = + case :ets.lookup(@table, species) do + [{^species, evolutions}] -> + evolutions + + [] -> + evolutions = fetch_evolutions(species) + :ets.insert(@table, {species, evolutions}) + evolutions + end + + {:reply, result, state} + end + + # --------------------------------------------------------------------------- + # Private helpers + # --------------------------------------------------------------------------- + + defp fetch_evolutions(species) do + with {:ok, chain_url} <- fetch_species_chain_url(species), + {:ok, chain} <- fetch_chain(chain_url) do + find_next_evolutions(chain, species) + else + _ -> [] + end + end + + defp fetch_species_chain_url(species) do + url = "https://pokeapi.co/api/v2/pokemon-species/#{species}" + + case Req.get(url) do + {:ok, %Req.Response{status: 200, body: %{"evolution_chain" => %{"url" => url}}}} -> + {:ok, url} + + {:ok, %Req.Response{status: status}} -> + Logger.warning("[EvolutionApi] Species lookup failed for #{species}: HTTP #{status}") + {:error, :not_found} + + {:error, reason} -> + Logger.warning("[EvolutionApi] Species lookup failed for #{species}: #{inspect(reason)}") + {:error, reason} + end + end + + defp fetch_chain(url) do + case Req.get(url) do + {:ok, %Req.Response{status: 200, body: %{"chain" => chain}}} -> + {:ok, chain} + + {:ok, %Req.Response{status: status}} -> + Logger.warning("[EvolutionApi] Chain fetch failed: HTTP #{status}") + {:error, :not_found} + + {:error, reason} -> + Logger.warning("[EvolutionApi] Chain fetch failed: #{inspect(reason)}") + {:error, reason} + end + end + + @doc false + # Walks the evolution chain tree and returns the species names of + # the direct next-stage evolutions for the given species. + def find_next_evolutions(chain, target_species) do + target = String.downcase(target_species) + do_find(chain, target) + end + + defp do_find(%{"species" => %{"name" => name}, "evolves_to" => evolves_to}, target) do + if String.downcase(name) == target do + # Found the target — return names of its direct evolutions + Enum.map(evolves_to, fn evo -> + get_in(evo, ["species", "name"]) |> String.downcase() + end) + else + # Recurse into each branch + Enum.find_value(evolves_to, [], fn evo -> + case do_find(evo, target) do + [] -> nil + result -> result + end + end) + end + end + + defp do_find(_, _target), do: [] +end diff --git a/lib/cobblemon_ui/tier_list_scraper.ex b/lib/cobblemon_ui/tier_list_scraper.ex index 9f1e483..2227510 100644 --- a/lib/cobblemon_ui/tier_list_scraper.ex +++ b/lib/cobblemon_ui/tier_list_scraper.ex @@ -63,7 +63,10 @@ defmodule CobblemonUi.TierListScraper do {:noreply, tier_list} {:error, reason} -> - Logger.error("[TierListScraper] Scrape failed, keeping existing state: #{inspect(reason)}") + Logger.error( + "[TierListScraper] Scrape failed, keeping existing state: #{inspect(reason)}" + ) + {:noreply, state} end end @@ -110,13 +113,22 @@ defmodule CobblemonUi.TierListScraper do case bands do [] -> - Logger.warning("[TierListScraper] No .tierlist-band elements found — page structure may have changed") + Logger.warning( + "[TierListScraper] No .tierlist-band elements found — page structure may have changed" + ) + {:error, :no_pokemon_found} _ -> pokemon = Enum.flat_map(bands, fn band -> - tier = band |> Floki.attribute("data-tier") |> List.first() |> to_string() |> String.upcase() + tier = + band + |> Floki.attribute("data-tier") + |> List.first() + |> to_string() + |> String.upcase() + cards = Floki.find(band, ".tierlist-card") Enum.flat_map(cards, fn card -> @@ -128,7 +140,10 @@ defmodule CobblemonUi.TierListScraper do end) end) - Logger.info("[TierListScraper] Parsed #{length(pokemon)} pokemon across #{length(bands)} tiers") + Logger.info( + "[TierListScraper] Parsed #{length(pokemon)} pokemon across #{length(bands)} tiers" + ) + {:ok, pokemon} end end diff --git a/lib/cobblemon_ui_web/live/battle_components.ex b/lib/cobblemon_ui_web/live/battle_components.ex index a739a21..001542c 100644 --- a/lib/cobblemon_ui_web/live/battle_components.ex +++ b/lib/cobblemon_ui_web/live/battle_components.ex @@ -6,6 +6,7 @@ defmodule CobblemonUiWeb.BattleComponents do attr :battle, :map, required: true attr :player_id, :string, required: true attr :tier_list, :map, default: %{} + attr :evolutions, :map, default: %{} def battle_panel(assigns) do ~H""" @@ -51,12 +52,15 @@ defmodule CobblemonUiWeb.BattleComponents do <%= for poke <- actor.active_pokemon do %> <% tier = Map.get(@tier_list, String.downcase(poke.species || ""), nil) %> + <% species_key = String.downcase(poke.species || "") %> + <% is_opponent = actor.player_id != @player_id %> + <% evos = if is_opponent, do: Map.get(@evolutions, species_key, []), else: [] %>
<%!-- Sprite --%>
{poke.species} @@ -64,7 +68,9 @@ defmodule CobblemonUiWeb.BattleComponents do <%!-- Info --%>
- {poke.species} + + {poke.species} + Lv.{poke.level} @@ -92,6 +98,31 @@ defmodule CobblemonUiWeb.BattleComponents do
+ <%!-- Evolution info for opponent Pokémon --%> +
+
+ <.icon name="hero-arrow-trending-up" class="size-3 text-info/60" /> + + Evolves into + +
+
+ <%= for evo <- evos do %> + <% evo_tier = Map.get(@tier_list, evo, nil) %> +
+ {evo} + + {evo} + + <.tier_badge :if={evo_tier} tier={evo_tier} species={evo} compact={true} /> +
+ <% end %> +
+
<% end %>
diff --git a/lib/cobblemon_ui_web/live/dashboard_live.ex b/lib/cobblemon_ui_web/live/dashboard_live.ex index c652092..04bf051 100644 --- a/lib/cobblemon_ui_web/live/dashboard_live.ex +++ b/lib/cobblemon_ui_web/live/dashboard_live.ex @@ -64,7 +64,8 @@ defmodule CobblemonUiWeb.DashboardLive do end def handle_params(_params, _uri, socket) do - {:noreply, assign(socket, selected_player: nil, player_data: nil, battle: nil, selected_pokemon: nil)} + {:noreply, + assign(socket, selected_player: nil, player_data: nil, battle: nil, selected_pokemon: nil)} end @impl true @@ -93,13 +94,11 @@ defmodule CobblemonUiWeb.DashboardLive do {:noreply, assign(socket, view_mode: String.to_existing_atom(mode), selected_pokemon: nil)} end - @impl true def handle_info(:tick, socket) do {:noreply, do_refresh(socket)} end - defp do_refresh(socket) do players = case CobblemonUi.CobblemonFS.list_players() do @@ -127,7 +126,6 @@ defmodule CobblemonUiWeb.DashboardLive do
- <%!-- Player picker --%>
@@ -164,7 +162,10 @@ defmodule CobblemonUiWeb.DashboardLive do {player.name || "Unknown"} - <.icon name="hero-chevron-right" class="size-4 text-base-content/20 ml-auto shrink-0 group-hover:text-primary/40 transition-colors" /> + <.icon + name="hero-chevron-right" + class="size-4 text-base-content/20 ml-auto shrink-0 group-hover:text-primary/40 transition-colors" + />
@@ -192,114 +193,117 @@ defmodule CobblemonUiWeb.DashboardLive do <%!-- Scrollable content --%>
- -
-
- <.icon name="hero-exclamation-triangle" class="size-5" /> - {@error} -
-
- -
- <%!-- Stats bar --%> -
-
-
- {party_count(@player_data)} in party -
-
-
- {pc_count(@player_data)} in PC +
+
+ <.icon name="hero-exclamation-triangle" class="size-5" /> + {@error}
- <%!-- Active battle --%> - <.battle_panel :if={@battle} battle={@battle} player_id={@selected_player} tier_list={@tier_list} /> - - <%!-- View mode tabs --%> -
- - -
- - <%!-- Party view --%> -
-
- <%= for {pokemon, idx} <- Enum.with_index(@player_data.party), not is_nil(pokemon) do %> - <.pokemon_card - pokemon={pokemon} - index={idx} - tier={Map.get(@tier_list, String.downcase(pokemon.species || ""), nil)} - /> - <% end %> +
+ <%!-- Stats bar --%> +
+
+
+ {party_count(@player_data)} in party +
+
+
+ {pc_count(@player_data)} in PC +
-
- <%!-- PC view --%> -
-
-

- Box {box.box + 1} -

-
- <%= for {pokemon, idx} <- Enum.with_index(box.pokemon), not is_nil(pokemon) do %> + <%!-- Active battle --%> + <.battle_panel + :if={@battle} + battle={@battle} + player_id={@selected_player} + tier_list={@tier_list} + evolutions={opponent_evolutions(@battle, @selected_player)} + /> + + <%!-- View mode tabs --%> +
+ + +
+ + <%!-- Party view --%> +
+
+ <%= for {pokemon, idx} <- Enum.with_index(@player_data.party), not is_nil(pokemon) do %> <.pokemon_card pokemon={pokemon} - index={pc_global_index(@player_data.pc, box.box, idx)} + index={idx} tier={Map.get(@tier_list, String.downcase(pokemon.species || ""), nil)} - compact /> <% end %>
-
- PC storage is empty + + <%!-- PC view --%> +
+
+

+ Box {box.box + 1} +

+
+ <%= for {pokemon, idx} <- Enum.with_index(box.pokemon), not is_nil(pokemon) do %> + <.pokemon_card + pokemon={pokemon} + index={pc_global_index(@player_data.pc, box.box, idx)} + tier={Map.get(@tier_list, String.downcase(pokemon.species || ""), nil)} + compact + /> + <% end %> +
+
+
+ PC storage is empty +
+ + <%!-- Pokemon detail panel --%> + <.pokemon_detail + :if={@selected_pokemon} + pokemon={@selected_pokemon} + tier={Map.get(@tier_list, String.downcase(@selected_pokemon.species || ""), nil)} + />
- - <%!-- Pokemon detail panel --%> - <.pokemon_detail - :if={@selected_pokemon} - pokemon={@selected_pokemon} - tier={Map.get(@tier_list, String.downcase(@selected_pokemon.species || ""), nil)} - /> -
-
-
@@ -329,6 +333,24 @@ defmodule CobblemonUiWeb.DashboardLive do end end + defp opponent_evolutions(nil, _player_id), do: %{} + + defp opponent_evolutions(battle, player_id) do + battle.actors + |> Enum.reject(fn actor -> actor.player_id == player_id end) + |> Enum.flat_map(fn actor -> actor.active_pokemon end) + |> Enum.reduce(%{}, fn poke, acc -> + species = String.downcase(poke.species || "") + + if species != "" do + evolutions = CobblemonUi.EvolutionApi.get_evolutions(species) + Map.put(acc, species, evolutions) + else + acc + end + end) + end + defp find_player_battle(uuid) do case CobblemonUi.BattlesApi.list_battles() do {:ok, battles} -> diff --git a/pokemon_tier_list.json b/pokemon_tier_list.json new file mode 100644 index 0000000..a5c2c68 --- /dev/null +++ b/pokemon_tier_list.json @@ -0,0 +1,4114 @@ +[ + { + "name": "Dragonite", + "tier": "S" + }, + { + "name": "Mewtwo", + "tier": "S" + }, + { + "name": "Lugia", + "tier": "S" + }, + { + "name": "Ho-oh", + "tier": "S" + }, + { + "name": "Latios", + "tier": "S" + }, + { + "name": "Kyogre", + "tier": "S" + }, + { + "name": "Rayquaza", + "tier": "S" + }, + { + "name": "Garchomp", + "tier": "S" + }, + { + "name": "Mesprit", + "tier": "S" + }, + { + "name": "Dialga", + "tier": "S" + }, + { + "name": "Palkia", + "tier": "S" + }, + { + "name": "Giratina", + "tier": "S" + }, + { + "name": "Arceus", + "tier": "S" + }, + { + "name": "Excadrill", + "tier": "S" + }, + { + "name": "Tornadus", + "tier": "S" + }, + { + "name": "Reshiram", + "tier": "S" + }, + { + "name": "Zekrom", + "tier": "S" + }, + { + "name": "Landorus", + "tier": "S" + }, + { + "name": "Greninja", + "tier": "S" + }, + { + "name": "Xerneas", + "tier": "S" + }, + { + "name": "Yveltal", + "tier": "S" + }, + { + "name": "Incineroar", + "tier": "S" + }, + { + "name": "Solgaleo", + "tier": "S" + }, + { + "name": "Lunala", + "tier": "S" + }, + { + "name": "Rillaboom", + "tier": "S" + }, + { + "name": "Eternatus", + "tier": "S" + }, + { + "name": "Sneasler", + "tier": "S" + }, + { + "name": "Great Tusk", + "tier": "S" + }, + { + "name": "Flutter Mane", + "tier": "S" + }, + { + "name": "Gholdengo", + "tier": "S" + }, + { + "name": "Chien-Pao", + "tier": "S" + }, + { + "name": "Ting-Lu", + "tier": "S" + }, + { + "name": "Koraidon", + "tier": "S" + }, + { + "name": "Miraidon", + "tier": "S" + }, + { + "name": "Raging Bolt", + "tier": "S" + }, + { + "name": "Sandslash", + "tier": "A" + }, + { + "name": "Clefable", + "tier": "A" + }, + { + "name": "Arcanine", + "tier": "A" + }, + { + "name": "Slowbro", + "tier": "A" + }, + { + "name": "Gengar", + "tier": "A" + }, + { + "name": "Rhydon", + "tier": "A" + }, + { + "name": "Starmie", + "tier": "A" + }, + { + "name": "Scyther", + "tier": "A" + }, + { + "name": "Gyarados", + "tier": "A" + }, + { + "name": "Jolteon", + "tier": "A" + }, + { + "name": "Snorlax", + "tier": "A" + }, + { + "name": "Mew", + "tier": "A" + }, + { + "name": "Espeon", + "tier": "A" + }, + { + "name": "Scizor", + "tier": "A" + }, + { + "name": "Skarmory", + "tier": "A" + }, + { + "name": "Donphan", + "tier": "A" + }, + { + "name": "Hitmontop", + "tier": "A" + }, + { + "name": "Elekid", + "tier": "A" + }, + { + "name": "Raikou", + "tier": "A" + }, + { + "name": "Entei", + "tier": "A" + }, + { + "name": "Tyranitar", + "tier": "A" + }, + { + "name": "Torkoal", + "tier": "A" + }, + { + "name": "Flygon", + "tier": "A" + }, + { + "name": "Milotic", + "tier": "A" + }, + { + "name": "Metagross", + "tier": "A" + }, + { + "name": "Regirock", + "tier": "A" + }, + { + "name": "Groudon", + "tier": "A" + }, + { + "name": "Jirachi", + "tier": "A" + }, + { + "name": "Ambipom", + "tier": "A" + }, + { + "name": "Bronzong", + "tier": "A" + }, + { + "name": "Weavile", + "tier": "A" + }, + { + "name": "Rhyperior", + "tier": "A" + }, + { + "name": "Uxie", + "tier": "A" + }, + { + "name": "Heatran", + "tier": "A" + }, + { + "name": "Darkrai", + "tier": "A" + }, + { + "name": "Conkeldurr", + "tier": "A" + }, + { + "name": "Whimsicott", + "tier": "A" + }, + { + "name": "Krookodile", + "tier": "A" + }, + { + "name": "Cinccino", + "tier": "A" + }, + { + "name": "Foongus", + "tier": "A" + }, + { + "name": "Amoonguss", + "tier": "A" + }, + { + "name": "Alomomola", + "tier": "A" + }, + { + "name": "Chandelure", + "tier": "A" + }, + { + "name": "Mienfoo", + "tier": "A" + }, + { + "name": "Bisharp", + "tier": "A" + }, + { + "name": "Vullaby", + "tier": "A" + }, + { + "name": "Volcarona", + "tier": "A" + }, + { + "name": "Thundurus", + "tier": "A" + }, + { + "name": "Kyurem", + "tier": "A" + }, + { + "name": "Keldeo", + "tier": "A" + }, + { + "name": "Talonflame", + "tier": "A" + }, + { + "name": "Florges", + "tier": "A" + }, + { + "name": "Aegislash", + "tier": "A" + }, + { + "name": "Goodra", + "tier": "A" + }, + { + "name": "Noivern", + "tier": "A" + }, + { + "name": "Zygarde", + "tier": "A" + }, + { + "name": "Diancie", + "tier": "A" + }, + { + "name": "Hoopa", + "tier": "A" + }, + { + "name": "Volcanion", + "tier": "A" + }, + { + "name": "Mudbray", + "tier": "A" + }, + { + "name": "Mudsdale", + "tier": "A" + }, + { + "name": "Salazzle", + "tier": "A" + }, + { + "name": "Tsareena", + "tier": "A" + }, + { + "name": "Mimikyu", + "tier": "A" + }, + { + "name": "Tapu Koko", + "tier": "A" + }, + { + "name": "Celesteela", + "tier": "A" + }, + { + "name": "Magearna", + "tier": "A" + }, + { + "name": "Marshadow", + "tier": "A" + }, + { + "name": "Blacephalon", + "tier": "A" + }, + { + "name": "Zeraora", + "tier": "A" + }, + { + "name": "Cinderace", + "tier": "A" + }, + { + "name": "Hatterene", + "tier": "A" + }, + { + "name": "Duraludon", + "tier": "A" + }, + { + "name": "Dragapult", + "tier": "A" + }, + { + "name": "Zamazenta", + "tier": "A" + }, + { + "name": "Urshifu", + "tier": "A" + }, + { + "name": "Zarude", + "tier": "A" + }, + { + "name": "Regieleki", + "tier": "A" + }, + { + "name": "Kleavor", + "tier": "A" + }, + { + "name": "Ursaluna", + "tier": "A" + }, + { + "name": "Basculegion", + "tier": "A" + }, + { + "name": "Skeledirge", + "tier": "A" + }, + { + "name": "Lokix", + "tier": "A" + }, + { + "name": "Pawmot", + "tier": "A" + }, + { + "name": "Armarouge", + "tier": "A" + }, + { + "name": "Cyclizar", + "tier": "A" + }, + { + "name": "Glimmet", + "tier": "A" + }, + { + "name": "Glimmora", + "tier": "A" + }, + { + "name": "Dondozo", + "tier": "A" + }, + { + "name": "Annihilape", + "tier": "A" + }, + { + "name": "Farigiraf", + "tier": "A" + }, + { + "name": "Kingambit", + "tier": "A" + }, + { + "name": "Iron Hands", + "tier": "A" + }, + { + "name": "Iron Moth", + "tier": "A" + }, + { + "name": "Chi-Yu", + "tier": "A" + }, + { + "name": "Iron Valiant", + "tier": "A" + }, + { + "name": "Munkidori", + "tier": "A" + }, + { + "name": "Archaludon", + "tier": "A" + }, + { + "name": "Hydrapple", + "tier": "A" + }, + { + "name": "Gouging Fire", + "tier": "A" + }, + { + "name": "Pecharunt", + "tier": "A" + }, + { + "name": "Venusaur", + "tier": "B" + }, + { + "name": "Charizard", + "tier": "B" + }, + { + "name": "Ninetales", + "tier": "B" + }, + { + "name": "Vileplume", + "tier": "B" + }, + { + "name": "Dugtrio", + "tier": "B" + }, + { + "name": "Primeape", + "tier": "B" + }, + { + "name": "Alakazam", + "tier": "B" + }, + { + "name": "Tentacruel", + "tier": "B" + }, + { + "name": "Magneton", + "tier": "B" + }, + { + "name": "Dodrio", + "tier": "B" + }, + { + "name": "Muk", + "tier": "B" + }, + { + "name": "Shellder", + "tier": "B" + }, + { + "name": "Cloyster", + "tier": "B" + }, + { + "name": "Haunter", + "tier": "B" + }, + { + "name": "Hitmonlee", + "tier": "B" + }, + { + "name": "Hitmonchan", + "tier": "B" + }, + { + "name": "Koffing", + "tier": "B" + }, + { + "name": "Weezing", + "tier": "B" + }, + { + "name": "Chansey", + "tier": "B" + }, + { + "name": "Electabuzz", + "tier": "B" + }, + { + "name": "Lapras", + "tier": "B" + }, + { + "name": "Vaporeon", + "tier": "B" + }, + { + "name": "Articuno", + "tier": "B" + }, + { + "name": "Zapdos", + "tier": "B" + }, + { + "name": "Moltres", + "tier": "B" + }, + { + "name": "Typhlosion", + "tier": "B" + }, + { + "name": "Feraligatr", + "tier": "B" + }, + { + "name": "Crobat", + "tier": "B" + }, + { + "name": "Chinchou", + "tier": "B" + }, + { + "name": "Lanturn", + "tier": "B" + }, + { + "name": "Azumarill", + "tier": "B" + }, + { + "name": "Politoed", + "tier": "B" + }, + { + "name": "Quagsire", + "tier": "B" + }, + { + "name": "Umbreon", + "tier": "B" + }, + { + "name": "Murkrow", + "tier": "B" + }, + { + "name": "Slowking", + "tier": "B" + }, + { + "name": "Forretress", + "tier": "B" + }, + { + "name": "Gligar", + "tier": "B" + }, + { + "name": "Qwilfish", + "tier": "B" + }, + { + "name": "Shuckle", + "tier": "B" + }, + { + "name": "Heracross", + "tier": "B" + }, + { + "name": "Sneasel", + "tier": "B" + }, + { + "name": "Ursaring", + "tier": "B" + }, + { + "name": "Houndoom", + "tier": "B" + }, + { + "name": "Kingdra", + "tier": "B" + }, + { + "name": "Porygon2", + "tier": "B" + }, + { + "name": "Smeargle", + "tier": "B" + }, + { + "name": "Blissey", + "tier": "B" + }, + { + "name": "Suicune", + "tier": "B" + }, + { + "name": "Sceptile", + "tier": "B" + }, + { + "name": "Blaziken", + "tier": "B" + }, + { + "name": "Swampert", + "tier": "B" + }, + { + "name": "Pelipper", + "tier": "B" + }, + { + "name": "Gardevoir", + "tier": "B" + }, + { + "name": "Breloom", + "tier": "B" + }, + { + "name": "Slaking", + "tier": "B" + }, + { + "name": "Hariyama", + "tier": "B" + }, + { + "name": "Trapinch", + "tier": "B" + }, + { + "name": "Cacturne", + "tier": "B" + }, + { + "name": "Altaria", + "tier": "B" + }, + { + "name": "Zangoose", + "tier": "B" + }, + { + "name": "Crawdaunt", + "tier": "B" + }, + { + "name": "Dusclops", + "tier": "B" + }, + { + "name": "Salamence", + "tier": "B" + }, + { + "name": "Regice", + "tier": "B" + }, + { + "name": "Registeel", + "tier": "B" + }, + { + "name": "Latias", + "tier": "B" + }, + { + "name": "Deoxys", + "tier": "B" + }, + { + "name": "Torterra", + "tier": "B" + }, + { + "name": "Infernape", + "tier": "B" + }, + { + "name": "Empoleon", + "tier": "B" + }, + { + "name": "Staraptor", + "tier": "B" + }, + { + "name": "Cranidos", + "tier": "B" + }, + { + "name": "Rampardos", + "tier": "B" + }, + { + "name": "Bastiodon", + "tier": "B" + }, + { + "name": "Floatzel", + "tier": "B" + }, + { + "name": "Gastrodon", + "tier": "B" + }, + { + "name": "Drifloon", + "tier": "B" + }, + { + "name": "Drifblim", + "tier": "B" + }, + { + "name": "Mismagius", + "tier": "B" + }, + { + "name": "Honchkrow", + "tier": "B" + }, + { + "name": "Stunky", + "tier": "B" + }, + { + "name": "Skuntank", + "tier": "B" + }, + { + "name": "Spiritomb", + "tier": "B" + }, + { + "name": "Lucario", + "tier": "B" + }, + { + "name": "Hippowdon", + "tier": "B" + }, + { + "name": "Abomasnow", + "tier": "B" + }, + { + "name": "Magnezone", + "tier": "B" + }, + { + "name": "Electivire", + "tier": "B" + }, + { + "name": "Magmortar", + "tier": "B" + }, + { + "name": "Togekiss", + "tier": "B" + }, + { + "name": "Yanmega", + "tier": "B" + }, + { + "name": "Leafeon", + "tier": "B" + }, + { + "name": "Glaceon", + "tier": "B" + }, + { + "name": "Gliscor", + "tier": "B" + }, + { + "name": "Mamoswine", + "tier": "B" + }, + { + "name": "Porygon-Z", + "tier": "B" + }, + { + "name": "Gallade", + "tier": "B" + }, + { + "name": "Probopass", + "tier": "B" + }, + { + "name": "Dusknoir", + "tier": "B" + }, + { + "name": "Froslass", + "tier": "B" + }, + { + "name": "Azelf", + "tier": "B" + }, + { + "name": "Regigigas", + "tier": "B" + }, + { + "name": "Cresselia", + "tier": "B" + }, + { + "name": "Manaphy", + "tier": "B" + }, + { + "name": "Shaymin", + "tier": "B" + }, + { + "name": "Victini", + "tier": "B" + }, + { + "name": "Serperior", + "tier": "B" + }, + { + "name": "Emboar", + "tier": "B" + }, + { + "name": "Samurott", + "tier": "B" + }, + { + "name": "Gigalith", + "tier": "B" + }, + { + "name": "Scolipede", + "tier": "B" + }, + { + "name": "Basculin", + "tier": "B" + }, + { + "name": "Darmanitan", + "tier": "B" + }, + { + "name": "Scrafty", + "tier": "B" + }, + { + "name": "Zoroark", + "tier": "B" + }, + { + "name": "Reuniclus", + "tier": "B" + }, + { + "name": "Galvantula", + "tier": "B" + }, + { + "name": "Ferrothorn", + "tier": "B" + }, + { + "name": "Eelektross", + "tier": "B" + }, + { + "name": "Haxorus", + "tier": "B" + }, + { + "name": "Beartic", + "tier": "B" + }, + { + "name": "Cryogonal", + "tier": "B" + }, + { + "name": "Mienshao", + "tier": "B" + }, + { + "name": "Golurk", + "tier": "B" + }, + { + "name": "Braviary", + "tier": "B" + }, + { + "name": "Mandibuzz", + "tier": "B" + }, + { + "name": "Hydreigon", + "tier": "B" + }, + { + "name": "Cobalion", + "tier": "B" + }, + { + "name": "Terrakion", + "tier": "B" + }, + { + "name": "Virizion", + "tier": "B" + }, + { + "name": "Meloetta", + "tier": "B" + }, + { + "name": "Genesect", + "tier": "B" + }, + { + "name": "Chesnaught", + "tier": "B" + }, + { + "name": "Delphox", + "tier": "B" + }, + { + "name": "Pyroar", + "tier": "B" + }, + { + "name": "Meowstic", + "tier": "B" + }, + { + "name": "Slurpuff", + "tier": "B" + }, + { + "name": "Malamar", + "tier": "B" + }, + { + "name": "Clawitzer", + "tier": "B" + }, + { + "name": "Sylveon", + "tier": "B" + }, + { + "name": "Hawlucha", + "tier": "B" + }, + { + "name": "Carbink", + "tier": "B" + }, + { + "name": "Klefki", + "tier": "B" + }, + { + "name": "Avalugg", + "tier": "B" + }, + { + "name": "Decidueye", + "tier": "B" + }, + { + "name": "Primarina", + "tier": "B" + }, + { + "name": "Vikavolt", + "tier": "B" + }, + { + "name": "Crabominable", + "tier": "B" + }, + { + "name": "Ribombee", + "tier": "B" + }, + { + "name": "Lycanroc", + "tier": "B" + }, + { + "name": "Mareanie", + "tier": "B" + }, + { + "name": "Toxapex", + "tier": "B" + }, + { + "name": "Araquanid", + "tier": "B" + }, + { + "name": "Bewear", + "tier": "B" + }, + { + "name": "Comfey", + "tier": "B" + }, + { + "name": "Passimian", + "tier": "B" + }, + { + "name": "Golisopod", + "tier": "B" + }, + { + "name": "Palossand", + "tier": "B" + }, + { + "name": "Bruxish", + "tier": "B" + }, + { + "name": "Kommo-o", + "tier": "B" + }, + { + "name": "Tapu Lele", + "tier": "B" + }, + { + "name": "Tapu Bulu", + "tier": "B" + }, + { + "name": "Tapu Fini", + "tier": "B" + }, + { + "name": "Nihilego", + "tier": "B" + }, + { + "name": "Buzzwole", + "tier": "B" + }, + { + "name": "Pheromosa", + "tier": "B" + }, + { + "name": "Xurkitree", + "tier": "B" + }, + { + "name": "Kartana", + "tier": "B" + }, + { + "name": "Necrozma", + "tier": "B" + }, + { + "name": "Naganadel", + "tier": "B" + }, + { + "name": "Stakataka", + "tier": "B" + }, + { + "name": "Melmetal", + "tier": "B" + }, + { + "name": "Grookey", + "tier": "B" + }, + { + "name": "Inteleon", + "tier": "B" + }, + { + "name": "Corviknight", + "tier": "B" + }, + { + "name": "Drednaw", + "tier": "B" + }, + { + "name": "Coalossal", + "tier": "B" + }, + { + "name": "Sandaconda", + "tier": "B" + }, + { + "name": "Cramorant", + "tier": "B" + }, + { + "name": "Barraskewda", + "tier": "B" + }, + { + "name": "Toxtricity", + "tier": "B" + }, + { + "name": "Polteageist", + "tier": "B" + }, + { + "name": "Grimmsnarl", + "tier": "B" + }, + { + "name": "Frosmoth", + "tier": "B" + }, + { + "name": "Indeedee", + "tier": "B" + }, + { + "name": "Copperajah", + "tier": "B" + }, + { + "name": "Dracovish", + "tier": "B" + }, + { + "name": "Zacian", + "tier": "B" + }, + { + "name": "Regidrago", + "tier": "B" + }, + { + "name": "Glastrier", + "tier": "B" + }, + { + "name": "Spectrier", + "tier": "B" + }, + { + "name": "Overqwil", + "tier": "B" + }, + { + "name": "Enamorus", + "tier": "B" + }, + { + "name": "Meowscarada", + "tier": "B" + }, + { + "name": "Quaquaval", + "tier": "B" + }, + { + "name": "Maushold", + "tier": "B" + }, + { + "name": "Arboliva", + "tier": "B" + }, + { + "name": "Garganacl", + "tier": "B" + }, + { + "name": "Ceruledge", + "tier": "B" + }, + { + "name": "Bellibolt", + "tier": "B" + }, + { + "name": "Kilowattrel", + "tier": "B" + }, + { + "name": "Mabosstiff", + "tier": "B" + }, + { + "name": "Grafaiai", + "tier": "B" + }, + { + "name": "Brambleghast", + "tier": "B" + }, + { + "name": "Toedscool", + "tier": "B" + }, + { + "name": "Toedscruel", + "tier": "B" + }, + { + "name": "Espathra", + "tier": "B" + }, + { + "name": "Tinkatink", + "tier": "B" + }, + { + "name": "Tinkaton", + "tier": "B" + }, + { + "name": "Wugtrio", + "tier": "B" + }, + { + "name": "Bombirdier", + "tier": "B" + }, + { + "name": "Revavroom", + "tier": "B" + }, + { + "name": "Orthworm", + "tier": "B" + }, + { + "name": "Houndstone", + "tier": "B" + }, + { + "name": "Flamigo", + "tier": "B" + }, + { + "name": "Cetitan", + "tier": "B" + }, + { + "name": "Tatsugiri", + "tier": "B" + }, + { + "name": "Clodsire", + "tier": "B" + }, + { + "name": "Dudunsparce", + "tier": "B" + }, + { + "name": "Scream Tail", + "tier": "B" + }, + { + "name": "Brute Bonnet", + "tier": "B" + }, + { + "name": "Slither Wing", + "tier": "B" + }, + { + "name": "Sandy Shocks", + "tier": "B" + }, + { + "name": "Iron Treads", + "tier": "B" + }, + { + "name": "Iron Bundle", + "tier": "B" + }, + { + "name": "Iron Jugulis", + "tier": "B" + }, + { + "name": "Iron Thorns", + "tier": "B" + }, + { + "name": "Baxcalibur", + "tier": "B" + }, + { + "name": "Wo-Chien", + "tier": "B" + }, + { + "name": "Roaring Moon", + "tier": "B" + }, + { + "name": "Walking Wake", + "tier": "B" + }, + { + "name": "Iron Leaves", + "tier": "B" + }, + { + "name": "Sinistcha", + "tier": "B" + }, + { + "name": "Okidogi", + "tier": "B" + }, + { + "name": "Fezandipiti", + "tier": "B" + }, + { + "name": "Ogerpon", + "tier": "B" + }, + { + "name": "Iron Boulder", + "tier": "B" + }, + { + "name": "Iron Crown", + "tier": "B" + }, + { + "name": "Terapagos", + "tier": "B" + }, + { + "name": "Bulbasaur", + "tier": "C" + }, + { + "name": "Squirtle", + "tier": "C" + }, + { + "name": "Wartortle", + "tier": "C" + }, + { + "name": "Blastoise", + "tier": "C" + }, + { + "name": "Butterfree", + "tier": "C" + }, + { + "name": "Beedrill", + "tier": "C" + }, + { + "name": "Pidgeot", + "tier": "C" + }, + { + "name": "Raticate", + "tier": "C" + }, + { + "name": "Fearow", + "tier": "C" + }, + { + "name": "Ekans", + "tier": "C" + }, + { + "name": "Arbok", + "tier": "C" + }, + { + "name": "Pikachu", + "tier": "C" + }, + { + "name": "Raichu", + "tier": "C" + }, + { + "name": "Sandshrew", + "tier": "C" + }, + { + "name": "Nidoqueen", + "tier": "C" + }, + { + "name": "Nidoking", + "tier": "C" + }, + { + "name": "Clefairy", + "tier": "C" + }, + { + "name": "Jigglypuff", + "tier": "C" + }, + { + "name": "Wigglytuff", + "tier": "C" + }, + { + "name": "Golbat", + "tier": "C" + }, + { + "name": "Gloom", + "tier": "C" + }, + { + "name": "Parasect", + "tier": "C" + }, + { + "name": "Venomoth", + "tier": "C" + }, + { + "name": "Diglett", + "tier": "C" + }, + { + "name": "Meowth", + "tier": "C" + }, + { + "name": "Persian", + "tier": "C" + }, + { + "name": "Golduck", + "tier": "C" + }, + { + "name": "Mankey", + "tier": "C" + }, + { + "name": "Growlithe", + "tier": "C" + }, + { + "name": "Poliwag", + "tier": "C" + }, + { + "name": "Poliwhirl", + "tier": "C" + }, + { + "name": "Poliwrath", + "tier": "C" + }, + { + "name": "Abra", + "tier": "C" + }, + { + "name": "Kadabra", + "tier": "C" + }, + { + "name": "Machoke", + "tier": "C" + }, + { + "name": "Machamp", + "tier": "C" + }, + { + "name": "Bellsprout", + "tier": "C" + }, + { + "name": "Weepinbell", + "tier": "C" + }, + { + "name": "Victreebel", + "tier": "C" + }, + { + "name": "Tentacool", + "tier": "C" + }, + { + "name": "Geodude", + "tier": "C" + }, + { + "name": "Graveler", + "tier": "C" + }, + { + "name": "Golem", + "tier": "C" + }, + { + "name": "Rapidash", + "tier": "C" + }, + { + "name": "Slowpoke", + "tier": "C" + }, + { + "name": "Magnemite", + "tier": "C" + }, + { + "name": "Doduo", + "tier": "C" + }, + { + "name": "Dewgong", + "tier": "C" + }, + { + "name": "Grimer", + "tier": "C" + }, + { + "name": "Gastly", + "tier": "C" + }, + { + "name": "Onix", + "tier": "C" + }, + { + "name": "Drowzee", + "tier": "C" + }, + { + "name": "Hypno", + "tier": "C" + }, + { + "name": "Krabby", + "tier": "C" + }, + { + "name": "Kingler", + "tier": "C" + }, + { + "name": "Voltorb", + "tier": "C" + }, + { + "name": "Electrode", + "tier": "C" + }, + { + "name": "Exeggutor", + "tier": "C" + }, + { + "name": "Cubone", + "tier": "C" + }, + { + "name": "Marowak", + "tier": "C" + }, + { + "name": "Lickitung", + "tier": "C" + }, + { + "name": "Rhyhorn", + "tier": "C" + }, + { + "name": "Tangela", + "tier": "C" + }, + { + "name": "Kangaskhan", + "tier": "C" + }, + { + "name": "Horsea", + "tier": "C" + }, + { + "name": "Seadra", + "tier": "C" + }, + { + "name": "Seaking", + "tier": "C" + }, + { + "name": "Mr. Mime", + "tier": "C" + }, + { + "name": "Jynx", + "tier": "C" + }, + { + "name": "Magmar", + "tier": "C" + }, + { + "name": "Pinsir", + "tier": "C" + }, + { + "name": "Tauros", + "tier": "C" + }, + { + "name": "Magikarp", + "tier": "C" + }, + { + "name": "Ditto", + "tier": "C" + }, + { + "name": "Flareon", + "tier": "C" + }, + { + "name": "Porygon", + "tier": "C" + }, + { + "name": "Omastar", + "tier": "C" + }, + { + "name": "Kabutops", + "tier": "C" + }, + { + "name": "Aerodactyl", + "tier": "C" + }, + { + "name": "Dratini", + "tier": "C" + }, + { + "name": "Dragonair", + "tier": "C" + }, + { + "name": "Meganium", + "tier": "C" + }, + { + "name": "Cyndaquil", + "tier": "C" + }, + { + "name": "Furret", + "tier": "C" + }, + { + "name": "Noctowl", + "tier": "C" + }, + { + "name": "Ledian", + "tier": "C" + }, + { + "name": "Ariados", + "tier": "C" + }, + { + "name": "Togetic", + "tier": "C" + }, + { + "name": "Xatu", + "tier": "C" + }, + { + "name": "Ampharos", + "tier": "C" + }, + { + "name": "Bellossom", + "tier": "C" + }, + { + "name": "Marill", + "tier": "C" + }, + { + "name": "Sudowoodo", + "tier": "C" + }, + { + "name": "Jumpluff", + "tier": "C" + }, + { + "name": "Aipom", + "tier": "C" + }, + { + "name": "Sunflora", + "tier": "C" + }, + { + "name": "Yanma", + "tier": "C" + }, + { + "name": "Wooper", + "tier": "C" + }, + { + "name": "Misdreavus", + "tier": "C" + }, + { + "name": "Wobbuffet", + "tier": "C" + }, + { + "name": "Girafarig", + "tier": "C" + }, + { + "name": "Pineco", + "tier": "C" + }, + { + "name": "Dunsparce", + "tier": "C" + }, + { + "name": "Steelix", + "tier": "C" + }, + { + "name": "Snubbull", + "tier": "C" + }, + { + "name": "Granbull", + "tier": "C" + }, + { + "name": "Slugma", + "tier": "C" + }, + { + "name": "Magcargo", + "tier": "C" + }, + { + "name": "Piloswine", + "tier": "C" + }, + { + "name": "Corsola", + "tier": "C" + }, + { + "name": "Octillery", + "tier": "C" + }, + { + "name": "Delibird", + "tier": "C" + }, + { + "name": "Mantine", + "tier": "C" + }, + { + "name": "Houndour", + "tier": "C" + }, + { + "name": "Stantler", + "tier": "C" + }, + { + "name": "Miltank", + "tier": "C" + }, + { + "name": "Celebi", + "tier": "C" + }, + { + "name": "Grovyle", + "tier": "C" + }, + { + "name": "Combusken", + "tier": "C" + }, + { + "name": "Mightyena", + "tier": "C" + }, + { + "name": "Linoone", + "tier": "C" + }, + { + "name": "Beautifly", + "tier": "C" + }, + { + "name": "Cascoon", + "tier": "C" + }, + { + "name": "Ludicolo", + "tier": "C" + }, + { + "name": "Shiftry", + "tier": "C" + }, + { + "name": "Taillow", + "tier": "C" + }, + { + "name": "Swellow", + "tier": "C" + }, + { + "name": "Wingull", + "tier": "C" + }, + { + "name": "Masquerain", + "tier": "C" + }, + { + "name": "Vigoroth", + "tier": "C" + }, + { + "name": "Nincada", + "tier": "C" + }, + { + "name": "Ninjask", + "tier": "C" + }, + { + "name": "Shedinja", + "tier": "C" + }, + { + "name": "Exploud", + "tier": "C" + }, + { + "name": "Makuhita", + "tier": "C" + }, + { + "name": "Azurill", + "tier": "C" + }, + { + "name": "Nosepass", + "tier": "C" + }, + { + "name": "Delcatty", + "tier": "C" + }, + { + "name": "Sableye", + "tier": "C" + }, + { + "name": "Mawile", + "tier": "C" + }, + { + "name": "Aron", + "tier": "C" + }, + { + "name": "Lairon", + "tier": "C" + }, + { + "name": "Aggron", + "tier": "C" + }, + { + "name": "Medicham", + "tier": "C" + }, + { + "name": "Manectric", + "tier": "C" + }, + { + "name": "Plusle", + "tier": "C" + }, + { + "name": "Minun", + "tier": "C" + }, + { + "name": "Volbeat", + "tier": "C" + }, + { + "name": "Illumise", + "tier": "C" + }, + { + "name": "Roselia", + "tier": "C" + }, + { + "name": "Swalot", + "tier": "C" + }, + { + "name": "Carvanha", + "tier": "C" + }, + { + "name": "Sharpedo", + "tier": "C" + }, + { + "name": "Wailmer", + "tier": "C" + }, + { + "name": "Wailord", + "tier": "C" + }, + { + "name": "Numel", + "tier": "C" + }, + { + "name": "Camerupt", + "tier": "C" + }, + { + "name": "Spoink", + "tier": "C" + }, + { + "name": "Grumpig", + "tier": "C" + }, + { + "name": "Cacnea", + "tier": "C" + }, + { + "name": "Seviper", + "tier": "C" + }, + { + "name": "Lunatone", + "tier": "C" + }, + { + "name": "Solrock", + "tier": "C" + }, + { + "name": "Whiscash", + "tier": "C" + }, + { + "name": "Corphish", + "tier": "C" + }, + { + "name": "Claydol", + "tier": "C" + }, + { + "name": "Lileep", + "tier": "C" + }, + { + "name": "Cradily", + "tier": "C" + }, + { + "name": "Anorith", + "tier": "C" + }, + { + "name": "Armaldo", + "tier": "C" + }, + { + "name": "Feebas", + "tier": "C" + }, + { + "name": "Kecleon", + "tier": "C" + }, + { + "name": "Banette", + "tier": "C" + }, + { + "name": "Duskull", + "tier": "C" + }, + { + "name": "Tropius", + "tier": "C" + }, + { + "name": "Chimecho", + "tier": "C" + }, + { + "name": "Absol", + "tier": "C" + }, + { + "name": "Glalie", + "tier": "C" + }, + { + "name": "Walrein", + "tier": "C" + }, + { + "name": "Clamperl", + "tier": "C" + }, + { + "name": "Huntail", + "tier": "C" + }, + { + "name": "Gorebyss", + "tier": "C" + }, + { + "name": "Relicanth", + "tier": "C" + }, + { + "name": "Luvdisc", + "tier": "C" + }, + { + "name": "Bagon", + "tier": "C" + }, + { + "name": "Shelgon", + "tier": "C" + }, + { + "name": "Beldum", + "tier": "C" + }, + { + "name": "Metang", + "tier": "C" + }, + { + "name": "Turtwig", + "tier": "C" + }, + { + "name": "Grotle", + "tier": "C" + }, + { + "name": "Monferno", + "tier": "C" + }, + { + "name": "Staravia", + "tier": "C" + }, + { + "name": "Bibarel", + "tier": "C" + }, + { + "name": "Kricketune", + "tier": "C" + }, + { + "name": "Luxray", + "tier": "C" + }, + { + "name": "Roserade", + "tier": "C" + }, + { + "name": "Shieldon", + "tier": "C" + }, + { + "name": "Wormadam", + "tier": "C" + }, + { + "name": "Mothim", + "tier": "C" + }, + { + "name": "Vespiquen", + "tier": "C" + }, + { + "name": "Pachirisu", + "tier": "C" + }, + { + "name": "Buizel", + "tier": "C" + }, + { + "name": "Cherrim", + "tier": "C" + }, + { + "name": "Shellos", + "tier": "C" + }, + { + "name": "Lopunny", + "tier": "C" + }, + { + "name": "Purugly", + "tier": "C" + }, + { + "name": "Bronzor", + "tier": "C" + }, + { + "name": "Bonsly", + "tier": "C" + }, + { + "name": "Chatot", + "tier": "C" + }, + { + "name": "Gible", + "tier": "C" + }, + { + "name": "Gabite", + "tier": "C" + }, + { + "name": "Munchlax", + "tier": "C" + }, + { + "name": "Riolu", + "tier": "C" + }, + { + "name": "Hippopotas", + "tier": "C" + }, + { + "name": "Drapion", + "tier": "C" + }, + { + "name": "Croagunk", + "tier": "C" + }, + { + "name": "Toxicroak", + "tier": "C" + }, + { + "name": "Carnivine", + "tier": "C" + }, + { + "name": "Lumineon", + "tier": "C" + }, + { + "name": "Snover", + "tier": "C" + }, + { + "name": "Lickilicky", + "tier": "C" + }, + { + "name": "Tangrowth", + "tier": "C" + }, + { + "name": "Rotom", + "tier": "C" + }, + { + "name": "Phione", + "tier": "C" + }, + { + "name": "Servine", + "tier": "C" + }, + { + "name": "Pignite", + "tier": "C" + }, + { + "name": "Watchog", + "tier": "C" + }, + { + "name": "Stoutland", + "tier": "C" + }, + { + "name": "Liepard", + "tier": "C" + }, + { + "name": "Simisage", + "tier": "C" + }, + { + "name": "Simisear", + "tier": "C" + }, + { + "name": "Simipour", + "tier": "C" + }, + { + "name": "Musharna", + "tier": "C" + }, + { + "name": "Unfezant", + "tier": "C" + }, + { + "name": "Blitzle", + "tier": "C" + }, + { + "name": "Zebstrika", + "tier": "C" + }, + { + "name": "Roggenrola", + "tier": "C" + }, + { + "name": "Boldore", + "tier": "C" + }, + { + "name": "Swoobat", + "tier": "C" + }, + { + "name": "Drilbur", + "tier": "C" + }, + { + "name": "Audino", + "tier": "C" + }, + { + "name": "Timburr", + "tier": "C" + }, + { + "name": "Gurdurr", + "tier": "C" + }, + { + "name": "Seismitoad", + "tier": "C" + }, + { + "name": "Throh", + "tier": "C" + }, + { + "name": "Sawk", + "tier": "C" + }, + { + "name": "Swadloon", + "tier": "C" + }, + { + "name": "Leavanny", + "tier": "C" + }, + { + "name": "Whirlipede", + "tier": "C" + }, + { + "name": "Cottonee", + "tier": "C" + }, + { + "name": "Lilligant", + "tier": "C" + }, + { + "name": "Sandile", + "tier": "C" + }, + { + "name": "Krokorok", + "tier": "C" + }, + { + "name": "Maractus", + "tier": "C" + }, + { + "name": "Crustle", + "tier": "C" + }, + { + "name": "Sigilyph", + "tier": "C" + }, + { + "name": "Cofagrigus", + "tier": "C" + }, + { + "name": "Carracosta", + "tier": "C" + }, + { + "name": "Archen", + "tier": "C" + }, + { + "name": "Archeops", + "tier": "C" + }, + { + "name": "Garbodor", + "tier": "C" + }, + { + "name": "Zorua", + "tier": "C" + }, + { + "name": "Minccino", + "tier": "C" + }, + { + "name": "Gothita", + "tier": "C" + }, + { + "name": "Gothitelle", + "tier": "C" + }, + { + "name": "Solosis", + "tier": "C" + }, + { + "name": "Duosion", + "tier": "C" + }, + { + "name": "Swanna", + "tier": "C" + }, + { + "name": "Vanilluxe", + "tier": "C" + }, + { + "name": "Deerling", + "tier": "C" + }, + { + "name": "Sawsbuck", + "tier": "C" + }, + { + "name": "Emolga", + "tier": "C" + }, + { + "name": "Escavalier", + "tier": "C" + }, + { + "name": "Jellicent", + "tier": "C" + }, + { + "name": "Joltik", + "tier": "C" + }, + { + "name": "Ferroseed", + "tier": "C" + }, + { + "name": "Klinklang", + "tier": "C" + }, + { + "name": "Eelektrik", + "tier": "C" + }, + { + "name": "Beheeyem", + "tier": "C" + }, + { + "name": "Litwick", + "tier": "C" + }, + { + "name": "Lampent", + "tier": "C" + }, + { + "name": "Axew", + "tier": "C" + }, + { + "name": "Fraxure", + "tier": "C" + }, + { + "name": "Accelgor", + "tier": "C" + }, + { + "name": "Stunfisk", + "tier": "C" + }, + { + "name": "Druddigon", + "tier": "C" + }, + { + "name": "Golett", + "tier": "C" + }, + { + "name": "Pawniard", + "tier": "C" + }, + { + "name": "Bouffalant", + "tier": "C" + }, + { + "name": "Heatmor", + "tier": "C" + }, + { + "name": "Durant", + "tier": "C" + }, + { + "name": "Larvesta", + "tier": "C" + }, + { + "name": "Chespin", + "tier": "C" + }, + { + "name": "Quilladin", + "tier": "C" + }, + { + "name": "Braixen", + "tier": "C" + }, + { + "name": "Froakie", + "tier": "C" + }, + { + "name": "Frogadier", + "tier": "C" + }, + { + "name": "Diggersby", + "tier": "C" + }, + { + "name": "Fletchinder", + "tier": "C" + }, + { + "name": "Vivillon", + "tier": "C" + }, + { + "name": "Litleo", + "tier": "C" + }, + { + "name": "Flabébé", + "tier": "C" + }, + { + "name": "Floette", + "tier": "C" + }, + { + "name": "Gogoat", + "tier": "C" + }, + { + "name": "Pangoro", + "tier": "C" + }, + { + "name": "Furfrou", + "tier": "C" + }, + { + "name": "Espurr", + "tier": "C" + }, + { + "name": "Honedge", + "tier": "C" + }, + { + "name": "Doublade", + "tier": "C" + }, + { + "name": "Spritzee", + "tier": "C" + }, + { + "name": "Aromatisse", + "tier": "C" + }, + { + "name": "Barbaracle", + "tier": "C" + }, + { + "name": "Skrelp", + "tier": "C" + }, + { + "name": "Dragalge", + "tier": "C" + }, + { + "name": "Clauncher", + "tier": "C" + }, + { + "name": "Heliolisk", + "tier": "C" + }, + { + "name": "Tyrunt", + "tier": "C" + }, + { + "name": "Tyrantrum", + "tier": "C" + }, + { + "name": "Aurorus", + "tier": "C" + }, + { + "name": "Dedenne", + "tier": "C" + }, + { + "name": "Sliggoo", + "tier": "C" + }, + { + "name": "Phantump", + "tier": "C" + }, + { + "name": "Trevenant", + "tier": "C" + }, + { + "name": "Gourgeist", + "tier": "C" + }, + { + "name": "Bergmite", + "tier": "C" + }, + { + "name": "Litten", + "tier": "C" + }, + { + "name": "Torracat", + "tier": "C" + }, + { + "name": "Brionne", + "tier": "C" + }, + { + "name": "Pikipek", + "tier": "C" + }, + { + "name": "Trumbeak", + "tier": "C" + }, + { + "name": "Toucannon", + "tier": "C" + }, + { + "name": "Gumshoos", + "tier": "C" + }, + { + "name": "Charjabug", + "tier": "C" + }, + { + "name": "Crabrawler", + "tier": "C" + }, + { + "name": "Oricorio", + "tier": "C" + }, + { + "name": "Dewpider", + "tier": "C" + }, + { + "name": "Lurantis", + "tier": "C" + }, + { + "name": "Morelull", + "tier": "C" + }, + { + "name": "Shiinotic", + "tier": "C" + }, + { + "name": "Salandit", + "tier": "C" + }, + { + "name": "Oranguru", + "tier": "C" + }, + { + "name": "Sandygast", + "tier": "C" + }, + { + "name": "Pyukumuku", + "tier": "C" + }, + { + "name": "Type: Null", + "tier": "C" + }, + { + "name": "Silvally", + "tier": "C" + }, + { + "name": "Minior", + "tier": "C" + }, + { + "name": "Komala", + "tier": "C" + }, + { + "name": "Turtonator", + "tier": "C" + }, + { + "name": "Togedemaru", + "tier": "C" + }, + { + "name": "Drampa", + "tier": "C" + }, + { + "name": "Dhelmise", + "tier": "C" + }, + { + "name": "Cosmoem", + "tier": "C" + }, + { + "name": "Guzzlord", + "tier": "C" + }, + { + "name": "Thwackey", + "tier": "C" + }, + { + "name": "Scorbunny", + "tier": "C" + }, + { + "name": "Raboot", + "tier": "C" + }, + { + "name": "Drizzile", + "tier": "C" + }, + { + "name": "Greedent", + "tier": "C" + }, + { + "name": "Dottler", + "tier": "C" + }, + { + "name": "Orbeetle", + "tier": "C" + }, + { + "name": "Thievul", + "tier": "C" + }, + { + "name": "Eldegoss", + "tier": "C" + }, + { + "name": "Dubwool", + "tier": "C" + }, + { + "name": "Boltund", + "tier": "C" + }, + { + "name": "Carkol", + "tier": "C" + }, + { + "name": "Applin", + "tier": "C" + }, + { + "name": "Flapple", + "tier": "C" + }, + { + "name": "Appletun", + "tier": "C" + }, + { + "name": "Arrokuda", + "tier": "C" + }, + { + "name": "Centiskorch", + "tier": "C" + }, + { + "name": "Grapploct", + "tier": "C" + }, + { + "name": "Hattrem", + "tier": "C" + }, + { + "name": "Impidimp", + "tier": "C" + }, + { + "name": "Morgrem", + "tier": "C" + }, + { + "name": "Obstagoon", + "tier": "C" + }, + { + "name": "Perrserker", + "tier": "C" + }, + { + "name": "Cursola", + "tier": "C" + }, + { + "name": "Sirfetch'd", + "tier": "C" + }, + { + "name": "Mr. Rime", + "tier": "C" + }, + { + "name": "Runerigus", + "tier": "C" + }, + { + "name": "Alcremie", + "tier": "C" + }, + { + "name": "Falinks", + "tier": "C" + }, + { + "name": "Pincurchin", + "tier": "C" + }, + { + "name": "Stonjourner", + "tier": "C" + }, + { + "name": "Eiscue", + "tier": "C" + }, + { + "name": "Morpeko", + "tier": "C" + }, + { + "name": "Cufant", + "tier": "C" + }, + { + "name": "Dracozolt", + "tier": "C" + }, + { + "name": "Arctozolt", + "tier": "C" + }, + { + "name": "Arctovish", + "tier": "C" + }, + { + "name": "Dreepy", + "tier": "C" + }, + { + "name": "Drakloak", + "tier": "C" + }, + { + "name": "Kubfu", + "tier": "C" + }, + { + "name": "Calyrex", + "tier": "C" + }, + { + "name": "Wyrdeer", + "tier": "C" + }, + { + "name": "Fuecoco", + "tier": "C" + }, + { + "name": "Crocalor", + "tier": "C" + }, + { + "name": "Quaxly", + "tier": "C" + }, + { + "name": "Quaxwell", + "tier": "C" + }, + { + "name": "Oinkologne", + "tier": "C" + }, + { + "name": "Spidops", + "tier": "C" + }, + { + "name": "Nymble", + "tier": "C" + }, + { + "name": "Pawmo", + "tier": "C" + }, + { + "name": "Dachsbun", + "tier": "C" + }, + { + "name": "Squawkabilly", + "tier": "C" + }, + { + "name": "Nacli", + "tier": "C" + }, + { + "name": "Naclstack", + "tier": "C" + }, + { + "name": "Wattrel", + "tier": "C" + }, + { + "name": "Shroodle", + "tier": "C" + }, + { + "name": "Bramblin", + "tier": "C" + }, + { + "name": "Klawf", + "tier": "C" + }, + { + "name": "Scovillain", + "tier": "C" + }, + { + "name": "Rabsca", + "tier": "C" + }, + { + "name": "Tinkatuff", + "tier": "C" + }, + { + "name": "Wiglett", + "tier": "C" + }, + { + "name": "Palafin", + "tier": "C" + }, + { + "name": "Varoom", + "tier": "C" + }, + { + "name": "Greavard", + "tier": "C" + }, + { + "name": "Cetoddle", + "tier": "C" + }, + { + "name": "Veluza", + "tier": "C" + }, + { + "name": "Frigibax", + "tier": "C" + }, + { + "name": "Arctibax", + "tier": "C" + }, + { + "name": "Gimmighoul", + "tier": "C" + }, + { + "name": "Dipplin", + "tier": "C" + }, + { + "name": "Ivysaur", + "tier": "D" + }, + { + "name": "Charmander", + "tier": "D" + }, + { + "name": "Charmeleon", + "tier": "D" + }, + { + "name": "Caterpie", + "tier": "D" + }, + { + "name": "Metapod", + "tier": "D" + }, + { + "name": "Weedle", + "tier": "D" + }, + { + "name": "Kakuna", + "tier": "D" + }, + { + "name": "Pidgey", + "tier": "D" + }, + { + "name": "Pidgeotto", + "tier": "D" + }, + { + "name": "Rattata", + "tier": "D" + }, + { + "name": "Spearow", + "tier": "D" + }, + { + "name": "Nidoran♀ (female)", + "tier": "D" + }, + { + "name": "Nidorina", + "tier": "D" + }, + { + "name": "Nidoran♂ (male)", + "tier": "D" + }, + { + "name": "Nidorino", + "tier": "D" + }, + { + "name": "Vulpix", + "tier": "D" + }, + { + "name": "Zubat", + "tier": "D" + }, + { + "name": "Oddish", + "tier": "D" + }, + { + "name": "Paras", + "tier": "D" + }, + { + "name": "Venonat", + "tier": "D" + }, + { + "name": "Psyduck", + "tier": "D" + }, + { + "name": "Machop", + "tier": "D" + }, + { + "name": "Ponyta", + "tier": "D" + }, + { + "name": "Farfetch'd", + "tier": "D" + }, + { + "name": "Seel", + "tier": "D" + }, + { + "name": "Exeggcute", + "tier": "D" + }, + { + "name": "Goldeen", + "tier": "D" + }, + { + "name": "Staryu", + "tier": "D" + }, + { + "name": "Eevee", + "tier": "D" + }, + { + "name": "Omanyte", + "tier": "D" + }, + { + "name": "Kabuto", + "tier": "D" + }, + { + "name": "Chikorita", + "tier": "D" + }, + { + "name": "Bayleef", + "tier": "D" + }, + { + "name": "Quilava", + "tier": "D" + }, + { + "name": "Totodile", + "tier": "D" + }, + { + "name": "Croconaw", + "tier": "D" + }, + { + "name": "Sentret", + "tier": "D" + }, + { + "name": "Hoothoot", + "tier": "D" + }, + { + "name": "Ledyba", + "tier": "D" + }, + { + "name": "Spinarak", + "tier": "D" + }, + { + "name": "Pichu", + "tier": "D" + }, + { + "name": "Cleffa", + "tier": "D" + }, + { + "name": "Igglybuff", + "tier": "D" + }, + { + "name": "Togepi", + "tier": "D" + }, + { + "name": "Natu", + "tier": "D" + }, + { + "name": "Mareep", + "tier": "D" + }, + { + "name": "Flaaffy", + "tier": "D" + }, + { + "name": "Hoppip", + "tier": "D" + }, + { + "name": "Skiploom", + "tier": "D" + }, + { + "name": "Sunkern", + "tier": "D" + }, + { + "name": "Unown", + "tier": "D" + }, + { + "name": "Teddiursa", + "tier": "D" + }, + { + "name": "Swinub", + "tier": "D" + }, + { + "name": "Remoraid", + "tier": "D" + }, + { + "name": "Phanpy", + "tier": "D" + }, + { + "name": "Tyrogue", + "tier": "D" + }, + { + "name": "Smoochum", + "tier": "D" + }, + { + "name": "Magby", + "tier": "D" + }, + { + "name": "Larvitar", + "tier": "D" + }, + { + "name": "Pupitar", + "tier": "D" + }, + { + "name": "Treecko", + "tier": "D" + }, + { + "name": "Torchic", + "tier": "D" + }, + { + "name": "Mudkip", + "tier": "D" + }, + { + "name": "Marshtomp", + "tier": "D" + }, + { + "name": "Poochyena", + "tier": "D" + }, + { + "name": "Zigzagoon", + "tier": "D" + }, + { + "name": "Wurmple", + "tier": "D" + }, + { + "name": "Silcoon", + "tier": "D" + }, + { + "name": "Dustox", + "tier": "D" + }, + { + "name": "Lotad", + "tier": "D" + }, + { + "name": "Lombre", + "tier": "D" + }, + { + "name": "Seedot", + "tier": "D" + }, + { + "name": "Nuzleaf", + "tier": "D" + }, + { + "name": "Ralts", + "tier": "D" + }, + { + "name": "Kirlia", + "tier": "D" + }, + { + "name": "Surskit", + "tier": "D" + }, + { + "name": "Shroomish", + "tier": "D" + }, + { + "name": "Slakoth", + "tier": "D" + }, + { + "name": "Whismur", + "tier": "D" + }, + { + "name": "Loudred", + "tier": "D" + }, + { + "name": "Skitty", + "tier": "D" + }, + { + "name": "Meditite", + "tier": "D" + }, + { + "name": "Electrike", + "tier": "D" + }, + { + "name": "Gulpin", + "tier": "D" + }, + { + "name": "Spinda", + "tier": "D" + }, + { + "name": "Vibrava", + "tier": "D" + }, + { + "name": "Swablu", + "tier": "D" + }, + { + "name": "Barboach", + "tier": "D" + }, + { + "name": "Baltoy", + "tier": "D" + }, + { + "name": "Castform", + "tier": "D" + }, + { + "name": "Shuppet", + "tier": "D" + }, + { + "name": "Wynaut", + "tier": "D" + }, + { + "name": "Snorunt", + "tier": "D" + }, + { + "name": "Spheal", + "tier": "D" + }, + { + "name": "Sealeo", + "tier": "D" + }, + { + "name": "Chimchar", + "tier": "D" + }, + { + "name": "Piplup", + "tier": "D" + }, + { + "name": "Prinplup", + "tier": "D" + }, + { + "name": "Starly", + "tier": "D" + }, + { + "name": "Bidoof", + "tier": "D" + }, + { + "name": "Kricketot", + "tier": "D" + }, + { + "name": "Shinx", + "tier": "D" + }, + { + "name": "Luxio", + "tier": "D" + }, + { + "name": "Budew", + "tier": "D" + }, + { + "name": "Burmy", + "tier": "D" + }, + { + "name": "Combee", + "tier": "D" + }, + { + "name": "Cherubi", + "tier": "D" + }, + { + "name": "Buneary", + "tier": "D" + }, + { + "name": "Glameow", + "tier": "D" + }, + { + "name": "Chingling", + "tier": "D" + }, + { + "name": "Mime Jr.", + "tier": "D" + }, + { + "name": "Happiny", + "tier": "D" + }, + { + "name": "Skorupi", + "tier": "D" + }, + { + "name": "Finneon", + "tier": "D" + }, + { + "name": "Mantyke", + "tier": "D" + }, + { + "name": "Snivy", + "tier": "D" + }, + { + "name": "Tepig", + "tier": "D" + }, + { + "name": "Oshawott", + "tier": "D" + }, + { + "name": "Dewott", + "tier": "D" + }, + { + "name": "Patrat", + "tier": "D" + }, + { + "name": "Lillipup", + "tier": "D" + }, + { + "name": "Herdier", + "tier": "D" + }, + { + "name": "Purrloin", + "tier": "D" + }, + { + "name": "Pansage", + "tier": "D" + }, + { + "name": "Pansear", + "tier": "D" + }, + { + "name": "Panpour", + "tier": "D" + }, + { + "name": "Munna", + "tier": "D" + }, + { + "name": "Pidove", + "tier": "D" + }, + { + "name": "Tranquill", + "tier": "D" + }, + { + "name": "Woobat", + "tier": "D" + }, + { + "name": "Tympole", + "tier": "D" + }, + { + "name": "Palpitoad", + "tier": "D" + }, + { + "name": "Sewaddle", + "tier": "D" + }, + { + "name": "Venipede", + "tier": "D" + }, + { + "name": "Petilil", + "tier": "D" + }, + { + "name": "Darumaka", + "tier": "D" + }, + { + "name": "Dwebble", + "tier": "D" + }, + { + "name": "Scraggy", + "tier": "D" + }, + { + "name": "Yamask", + "tier": "D" + }, + { + "name": "Tirtouga", + "tier": "D" + }, + { + "name": "Trubbish", + "tier": "D" + }, + { + "name": "Gothorita", + "tier": "D" + }, + { + "name": "Ducklett", + "tier": "D" + }, + { + "name": "Vanillite", + "tier": "D" + }, + { + "name": "Vanillish", + "tier": "D" + }, + { + "name": "Karrablast", + "tier": "D" + }, + { + "name": "Frillish", + "tier": "D" + }, + { + "name": "Klink", + "tier": "D" + }, + { + "name": "Klang", + "tier": "D" + }, + { + "name": "Tynamo", + "tier": "D" + }, + { + "name": "Elgyem", + "tier": "D" + }, + { + "name": "Cubchoo", + "tier": "D" + }, + { + "name": "Shelmet", + "tier": "D" + }, + { + "name": "Rufflet", + "tier": "D" + }, + { + "name": "Deino", + "tier": "D" + }, + { + "name": "Zweilous", + "tier": "D" + }, + { + "name": "Fennekin", + "tier": "D" + }, + { + "name": "Bunnelby", + "tier": "D" + }, + { + "name": "Fletchling", + "tier": "D" + }, + { + "name": "Scatterbug", + "tier": "D" + }, + { + "name": "Spewpa", + "tier": "D" + }, + { + "name": "Skiddo", + "tier": "D" + }, + { + "name": "Pancham", + "tier": "D" + }, + { + "name": "Swirlix", + "tier": "D" + }, + { + "name": "Inkay", + "tier": "D" + }, + { + "name": "Binacle", + "tier": "D" + }, + { + "name": "Helioptile", + "tier": "D" + }, + { + "name": "Amaura", + "tier": "D" + }, + { + "name": "Goomy", + "tier": "D" + }, + { + "name": "Pumpkaboo", + "tier": "D" + }, + { + "name": "Noibat", + "tier": "D" + }, + { + "name": "Rowlet", + "tier": "D" + }, + { + "name": "Dartrix", + "tier": "D" + }, + { + "name": "Popplio", + "tier": "D" + }, + { + "name": "Yungoos", + "tier": "D" + }, + { + "name": "Grubbin", + "tier": "D" + }, + { + "name": "Cutiefly", + "tier": "D" + }, + { + "name": "Rockruff", + "tier": "D" + }, + { + "name": "Wishiwashi", + "tier": "D" + }, + { + "name": "Fomantis", + "tier": "D" + }, + { + "name": "Stufful", + "tier": "D" + }, + { + "name": "Bounsweet", + "tier": "D" + }, + { + "name": "Steenee", + "tier": "D" + }, + { + "name": "Wimpod", + "tier": "D" + }, + { + "name": "Jangmo-o", + "tier": "D" + }, + { + "name": "Hakamo-o", + "tier": "D" + }, + { + "name": "Cosmog", + "tier": "D" + }, + { + "name": "Poipole", + "tier": "D" + }, + { + "name": "Meltan", + "tier": "D" + }, + { + "name": "Sobble", + "tier": "D" + }, + { + "name": "Skwovet", + "tier": "D" + }, + { + "name": "Rookidee", + "tier": "D" + }, + { + "name": "Corvisquire", + "tier": "D" + }, + { + "name": "Blipbug", + "tier": "D" + }, + { + "name": "Nickit", + "tier": "D" + }, + { + "name": "Gossifleur", + "tier": "D" + }, + { + "name": "Wooloo", + "tier": "D" + }, + { + "name": "Chewtle", + "tier": "D" + }, + { + "name": "Yamper", + "tier": "D" + }, + { + "name": "Rolycoly", + "tier": "D" + }, + { + "name": "Silicobra", + "tier": "D" + }, + { + "name": "Toxel", + "tier": "D" + }, + { + "name": "Sizzlipede", + "tier": "D" + }, + { + "name": "Clobbopus", + "tier": "D" + }, + { + "name": "Sinistea", + "tier": "D" + }, + { + "name": "Hatenna", + "tier": "D" + }, + { + "name": "Milcery", + "tier": "D" + }, + { + "name": "Snom", + "tier": "D" + }, + { + "name": "Sprigatito", + "tier": "D" + }, + { + "name": "Floragato", + "tier": "D" + }, + { + "name": "Lechonk", + "tier": "D" + }, + { + "name": "Tarountula", + "tier": "D" + }, + { + "name": "Pawmi", + "tier": "D" + }, + { + "name": "Tandemaus", + "tier": "D" + }, + { + "name": "Fidough", + "tier": "D" + }, + { + "name": "Smoliv", + "tier": "D" + }, + { + "name": "Dolliv", + "tier": "D" + }, + { + "name": "Charcadet", + "tier": "D" + }, + { + "name": "Tadbulb", + "tier": "D" + }, + { + "name": "Maschiff", + "tier": "D" + }, + { + "name": "Capsakid", + "tier": "D" + }, + { + "name": "Rellor", + "tier": "D" + }, + { + "name": "Flittle", + "tier": "D" + }, + { + "name": "Finizen", + "tier": "D" + }, + { + "name": "Poltchageist", + "tier": "D" + }, + { + "name": "Browt", + "tier": "D" + }, + { + "name": "Pombon", + "tier": "D" + }, + { + "name": "Gecqua", + "tier": "D" + } +] \ No newline at end of file