├── .babelrc ├── public ├── favicon.ico ├── manifest.json └── index.html ├── src ├── util │ ├── baseUrl.js │ ├── getPokemonNames.js │ ├── util.js │ ├── scrape_smogon_movesets.py │ ├── pokemonNames.json │ └── pokemonMoves.json ├── Spinner │ ├── Spinner.css │ ├── Spinner.js │ └── SpinnerIcon.js ├── index.js ├── Type.js ├── PokemonSprite.js ├── NoMoves.js ├── Pokemon.js ├── App.js ├── Ability.js ├── EvolutionChain.js ├── SearchInput.js ├── app.css └── MoveList.js ├── .gitignore ├── .flowconfig ├── README.md ├── .eslintrc └── package.json /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["flow"] 3 | } -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paulojbleitao/pokedex/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/util/baseUrl.js: -------------------------------------------------------------------------------- 1 | const BASE_URL = 'https://pokeapi.co/api/v2'; 2 | 3 | export default BASE_URL; 4 | -------------------------------------------------------------------------------- /src/Spinner/Spinner.css: -------------------------------------------------------------------------------- 1 | .spinner { 2 | display: flex; 3 | justify-content: center; 4 | padding-top: 10px; 5 | } -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | 4 | import 'bootstrap/dist/css/bootstrap.min.css'; 5 | 6 | import App from './App'; 7 | 8 | 9 | ReactDOM.render(, document.getElementById('root')); 10 | -------------------------------------------------------------------------------- /src/Spinner/Spinner.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import SpinnerIcon from './SpinnerIcon'; 3 | 4 | import './Spinner.css'; 5 | 6 | const Spinner = () => ( 7 |
8 | 9 |
10 | ); 11 | 12 | export default Spinner; 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | 12 | # misc 13 | .DS_Store 14 | .env.local 15 | .env.development.local 16 | .env.test.local 17 | .env.production.local 18 | 19 | npm-debug.log* 20 | yarn-debug.log* 21 | yarn-error.log* 22 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /src/util/getPokemonNames.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | const axios = require('axios'); 3 | const fs = require('fs'); 4 | 5 | async function getPokemonNames () { 6 | let json = { names: [] }; 7 | let query = await axios.get('https://pokeapi.co/api/v2/pokemon/'); 8 | 9 | while (query.data.next) { 10 | query.data.results.forEach(pokemon => json.names.push(pokemon.name)); 11 | query = await axios.get(query.data.next); 12 | } 13 | query.data.results.forEach(pokemon => json.names.push(pokemon.name)); 14 | 15 | return json; 16 | } 17 | 18 | getPokemonNames().then(json => { 19 | json = JSON.stringify(json); 20 | fs.writeFile('pokemonNames.json', json, 'utf8'); 21 | }); 22 | -------------------------------------------------------------------------------- /src/Type.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | import { formatString } from './util/util'; 5 | 6 | type Props = { 7 | type: string, 8 | }; 9 | 10 | type PokemonType = { 11 | slot: number, 12 | type: { 13 | url: string, 14 | name: string, 15 | }, 16 | }; 17 | 18 | export const Type = ({ type }: Props) => ( 19 | {formatString(type)} 20 | ); 21 | 22 | const typesArray = (types : Array) : Array => { 23 | const sortedTypes = types.sort((a, b) => a.slot - b.slot); 24 | 25 | return sortedTypes.map(type => ( 26 | )); 27 | }; 28 | 29 | export default typesArray; 30 | -------------------------------------------------------------------------------- /src/util/util.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | export function abilityOrAbilities(abilities : Array) { 4 | if (abilities.length > 1) { 5 | return 'Abilities'; 6 | } 7 | return 'Ability'; 8 | } 9 | 10 | function capitalizeFirstLetter(string) { 11 | return string.charAt(0).toUpperCase() + string.slice(1); 12 | } 13 | 14 | export function formatString(string : string) { 15 | const hyphenIndex = string.search('-'); 16 | if (hyphenIndex !== -1) { 17 | const stringWithSpaces = string.replace(/-/g, ' '); 18 | const substrings = stringWithSpaces.split(' '); 19 | substrings.forEach((element, index) => { 20 | substrings[index] = capitalizeFirstLetter(substrings[index]); 21 | }); 22 | return substrings.join(' '); 23 | } 24 | return capitalizeFirstLetter(string); 25 | } 26 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | 3 | [include] 4 | 5 | [libs] 6 | 7 | [lints] 8 | 9 | [options] 10 | emoji=true 11 | 12 | module.system=haste 13 | 14 | munge_underscores=true 15 | 16 | module.name_mapper.extension='\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)' -> 'RelativeImageStub' 17 | 18 | module.file_ext=.js 19 | module.file_ext=.jsx 20 | module.file_ext=.json 21 | 22 | 23 | suppress_type=$FlowIssue 24 | suppress_type=$FlowFixMe 25 | suppress_type=$FlowFixMeProps 26 | suppress_type=$FlowFixMeState 27 | 28 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 29 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 30 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 31 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError 32 | 33 | [strict] 34 | -------------------------------------------------------------------------------- /src/util/scrape_smogon_movesets.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | import json 3 | 4 | def get_moves(pokemon): 5 | moves = set() 6 | driver.get('https://www.smogon.com/dex/sm/pokemon/' + pokemon) 7 | elements = driver.find_elements_by_class_name('MoveList') 8 | for element in elements: 9 | moves.add(element.find_element_by_tag_name('a').text) 10 | return list(moves) 11 | 12 | def save_to_file(): 13 | with open('pokemonMoves.json', 'w') as f2: 14 | json.dump(notable_moves, f2) 15 | 16 | 17 | with open('pokemonNames.json') as f: 18 | names = json.load(f)['names'] 19 | 20 | try: 21 | with open('pokemonMoves.json') as f3: 22 | notable_moves = json.load(f3) 23 | except: 24 | notable_moves = { 'last_index': -1 } 25 | 26 | driver = webdriver.Firefox() 27 | 28 | for i in range(notable_moves['last_index'] + 1, len(names) - 1): 29 | notable_moves[names[i]] = get_moves(names[i]) 30 | save_to_file() 31 | notable_moves['last_index'] = i 32 | 33 | driver.close() 34 | -------------------------------------------------------------------------------- /src/PokemonSprite.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | 5 | type Props = { 6 | sprites: any 7 | } 8 | 9 | type State = { 10 | shiny: boolean 11 | } 12 | 13 | class PokemonSprite extends React.Component { 14 | constructor(props: Props) { 15 | super(props); 16 | 17 | this.state = { shiny: false }; 18 | 19 | this.handleClick = this.handleClick.bind(this); 20 | } 21 | 22 | handleClick() { 23 | const { shiny } = this.state; 24 | this.setState({ shiny: !shiny }); 25 | } 26 | 27 | render() { 28 | const { sprites } = this.props; 29 | const { shiny } = this.state; 30 | const sprite = shiny ? sprites.front_shiny : sprites.front_default; 31 | 32 | return ( 33 | 39 | ); 40 | } 41 | } 42 | 43 | export default PokemonSprite; 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Pokedex 3 | 4 | A pokedex application built with [React](https://reactjs.org/) that aims to be simple and easy to understand by beginners. All data is fetched from the amazing [PokeAPI](https://pokeapi.co/). It is available at https://paulojbleitao.github.io/pokedex/. 5 | 6 | ## Dependencies 7 | 8 | To run the Pokedex locally, you need to have `npm` or `yarn` (preferably `yarn`) installed on your machine. After cloning the project, simply running `yarn install` followed by `yarn start` will get the application up and running on http://localhost:3000. 9 | 10 | ## Contributing 11 | 12 | After getting the app running, you can proceed to editing the code! You can check out open [issues](https://github.com/paulojbleitao/pokedex/issues) or create your own if you want to fix a bug, create a new feature or do something else. Don't be afraid to get in touch! 13 | 14 | Make sure that the files you create or edit don't have linting or flow errors. To check, run `yarn lint` and `yarn run flow`. If there's anything you don't understand, just ask! :) -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "extends": "airbnb", 4 | "plugins": [ 5 | "react", 6 | "flowtype", 7 | "jsx-a11y", 8 | "import" 9 | ], 10 | "rules": { 11 | "max-len": ["error", { "code": 80 }], 12 | "linebreak-style": 0, 13 | "react/jsx-filename-extension": [ 14 | 1, { "extensions": [".js", ".jsx"] } 15 | ], 16 | "react/prefer-stateless-function": [ 17 | 2, { "ignorePureComponents": true } 18 | ], 19 | "react/forbid-prop-types": [0, { "forbid": [] }], 20 | "import/extensions": [1, "never", { "svg": "always" }], 21 | "import/no-extraneous-dependencies": [ 22 | "error", 23 | { 24 | "devDependencies": true, 25 | "optionalDependencies": false, 26 | "peerDependencies": false 27 | } 28 | ], 29 | "indent": ["error", 4, { "ignoredNodes": ["JSXElement *", "JSXElement"] }], 30 | "react/jsx-indent": ["error", 4], 31 | "lines-between-class-members": ["error", "always", { "exceptAfterSingleLine": true }] 32 | }, 33 | "env": { 34 | "browser": true, 35 | "jest": true 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pokedex", 3 | "version": "0.1.0", 4 | "private": true, 5 | "homepage": "http://paulojbleitao.github.io/pokedex/", 6 | "dependencies": { 7 | "axios": "^0.18.1", 8 | "bootstrap": "^4.0.0", 9 | "gh-pages": "^1.1.0", 10 | "jquery": "^3.3.1", 11 | "json-loader": "^0.5.7", 12 | "popper.js": "^1.14.3", 13 | "react": "^16.3.1", 14 | "react-autosuggest": "^9.3.4", 15 | "react-dom": "^16.3.1", 16 | "react-scripts": "1.1.4", 17 | "reactstrap": "^6.3.0" 18 | }, 19 | "scripts": { 20 | "start": "react-scripts start", 21 | "build": "react-scripts build", 22 | "test": "react-scripts test --env=jsdom", 23 | "eject": "react-scripts eject", 24 | "predeploy": "yarn run build", 25 | "deploy": "gh-pages -d build", 26 | "lint": "eslint src", 27 | "fix": "eslint src --fix" 28 | }, 29 | "devDependencies": { 30 | "babel-cli": "^6.26.0", 31 | "babel-eslint": "^9.0.0", 32 | "babel-preset-flow": "^6.23.0", 33 | "eslint": "^5.5.0", 34 | "eslint-config-airbnb": "^17.1.0", 35 | "eslint-plugin-flowtype": "^2.50.0", 36 | "eslint-plugin-import": "^2.14.0", 37 | "eslint-plugin-jsx-a11y": "^6.1.1", 38 | "eslint-plugin-react": "^7.11.1", 39 | "flow-bin": "^0.80.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/NoMoves.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | import { Collapse, Button } from 'reactstrap'; 5 | 6 | class NoMoves extends React.Component { 7 | constructor(props) { 8 | super(props); 9 | this.toggle = this.toggle.bind(this); 10 | this.state = { collapse: false }; 11 | } 12 | 13 | toggle() { 14 | const { collapse } = this.state; 15 | this.setState({ collapse: !collapse }); 16 | } 17 | 18 | render() { 19 | const { collapse } = this.state; 20 | return ( 21 |
22 | This Pokemon has no notable moves. 23 | 32 | 33 | To avoid showing too many moves, only a few competitively 34 | viable moves are shown. Those are taken from 35 | {' '} 36 | Smogon 37 | 's Pokedex. If a Pokemon has no notable moves, then 38 | most likely there aren't any movesets registered in 39 | Smogon's database. 40 | 41 |
42 | ); 43 | } 44 | } 45 | 46 | export default NoMoves; 47 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | 22 | Pokedex 23 | 24 | 25 | 28 |
29 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/Pokemon.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | import Abilities from './Ability'; 5 | import typesArray from './Type'; 6 | import EvolutionChain from './EvolutionChain'; 7 | import MoveList from './MoveList'; 8 | import PokemonSprite from './PokemonSprite'; 9 | import { formatString } from './util/util'; 10 | 11 | type Props = { 12 | data: any, 13 | handleSearch: string => void, 14 | } 15 | 16 | const Pokemon = ({ data, handleSearch } : Props) => ( 17 |
18 |
19 |
20 | 24 |
25 |
26 |
27 | 28 |
29 | {typesArray(data.types)} 30 |
31 |
32 |
33 | 34 |
35 |
36 |
37 |
38 |
Evolution Line:
39 |
40 |
41 |
42 |
43 | 47 |
48 |
49 | 50 |
51 |
52 | ); 53 | 54 | type NameProps = { 55 | name: string, 56 | number: number, 57 | }; 58 | 59 | const Name = ({ name, number } : NameProps) => ( 60 |

61 | # 62 | {number} 63 | {' '} 64 | {name} 65 |

66 | ); 67 | 68 | export default Pokemon; 69 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | import axios from 'axios'; 5 | import Pokemon from './Pokemon'; 6 | import SearchInput from './SearchInput'; 7 | import BASE_URL from './util/baseUrl'; 8 | import './app.css'; 9 | import Spinner from './Spinner/Spinner'; 10 | 11 | type Props = {}; 12 | 13 | type State = { 14 | pokemonData: any, 15 | failure: boolean, 16 | loading: boolean, 17 | } 18 | 19 | class App extends React.Component { 20 | constructor(props : Props) { 21 | super(props); 22 | 23 | this.state = { 24 | pokemonData: null, 25 | failure: false, 26 | loading: false, 27 | }; 28 | 29 | this.handleSearch = this.handleSearch.bind(this); 30 | } 31 | 32 | handleSearch: string => void; 33 | handleSearch(pokemonName : string) { 34 | this.setState({ loading: true }); 35 | const lowerCase = pokemonName.toLowerCase(); 36 | axios.get(`${BASE_URL}/pokemon/${lowerCase}/`) 37 | .then((result) => { 38 | this.setState({ 39 | pokemonData: result.data, 40 | failure: false, 41 | loading: false, 42 | }); 43 | }) 44 | .catch(() => { 45 | this.setState({ failure: true, loading: false }); 46 | }); 47 | } 48 | 49 | render() { 50 | const { pokemonData, failure, loading } = this.state; 51 | const pokemon = pokemonData === null 52 | ? null 53 | : ; 54 | const showFailure = failure ? : null; 55 | const showLoading = loading ? : null; 56 | 57 | return ( 58 |
59 |

Pokedex

60 |
61 | Type in a Pokemon's name and press search! 62 |
63 | 64 | {showLoading} 65 | {showFailure} 66 | {pokemon} 67 |
68 | ); 69 | } 70 | } 71 | 72 | const Failure = () => ( 73 |
74 | Sorry! 75 |
76 | We searched far and wide, but we couldn't find that Pokemon. :( 77 |
78 | ); 79 | 80 | export default App; 81 | -------------------------------------------------------------------------------- /src/Ability.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | import axios from 'axios'; 5 | import { formatString, abilityOrAbilities } from './util/util'; 6 | import BASE_URL from './util/baseUrl'; 7 | 8 | type AbilityType = { 9 | slot: number, 10 | is_hidden: boolean, 11 | ability: { 12 | url: string, 13 | name: string, 14 | }, 15 | }; 16 | 17 | type Props = { 18 | ability: AbilityType, 19 | }; 20 | 21 | type State = { 22 | description: string, 23 | }; 24 | 25 | async function getAbilityDescription(ability: string) { 26 | const a = await axios.get(`${BASE_URL}/ability/${ability}`); 27 | const description = a.data.effect_entries.filter(r => ( 28 | r.language.name === 'en' 29 | )); 30 | return description[0].short_effect; 31 | } 32 | 33 | class Ability extends React.Component { 34 | constructor(props) { 35 | super(props); 36 | 37 | this.state = { description: '...' }; 38 | } 39 | 40 | componentDidMount() { 41 | this.updateDescription(); 42 | } 43 | 44 | static getDerivedStateFromProps() { 45 | return { description: '...' }; 46 | } 47 | 48 | componentDidUpdate() { 49 | const { description } = this.state; 50 | if (description === '...') { 51 | this.updateDescription(); 52 | } 53 | } 54 | 55 | updateDescription() { 56 | const { ability } = this.props; 57 | getAbilityDescription(ability.ability.name) 58 | .then((result) => { 59 | this.setState({ description: result }); 60 | }); 61 | } 62 | 63 | render() { 64 | const { ability } = this.props; 65 | const { description } = this.state; 66 | const hidden = ability.is_hidden ? ' (Hidden)' : null; 67 | return ( 68 |
69 | 70 | {formatString(ability.ability.name)} 71 | {hidden} 72 | : 73 | 74 | {' '} 75 | {description} 76 |
); 77 | } 78 | } 79 | 80 | const abilitiesArray = (abilities: Array) : Array => { 81 | const sortedAbilities = abilities.sort((a, b) => a.slot - b.slot); 82 | 83 | return sortedAbilities.map(ability => ( 84 | 85 | )); 86 | }; 87 | 88 | type AbilitiesProps = { 89 | abilities: Array, 90 | }; 91 | 92 | const Abilities = ({ abilities }: AbilitiesProps) => ( 93 |
94 |
95 | {abilityOrAbilities(abilities)} 96 | : 97 |
98 |
99 | {abilitiesArray(abilities)} 100 |
101 |
102 | ); 103 | 104 | export default Abilities; 105 | -------------------------------------------------------------------------------- /src/EvolutionChain.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | import axios from 'axios'; 5 | import BASE_URL from './util/baseUrl'; 6 | 7 | /* eslint-disable jsx-a11y/click-events-have-key-events, 8 | jsx-a11y/no-noninteractive-element-interactions */ 9 | 10 | type CellProps = { 11 | pokemon: any, 12 | handleSearch: string => void, 13 | } 14 | 15 | const EvolutionCell = ({ pokemon, handleSearch }: CellProps) => ( 16 |
17 | handleSearch(pokemon.name)} 22 | /> 23 |
24 | ); 25 | 26 | type ChainProps = { 27 | pokemon: any, 28 | handleSearch: string => void, 29 | } 30 | 31 | type ChainState = { 32 | chain: Array, 33 | } 34 | 35 | class EvolutionChain extends React.Component { 36 | constructor(props : ChainProps) { 37 | super(props); 38 | 39 | this.state = { chain: [] }; 40 | } 41 | 42 | componentDidMount() { 43 | this.updateEvolutionChain(); 44 | } 45 | 46 | static getDerivedStateFromProps() { 47 | return { chain: [] }; 48 | } 49 | 50 | componentDidUpdate() { 51 | const { chain } = this.state; 52 | if (chain.length === 0) { 53 | this.updateEvolutionChain(); 54 | } 55 | } 56 | 57 | async getEvolutionChain() : Promise { 58 | const { pokemon } = this.props; 59 | const species = await axios.get(pokemon.species.url); 60 | const evolution = await axios.get(species.data.evolution_chain.url); 61 | const chain = this.createEvolutionChain(evolution.data.chain, []); 62 | const pokemons = await Promise.all(chain); 63 | return pokemons.map(p => p.data); 64 | } 65 | 66 | updateEvolutionChain() { 67 | this.getEvolutionChain() 68 | .then((pokemons) => { 69 | this.setState({ chain: pokemons }); 70 | }); 71 | } 72 | 73 | /* eslint-disable no-param-reassign */ 74 | createEvolutionChain(pokemon: any, chain: Array) { 75 | if (pokemon) { 76 | const species = pokemon.species.name; 77 | chain.push(axios 78 | .get(`${BASE_URL}/pokemon/${species}/`)); 79 | pokemon.evolves_to.forEach((p) => { 80 | chain = this.createEvolutionChain(p, chain); 81 | }); 82 | } 83 | return chain; 84 | } 85 | /* eslint-enable no-param-reassign */ 86 | 87 | render() { 88 | const { handleSearch } = this.props; 89 | const { chain } = this.state; 90 | const evolution = chain.map(pokemon => ( 91 | )); 92 | return
{evolution}
; 93 | } 94 | } 95 | 96 | export default EvolutionChain; 97 | -------------------------------------------------------------------------------- /src/SearchInput.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | // some of the type annotations need to be revised 3 | 4 | import Autosuggest from 'react-autosuggest'; 5 | import React from 'react'; 6 | import pokemonNames from './util/pokemonNames'; 7 | 8 | type Props = { 9 | handleSearch: string => void, 10 | }; 11 | 12 | type State = { 13 | value: string, 14 | suggestions: Array, 15 | }; 16 | 17 | const renderInputComponent = inputProps => ( 18 |
19 |
20 | 21 |
22 | 28 |
29 |
30 |
31 | ); 32 | 33 | function escapeRegexCharacters(str) { 34 | return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); 35 | } 36 | 37 | function getSuggestions(value) { 38 | const escapedValue = escapeRegexCharacters(value.trim()); 39 | 40 | if (escapedValue === '') { 41 | return []; 42 | } 43 | 44 | const regex = new RegExp(`^${escapedValue}`, 'i'); 45 | 46 | return pokemonNames.names.filter(name => regex.test(name)).slice(0, 5); 47 | } 48 | 49 | function getSuggestionValue(suggestion) { 50 | return suggestion; 51 | } 52 | 53 | function renderSuggestion(suggestion) { 54 | return ( 55 | {suggestion} 56 | ); 57 | } 58 | 59 | class SearchInput extends React.Component { 60 | constructor(props : Props) { 61 | super(props); 62 | 63 | this.state = { value: '', suggestions: [] }; 64 | 65 | this.handleSubmit = this.handleSubmit.bind(this); 66 | } 67 | 68 | onChange = (event : any, { newValue } : any) => { 69 | this.setState({ 70 | value: newValue, 71 | }); 72 | }; 73 | 74 | onSuggestionsFetchRequested = ({ value } : any) => { 75 | this.setState({ 76 | suggestions: getSuggestions(value), 77 | }); 78 | }; 79 | 80 | onSuggestionsClearRequested = () => { 81 | this.setState({ 82 | suggestions: [], 83 | }); 84 | }; 85 | 86 | handleSubmit: any => void; 87 | handleSubmit(event : any) { 88 | const { handleSearch } = this.props; 89 | const { value } = this.state; 90 | event.preventDefault(); 91 | handleSearch(value); 92 | } 93 | 94 | render() { 95 | const { value, suggestions } = this.state; 96 | const inputProps = { 97 | placeholder: 'Pokemon name', 98 | value, 99 | onChange: this.onChange, 100 | className: 'form-control', 101 | }; 102 | 103 | return ( 104 |
105 | 114 | 115 | ); 116 | } 117 | } 118 | 119 | export default SearchInput; 120 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | margin-top: 40px; 3 | } 4 | 5 | .subtitle { 6 | margin-bottom: 30px; 7 | } 8 | 9 | .main { 10 | border: 1px solid slategrey; 11 | border-radius: 5px; 12 | } 13 | 14 | .center { 15 | text-align: center 16 | } 17 | 18 | @media (min-width: 1081px) { 19 | .everything { 20 | margin-left: 25%; 21 | margin-right: 25% 22 | } 23 | } 24 | 25 | .name { 26 | padding-left: 5%; 27 | padding-bottom: 1%; 28 | color: #606060; 29 | } 30 | 31 | .ability { 32 | padding-left: 5%; 33 | } 34 | 35 | .evolution-title { 36 | padding-top: 4%; 37 | } 38 | 39 | .evolution-chain { 40 | display: flex; 41 | width: 100%; 42 | justify-content: center; 43 | } 44 | 45 | .clickable { 46 | cursor: pointer; 47 | } 48 | 49 | .move-list { 50 | padding-top: 3%; 51 | } 52 | 53 | .why { 54 | margin-left: 1%; 55 | } 56 | 57 | .no-moves { 58 | margin-left: 5%; 59 | } 60 | 61 | .explanation { 62 | margin-left: 2%; 63 | } 64 | 65 | .list-group-item { 66 | padding: 3px 0px; 67 | font-size: 14px; 68 | text-align: center 69 | } 70 | 71 | .badge { 72 | margin: 1px; 73 | } 74 | 75 | .normal { 76 | background-color: #A8A878; 77 | } 78 | 79 | .fire { 80 | background-color: tomato; 81 | } 82 | 83 | .water { 84 | background-color: cornflowerblue; 85 | } 86 | 87 | .grass { 88 | background-color: limegreen; 89 | } 90 | 91 | .flying { 92 | background-color: #A890F0; 93 | } 94 | 95 | .poison { 96 | background-color: darkviolet; 97 | } 98 | 99 | .electric { 100 | background-color: #F8D030; 101 | color: #212529; 102 | } 103 | 104 | .ground { 105 | background-color: #E0C068; 106 | } 107 | 108 | .psychic { 109 | background-color: #F85888; 110 | } 111 | 112 | .fighting { 113 | background-color: #C03028; 114 | } 115 | 116 | .rock { 117 | background-color: #B8A038; 118 | } 119 | 120 | .ice { 121 | background-color: #98D8D8; 122 | } 123 | 124 | .bug { 125 | background-color: #A8B820; 126 | } 127 | 128 | .dragon { 129 | background-color: #7038F8; 130 | } 131 | 132 | .ghost { 133 | background-color: #705898; 134 | } 135 | 136 | .dark { 137 | background-color: #705848; 138 | } 139 | 140 | .steel { 141 | background-color: #B8B8D0; 142 | } 143 | 144 | .fairy { 145 | background-color: #EE99AC; 146 | } 147 | 148 | .physical { 149 | color: #FFC645; 150 | background-color: #C7221B; 151 | } 152 | 153 | .special { 154 | color: #93B2DB; 155 | background-color: #50586F; 156 | } 157 | 158 | .status { 159 | background-color: #8B878B; 160 | } 161 | 162 | .react-autosuggest__container { 163 | position: relative; 164 | } 165 | 166 | .react-autosuggest__input { 167 | border-top-right-radius: 0; 168 | border-bottom-right-radius: 0; 169 | } 170 | 171 | .react-autosuggest__input--open { 172 | border-bottom-left-radius: 0; 173 | border-bottom-right-radius: 0; 174 | } 175 | 176 | .react-autosuggest__suggestions-container { 177 | display: none; 178 | } 179 | 180 | .react-autosuggest__suggestions-container--open { 181 | display: block; 182 | position: absolute; 183 | top: 37px; 184 | width: calc(100% - 79px); 185 | border: 1px solid #aaa; 186 | background-color: #fff; 187 | font-weight: 300; 188 | font-size: 16px; 189 | border-bottom-left-radius: 4px; 190 | border-bottom-right-radius: 4px; 191 | z-index: 3; 192 | } 193 | 194 | .react-autosuggest__suggestions-list { 195 | margin: 0; 196 | padding: 0; 197 | list-style-type: none; 198 | } 199 | 200 | .react-autosuggest__suggestion { 201 | cursor: pointer; 202 | padding: 10px 20px; 203 | } 204 | 205 | .react-autosuggest__suggestion--highlighted { 206 | background-color: #ddd; 207 | } 208 | -------------------------------------------------------------------------------- /src/MoveList.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | import React from 'react'; 4 | import axios from 'axios'; 5 | import { Type } from './Type'; 6 | import NoMoves from './NoMoves'; 7 | import pokemonMoves from './util/pokemonMoves'; 8 | import { formatString } from './util/util'; 9 | import BASE_URL from './util/baseUrl'; 10 | 11 | function firstWord(string : string) { 12 | const s = string.split('-'); 13 | return s[0]; 14 | } 15 | 16 | function getMoves(pokemon : string) { 17 | let moves = pokemonMoves[pokemon]; 18 | if (moves === undefined) { 19 | moves = pokemonMoves[firstWord(pokemon)]; 20 | } 21 | return moves; 22 | } 23 | 24 | function formatMoveName(move : string) { 25 | if (move.startsWith('Hidden Power')) return 'hidden-power'; 26 | const lowerCase = move.toLowerCase(); 27 | const m = lowerCase.replace(/ /g, '-'); 28 | return m; 29 | } 30 | 31 | async function getMoveData(move : string) { 32 | const name = formatMoveName(move); 33 | const data = await axios.get(`${BASE_URL}/move/${name}`); 34 | return data; 35 | } 36 | 37 | async function getAllMovesData(pokemon : string) { 38 | let moves = getMoves(pokemon); 39 | moves = moves.map(m => getMoveData(m).then(r => r)); 40 | moves = await Promise.all(moves); 41 | return moves.map(m => m.data); 42 | } 43 | 44 | function filterDescription(move : Object) { 45 | const english = move.effect_entries.filter(e => e.language.name === 'en'); 46 | let description = english[0].short_effect; 47 | const effectIndex = description.search('effect_chance'); 48 | if (effectIndex !== -1) { 49 | description = description.replace('$', ''); 50 | description = description.replace('effect_chance', move.effect_chance); 51 | } 52 | return description; 53 | } 54 | 55 | type CategoryProps = { 56 | category: string, 57 | } 58 | 59 | const Category = ({ category }: CategoryProps) => ( 60 | 61 | {formatString(category)} 62 | 63 | ); 64 | 65 | type MoveProps = { 66 | name: string, 67 | type: string, 68 | category: string, 69 | basePower: number, 70 | accuracy: number, 71 | pp: number, 72 | description: string, 73 | } 74 | 75 | const Move = ({ 76 | name, type, category, basePower, accuracy, pp, description, 77 | } : MoveProps) => { 78 | const bp = !basePower ? '--' : basePower; 79 | const acc = !accuracy ? '--' : accuracy; 80 | return ( 81 |
82 |
83 |
{name}
84 |
85 |
86 | 87 |
88 |
{bp}
89 |
{acc}
90 |
{pp}
91 |
92 |
93 | {description} 94 |
95 |
96 | ); 97 | }; 98 | 99 | type Props = { 100 | pokemon: string, 101 | } 102 | 103 | type State = { 104 | moves: Array, 105 | } 106 | 107 | class MoveList extends React.Component { 108 | constructor(props : Props) { 109 | super(props); 110 | 111 | this.state = { moves: ['empty'] }; 112 | } 113 | 114 | componentDidMount() { 115 | this.updateMoveList(); 116 | } 117 | 118 | static getDerivedStateFromProps() { 119 | return { moves: ['empty'] }; 120 | } 121 | 122 | componentDidUpdate() { 123 | const { moves } = this.state; 124 | if (moves.length === 1 && moves[0] === 'empty') { 125 | this.updateMoveList(); 126 | } 127 | } 128 | 129 | updateMoveList() { 130 | const { pokemon } = this.props; 131 | getAllMovesData(pokemon).then((result) => { 132 | this.setState({ moves: result }); 133 | }); 134 | } 135 | 136 | createList() { 137 | const { moves } = this.state; 138 | const firstFive = moves.slice(0, 5); 139 | const ml = firstFive.map(move => ( 140 | )); 149 | return ml; 150 | } 151 | 152 | render() { 153 | const { moves } = this.state; 154 | const header = ( 155 |
156 |
Notable Moves:
157 |
158 |
159 | ); 160 | if (moves.length === 0) { 161 | return ( 162 |
163 | {header} 164 | 165 |
166 | ); 167 | } 168 | if (moves.length === 1) { 169 | return ( 170 |
171 | {header} 172 |
...
173 |
174 | ); 175 | } 176 | const ml = this.createList(); 177 | return ( 178 |
179 | {header} 180 |
181 |
182 |
Type
183 |
Category
184 |
Base Power
185 |
Accuracy
186 |
PP
187 |
188 |
{ml}
189 |
190 | ); 191 | } 192 | } 193 | 194 | export default MoveList; 195 | -------------------------------------------------------------------------------- /src/Spinner/SpinnerIcon.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const SpinnerIcon = () => ( 4 | 12 | 13 | 22 | 30 | 31 | 32 | 33 | 42 | 50 | 51 | 52 | 53 | 62 | 70 | 71 | 72 | 73 | 82 | 90 | 91 | 92 | 93 | 102 | 110 | 111 | 112 | 113 | 122 | 130 | 131 | 132 | 133 | 142 | 150 | 151 | 152 | 153 | 162 | 170 | 171 | 172 | 173 | 182 | 190 | 191 | 192 | 193 | 202 | 210 | 211 | 212 | 213 | 222 | 230 | 231 | 232 | 233 | 242 | 250 | 251 | 252 | 253 | ); 254 | 255 | export default SpinnerIcon; 256 | -------------------------------------------------------------------------------- /src/util/pokemonNames.json: -------------------------------------------------------------------------------- 1 | {"names":["bulbasaur","ivysaur","venusaur","charmander","charmeleon","charizard","squirtle","wartortle","blastoise","caterpie","metapod","butterfree","weedle","kakuna","beedrill","pidgey","pidgeotto","pidgeot","rattata","raticate","spearow","fearow","ekans","arbok","pikachu","raichu","sandshrew","sandslash","nidoran-f","nidorina","nidoqueen","nidoran-m","nidorino","nidoking","clefairy","clefable","vulpix","ninetales","jigglypuff","wigglytuff","zubat","golbat","oddish","gloom","vileplume","paras","parasect","venonat","venomoth","diglett","dugtrio","meowth","persian","psyduck","golduck","mankey","primeape","growlithe","arcanine","poliwag","poliwhirl","poliwrath","abra","kadabra","alakazam","machop","machoke","machamp","bellsprout","weepinbell","victreebel","tentacool","tentacruel","geodude","graveler","golem","ponyta","rapidash","slowpoke","slowbro","magnemite","magneton","farfetchd","doduo","dodrio","seel","dewgong","grimer","muk","shellder","cloyster","gastly","haunter","gengar","onix","drowzee","hypno","krabby","kingler","voltorb","electrode","exeggcute","exeggutor","cubone","marowak","hitmonlee","hitmonchan","lickitung","koffing","weezing","rhyhorn","rhydon","chansey","tangela","kangaskhan","horsea","seadra","goldeen","seaking","staryu","starmie","mr-mime","scyther","jynx","electabuzz","magmar","pinsir","tauros","magikarp","gyarados","lapras","ditto","eevee","vaporeon","jolteon","flareon","porygon","omanyte","omastar","kabuto","kabutops","aerodactyl","snorlax","articuno","zapdos","moltres","dratini","dragonair","dragonite","mewtwo","mew","chikorita","bayleef","meganium","cyndaquil","quilava","typhlosion","totodile","croconaw","feraligatr","sentret","furret","hoothoot","noctowl","ledyba","ledian","spinarak","ariados","crobat","chinchou","lanturn","pichu","cleffa","igglybuff","togepi","togetic","natu","xatu","mareep","flaaffy","ampharos","bellossom","marill","azumarill","sudowoodo","politoed","hoppip","skiploom","jumpluff","aipom","sunkern","sunflora","yanma","wooper","quagsire","espeon","umbreon","murkrow","slowking","misdreavus","unown","wobbuffet","girafarig","pineco","forretress","dunsparce","gligar","steelix","snubbull","granbull","qwilfish","scizor","shuckle","heracross","sneasel","teddiursa","ursaring","slugma","magcargo","swinub","piloswine","corsola","remoraid","octillery","delibird","mantine","skarmory","houndour","houndoom","kingdra","phanpy","donphan","porygon2","stantler","smeargle","tyrogue","hitmontop","smoochum","elekid","magby","miltank","blissey","raikou","entei","suicune","larvitar","pupitar","tyranitar","lugia","ho-oh","celebi","treecko","grovyle","sceptile","torchic","combusken","blaziken","mudkip","marshtomp","swampert","poochyena","mightyena","zigzagoon","linoone","wurmple","silcoon","beautifly","cascoon","dustox","lotad","lombre","ludicolo","seedot","nuzleaf","shiftry","taillow","swellow","wingull","pelipper","ralts","kirlia","gardevoir","surskit","masquerain","shroomish","breloom","slakoth","vigoroth","slaking","nincada","ninjask","shedinja","whismur","loudred","exploud","makuhita","hariyama","azurill","nosepass","skitty","delcatty","sableye","mawile","aron","lairon","aggron","meditite","medicham","electrike","manectric","plusle","minun","volbeat","illumise","roselia","gulpin","swalot","carvanha","sharpedo","wailmer","wailord","numel","camerupt","torkoal","spoink","grumpig","spinda","trapinch","vibrava","flygon","cacnea","cacturne","swablu","altaria","zangoose","seviper","lunatone","solrock","barboach","whiscash","corphish","crawdaunt","baltoy","claydol","lileep","cradily","anorith","armaldo","feebas","milotic","castform","kecleon","shuppet","banette","duskull","dusclops","tropius","chimecho","absol","wynaut","snorunt","glalie","spheal","sealeo","walrein","clamperl","huntail","gorebyss","relicanth","luvdisc","bagon","shelgon","salamence","beldum","metang","metagross","regirock","regice","registeel","latias","latios","kyogre","groudon","rayquaza","jirachi","deoxys-normal","turtwig","grotle","torterra","chimchar","monferno","infernape","piplup","prinplup","empoleon","starly","staravia","staraptor","bidoof","bibarel","kricketot","kricketune","shinx","luxio","luxray","budew","roserade","cranidos","rampardos","shieldon","bastiodon","burmy","wormadam-plant","mothim","combee","vespiquen","pachirisu","buizel","floatzel","cherubi","cherrim","shellos","gastrodon","ambipom","drifloon","drifblim","buneary","lopunny","mismagius","honchkrow","glameow","purugly","chingling","stunky","skuntank","bronzor","bronzong","bonsly","mime-jr","happiny","chatot","spiritomb","gible","gabite","garchomp","munchlax","riolu","lucario","hippopotas","hippowdon","skorupi","drapion","croagunk","toxicroak","carnivine","finneon","lumineon","mantyke","snover","abomasnow","weavile","magnezone","lickilicky","rhyperior","tangrowth","electivire","magmortar","togekiss","yanmega","leafeon","glaceon","gliscor","mamoswine","porygon-z","gallade","probopass","dusknoir","froslass","rotom","uxie","mesprit","azelf","dialga","palkia","heatran","regigigas","giratina-altered","cresselia","phione","manaphy","darkrai","shaymin-land","arceus","victini","snivy","servine","serperior","tepig","pignite","emboar","oshawott","dewott","samurott","patrat","watchog","lillipup","herdier","stoutland","purrloin","liepard","pansage","simisage","pansear","simisear","panpour","simipour","munna","musharna","pidove","tranquill","unfezant","blitzle","zebstrika","roggenrola","boldore","gigalith","woobat","swoobat","drilbur","excadrill","audino","timburr","gurdurr","conkeldurr","tympole","palpitoad","seismitoad","throh","sawk","sewaddle","swadloon","leavanny","venipede","whirlipede","scolipede","cottonee","whimsicott","petilil","lilligant","basculin-red-striped","sandile","krokorok","krookodile","darumaka","darmanitan-standard","maractus","dwebble","crustle","scraggy","scrafty","sigilyph","yamask","cofagrigus","tirtouga","carracosta","archen","archeops","trubbish","garbodor","zorua","zoroark","minccino","cinccino","gothita","gothorita","gothitelle","solosis","duosion","reuniclus","ducklett","swanna","vanillite","vanillish","vanilluxe","deerling","sawsbuck","emolga","karrablast","escavalier","foongus","amoonguss","frillish","jellicent","alomomola","joltik","galvantula","ferroseed","ferrothorn","klink","klang","klinklang","tynamo","eelektrik","eelektross","elgyem","beheeyem","litwick","lampent","chandelure","axew","fraxure","haxorus","cubchoo","beartic","cryogonal","shelmet","accelgor","stunfisk","mienfoo","mienshao","druddigon","golett","golurk","pawniard","bisharp","bouffalant","rufflet","braviary","vullaby","mandibuzz","heatmor","durant","deino","zweilous","hydreigon","larvesta","volcarona","cobalion","terrakion","virizion","tornadus-incarnate","thundurus-incarnate","reshiram","zekrom","landorus-incarnate","kyurem","keldeo-ordinary","meloetta-aria","genesect","chespin","quilladin","chesnaught","fennekin","braixen","delphox","froakie","frogadier","greninja","bunnelby","diggersby","fletchling","fletchinder","talonflame","scatterbug","spewpa","vivillon","litleo","pyroar","flabebe","floette","florges","skiddo","gogoat","pancham","pangoro","furfrou","espurr","meowstic-male","honedge","doublade","aegislash-shield","spritzee","aromatisse","swirlix","slurpuff","inkay","malamar","binacle","barbaracle","skrelp","dragalge","clauncher","clawitzer","helioptile","heliolisk","tyrunt","tyrantrum","amaura","aurorus","sylveon","hawlucha","dedenne","carbink","goomy","sliggoo","goodra","klefki","phantump","trevenant","pumpkaboo-average","gourgeist-average","bergmite","avalugg","noibat","noivern","xerneas","yveltal","zygarde","diancie","hoopa","volcanion","rowlet","dartrix","decidueye","litten","torracat","incineroar","popplio","brionne","primarina","pikipek","trumbeak","toucannon","yungoos","gumshoos","grubbin","charjabug","vikavolt","crabrawler","crabominable","oricorio-baile","cutiefly","ribombee","rockruff","lycanroc-midday","wishiwashi-solo","mareanie","toxapex","mudbray","mudsdale","dewpider","araquanid","fomantis","lurantis","morelull","shiinotic","salandit","salazzle","stufful","bewear","bounsweet","steenee","tsareena","comfey","oranguru","passimian","wimpod","golisopod","sandygast","palossand","pyukumuku","type-null","silvally","minior-red-meteor","komala","turtonator","togedemaru","mimikyu-disguised","bruxish","drampa","dhelmise","jangmo-o","hakamo-o","kommo-o","tapu-koko","tapu-lele","tapu-bulu","tapu-fini","cosmog","cosmoem","solgaleo","lunala","nihilego","buzzwole","pheromosa","xurkitree","celesteela","kartana","guzzlord","necrozma","magearna","marshadow","deoxys-attack","deoxys-defense","deoxys-speed","wormadam-sandy","wormadam-trash","shaymin-sky","giratina-origin","rotom-heat","rotom-wash","rotom-frost","rotom-fan","rotom-mow","castform-sunny","castform-rainy","castform-snowy","basculin-blue-striped","darmanitan-zen","meloetta-pirouette","tornadus-therian","thundurus-therian","landorus-therian","kyurem-black","kyurem-white","keldeo-resolute","meowstic-female","aegislash-blade","pumpkaboo-small","pumpkaboo-large","pumpkaboo-super","gourgeist-small","gourgeist-large","gourgeist-super","venusaur-mega","charizard-mega-x","charizard-mega-y","blastoise-mega","alakazam-mega","gengar-mega","kangaskhan-mega","pinsir-mega","gyarados-mega","aerodactyl-mega","mewtwo-mega-x","mewtwo-mega-y","ampharos-mega","scizor-mega","heracross-mega","houndoom-mega","tyranitar-mega","blaziken-mega","gardevoir-mega","mawile-mega","aggron-mega","medicham-mega","manectric-mega","banette-mega","absol-mega","garchomp-mega","lucario-mega","abomasnow-mega","floette-eternal","latias-mega","latios-mega","swampert-mega","sceptile-mega","sableye-mega","altaria-mega","gallade-mega","audino-mega","sharpedo-mega","slowbro-mega","steelix-mega","pidgeot-mega","glalie-mega","diancie-mega","metagross-mega","kyogre-primal","groudon-primal","rayquaza-mega","pikachu-rock-star","pikachu-belle","pikachu-pop-star","pikachu-phd","pikachu-libre","pikachu-cosplay","hoopa-unbound","camerupt-mega","lopunny-mega","salamence-mega","beedrill-mega","rattata-alola","raticate-alola","raticate-totem-alola","pikachu-original-cap","pikachu-hoenn-cap","pikachu-sinnoh-cap","pikachu-unova-cap","pikachu-kalos-cap","pikachu-alola-cap","raichu-alola","sandshrew-alola","sandslash-alola","vulpix-alola","ninetales-alola","diglett-alola","dugtrio-alola","meowth-alola","persian-alola","geodude-alola","graveler-alola","golem-alola","grimer-alola","muk-alola","exeggutor-alola","marowak-alola","greninja-battle-bond","greninja-ash","zygarde-10","zygarde-50","zygarde-complete","gumshoos-totem","vikavolt-totem","oricorio-pom-pom","oricorio-pau","oricorio-sensu","lycanroc-midnight","wishiwashi-school","lurantis-totem","salazzle-totem","minior-orange-meteor","minior-yellow-meteor","minior-green-meteor","minior-blue-meteor","minior-indigo-meteor","minior-violet-meteor","minior-red","minior-orange","minior-yellow","minior-green","minior-blue","minior-indigo","minior-violet","mimikyu-busted","mimikyu-totem-disguised","mimikyu-totem-busted","kommo-o-totem","magearna-original"]} -------------------------------------------------------------------------------- /src/util/pokemonMoves.json: -------------------------------------------------------------------------------- 1 | {"sandshrew-alola": ["Earthquake", "Rapid Spin", "Iron Head", "Icicle Spear", "Swords Dance"], "baltoy": [], "koffing": ["Pain Split", "Will-O-Wisp", "Fire Blast", "Sludge Bomb"], "vulpix-alola": ["Aurora Veil", "Blizzard", "Hidden Power Ground", "Freeze-Dry"], "decidueye": ["Shadow Sneak", "Swords Dance", "Leaf Blade", "Spirit Shackle"], "umbreon": ["Protect", "Heal Bell", "Wish", "Foul Play"], "dhelmise": ["Earthquake", "Rest", "Power Whip", "Heavy Slam", "Anchor Shot", "Rapid Spin", "Knock Off"], "nihilego": ["Power Gem", "Stealth Rock", "Thunder", "Thunderbolt", "Sludge Wave", "Grass Knot"], "boldore": [], "archen": ["Hidden Power Grass", "Earthquake", "Stealth Rock", "Rock Slide", "Heat Wave", "Acrobatics"], "lucario": ["Swords Dance", "Meteor Mash", "Bullet Punch", "Close Combat"], "golem": ["Sucker Punch", "Earthquake", "Rock Blast", "Stealth Rock"], "throh": ["Circle Throw", "Sleep Talk", "Rest", "Bulk Up"], "wormadam-trash": ["Protect", "Gyro Ball", "Toxic", "Stealth Rock"], "abomasnow": ["Wood Hammer", "Earthquake", "Giga Drain", "Focus Blast", "Blizzard", "Swords Dance", "Ice Shard"], "vibrava": [], "timburr": ["Bulk Up", "Mach Punch", "Drain Punch", "Fire Punch", "Knock Off"], "audino": ["Protect", "Toxic", "Wish", "Dazzling Gleam"], "swampert": ["Waterfall", "Earthquake", "Stealth Rock", "Ice Punch"], "munchlax": ["Earthquake", "Sleep Talk", "Curse", "Pursuit", "Recycle", "Return", "Rest"], "drifloon": [], "klefki": ["Thunder Wave", "Spikes", "Play Rough", "Toxic"], "lotad": [], "latias": ["Trick", "Calm Mind", "Recover", "Draco Meteor", "Healing Wish", "Hidden Power Fire", "Psychic"], "exeggutor": ["Psyshock", "Hidden Power Fire", "Solar Beam", "Sleep Powder"], "tsareena": ["Knock Off", "Synthesis", "Power Whip", "Rapid Spin"], "spoink": [], "vanilluxe": ["Hidden Power Ground", "Flash Cannon", "Toxic", "Blizzard", "Freeze-Dry", "Taunt"], "drampa": ["Fire Blast", "Hyper Voice", "Focus Blast", "Draco Meteor"], "rhyperior": ["Rock Blast", "Earthquake", "Stealth Rock", "Stone Edge", "Ice Punch", "Megahorn"], "pignite": [], "rattata-alola": ["Pursuit", "Double-Edge", "U-turn", "Sucker Punch"], "chingling": [], "kingler": ["Swords Dance", "Agility", "Liquidation", "Knock Off"], "rotom-mow": ["Defog", "Will-O-Wisp", "Leaf Storm", "Volt Switch"], "aggron": ["Earthquake", "Toxic", "Heavy Slam", "Stealth Rock"], "metang": [], "kartana": ["Swords Dance", "Leaf Blade", "Knock Off", "Sacred Sword", "Smart Strike"], "popplio": [], "pichu": [], "goodra": ["Thunderbolt", "Fire Blast", "Draco Meteor", "Fire Punch", "Power Whip", "Outrage", "Iron Tail", "Sludge Wave"], "grotle": [], "shelgon": [], "poochyena": [], "ho-oh": ["Recover", "Brave Bird", "Earthquake", "Toxic", "Defog", "Sacred Fire"], "manectric": ["Thunderbolt", "Hidden Power Ice", "Overheat", "Volt Switch"], "spritzee": ["Protect", "Trick Room", "Wish", "Moonblast", "Nasty Plot", "Covet", "Psychic"], "steelix": ["Earthquake", "Heavy Slam", "Stealth Rock", "Curse"], "smeargle": ["Nuzzle", "Spore", "Stealth Rock", "Sticky Web"], "golbat": ["Brave Bird", "Roost", "Defog", "Taunt"], "talonflame": ["Swords Dance", "Flare Blitz", "Brave Bird", "Taunt"], "tornadus-therian": ["Defog", "Hurricane", "Knock Off", "U-turn"], "lileep": ["Giga Drain", "Ancient Power", "Stealth Rock", "Recover"], "cofagrigus": ["Hidden Power Fighting", "Nasty Plot", "Trick Room", "Shadow Ball"], "infernape": ["Mach Punch", "Swords Dance", "Overheat", "Vacuum Wave", "Focus Blast", "Fire Blast", "Nasty Plot", "Close Combat", "Thunder Punch", "U-turn", "Grass Knot", "Flare Blitz", "Gunk Shot"], "dusknoir": ["Shadow Sneak", "Earthquake", "Will-O-Wisp", "Ice Punch"], "electabuzz": [], "shroomish": [], "beautifly": ["Bug Buzz", "Roost", "Quiver Dance", "Iron Defense"], "marill": [], "budew": ["Spikes", "Sleep Powder", "Synthesis", "Giga Drain"], "mantine": ["Roost", "Scald", "Defog", "Haze"], "salandit": ["Nasty Plot", "Sludge Bomb", "Hidden Power Grass", "Flame Charge", "Fire Blast"], "gardevoir": ["Psyshock", "Healing Wish", "Trick", "Shadow Ball", "Moonblast"], "thundurus-therian": ["Thunderbolt", "Nasty Plot", "Hidden Power Ice", "Agility"], "venonat": [], "deino": [], "victini": ["Trick", "Celebrate", "Bolt Strike", "Zen Headbutt", "Searing Shot", "Focus Blast", "U-turn", "V-create", "Stored Power"], "tapu-koko": ["Light Screen", "Wild Charge", "Thunderbolt", "Dazzling Gleam", "Reflect", "U-turn", "Roost", "Defog", "Volt Switch", "Taunt", "Hidden Power Ice"], "gligar": ["Toxic", "Earthquake", "Roost", "Defog", "Taunt"], "yamask": [], "ambipom": ["Knock Off", "U-turn", "Fake Out", "Return"], "virizion": ["Swords Dance", "Close Combat", "Stone Edge", "Leaf Blade"], "remoraid": ["Fire Blast", "Hydro Pump", "Bullet Seed", "Water Spout"], "sylveon": ["Protect", "Heal Bell", "Wish", "Hyper Voice"], "murkrow": ["Brave Bird", "Sucker Punch", "Mirror Move", "Pursuit"], "spinda": ["Superpower", "Sucker Punch", "Trick Room", "Return"], "genesect": ["Flash Cannon", "U-turn", "Flamethrower", "Techno Blast"], "trumbeak": [], "houndour": ["Destiny Bond", "Flame Charge", "Dark Pulse", "Fire Blast", "Sucker Punch", "Pursuit"], "lombre": [], "wailmer": [], "zapdos": ["Hidden Power Ice", "Discharge", "Roost", "Defog", "Heat Wave"], "pansear": [], "archeops": ["Earthquake", "Stealth Rock", "Stone Edge", "Taunt", "Roost", "Endeavor", "Head Smash", "Acrobatics"], "pikipek": ["Brave Bird", "U-turn", "Flame Charge", "Bullet Seed", "Brick Break"], "litten": [], "torchic": [], "ralts": ["Thunderbolt", "Psychic", "Dazzling Gleam", "Memento"], "ninetales": ["Psyshock", "Nasty Plot", "Energy Ball", "Fire Blast"], "blastoise": ["Ice Beam", "Scald", "Dark Pulse", "Rapid Spin"], "giratina-origin": ["Shadow Sneak", "Earthquake", "Will-O-Wisp", "Hex", "Draco Meteor", "Defog", "Dragon Tail"], "weepinbell": [], "chespin": ["Spikes", "Zen Headbutt", "Seed Bomb", "Synthesis"], "sentret": [], "volcarona": ["Hidden Power Ground", "Bug Buzz", "Substitute", "Quiver Dance", "Fire Blast"], "poliwhirl": [], "togekiss": ["Trick", "Heal Bell", "Air Slash", "Dazzling Gleam", "Nasty Plot", "Roost", "Defog", "Flamethrower"], "tapu-lele": ["Psyshock", "Moonblast", "Psychic", "Hidden Power Fire", "Focus Blast", "Calm Mind", "Taunt"], "sandygast": ["Earth Power", "Destiny Bond", "Shadow Ball", "Rock Polish"], "paras": [], "guzzlord": ["Dark Pulse", "Sludge Bomb", "Fire Blast", "Draco Meteor"], "shiftry": ["Swords Dance", "Seed Bomb", "Leaf Blade", "Rock Slide", "Knock Off", "Explosion", "Leaf Storm", "Defog", "Sucker Punch"], "articuno": ["Freeze-Dry", "Roost", "Hurricane", "Substitute"], "komala": ["Sucker Punch", "U-turn", "Return", "Rapid Spin"], "trevenant": ["Will-O-Wisp", "Phantom Force", "Leech Seed", "Substitute"], "raichu-alola": ["Substitute", "Psyshock", "Thunderbolt", "Nasty Plot"], "gulpin": [], "ferroseed": ["Spikes", "Gyro Ball", "Leech Seed", "Protect"], "registeel": ["Protect", "Toxic", "Seismic Toss", "Stealth Rock"], "tornadus": ["Superpower", "Tailwind", "Hurricane", "Heat Wave"], "altaria": ["Heal Bell", "Earthquake", "Hyper Voice", "Fire Blast", "Roost", "Return", "Dragon Dance", "Flamethrower"], "jellicent": ["Will-O-Wisp", "Scald", "Recover", "Taunt"], "shaymin-land": ["Earth Power", "Air Slash", "Seed Flare", "Leech Seed", "Substitute", "Healing Wish", "Synthesis", "Psychic", "Hidden Power Ice"], "manaphy": ["Rain Dance", "Tail Glow", "Ice Beam", "Psychic", "Scald", "Surf"], "staryu": ["Scald", "Recover", "Rapid Spin", "Thunderbolt", "Ice Beam", "Psychic", "Hydro Pump"], "typhlosion": ["Hidden Power Grass", "Focus Blast", "Eruption", "Fire Blast"], "mightyena": ["Sucker Punch", "Play Rough", "Crunch", "Iron Tail"], "skiddo": [], "nuzleaf": [], "ferrothorn": ["Spikes", "Gyro Ball", "Leech Seed", "Power Whip"], "machoke": [], "goldeen": ["Waterfall", "Bounce", "Knock Off", "Drill Run"], "vivillon": ["Sleep Powder", "Hurricane", "Quiver Dance", "Energy Ball"], "serperior": ["Hidden Power Fire", "Leech Seed", "Leaf Storm", "Substitute"], "espurr": [], "flaaffy": [], "garchomp": ["Dragon Claw", "Earthquake", "Stealth Rock", "Fire Fang", "Outrage", "Swords Dance"], "tranquill": [], "gogoat": ["Earthquake", "Milk Drink", "Bulk Up", "Horn Leech"], "frogadier": [], "ninetales-alola": ["Aurora Veil", "Hail", "Freeze-Dry", "Hypnosis"], "toxapex": ["Toxic", "Scald", "Recover", "Haze"], "natu": ["Psychic", "Roost", "U-turn", "Heat Wave"], "qwilfish": ["Explosion", "Swords Dance", "Poison Jab", "Liquidation"], "buneary": ["Drain Punch", "Thunder Wave", "Splash", "Healing Wish", "Fire Punch", "Return"], "electrode": ["Thunderbolt", "Hidden Power Grass", "Signal Beam", "Volt Switch"], "skuntank": ["Poison Jab", "Acid Spray", "Dark Pulse", "Defog", "Sucker Punch", "Crunch", "Pursuit", "Taunt"], "nosepass": ["Thunder Wave", "Rock Blast", "Stealth Rock", "Volt Switch"], "chimchar": [], "sableye": ["Protect", "Will-O-Wisp", "Recover", "Knock Off"], "gumshoos": ["Facade", "Earthquake", "Crunch", "Return"], "primarina": ["Psychic", "Hydro Pump", "Sparkling Aria", "Moonblast"], "litleo": [], "cascoon": [], "geodude-alola": ["Fire Blast", "Explosion", "Return", "Stealth Rock"], "igglybuff": [], "swanna": ["Scald", "Roost", "Hurricane", "Brave Bird", "Defog"], "herdier": [], "scizor": ["Bullet Punch", "Roost", "Curse", "Knock Off"], "kadabra": ["Thunder Wave", "Psychic", "Counter", "Dazzling Gleam"], "spinarak": ["Leech Life", "Poison Jab", "Toxic Spikes", "Sticky Web"], "oricorio": ["Calm Mind", "Hurricane", "Revelation Dance", "U-turn"], "spheal": [], "turtwig": [], "oricorio-pom-pom": ["Toxic", "Revelation Dance", "Taunt", "Roost"], "buzzwole": ["Earthquake", "Toxic", "Hammer Arm", "Roost"], "palpitoad": [], "pidgeotto": [], "lopunny": ["High Jump Kick", "Encore", "Power-Up Punch", "Return"], "skiploom": [], "rhyhorn": [], "swadloon": [], "nidoqueen": ["Ice Beam", "Earth Power", "Toxic", "Stealth Rock"], "surskit": ["Hydro Pump", "Giga Drain", "Haze", "Sticky Web"], "bisharp": ["Iron Head", "Sucker Punch", "Swords Dance", "Knock Off"], "muk-alola": ["Pursuit", "Fire Punch", "Knock Off", "Gunk Shot"], "oranguru": ["Instruct", "Protect", "Psychic", "Trick Room"], "electrike": [], "ursaring": ["Facade", "Close Combat", "Swords Dance", "Crunch"], "klinklang": ["Wild Charge", "Gear Grind", "Shift Gear", "Magnet Rise"], "marshtomp": [], "malamar": ["Superpower", "Psycho Cut", "Sleep Talk", "Knock Off", "Happy Hour", "Rest"], "meloetta": ["Calm Mind", "Shadow Ball", "Focus Blast", "Psychic"], "quilava": [], "doduo": ["Brave Bird", "Jump Kick", "Quick Attack", "Knock Off", "Return"], "vanillite": [], "spiritomb": ["Dark Pulse", "Sleep Talk", "Foul Play", "Will-O-Wisp", "Rest", "Sucker Punch", "Calm Mind", "Pursuit"], "joltik": [], "salazzle": ["Hidden Power Grass", "Dragon Pulse", "Fire Blast", "Nasty Plot", "Hidden Power Ice", "Sludge Wave"], "aerodactyl": ["Stone Edge", "Earthquake", "Pursuit", "Aqua Tail"], "mareep": [], "stoutland": ["Superpower", "Facade", "Crunch", "Pursuit", "Return"], "machop": ["Poison Jab", "Dynamic Punch", "Rock Slide", "Knock Off"], "regice": ["Thunderbolt", "Ice Beam", "Focus Blast", "Rock Polish"], "samurott": ["Liquidation", "Ice Beam", "Aqua Jet", "Swords Dance", "Hydro Pump", "Megahorn", "Grass Knot"], "minccino": [], "whiscash": ["Waterfall", "Earthquake", "Dragon Dance", "Bounce"], "trapinch": ["Giga Drain", "Earthquake", "Rock Slide", "Feint"], "karrablast": ["Poison Jab", "Megahorn", "Knock Off", "Drill Run"], "tyranitar": ["Earthquake", "Stealth Rock", "Stone Edge", "Fire Punch", "Ice Punch", "Crunch", "Dragon Dance", "Pursuit"], "golett": ["Earthquake", "Drain Punch", "Stealth Rock", "Ice Punch"], "wishiwashi": ["Ice Beam", "Hidden Power Grass", "Hydro Pump", "U-turn"], "miltank": ["Toxic", "Seismic Toss", "Stealth Rock", "Milk Drink"], "seviper": ["Sucker Punch", "Giga Drain", "Sludge Wave", "Flamethrower"], "rhydon": ["Rock Blast", "Earthquake", "Stealth Rock", "Stone Edge", "Rock Polish", "Swords Dance"], "grimer": ["Giga Drain", "Thief", "Fire Punch", "Gunk Shot"], "pangoro": ["Hammer Arm", "Bullet Punch", "Drain Punch", "Knock Off", "Swords Dance", "Gunk Shot"], "flareon": ["Superpower", "Flare Blitz", "Quick Attack", "Double-Edge"], "hoopa-unbound": ["Dark Pulse", "Hyperspace Fury", "Fire Punch", "Zen Headbutt", "Psyshock", "Nasty Plot", "Psychic", "Focus Blast", "Trick", "Gunk Shot"], "solrock": ["Rock Slide", "Will-O-Wisp", "Morning Sun", "Stealth Rock"], "fomantis": [], "pupitar": [], "stunfisk": ["Discharge", "Toxic", "Stealth Rock", "Earth Power"], "celesteela": ["Protect", "Leech Seed", "Flamethrower", "Heavy Slam"], "combusken": ["Protect", "Hidden Power Ice", "Focus Blast", "Fire Blast"], "stunky": ["Sucker Punch", "Sludge Bomb", "Pursuit", "Defog"], "cranidos": ["Superpower", "Zen Headbutt", "Earthquake", "Rock Slide", "Fire Punch", "Crunch"], "seadra": [], "whismur": [], "gigalith": ["Toxic", "Stone Edge", "Earthquake", "Stealth Rock"], "bulbasaur": ["Celebrate", "Sludge Bomb", "Hidden Power Fire", "Giga Drain"], "liepard": ["Encore", "Dark Pulse", "Rain Dance", "Knock Off", "Nasty Plot", "Copycat", "U-turn", "Play Rough", "Pursuit"], "dwebble": ["Rock Blast", "Earthquake", "Shell Smash", "Stealth Rock", "Knock Off", "Substitute", "Spikes"], "aurorus": ["Earth Power", "Encore", "Stealth Rock", "Blizzard", "Freeze-Dry", "Hidden Power Rock", "Rock Tomb"], "florges": ["Heal Bell", "Synthesis", "Defog", "Moonblast"], "skarmory": ["Spikes", "Counter", "Roost", "Defog"], "jigglypuff": [], "zygarde-10": ["Extreme Speed", "Outrage", "Toxic", "Thousand Arrows"], "heatran": ["Earth Power", "Protect", "Flash Cannon", "Magma Storm", "Toxic", "Stealth Rock", "Lava Plume", "Fire Blast", "Stone Edge", "Taunt"], "ledian": ["Encore", "Light Screen", "Reflect", "U-turn"], "meowstic-m": ["Yawn", "Light Screen", "Reflect", "Psychic"], "emboar": ["Superpower", "Wild Charge", "Flare Blitz", "Earthquake"], "comfey": ["Calm Mind", "Synthesis", "Draining Kiss", "Taunt"], "camerupt": ["Earth Power", "Hidden Power Ice", "Eruption", "Fire Blast"], "ducklett": [], "illumise": ["Sunny Day", "Thunder Wave", "Encore", "U-turn"], "sunflora": ["Sunny Day", "Earth Power", "Solar Beam", "Hidden Power Fire"], "larvesta": ["Flare Blitz", "Will-O-Wisp", "Morning Sun", "U-turn"], "caterpie": [], "omastar": ["Spikes", "Shell Smash", "Stealth Rock", "Surf"], "lampent": [], "noivern": ["Roost", "Hurricane", "Flamethrower", "Taunt"], "wigglytuff": ["Dazzling Gleam", "Stealth Rock", "Hyper Voice", "Fire Blast"], "magnemite": ["Volt Switch", "Flash Cannon", "Endure", "Recycle", "Thunderbolt", "Hidden Power Fire"], "dragonite": ["Fly", "Earthquake", "Extreme Speed", "Dragon Dance"], "scolipede": ["Swords Dance", "Earthquake", "Megahorn", "Aqua Tail"], "mamoswine": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off"], "ponyta": ["Flame Charge", "High Horsepower", "Wild Charge", "Solar Beam", "Morning Sun", "Fire Blast", "Will-O-Wisp", "Sunny Day", "Hypnosis", "Flare Blitz", "Flamethrower"], "slurpuff": ["Drain Punch", "Play Rough", "Belly Drum", "Return"], "chimecho": ["Thunder Wave", "Healing Wish", "Recover", "Psychic"], "fennekin": [], "litwick": [], "slugma": [], "nidoking": ["Ice Beam", "Earth Power", "Sludge Wave", "Substitute"], "gloom": [], "kyogre": ["Liquidation", "Earthquake", "Sleep Talk", "Origin Pulse", "Substitute", "Thunder", "Ice Beam", "Calm Mind", "Scald", "Rest"], "tyrogue": [], "crustle": ["Spikes", "Rock Blast", "Stealth Rock", "Knock Off"], "drilbur": ["Poison Jab", "Rapid Spin", "Earthquake", "Stealth Rock", "Rock Slide", "Shadow Claw"], "fearow": ["Drill Run", "Drill Peck", "U-turn", "Double-Edge"], "roserade": ["Hidden Power Ground", "Sludge Bomb", "Spikes", "Synthesis", "Leaf Storm", "Hidden Power Fire"], "tympole": [], "deoxys-speed": ["Spikes", "Taunt", "Skill Swap", "Stealth Rock"], "froakie": [], "loudred": [], "bouffalant": ["Head Charge", "Earthquake", "Megahorn", "Pursuit"], "primeape": ["Encore", "Close Combat", "Stone Edge", "U-turn", "Gunk Shot"], "octillery": ["Energy Ball", "Ice Beam", "Hydro Pump", "Fire Blast"], "magneton": ["Thunderbolt", "Flash Cannon", "Hidden Power Fire", "Volt Switch"], "ivysaur": [], "whirlipede": [], "magnezone": ["Thunderbolt", "Hidden Power Fire", "Flash Cannon", "Volt Switch", "Substitute"], "empoleon": ["Toxic", "Protect", "Scald", "Defog"], "bastiodon": ["Roar", "Toxic", "Stealth Rock", "Magic Coat"], "noctowl": ["Toxic", "Roost", "Defog", "Night Shade"], "gothitelle": ["Psyshock", "Calm Mind", "Mean Look", "Rest"], "duskull": [], "bergmite": [], "goomy": [], "skitty": ["Thunder Wave", "Sucker Punch", "Fake Out", "Double-Edge"], "elgyem": [], "flygon": ["Dragon Claw", "Earthquake", "Outrage", "U-turn", "Iron Tail", "Dragon Dance"], "suicune": ["Protect", "Sleep Talk", "Substitute", "Calm Mind", "Scald", "Rest"], "lapras": ["Freeze-Dry", "Ice Beam", "Hydro Pump", "Hidden Power Fire"], "weavile": ["Ice Shard", "Pursuit", "Icicle Crash", "Knock Off"], "delcatty": ["Thunder Wave", "Sucker Punch", "Fake Out", "Return"], "sawk": ["Poison Jab", "Zen Headbutt", "Earthquake", "Knock Off", "Close Combat", "Ice Punch"], "scatterbug": [], "volbeat": ["Sunny Day", "Thunder Wave", "Encore", "U-turn"], "incineroar": ["Darkest Lariat", "Earthquake", "Knock Off", "Fire Blast", "U-turn", "Swords Dance", "Flare Blitz"], "electivire": ["Wild Charge", "Earthquake", "Volt Switch", "Ice Punch"], "pinsir": ["Swords Dance", "Earthquake", "Quick Attack", "Return"], "shellos": ["Earth Power", "Clear Smog", "Scald", "Recover"], "galvantula": ["Thunder", "Bug Buzz", "Hidden Power Ice", "Sticky Web"], "dialga": ["Thunder", "Fire Blast", "Stealth Rock", "Draco Meteor"], "conkeldurr": ["Mach Punch", "Drain Punch", "Ice Punch", "Knock Off"], "oshawott": [], "bronzor": ["Recycle", "Psychic", "Heavy Slam", "Stealth Rock"], "wormadam-plant": ["Bug Buzz", "Giga Drain", "Hidden Power Fire", "Quiver Dance"], "sawsbuck": ["Double-Edge", "Swords Dance", "Jump Kick", "Horn Leech"], "abra": ["Hidden Power Ground", "Protect", "Dazzling Gleam", "Substitute", "Counter", "Psychic"], "makuhita": [], "vullaby": ["Hidden Power Grass", "Air Slash", "Brave Bird", "Dark Pulse", "Knock Off", "Heat Wave", "Rock Smash", "Nasty Plot", "Defog", "U-turn"], "graveler": [], "lickilicky": ["Swords Dance", "Earthquake", "Knock Off", "Return"], "marshadow": ["Shadow Sneak", "Bulk Up", "Spectral Thief", "Close Combat", "Hidden Power Ice"], "shinx": [], "raticate-alola": ["Swords Dance", "Knock Off", "Double-Edge", "Sucker Punch"], "deoxys-attack": ["Dark Pulse", "Psycho Boost", "Superpower", "Ice Beam"], "mawile": ["Knock Off", "Fire Fang", "Thunder Punch", "Sucker Punch", "Swords Dance", "Play Rough"], "brionne": [], "leavanny": ["Leaf Blade", "X-Scissor", "Knock Off", "Sticky Web"], "type-null": ["Sleep Talk", "Return", "U-turn", "Iron Defense", "Swords Dance", "Rest"], "diggersby": ["Earthquake", "Quick Attack", "Fire Punch", "Return"], "gourgeist": ["Shadow Sneak", "Phantom Force", "Seed Bomb", "Trick-or-Treat"], "snivy": ["Hidden Power Ground", "Giga Drain", "Wring Out", "Knock Off", "Glare", "Synthesis", "Leaf Storm", "Defog", "Hidden Power Ice"], "nidorino": [], "yanmega": ["Bug Buzz", "Air Slash", "Giga Drain", "U-turn", "Protect"], "crabominable": ["Facade", "Close Combat", "Power-Up Punch", "Ice Hammer"], "gengar": ["Destiny Bond", "Icy Wind", "Will-O-Wisp", "Hex", "Shadow Ball", "Sludge Wave", "Taunt"], "magmortar": ["Thunderbolt", "Hidden Power Grass", "Taunt", "Focus Blast", "Fire Blast"], "charmeleon": [], "ekans": ["Sucker Punch", "Earthquake", "Coil", "Gunk Shot"], "croagunk": ["Sludge Bomb", "Drain Punch", "Vacuum Wave", "Focus Blast", "Knock Off", "Nasty Plot", "Sucker Punch", "Gunk Shot"], "zygarde": ["Protect", "Coil", "Extreme Speed", "Sleep Talk", "Substitute", "Outrage", "Iron Tail", "Rest", "Dragon Dance", "Thousand Arrows"], "lumineon": ["Toxic", "Scald", "U-turn", "Defog"], "groudon": ["Precipice Blades", "Overheat", "Toxic", "Stealth Rock", "Fire Blast", "Stone Edge", "Rock Polish", "Swords Dance", "Hidden Power Ice", "Rock Tomb"], "piloswine": ["Earthquake", "Ice Shard", "Stealth Rock", "Icicle Crash"], "buizel": [], "drifblim": ["Tailwind", "Will-O-Wisp", "Disable", "Shadow Ball"], "nidoran-f": [], "growlithe": [], "mesprit": ["Hidden Power Ground", "Calm Mind", "Dazzling Gleam", "Rain Dance", "Stealth Rock", "Substitute", "Healing Wish", "U-turn", "Psyshock", "Ice Beam", "Psychic"], "beedrill": ["Knock Off", "Poison Jab", "U-turn", "Drill Run"], "metapod": [], "moltres": ["Air Slash", "Toxic", "Fire Blast", "Roost", "Hurricane", "Defog", "U-turn", "Flamethrower"], "rowlet": ["Swords Dance", "Roost", "Leaf Blade", "Baton Pass"], "whimsicott": ["Defog", "Psychic", "Energy Ball", "U-turn", "Moonblast"], "piplup": ["Ice Beam", "Scald", "Stealth Rock", "Defog"], "kricketot": [], "araquanid": ["Liquidation", "Sticky Web", "Toxic", "Spider Web", "Mirror Coat", "Rest", "Magic Coat"], "cherrim": ["Hidden Power Fire", "Healing Wish", "Energy Ball", "Dazzling Gleam"], "grimer-alola": ["Shadow Sneak", "Poison Jab", "Rest", "Pursuit", "Knock Off", "Sleep Talk"], "pawniard": ["Iron Head", "Low Sweep", "Brick Break", "Stealth Rock", "Knock Off", "Sucker Punch", "Pursuit"], "mienfoo": ["Drain Punch", "Baton Pass", "Bounce", "Knock Off", "U-turn", "High Jump Kick", "Swords Dance", "Fake Out"], "regirock": ["Earthquake", "Toxic", "Rock Slide", "Stealth Rock", "Explosion", "Stone Edge", "Sunny Day"], "finneon": ["U-turn", "Hidden Power Fighting", "Scald", "Defog"], "hydreigon": ["Flash Cannon", "Dark Pulse", "Fire Blast", "Draco Meteor", "Roost", "U-turn", "Defog", "Taunt"], "grumpig": ["Thunder Wave", "Calm Mind", "Focus Blast", "Psychic"], "slowking": ["Trick Room", "Future Sight", "Dragon Tail", "Fire Blast", "Nasty Plot", "Psyshock", "Scald"], "raichu": ["Thunderbolt", "Nasty Plot", "Hidden Power Ice", "Focus Blast"], "rufflet": ["Superpower", "Brave Bird", "Roost", "U-turn", "Return", "Bulk Up"], "rapidash": ["Wild Charge", "Flare Blitz", "Will-O-Wisp", "Morning Sun"], "medicham": ["Zen Headbutt", "Ice Punch", "Fake Out", "High Jump Kick"], "exeggutor-alola": ["Trick Room", "Leaf Storm", "Draco Meteor", "Flamethrower", "Giga Drain"], "exploud": ["Sleep Talk", "Boomburst", "Surf", "Fire Blast"], "swablu": [], "palossand": ["Earth Power", "Shore Up", "Stealth Rock", "Shadow Ball"], "butterfree": ["Bug Buzz", "Sleep Powder", "Energy Ball", "Quiver Dance"], "yanma": [], "stantler": ["Energy Ball", "Sucker Punch", "Jump Kick", "Double-Edge"], "porygon-z": ["Thunderbolt", "Ice Beam", "Conversion", "Protect"], "wynaut": ["Encore", "Tickle", "Mirror Coat", "Counter"], "tynamo": [], "seismitoad": ["Toxic", "Earthquake", "Scald", "Stealth Rock"], "hitmontop": ["Close Combat", "Toxic", "Foresight", "Rapid Spin"], "toucannon": ["Brave Bird", "Boomburst", "Overheat", "Bullet Seed"], "haxorus": ["Superpower", "Poison Jab", "Earthquake", "Outrage", "Swords Dance", "Dragon Dance"], "hitmonchan": ["Mach Punch", "Stone Edge", "Drain Punch", "Rapid Spin"], "pheromosa": ["Low Kick", "Rapid Spin", "Ice Beam", "U-turn"], "binacle": ["Liquidation", "Stone Edge", "Shell Smash", "Cross Chop"], "maractus": ["Spikes", "Sucker Punch", "Bullet Seed", "Endeavor"], "sandslash-alola": ["Swords Dance", "Earthquake", "Substitute", "Rapid Spin", "Knock Off", "Icicle Crash"], "raikou": ["Thunderbolt", "Calm Mind", "Hidden Power Ice", "Shadow Ball"], "bunnelby": ["Iron Head", "Earthquake", "Stone Edge", "Quick Attack", "U-turn", "Return"], "yveltal": ["Oblivion Wing", "Dark Pulse", "Toxic", "Heat Wave", "Sucker Punch", "Roost", "U-turn", "Foul Play", "Taunt"], "blitzle": [], "uxie": ["Protect", "Psychic", "Stealth Rock", "U-turn"], "purrloin": ["Thunder Wave", "Encore", "U-turn", "Knock Off"], "pachirisu": ["Nuzzle", "Super Fang", "Toxic", "U-turn"], "grovyle": [], "charjabug": [], "victreebel": ["Sludge Bomb", "Solar Beam", "Sleep Powder", "Weather Ball"], "eevee": ["Stored Power", "Baton Pass", "Last Resort", "Substitute"], "azumarill": ["Perish Song", "Protect", "Whirlpool", "Toxic", "Knock Off", "Belly Drum", "Aqua Jet", "Play Rough"], "cherubi": [], "wobbuffet": [], "musharna": ["Psyshock", "Calm Mind", "Dazzling Gleam", "Moonlight"], "dodrio": ["Swords Dance", "Jump Kick", "Brave Bird", "Return"], "corsola": ["Scald", "Toxic", "Stealth Rock", "Recover"], "torracat": [], "pumpkaboo": [], "squirtle": [], "happiny": [], "burmy": [], "huntail": ["Waterfall", "Sucker Punch", "Ice Beam", "Shell Smash"], "simisage": ["Superpower", "Leaf Storm", "Knock Off", "Gunk Shot"], "shelmet": ["Leech Life", "Spikes", "Baton Pass", "Recover"], "heliolisk": ["Dark Pulse", "Hyper Voice", "Volt Switch", "Surf"], "drapion": ["Swords Dance", "Poison Jab", "Pursuit", "Aqua Tail", "Knock Off"], "lurantis": ["Superpower", "Synthesis", "Leaf Storm", "Defog"], "dartrix": [], "mareanie": ["Sludge Bomb", "Scald", "Recover", "Knock Off"], "vespiquen": ["Bug Buzz", "U-turn", "Destiny Bond", "Defog"], "ribombee": ["Hidden Power Fire", "Moonblast", "Stun Spore", "Sticky Web"], "rotom-heat": ["Defog", "Will-O-Wisp", "Overheat", "Volt Switch"], "zweilous": [], "jangmo-o": ["Earthquake", "Dragon Dance", "Outrage", "Brick Break"], "clauncher": [], "metagross": ["Bullet Punch", "Meteor Mash", "Toxic", "Ice Punch"], "fraxure": [], "milotic": ["Scald", "Recover", "Refresh", "Haze"], "hoopa": ["Nasty Plot", "Shadow Ball", "Focus Blast", "Substitute"], "gabite": [], "shellder": ["Icicle Spear", "Liquidation", "Rock Blast", "Shell Smash"], "mudkip": [], "mewtwo": ["Psystrike", "Focus Blast", "Fire Blast", "Stone Edge", "Low Kick", "Ice Beam", "Taunt"], "seel": [], "sewaddle": [], "golduck": ["Scald", "Ice Beam", "Hydro Pump", "Protect"], "farfetchd": ["Swords Dance", "Leaf Blade", "Brave Bird", "Quick Attack"], "shiinotic": ["Strength Sap", "Spore", "Leech Seed", "Moonblast"], "silcoon": [], "graveler-alola": [], "carvanha": ["Protect", "Waterfall", "Dark Pulse", "Ice Beam", "Hydro Pump", "Crunch", "Psychic Fangs"], "foongus": ["Sludge Bomb", "Spore", "Giga Drain", "Synthesis"], "tentacool": ["Sludge Bomb", "Scald", "Rapid Spin", "Knock Off", "Hidden Power Fire", "Hydro Pump"], "swirlix": [], "kabuto": ["Rock Slide", "Stealth Rock", "Knock Off", "Rapid Spin"], "passimian": ["Close Combat", "Gunk Shot", "U-turn", "Knock Off"], "darkrai": ["Thunder", "Hypnosis", "Nasty Plot", "Dark Pulse"], "amoonguss": ["Hidden Power Fire", "Clear Smog", "Spore", "Giga Drain"], "cloyster": ["Explosion", "Icicle Spear", "Hydro Pump", "Shell Smash"], "bellossom": ["Giga Drain", "Strength Sap", "Quiver Dance", "Moonblast"], "simisear": ["Grass Knot", "Nasty Plot", "Focus Blast", "Fire Blast"], "marowak": ["Bonemerang", "Substitute", "Knock Off", "Double-Edge"], "dustox": ["Bug Buzz", "Sludge Bomb", "Roost", "Quiver Dance"], "swinub": [], "magcargo": ["Toxic", "Lava Plume", "Stealth Rock", "Recover"], "skorupi": [], "mr-mime": ["Psyshock", "Nasty Plot", "Focus Blast", "Dazzling Gleam"], "barboach": [], "gothorita": [], "wormadam-sandy": ["Earthquake", "Sucker Punch", "Rock Blast", "Stealth Rock"], "druddigon": ["Earthquake", "Dragon Tail", "Stealth Rock", "Glare", "Fire Punch", "Outrage", "Sucker Punch", "Gunk Shot"], "azelf": ["Explosion", "Stealth Rock", "Knock Off", "Taunt"], "cosmog": [], "fletchinder": [], "jirachi": ["Protect", "Wish", "Iron Head", "Stealth Rock", "Healing Wish", "Fire Punch", "U-turn"], "aron": ["Earthquake", "Heavy Slam", "Head Smash", "Rock Polish"], "luxio": [], "clefairy": ["Soft-Boiled", "Toxic", "Seismic Toss", "Stealth Rock", "Moonblast", "Calm Mind"], "teddiursa": ["Facade", "Close Combat", "Crunch", "Protect"], "reshiram": ["Toxic", "Roost", "Blue Flare", "Draco Meteor"], "floatzel": ["Hidden Power Grass", "Waterfall", "Aqua Jet", "Focus Blast", "Low Kick", "Ice Beam", "Hydro Pump", "Bulk Up"], "crawdaunt": ["Swords Dance", "Crabhammer", "Knock Off", "Aqua Jet"], "cresselia": ["Psyshock", "Moonblast", "Toxic", "Moonlight"], "castform": ["Hydro Pump", "Rain Dance", "Hurricane", "Energy Ball"], "misdreavus": ["Memento", "Will-O-Wisp", "Hex", "Taunt"], "inkay": ["Superpower", "Switcheroo", "Knock Off", "Psycho Cut"], "rotom": ["Volt Switch", "Will-O-Wisp", "Defog", "Thunderbolt", "Hex", "Shadow Ball"], "lilligant": ["Giga Drain", "Quiver Dance", "Healing Wish", "Hidden Power Rock", "Leaf Storm", "Sleep Powder", "Energy Ball"], "palkia": ["Thunder", "Hydro Pump", "Focus Punch", "Spacial Rend"], "politoed": ["Protect", "Icy Wind", "Scald", "Helping Hand"], "shuppet": [], "honedge": ["Shadow Sneak", "Iron Head", "Pursuit", "Sacred Sword"], "doublade": ["Shadow Sneak", "Swords Dance", "Shadow Claw", "Sacred Sword"], "landorus-therian": ["Swords Dance", "Fly", "Stealth Rock", "Earthquake", "Gravity", "Explosion", "Stone Edge", "U-turn", "Defog", "Hidden Power Ice"], "prinplup": ["Toxic", "Scald", "Stealth Rock", "Defog"], "meditite": [], "clamperl": ["Ice Beam", "Hidden Power Grass", "Shell Smash", "Surf"], "clawitzer": ["Ice Beam", "Dark Pulse", "Aura Sphere", "Water Pulse"], "forretress": ["Spikes", "Gyro Ball", "Volt Switch", "Rapid Spin"], "lanturn": ["Heal Bell", "Hidden Power Grass", "Hydro Pump", "Volt Switch", "Toxic", "Ice Beam", "Scald"], "sudowoodo": ["Sucker Punch", "Earthquake", "Wood Hammer", "Head Smash"], "bayleef": [], "trubbish": ["Spikes", "Drain Punch", "Recycle", "Gunk Shot"], "frillish": ["Trick", "Recover", "Water Spout", "Will-O-Wisp", "Ice Beam", "Scald", "Shadow Ball"], "accelgor": ["Spikes", "Bug Buzz", "Energy Ball", "Focus Blast"], "furret": ["Trick", "Double-Edge", "U-turn", "Knock Off"], "venusaur": ["Grass Knot", "Toxic", "Synthesis", "Leech Seed"], "aegislash": ["King's Shield", "Toxic", "Gyro Ball", "Shadow Ball"], "luvdisc": ["Hydro Pump", "Ice Beam", "Hidden Power Grass", "Rain Dance"], "diglett-alola": ["Earthquake", "Rock Slide", "Substitute", "Iron Head"], "cinccino": ["Tail Slap", "U-turn", "Bullet Seed", "Knock Off"], "walrein": ["Encore", "Roar", "Toxic", "Surf"], "chatot": ["Boomburst", "Encore", "Heat Wave", "Hidden Power Fighting", "Nasty Plot", "U-turn"], "volcanion": ["Sludge Bomb", "Solar Beam", "Toxic", "Fire Blast", "Steam Eruption", "Hidden Power Electric", "Sludge Wave"], "slakoth": [], "zigzagoon": ["Seed Bomb", "Extreme Speed", "Belly Drum", "Thief"], "bonsly": [], "rockruff": [], "phione": ["Scald", "Rain Dance", "Rest", "U-turn"], "dragonair": [], "klang": [], "nidorina": [], "lugia": ["Roost", "Whirlwind", "Toxic", "Substitute"], "zekrom": ["Bolt Strike", "Toxic", "Dragon Tail", "Substitute", "Roost", "Outrage", "Hone Claws"], "torterra": ["Earthquake", "Wood Hammer", "Stealth Rock", "Synthesis"], "silvally": [], "gliscor": ["Facade", "Earthquake", "Stealth Rock", "Knock Off", "Roost", "U-turn", "Defog", "Swords Dance", "Taunt"], "cleffa": [], "noibat": [], "granbull": ["Thunder Wave", "Heal Bell", "Play Rough", "Earthquake"], "starmie": ["Scald", "Recover", "Rapid Spin", "Toxic", "Psyshock", "Ice Beam", "Hydro Pump"], "rotom-fan": ["Hidden Power Grass", "Will-O-Wisp", "Thunderbolt", "Air Slash"], "crabrawler": ["Crabhammer", "Close Combat", "Earthquake", "Stone Edge"], "durant": ["Superpower", "Iron Head", "Rock Slide", "Hone Claws", "Crunch", "X-Scissor"], "slowpoke": ["Thunder Wave", "Psychic", "Scald", "Slack Off"], "ludicolo": ["Hydro Pump", "Ice Beam", "Rain Dance", "Giga Drain"], "fletchling": ["Swords Dance", "Substitute", "U-turn", "Acrobatics"], "geodude": ["Sucker Punch", "Earthquake", "Rock Blast", "Stealth Rock"], "togepi": ["Nasty Plot", "Baton Pass", "Dazzling Gleam", "Fire Blast"], "sharpedo": ["Protect", "Ice Fang", "Crunch", "Psychic Fangs"], "scraggy": ["Poison Jab", "Drain Punch", "Zen Headbutt", "Knock Off", "High Jump Kick", "Dragon Dance"], "glalie": ["Spikes", "Earthquake", "Ice Shard", "Double-Edge"], "landorus": ["Earth Power", "Hidden Power Ice", "Stealth Rock", "Rock Slide"], "simipour": ["Superpower", "Hydro Pump", "Knock Off", "Gunk Shot"], "froslass": ["Spikes", "Icy Wind", "Will-O-Wisp", "Taunt"], "sandslash": ["Earthquake", "Stealth Rock", "Knock Off", "Rapid Spin"], "gastly": ["Sludge Bomb", "Dazzling Gleam", "Substitute", "Hidden Power Fighting", "Will-O-Wisp", "Thunderbolt", "Hex", "Shadow Ball"], "kirlia": [], "shuckle": ["Encore", "Toxic", "Stealth Rock", "Sticky Web"], "axew": ["Superpower", "Dragon Dance", "Outrage", "Iron Tail"], "cutiefly": [], "swoobat": ["Calm Mind", "Stored Power", "Air Slash", "Substitute"], "delphox": ["Trick", "Protect", "Calm Mind", "Wish", "Dazzling Gleam", "Toxic", "Fire Blast", "Grass Knot", "Psychic", "Flamethrower"], "persian-alola": ["Parting Shot", "Foul Play", "Toxic", "Taunt"], "hypno": ["Protect", "Toxic", "Wish", "Foul Play"], "cryogonal": ["Freeze-Dry", "Toxic", "Recover", "Rapid Spin"], "vileplume": ["Sludge Bomb", "Strength Sap", "Giga Drain", "Sleep Powder"], "vulpix": [], "pidove": [], "gurdurr": ["Bulk Up", "Mach Punch", "Drain Punch", "Knock Off"], "tapu-bulu": ["Swords Dance", "Nature's Madness", "Synthesis", "Zen Headbutt", "Horn Leech", "Wood Hammer", "Superpower", "Substitute"], "tirtouga": ["Waterfall", "Zen Headbutt", "Shell Smash", "Stealth Rock", "Knock Off", "Stone Edge", "Aqua Jet"], "sealeo": [], "honchkrow": ["Superpower", "Brave Bird", "Sucker Punch", "Pursuit"], "eelektross": ["Knock Off", "Giga Drain", "Volt Switch", "Flamethrower"], "rayquaza": ["Dragon Ascent", "Earthquake", "Extreme Speed", "Draco Meteor", "V-create", "Dragon Dance"], "exeggcute": [], "hariyama": ["Bullet Punch", "Close Combat", "Fake Out", "Facade", "Knock Off"], "feraligatr": ["Superpower", "Liquidation", "Aqua Jet", "Ice Punch", "Swords Dance", "Dragon Dance", "Crunch"], "bagon": [], "hawlucha": ["Roost", "Swords Dance", "High Jump Kick", "Acrobatics"], "pidgey": ["Defog", "Brave Bird", "U-turn", "Return"], "probopass": ["Flash Cannon", "Hidden Power Fire", "Stealth Rock", "Taunt"], "dewott": [], "togetic": ["Heal Bell", "Roost", "Dazzling Gleam", "Defog"], "skrelp": ["Hidden Power Fire", "Toxic Spikes", "Hydro Pump", "Sludge Wave"], "diancie": ["Earth Power", "Heal Bell", "Stealth Rock", "Diamond Storm", "Substitute", "Moonblast", "Power Gem", "Hidden Power Fire", "Calm Mind"], "gible": ["Earth Power", "Fire Blast", "Stealth Rock", "Draco Meteor"], "wimpod": ["Spikes", "Aqua Jet", "Scald", "Taunt"], "taillow": ["Boomburst", "Hidden Power Grass", "Brave Bird", "Facade", "Heat Wave", "Quick Attack", "U-turn"], "wingull": ["Scald", "Protect", "Roost", "Hurricane"], "haunter": ["Hidden Power Ground", "Trick", "Sludge Bomb", "Destiny Bond", "Shadow Ball", "Sludge Wave"], "thundurus": ["Superpower", "Focus Blast", "Knock Off", "Nasty Plot", "Thunderbolt", "Hidden Power Ice"], "mismagius": ["Power Gem", "Nasty Plot", "Shadow Ball", "Dazzling Gleam", "Taunt"], "chansey": ["Soft-Boiled", "Toxic", "Seismic Toss", "Stealth Rock"], "mothim": ["Hidden Power Ground", "Bug Buzz", "Air Slash", "Quiver Dance"], "snover": ["Hidden Power Ground", "Ice Shard", "Giga Drain", "Blizzard"], "tauros": ["Zen Headbutt", "Earthquake", "Body Slam", "Fire Blast"], "kabutops": ["Waterfall", "Swords Dance", "Stone Edge", "Superpower"], "xurkitree": ["Tail Glow", "Thunderbolt", "Grass Knot", "Hypnosis"], "arcanine": ["Protect", "Wild Charge", "Extreme Speed", "Will-O-Wisp", "Snarl", "Flare Blitz", "Flamethrower"], "shaymin-sky": ["Healing Wish", "Seed Flare", "Air Slash", "Earth Power"], "lycanroc": ["Swords Dance", "Stone Edge", "Sucker Punch", "Drill Run"], "pansage": [], "tropius": ["Protect", "Air Slash", "Leech Seed", "Substitute"], "diglett": ["Memento", "Sucker Punch", "Earthquake", "Rock Slide", "Substitute"], "bidoof": ["Swords Dance", "Quick Attack", "Crunch", "Return"], "wailord": ["Aqua Ring", "Protect", "Scald", "Substitute"], "omanyte": ["Earth Power", "Shell Smash", "Stealth Rock", "Knock Off", "Spikes", "Ice Beam", "Hydro Pump"], "regigigas": ["Thunder Wave", "Drain Punch", "Knock Off", "Return"], "steenee": [], "unfezant": ["Hypnosis", "Tailwind", "U-turn", "Return"], "snorunt": [], "yungoos": [], "celebi": ["Earth Power", "Recover", "Stealth Rock", "Giga Drain", "Nasty Plot", "U-turn", "Psychic"], "panpour": [], "dewgong": ["Perish Song", "Rain Dance", "Whirlpool", "Rest"], "tyrunt": ["Stone Edge", "Earthquake", "Dragon Dance", "Outrage"], "patrat": [], "pidgeot": ["Roost", "Hurricane", "U-turn", "Heat Wave"], "snubbull": ["Thunder Wave", "Earthquake", "Substitute", "Fire Punch", "Play Rough", "Thief"], "riolu": ["Swords Dance", "Copycat", "Protect", "High Jump Kick"], "escavalier": ["Protect", "Iron Head", "Sleep Talk", "Knock Off", "Rest", "Swords Dance", "Megahorn", "Pursuit"], "glaceon": ["Frost Breath", "Ice Beam", "Hidden Power Fighting", "Shadow Ball"], "magearna": ["Fleur Cannon", "Trick Room", "Ice Beam", "Shift Gear", "Thunderbolt", "Iron Head", "Hidden Power Fire", "Volt Switch", "Focus Blast", "Calm Mind"], "crobat": ["Brave Bird", "Roost", "U-turn", "Taunt"], "pelipper": ["Scald", "Roost", "Hurricane", "Defog", "U-turn", "Hydro Pump", "Surf"], "darumaka": ["Superpower", "Flare Blitz", "Rock Slide", "U-turn"], "magikarp": [], "klink": ["Wild Charge", "Gear Grind", "Shift Gear", "Return"], "mantyke": ["Hydro Pump", "Rain Dance", "Air Slash", "Hidden Power Ground"], "feebas": [], "ninjask": ["Leech Life", "Swords Dance", "Dig", "Aerial Ace"], "bellsprout": ["Sludge Bomb", "Solar Beam", "Sleep Powder", "Weather Ball"], "porygon": [], "dedenne": ["Discharge", "Hidden Power Ice", "Recycle", "Substitute"], "sigilyph": ["Energy Ball", "Psychic", "Air Slash", "Heat Wave"], "ariados": ["Toxic Thread", "Megahorn", "Toxic Spikes", "Sticky Web"], "psyduck": [], "pyukumuku": ["Block", "Toxic", "Recover", "Soak"], "dratini": ["Extreme Speed", "Fire Blast", "Draco Meteor", "Outrage", "Iron Tail", "Dragon Dance"], "mew": ["Soft-Boiled", "Fire Blast", "Will-O-Wisp", "Nasty Plot", "Defog", "Rock Polish", "Ice Beam", "Psychic"], "clefable": ["Soft-Boiled", "Protect", "Heal Bell", "Wish", "Stealth Rock", "Moonblast", "Calm Mind"], "cubone": ["Bonemerang", "Fire Punch", "Rock Slide", "Knock Off"], "lairon": [], "chandelure": ["Trick", "Substitute", "Fire Blast", "Memento", "Calm Mind", "Shadow Ball", "Flamethrower"], "ditto": ["Transform"], "tapu-fini": ["Nature's Madness", "Scald", "Taunt", "Moonblast"], "blissey": ["Soft-Boiled", "Heal Bell", "Toxic", "Seismic Toss"], "kyurem": ["Earth Power", "Hidden Power Fire", "Substitute", "Draco Meteor", "Roost", "Ice Beam"], "greninja-ash": ["Dark Pulse", "Spikes", "Water Shuriken", "Hydro Pump"], "hakamo-o": [], "woobat": [], "morelull": ["Strength Sap", "Spore", "Giga Drain", "Moonblast"], "elekid": ["Thunderbolt", "Psychic", "Hidden Power Grass", "Volt Switch"], "rotom-frost": ["Blizzard", "Thunderbolt", "Substitute", "Pain Split"], "xerneas": ["Hidden Power Fire", "Aromatherapy", "Ingrain", "Toxic", "Focus Blast", "Moonblast", "Defog", "Thunder", "Grass Knot", "Rest", "Geomancy"], "krabby": ["Superpower", "Body Slam", "Liquidation", "Knock Off"], "voltorb": [], "armaldo": ["Stone Edge", "Earthquake", "Knock Off", "Rapid Spin"], "carracosta": ["Superpower", "Toxic", "Shell Smash", "Stealth Rock", "Knock Off", "Stone Edge", "Aqua Jet", "Scald"], "cottonee": ["Memento", "Encore", "Giga Drain", "Dazzling Gleam"], "salamence": ["Facade", "Toxic", "Double-Edge", "Roost", "Defog", "Dragon Dance"], "xatu": ["Grass Knot", "Psychic", "Roost", "U-turn"], "tyrantrum": ["Superpower", "Dragon Claw", "Earthquake", "Outrage", "Rock Polish", "Head Smash"], "hippopotas": ["Earthquake", "Whirlwind", "Slack Off", "Stealth Rock"], "petilil": [], "terrakion": ["Swords Dance", "Close Combat", "Stone Edge", "Earthquake", "Rock Slide"], "bewear": ["Superpower", "Earthquake", "Double-Edge", "Ice Punch", "Return", "Swords Dance"], "stufful": ["Swords Dance", "Brick Break", "Ice Punch", "Return"], "deoxys-defense": ["Toxic", "Knock Off", "Spikes", "Recover"], "pyroar": ["Hidden Power Grass", "Solar Beam", "Toxic", "Hyper Voice", "Fire Blast", "Sunny Day", "Flamethrower"], "phantump": [], "mankey": ["Close Combat", "Earthquake", "U-turn", "Gunk Shot"], "entei": ["Sacred Fire", "Stone Edge", "Extreme Speed", "Flare Blitz"], "staraptor": ["Brave Bird", "Close Combat", "Final Gambit", "U-turn"], "mudbray": ["Earthquake", "Sleep Talk", "Stealth Rock", "Rock Slide", "Close Combat", "Heavy Slam", "Rest"], "excadrill": ["Rapid Spin", "Iron Head", "Earthquake", "Toxic", "Rock Slide", "Stealth Rock"], "avalugg": ["Avalanche", "Toxic", "Recover", "Rapid Spin"], "mime-jr": ["Barrier", "Calm Mind", "Baton Pass", "Encore"], "mandibuzz": ["Foul Play", "Roost", "Toxic", "Defog", "Taunt"], "zoroark": [], "rampardos": ["Superpower", "Zen Headbutt", "Rock Slide", "Fire Blast"], "dugtrio": ["Memento", "Earthquake", "Screech", "Substitute"], "swalot": ["Ice Beam", "Sludge Bomb", "Earthquake", "Giga Drain"], "minun": ["Nuzzle", "Encore", "Counter", "Volt Switch"], "poliwag": ["Waterfall", "Hypnosis", "Belly Drum", "Return"], "sceptile": ["Giga Drain", "Hidden Power Ice", "Leaf Storm", "Focus Blast"], "scyther": ["Knock Off", "Pursuit", "U-turn", "Aerial Ace"], "togedemaru": ["Wish", "Zing Zap", "Iron Head", "Encore", "Toxic", "U-turn", "Spiky Shield"], "grubbin": [], "spewpa": [], "kyurem-black": ["Ice Beam", "Earth Power", "Hidden Power Fire", "Roost", "Freeze Shock", "Fusion Bolt"], "giratina-altered": ["Will-O-Wisp", "Toxic", "Rest", "Defog"], "sliggoo": [], "kangaskhan": ["Body Slam", "Seismic Toss", "Crunch", "Fake Out"], "larvitar": ["Superpower", "Earthquake", "Dragon Dance", "Rock Slide"], "drowzee": [], "bibarel": ["Waterfall", "Swords Dance", "Aqua Jet", "Return"], "solosis": [], "gastrodon": ["Toxic", "Earthquake", "Scald", "Recover"], "mudsdale": ["Earthquake", "Toxic", "Sleep Talk", "Rock Slide", "Close Combat", "Heavy Slam", "Rest"], "alomomola": ["Scald", "Protect", "Toxic", "Wish"], "linoone": ["Seed Bomb", "Extreme Speed", "Belly Drum", "Stomping Tantrum"], "leafeon": ["Swords Dance", "Leaf Blade", "Knock Off", "Double-Edge"], "relicanth": ["Waterfall", "Zen Headbutt", "Earthquake", "Head Smash"], "scrafty": ["Drain Punch", "Knock Off", "High Jump Kick", "Dragon Dance", "Rest", "Bulk Up"], "golisopod": ["Leech Life", "Aqua Jet", "Liquidation", "First Impression"], "cyndaquil": [], "krookodile": ["Earthquake", "Stealth Rock", "Knock Off", "Stone Edge", "Pursuit", "Taunt"], "quilladin": [], "lunatone": ["Earth Power", "Psychic", "Ancient Power", "Rock Polish"], "aromatisse": ["Psychic", "Nasty Plot", "Trick Room", "Moonblast"], "mienshao": ["Knock Off", "Poison Jab", "U-turn", "High Jump Kick"], "heracross": ["Swords Dance", "Close Combat", "Facade", "Knock Off"], "tentacruel": ["Toxic Spikes", "Scald", "Haze", "Rapid Spin"], "corphish": ["Crabhammer", "Aqua Jet", "Swords Dance", "Dragon Dance", "Knock Off"], "dewpider": ["Scald", "Sleep Talk", "Rest", "Infestation"], "beheeyem": ["Nasty Plot", "Signal Beam", "Recover", "Psychic"], "meganium": ["Giga Drain", "Aromatherapy", "Synthesis", "Dragon Tail"], "beldum": [], "anorith": ["Rock Blast", "Stealth Rock", "Knock Off", "Rapid Spin"], "sandshrew": ["Earthquake", "Stealth Rock", "Knock Off", "Rapid Spin"], "ledyba": [], "espeon": ["Trick", "Calm Mind", "Dazzling Gleam", "Morning Sun", "Psyshock", "Psychic", "Shadow Ball"], "vikavolt": ["Roost", "Bug Buzz", "Energy Ball", "Thunderbolt", "Volt Switch"], "chikorita": [], "glameow": [], "blaziken": ["Swords Dance", "Flare Blitz", "Stone Edge", "Low Kick"], "tepig": [], "masquerain": ["Bug Buzz", "Hydro Pump", "Quiver Dance", "Sticky Web"], "gyarados": ["Waterfall", "Earthquake", "Crunch", "Dragon Dance", "Bounce"], "zangoose": ["Facade", "Close Combat", "Belly Drum", "Quick Attack", "Knock Off"], "oricorio-pau": ["Revelation Dance", "Hurricane", "Calm Mind", "Roost"], "horsea": [], "munna": [], "gothita": [], "nidoran-m": [], "cubchoo": ["Superpower", "Play Rough", "Ice Punch", "Surf"], "muk": ["Poison Jab", "Sleep Talk", "Thunder Punch", "Ice Punch", "Rest", "Shadow Sneak", "Curse", "Gunk Shot"], "sunkern": [], "zorua": ["Night Daze", "Extrasensory", "U-turn", "Nasty Plot"], "swellow": ["Boomburst", "Air Slash", "U-turn", "Heat Wave"], "krokorok": [], "deoxys-normal": ["Psycho Boost", "Spikes", "Pursuit", "Taunt"], "meowth": ["Aerial Ace", "Water Pulse", "Fake Out", "Feint"], "venomoth": ["Sludge Bomb", "Bug Buzz", "Sleep Powder", "Quiver Dance"], "floette": [], "meowstic-f": ["Shadow Ball", "Psychic", "Substitute", "Hidden Power Fighting"], "eelektrik": [], "braixen": [], "torkoal": ["Explosion", "Toxic", "Lava Plume", "Stealth Rock"], "shieldon": [], "toxicroak": ["Swords Dance", "Drain Punch", "Ice Punch", "Gunk Shot"], "rotom-wash": ["Defog", "Will-O-Wisp", "Volt Switch", "Hydro Pump"], "smoochum": [], "cradily": ["Toxic", "Rock Slide", "Recover", "Stealth Rock"], "gorebyss": ["Ice Beam", "Hidden Power Grass", "Hydro Pump", "Shell Smash"], "zubat": [], "sandile": ["Fire Fang", "Earthquake", "Pursuit", "Crunch"], "cacnea": [], "starly": [], "golurk": ["Earthquake", "Shadow Punch", "Stealth Rock", "Ice Punch"], "slowbro": ["Future Sight", "Toxic", "Fire Blast", "Psyshock", "Grass Knot", "Scald", "Slack Off"], "kricketune": ["Taunt", "Endeavor", "Knock Off", "Sticky Web"], "emolga": ["Encore", "Roost", "U-turn", "Taunt"], "vigoroth": ["Return", "Slack Off", "Bulk Up", "Taunt"], "charmander": [], "ampharos": ["Thunderbolt", "Focus Blast", "Volt Switch", "Dragon Pulse"], "purugly": ["Sucker Punch", "U-turn", "Fake Out", "Return"], "braviary": ["Superpower", "Brave Bird", "Substitute", "Roost", "U-turn", "Return", "Bulk Up"], "dragalge": ["Hidden Power Fire", "Toxic Spikes", "Scald", "Sludge Wave", "Draco Meteor"], "keldeo": ["Hydro Pump", "Secret Sword", "Icy Wind", "Stone Edge", "Calm Mind", "Scald", "Taunt"], "seaking": ["Waterfall", "Megahorn", "Knock Off", "Drill Run"], "duosion": [], "magmar": [], "dunsparce": ["Glare", "Roost", "Headbutt", "Coil"], "roggenrola": [], "zebstrika": ["Thunderbolt", "Hidden Power Grass", "Overheat", "Volt Switch"], "poliwrath": ["Waterfall", "Toxic", "Focus Punch", "Substitute"], "chinchou": ["Thunder Wave", "Ice Beam", "Hydro Pump", "Scald", "Volt Switch"], "darmanitan": ["Flare Blitz", "Earthquake", "Rock Slide", "U-turn"], "jolteon": ["Thunderbolt", "Hidden Power Ice", "Shadow Ball", "Volt Switch"], "lillipup": [], "cosmoem": [], "bruxish": ["Swords Dance", "Waterfall", "Aqua Jet", "Crunch", "Psychic Fangs"], "spearow": [], "totodile": ["Waterfall", "Dragon Dance", "Ice Punch", "Superpower"], "hoppip": ["Sleep Powder", "Strength Sap", "Bullet Seed", "U-turn"], "heatmor": ["Sucker Punch", "Fire Lash", "Giga Drain", "Knock Off"], "vanillish": [], "kommo-o": ["Dragon Dance", "Outrage", "Close Combat", "Ice Punch"], "oddish": [], "bounsweet": [], "onix": ["Explosion", "Earthquake", "Rock Blast", "Stealth Rock", "Endure"], "luxray": ["Superpower", "Wild Charge", "Ice Fang", "Volt Switch"], "azurill": ["Waterfall", "Return", "Knock Off", "Double-Edge"], "roselia": ["Spikes", "Sludge Bomb", "Sleep Powder", "Leaf Storm"], "quagsire": ["Earthquake", "Scald", "Recover", "Curse"], "absol": ["Superpower", "Swords Dance", "Sucker Punch", "Knock Off"], "kingdra": ["Hidden Power Grass", "Hydro Pump", "Draco Meteor", "Surf"], "charizard": ["Dragon Claw", "Earthquake", "Solar Beam", "Focus Blast", "Roost", "Flare Blitz", "Dragon Dance", "Flamethrower"], "wartortle": [], "jumpluff": ["Memento", "Sleep Powder", "U-turn", "Acrobatics"], "pancham": ["Parting Shot", "Swords Dance", "Drain Punch", "Knock Off", "Gunk Shot"], "garbodor": ["Explosion", "Spikes", "Seed Bomb", "Toxic Spikes", "Gunk Shot"], "plusle": ["Nuzzle", "Encore", "Counter", "Volt Switch"], "oricorio-sensu": ["Revelation Dance", "Toxic", "Substitute", "U-turn", "Roost", "Hurricane", "Calm Mind", "Taunt"], "cacturne": ["Spikes", "Sucker Punch", "Dark Pulse", "Energy Ball"], "delibird": ["Freeze-Dry", "Spikes", "Destiny Bond", "Rapid Spin"], "chesnaught": ["Wood Hammer", "Drain Punch", "Leech Seed", "Spikes", "Synthesis", "Taunt"], "banette": ["Shadow Claw", "Destiny Bond", "Taunt", "Gunk Shot"], "staravia": [], "bronzong": ["Protect", "Toxic", "Gyro Ball", "Stealth Rock"], "pikachu": ["Thunderbolt", "Grass Knot", "Hidden Power Ice", "Volt Switch"], "reuniclus": ["Psyshock", "Calm Mind", "Recover", "Shadow Ball"], "treecko": ["Swords Dance", "Drain Punch", "Bullet Seed", "Acrobatics"], "wooper": ["Yawn", "Earthquake", "Scald", "Recover"], "basculin": ["Waterfall", "Aqua Jet", "Ice Beam", "Zen Headbutt"], "venipede": ["Spikes", "Solar Beam", "Pin Missile", "Protect"], "servine": ["Hidden Power Ice", "Synthesis", "Leaf Storm", "Defog"], "sneasel": ["Icicle Crash", "Ice Shard", "Pursuit", "Knock Off"], "kyurem-white": ["Fusion Flare", "Draco Meteor", "Ice Beam", "Roost"], "kecleon": ["Shadow Sneak", "Sucker Punch", "Drain Punch", "Knock Off"], "donphan": ["Earthquake", "Toxic", "Knock Off", "Rapid Spin"], "dusclops": ["Will-O-Wisp", "Sleep Talk", "Rest", "Night Shade"], "persian": ["Nasty Plot", "Water Pulse", "Hidden Power Ghost", "Hyper Voice"], "lunala": ["Psyshock", "Moongeist Beam", "Focus Blast", "Calm Mind", "Ice Beam"], "phanpy": [], "croconaw": [], "beartic": ["Superpower", "Swords Dance", "Stone Edge", "Icicle Crash"], "porygon2": ["Ice Beam", "Thunder Wave", "Recover", "Foul Play"], "minior": ["Earthquake", "Substitute", "Shell Smash", "Acrobatics"], "helioptile": [], "snorlax": ["Self-Destruct", "Facade", "Frustration", "Earthquake", "Pursuit", "Double-Edge", "Recycle", "Rest", "Curse"], "necrozma": ["Power Gem", "Swords Dance", "Stealth Rock", "Earthquake", "X-Scissor", "Photon Geyser", "Heat Wave"], "houndoom": ["Nasty Plot", "Dark Pulse", "Flame Charge", "Fire Blast"], "shedinja": [], "arceus": ["Swords Dance", "Extreme Speed", "Shadow Claw", "Refresh", "Substitute"], "aipom": [], "alakazam": ["Hidden Power Fire", "Psychic", "Recover", "Focus Blast", "Shadow Ball"], "magby": ["Mach Punch", "Cross Chop", "Belly Drum", "Fire Punch", "Return", "Flare Blitz"], "raticate": ["Facade", "Sucker Punch", "Protect", "U-turn"], "solgaleo": ["Sunsteel Strike", "Stone Edge", "Earthquake", "Flare Blitz"], "amaura": ["Thunderbolt", "Earth Power", "Ancient Power", "Blizzard"], "zygarde-complete": ["Dragon Dance", "Thousand Waves", "Rest", "Substitute", "Thousand Arrows", "Dragon Tail", "Sleep Talk"], "arbok": ["Sucker Punch", "Coil", "Aqua Tail", "Gunk Shot"], "hitmonlee": ["Mach Punch", "Rapid Spin", "Knock Off", "Stone Edge", "Close Combat", "High Jump Kick", "Blaze Kick", "Curse"], "greninja": ["Hidden Power Fire", "Rock Slide", "Toxic Spikes", "Spikes", "Taunt", "Low Kick", "U-turn", "Ice Beam", "Hydro Pump", "Gunk Shot"], "barbaracle": ["Grass Knot", "Stone Edge", "Shell Smash", "Liquidation"], "seedot": [], "furfrou": ["Thunder Wave", "Sucker Punch", "U-turn", "Return"], "weezing": ["Sludge Bomb", "Will-O-Wisp", "Toxic Spikes", "Taunt"], "nincada": [], "pineco": ["Explosion", "Spikes", "Stealth Rock", "Rapid Spin"], "watchog": ["Knock Off", "Seed Bomb", "Low Kick", "Return"], "breloom": ["Mach Punch", "Spore", "Bullet Seed", "Rock Tomb"], "mimikyu": ["Shadow Sneak", "Swords Dance", "Play Rough", "Shadow Claw"], "vaporeon": ["Protect", "Celebrate", "Hydro Pump", "Wish", "Toxic", "Ice Beam", "Scald", "Shadow Ball"], "hippowdon": ["Earthquake", "Toxic", "Slack Off", "Stealth Rock"], "turtonator": ["Dragon Pulse", "Draco Meteor", "Shell Smash", "Fire Blast"], "kakuna": [], "latios": ["Calm Mind", "Recover", "Earthquake", "Draco Meteor", "Roost", "Psyshock", "Ice Beam", "Psychic"], "machamp": ["Facade", "Close Combat", "Bullet Punch", "Knock Off"], "flabebe": [], "golem-alola": ["Earthquake", "Explosion", "Fire Punch", "Wild Charge"], "carnivine": ["Swords Dance", "Sleep Powder", "Power Whip", "Knock Off"], "lickitung": ["Protect", "Body Slam", "Wish", "Knock Off"], "dugtrio-alola": ["Earthquake", "Toxic", "Iron Head", "Sucker Punch", "Substitute", "Pursuit"], "jynx": ["Lovely Kiss", "Focus Blast", "Substitute", "Nasty Plot", "Psyshock", "Ice Beam", "Psychic"], "slaking": ["Earthquake", "Giga Impact", "Fire Punch", "Pursuit"], "parasect": [], "unown": ["Hidden Power Psychic"], "monferno": [], "carbink": ["Trick Room", "Toxic", "Stealth Rock", "Moonblast", "Explosion", "Rest", "Magic Coat"], "meowth-alola": ["Dark Pulse", "Thunderbolt", "Nasty Plot", "Parting Shot", "Hidden Power Fighting", "Taunt"], "tangela": ["Hidden Power Fire", "Leech Seed", "Giga Drain", "Knock Off"], "marowak-alola": ["Swords Dance", "Shadow Bone", "Bonemerang", "Flare Blitz"], "cobalion": ["Iron Head", "Flash Cannon", "Stealth Rock", "Focus Blast", "Close Combat", "Rock Polish", "Swords Dance", "Calm Mind", "Hidden Power Ice"], "gallade": ["Swords Dance", "Close Combat", "Zen Headbutt", "Knock Off"], "deerling": [], "claydol": ["Earth Power", "Psychic", "Stealth Rock", "Rapid Spin"], "tangrowth": ["Earthquake", "Hidden Power Ice", "Giga Drain", "Knock Off", "Sleep Powder"], "combee": [], "hoothoot": [], "wurmple": [], "weedle": [], "rattata": [], "numel": [], "girafarig": ["Psyshock", "Calm Mind", "Rest", "Dazzling Gleam"]} --------------------------------------------------------------------------------