├── .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 |
30 | Why?
31 |
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 |
26 | You need to enable JavaScript to run this app.
27 |
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 |
35 |
36 |
37 |
38 |
Evolution Line:
39 |
40 |
41 |
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 |
26 | Search!
27 |
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 |
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"]}
--------------------------------------------------------------------------------