diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..520a863
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,55 @@
+# Built application files
+*.apk
+*.ap_
+
+# Files for the ART/Dalvik VM
+*.dex
+
+# Java class files
+*.class
+
+# Generated files
+bin/
+gen/
+out/
+
+# Gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+
+# Log Files
+*.log
+
+# Android Studio Navigation editor temp files
+.navigation/
+
+# Android Studio captures folder
+captures/
+
+# Intellij
+*.iml
+.idea/workspace.xml
+.idea/tasks.xml
+.idea/gradle.xml
+.idea/dictionaries
+.idea/libraries
+
+# Keystore files
+*.jks
+
+# External native build folder generated in Android Studio 2.2 and later
+.externalNativeBuild
+
+# Google Services (e.g. APIs or Firebase)
+google-services.json
+
+# Freeline
+freeline.py
+freeline/
+freeline_project_description.json
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..96cc43e
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..e7bedf3
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..a6cb5d5
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..3b31283
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..b0a270f
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..3190ef1
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..008156c
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,36 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 26
+ buildToolsVersion "26.0.1"
+ defaultConfig {
+ applicationId "com.example.nzp.pokedex"
+ minSdkVersion 15
+ targetSdkVersion 26
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+ exclude group: 'com.android.support', module: 'support-annotations'
+ })
+
+ compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
+ compile 'com.android.support.constraint:constraint-layout:1.0.2'
+ compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
+ compile 'com.android.support:cardview-v7:26.0.0-alpha1'
+ compile 'com.squareup.picasso:picasso:2.5.2'
+ testCompile 'junit:junit:4.12'
+ compile 'com.squareup.picasso:picasso:2.5.2'
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..a194be9
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/nzp/Library/Android/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/com/example/nzp/pokedex/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/nzp/pokedex/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..46c5f26
--- /dev/null
+++ b/app/src/androidTest/java/com/example/nzp/pokedex/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.nzp.pokedex;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumentation test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() throws Exception {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.example.nzp.pokedex", appContext.getPackageName());
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..ccf1c94
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nzp/pokedex/DisplayStyle.java b/app/src/main/java/com/example/nzp/pokedex/DisplayStyle.java
new file mode 100644
index 0000000..f6a3c77
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/DisplayStyle.java
@@ -0,0 +1,30 @@
+package com.example.nzp.pokedex;
+
+/**
+ * Created by nzp on 9/19/17.
+ *
+ * An enum representing the possible styles to display the list of Pokemon, LIST and GRID.
+ */
+
+public enum DisplayStyle {
+
+ LIST,
+ GRID;
+
+ /* Gets the other style. */
+ public static DisplayStyle other(DisplayStyle thisStyle) {
+ if (thisStyle == LIST) {
+ return GRID;
+ }
+ return LIST;
+ }
+
+ /* Return string representation. */
+ @Override
+ public String toString() {
+ if (this == LIST) {
+ return "Grid";
+ }
+ return "List";
+ }
+}
diff --git a/app/src/main/java/com/example/nzp/pokedex/FilterActivity.java b/app/src/main/java/com/example/nzp/pokedex/FilterActivity.java
new file mode 100644
index 0000000..2d79862
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/FilterActivity.java
@@ -0,0 +1,143 @@
+package com.example.nzp.pokedex;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.SeekBar;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+public class FilterActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener, View.OnClickListener {
+
+ SeekBar seekBarAtk, seekBarDef, seekBarHP;
+ TextView minAtkText, minDefText, minHPText;
+ CheckBox[] checkBoxes;
+ CheckBox checkAll;
+ Button saveButton;
+
+ int[] checkBoxIds = {
+ R.id.bugCheckBox, R.id.darkCheckBox, R.id.dragonCheckBox, R.id.electricCheckBox,
+ R.id.fairyCheckBox, R.id.fightingCheckBox, R.id.fireCheckBox, R.id.flyingCheckBox,
+ R.id.ghostCheckBox, R.id.grassCheckBox, R.id.groundCheckBox, R.id.iceCheckBox,
+ R.id.normalCheckBox, R.id.poisonCheckBox, R.id.psychicCheckBox, R.id.rockCheckBox,
+ R.id.steelCheckBox, R.id.waterCheckBox
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_filter);
+
+ //Initialize ALL the views, what fun
+ minAtkText = (TextView) (findViewById(R.id.minAtkText));
+ minDefText = (TextView) (findViewById(R.id.minDefText));
+ minHPText = (TextView) (findViewById(R.id.minHPText));
+ seekBarAtk = (SeekBar) (findViewById(R.id.seekBarAtk));
+ seekBarDef = (SeekBar) (findViewById(R.id.seekBarDef));
+ seekBarHP = (SeekBar) (findViewById(R.id.seekBarHP));
+
+ //Ready the SeekBars
+ seekBarAtk.setMax(Pokemon.HIGHEST_ATK);
+ seekBarDef.setMax(Pokemon.HIGHEST_DEF);
+ seekBarHP.setMax(Pokemon.HIGHEST_HP);
+ seekBarAtk.setOnSeekBarChangeListener(this);
+ seekBarDef.setOnSeekBarChangeListener(this);
+ seekBarHP.setOnSeekBarChangeListener(this);
+
+ //Initialize the checkboxes
+ checkBoxes = new CheckBox[Pokemon.NUM_TYPES];
+ for (int i = 0; i < checkBoxes.length; i += 1) {
+ checkBoxes[i] = (CheckBox) (findViewById(checkBoxIds[i]));
+ }
+
+ //Check all and save button
+ checkAll = (CheckBox) (findViewById(R.id.checkAll));
+ saveButton = (Button) (findViewById(R.id.saveButton));
+ checkAll.setOnClickListener(this);
+ saveButton.setOnClickListener(this);
+ }
+
+ private void changeCheckBoxes(boolean toWhat) {
+ for (CheckBox c : checkBoxes) {
+ c.setChecked(toWhat);
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ new AlertDialog.Builder(this).setMessage("Discard this filter?")
+ .setPositiveButton("Discard", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ discard();
+ }
+ })
+ .setNegativeButton("Cancel", null).show();
+ }
+
+ private void discard() {
+ Intent intent = new Intent();
+ setResult(RESULT_CANCELED, intent);
+ finish();
+ }
+
+ private void save() {
+ Intent intent = new Intent();
+
+ //Put stats
+ intent.putExtra("atk", seekBarAtk.getProgress());
+ intent.putExtra("def", seekBarDef.getProgress());
+ intent.putExtra("hp", seekBarHP.getProgress());
+
+ //Put types (only if they are checked)
+ ArrayList allowedTypes = new ArrayList<>();
+ for (int i = 0; i < checkBoxes.length; i += 1) {
+ if (checkBoxes[i].isChecked()) {
+ allowedTypes.add(Pokemon.TYPES[i]);
+ }
+ }
+ intent.putStringArrayListExtra("types", allowedTypes);
+
+ //Finish intent
+ setResult(RESULT_OK, intent);
+ finish();
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
+ switch (seekBar.getId()) {
+ case R.id.seekBarAtk:
+ minAtkText.setText(String.format(getString(R.string.min_atk), i));
+ break;
+ case R.id.seekBarDef:
+ minDefText.setText(String.format(getString(R.string.min_def), i));
+ break;
+ case R.id.seekBarHP:
+ minHPText.setText(String.format(getString(R.string.min_hp), i));
+ break;
+ }
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.checkAll:
+ changeCheckBoxes(checkAll.isChecked());
+ break;
+ case R.id.saveButton:
+ save();
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/nzp/pokedex/MainActivity.java b/app/src/main/java/com/example/nzp/pokedex/MainActivity.java
new file mode 100644
index 0000000..0271751
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/MainActivity.java
@@ -0,0 +1,166 @@
+package com.example.nzp.pokedex;
+
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.SearchView;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+public class MainActivity extends AppCompatActivity implements View.OnClickListener {
+
+ private static final int GRID_COLUMNS = 3;
+ private static final int NUM_RANDOM_POKEMON = 20;
+
+ //RecyclerView variables
+ private RecyclerView recyclerView;
+ private PokedexAdapter adapter;
+ private DisplayStyle displayStyle = DisplayStyle.LIST;
+
+ //Menu variables
+ private Menu menu;
+ private SearchView searchView;
+
+ //Filter view variables
+ private View filterInfoView;
+ private TextView filterText;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ //Init RecyclerView
+ recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
+ changeDisplayStyle(displayStyle);
+
+ //Filtering stuff
+ filterInfoView = findViewById(R.id.filterInfoView);
+ filterText = (TextView) findViewById(R.id.filterText);
+ filterInfoView.setVisibility(View.GONE);
+ ImageView removeFilterImage = (ImageView) findViewById(R.id.removeFilterImage);
+ removeFilterImage.setOnClickListener(this);
+
+ }
+
+ private void changeDisplayStyle(DisplayStyle style) {
+ //Create and set the layout manager
+ if (style == DisplayStyle.LIST) {
+ recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
+ } else if (style == DisplayStyle.GRID){
+ recyclerView.setLayoutManager(new GridLayoutManager(getApplicationContext(), GRID_COLUMNS));
+ } else {
+ throw new IllegalArgumentException("Invalid style.");
+ }
+
+ //Create and set the adapter
+ if (adapter == null) {
+ adapter = new PokedexAdapter(this, null, null, style);
+ } else {
+ adapter = new PokedexAdapter(this, adapter.getFilteredPokemon(), adapter.getTruePokemon(), style);
+ }
+ recyclerView.setAdapter(adapter);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ this.menu = menu;
+ getMenuInflater().inflate(R.menu.main_menu, menu);
+ searchView = (SearchView) menu.findItem(R.id.searchButton).getActionView();
+ return true;
+ }
+
+ private void setSearch() {
+ searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ return false;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ adapter.getFilter().filter(newText);
+ return true;
+ }
+ });
+ }
+
+ private void clearSearch() {
+ searchView.setOnQueryTextListener(null);
+ (menu.findItem(R.id.searchButton)).collapseActionView();
+ }
+
+ private void setFilterText(String text) {
+ if (text == null) {
+ filterInfoView.setVisibility(View.GONE);
+ return;
+ }
+ filterText.setText(text);
+ filterInfoView.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ menu.findItem(R.id.displayMenuButton).setTitle(String.format("%s %s", getString(R.string.display_as), displayStyle));
+ return super.onPrepareOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.displayMenuButton:
+ displayStyle = DisplayStyle.other(displayStyle);
+ changeDisplayStyle(displayStyle);
+ return true;
+ case R.id.randomButton:
+ int numPokemon = adapter.getRandomPokemon(NUM_RANDOM_POKEMON);
+ setFilterText("Showing " + numPokemon + " random pokemon.");
+ clearSearch();
+ break;
+ case R.id.filterButton:
+ startActivityForResult(new Intent(this, FilterActivity.class), 1);
+ break;
+ case R.id.searchButton:
+ setSearch();
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.removeFilterImage:
+ PokedexFilter allFilter = new PokedexFilter();
+ adapter.filterPokemon(allFilter);
+ setFilterText(null);
+ break;
+ }
+ }
+
+ /* Receiving from filtering activity */
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 1) {
+ if (resultCode == RESULT_OK) {
+ int atk = data.getIntExtra("atk", -1);
+ int def = data.getIntExtra("def", -1);
+ int hp = data.getIntExtra("hp", -1);
+ ArrayList allowedTypes = data.getStringArrayListExtra("types");
+ PokedexFilter filter = new PokedexFilter(allowedTypes, atk, def, hp);
+ adapter.filterPokemon(filter);
+ setFilterText(filter.toString());
+ clearSearch();
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/nzp/pokedex/Pokedex.java b/app/src/main/java/com/example/nzp/pokedex/Pokedex.java
new file mode 100644
index 0000000..65be146
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/Pokedex.java
@@ -0,0 +1,35 @@
+package com.example.nzp.pokedex;
+
+import android.util.Log;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * Created by aneeshjindal on 9/21/16.
+ */
+public class Pokedex {
+
+ public ArrayList getPokemon() {
+ ArrayList pokemons = new ArrayList<>();
+ try {
+ String data = "{\"Abomasnow\":{\"#\":\" 460\",\"Attack\":\"92\",\"Defense\":\"75\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"92\",\"Sp. Def\":\"85\",\"Species\":\"Frost Tree Pokémon\",\"Speed\":\"60\",\"Total\":\"494\",\"Type\":[\"Grass\",\"Ice\"]},\"Abomasnow ( Mega Abomasnow )\":{\"#\":\" 460\",\"Attack\":\"132\",\"Defense\":\"105\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"132\",\"Sp. Def\":\"105\",\"Species\":\"\",\"Speed\":\"30\",\"Total\":\"594\",\"Type\":[\"Grass\",\"Ice\"]},\"Abra\":{\"#\":\" 063\",\"Attack\":\"20\",\"Defense\":\"15\",\"FlavorText\":\"\",\"HP\":\"25\",\"Sp. Atk\":\"105\",\"Sp. Def\":\"55\",\"Species\":\"Psi Pokémon\",\"Speed\":\"90\",\"Total\":\"310\",\"Type\":[\"Psychic\"]},\"Absol\":{\"#\":\" 359\",\"Attack\":\"130\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"75\",\"Sp. Def\":\"60\",\"Species\":\"Disaster Pokémon\",\"Speed\":\"75\",\"Total\":\"465\",\"Type\":[\"Dark\"]},\"Absol ( Mega Absol )\":{\"#\":\" 359\",\"Attack\":\"150\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"115\",\"Sp. Def\":\"60\",\"Species\":\"\",\"Speed\":\"115\",\"Total\":\"565\",\"Type\":[\"Dark\"]},\"Accelgor\":{\"#\":\" 617\",\"Attack\":\"70\",\"Defense\":\"40\",\"FlavorText\":\"When its body dries out, it weakens. So, to prevent dehydration, it wraps itself in many layers of thin membrane.\",\"HP\":\"80\",\"Sp. Atk\":\"100\",\"Sp. Def\":\"60\",\"Species\":\"Shell Out Pokémon\",\"Speed\":\"145\",\"Total\":\"495\",\"Type\":[\"bug\"]},\"Aegislash ( Blade Forme )\":{\"#\":\" 681\",\"Attack\":\"150\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"150\",\"Sp. Def\":\"50\",\"Species\":\"\",\"Speed\":\"60\",\"Total\":\"520\",\"Type\":[\"Steel\",\"Ghost\"]},\"Aegislash ( Shield Forme )\":{\"#\":\" 681\",\"Attack\":\"50\",\"Defense\":\"150\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"150\",\"Species\":\"\",\"Speed\":\"60\",\"Total\":\"520\",\"Type\":[\"Steel\",\"Ghost\"]},\"Aerodactyl\":{\"#\":\" 142\",\"Attack\":\"105\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"80\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"75\",\"Species\":\"Fossil Pokémon\",\"Speed\":\"130\",\"Total\":\"515\",\"Type\":[\"Rock\",\"Flying\"]},\"Aerodactyl ( Mega Aerodactyl )\":{\"#\":\" 142\",\"Attack\":\"135\",\"Defense\":\"85\",\"FlavorText\":\"\",\"HP\":\"80\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"95\",\"Species\":\"\",\"Speed\":\"150\",\"Total\":\"615\",\"Type\":[\"Rock\",\"Flying\"]},\"Aggron\":{\"#\":\" 306\",\"Attack\":\"110\",\"Defense\":\"180\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"60\",\"Species\":\"Iron Armor Pokémon\",\"Speed\":\"50\",\"Total\":\"530\",\"Type\":[\"Steel\",\"Rock\"]},\"Aggron ( Mega Aggron )\":{\"#\":\" 306\",\"Attack\":\"140\",\"Defense\":\"230\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"80\",\"Species\":\"\",\"Speed\":\"50\",\"Total\":\"630\",\"Type\":[\"Steel\"]},\"Aipom\":{\"#\":\" 190\",\"Attack\":\"70\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"55\",\"Species\":\"Long Tail Pokémon\",\"Speed\":\"85\",\"Total\":\"360\",\"Type\":[\"Normal\"]},\"Alakazam\":{\"#\":\" 065\",\"Attack\":\"50\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"135\",\"Sp. Def\":\"95\",\"Species\":\"Psi Pokémon\",\"Speed\":\"120\",\"Total\":\"500\",\"Type\":[\"Psychic\"]},\"Alakazam ( Mega Alakazam )\":{\"#\":\" 065\",\"Attack\":\"50\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"175\",\"Sp. Def\":\"95\",\"Species\":\"\",\"Speed\":\"150\",\"Total\":\"590\",\"Type\":[\"Psychic\"]},\"Alomomola\":{\"#\":\" 594\",\"Attack\":\"75\",\"Defense\":\"80\",\"FlavorText\":\"It gently holds injured and weak Pokémon in its fins. Its special membrane heals their wounds.\",\"HP\":\"165\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"45\",\"Species\":\"Caring Pokémon\",\"Speed\":\"65\",\"Total\":\"470\",\"Type\":[\"Water\"]},\"Altaria\":{\"#\":\" 334\",\"Attack\":\"70\",\"Defense\":\"90\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"105\",\"Species\":\"Humming Pokémon\",\"Speed\":\"80\",\"Total\":\"490\",\"Type\":[\"Dragon\",\"Flying\"]},\"Altaria ( Mega Altaria )\":{\"#\":\" 334\",\"Attack\":\"110\",\"Defense\":\"110\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"110\",\"Sp. Def\":\"105\",\"Species\":\"\",\"Speed\":\"80\",\"Total\":\"590\",\"Type\":[\"Dragon\",\"Fairy\"]},\"Amaura\":{\"#\":\" 698\",\"Attack\":\"59\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"77\",\"Sp. Atk\":\"67\",\"Sp. Def\":\"63\",\"Species\":\"Tundra Pokémon\",\"Speed\":\"46\",\"Total\":\"362\",\"Type\":[\"Rock\",\"Ice\"]},\"Ambipom\":{\"#\":\" 424\",\"Attack\":\"100\",\"Defense\":\"66\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"66\",\"Species\":\"Long Tail Pokémon\",\"Speed\":\"115\",\"Total\":\"482\",\"Type\":[\"Normal\"]},\"Amoonguss\":{\"#\":\" 591\",\"Attack\":\"85\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"114\",\"Sp. Atk\":\"85\",\"Sp. Def\":\"80\",\"Species\":\"Mushroom Pokémon\",\"Speed\":\"30\",\"Total\":\"464\",\"Type\":[\"Grass\",\"Poison\"]},\"Ampharos\":{\"#\":\" 181\",\"Attack\":\"75\",\"Defense\":\"85\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"115\",\"Sp. Def\":\"90\",\"Species\":\"Light Pokémon\",\"Speed\":\"55\",\"Total\":\"510\",\"Type\":[\"Electric\"]},\"Ampharos ( Mega Ampharos )\":{\"#\":\" 181\",\"Attack\":\"95\",\"Defense\":\"105\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"165\",\"Sp. Def\":\"110\",\"Species\":\"\",\"Speed\":\"45\",\"Total\":\"610\",\"Type\":[\"Electric\",\"Dragon\"]},\"Anorith\":{\"#\":\" 347\",\"Attack\":\"95\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"50\",\"Species\":\"Old Shrimp Pokémon\",\"Speed\":\"75\",\"Total\":\"355\",\"Type\":[\"Rock\",\"bug\"]},\"Arbok\":{\"#\":\" 024\",\"Attack\":\"85\",\"Defense\":\"69\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"79\",\"Species\":\"Cobra Pokémon\",\"Speed\":\"80\",\"Total\":\"438\",\"Type\":[\"Poison\"]},\"Arcanine\":{\"#\":\" 059\",\"Attack\":\"110\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"100\",\"Sp. Def\":\"80\",\"Species\":\"Legendary Pokémon\",\"Speed\":\"95\",\"Total\":\"555\",\"Type\":[\"Fire\"]},\"Arceus\":{\"#\":\" 493\",\"Attack\":\"120\",\"Defense\":\"120\",\"FlavorText\":\"\",\"HP\":\"120\",\"Sp. Atk\":\"120\",\"Sp. Def\":\"120\",\"Species\":\"Alpha Pokémon\",\"Speed\":\"120\",\"Total\":\"720\",\"Type\":[\"Normal\"]},\"Archen\":{\"#\":\" 566\",\"Attack\":\"112\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"74\",\"Sp. Def\":\"45\",\"Species\":\"First Bird Pokémon\",\"Speed\":\"70\",\"Total\":\"401\",\"Type\":[\"Rock\",\"Flying\"]},\"Archeops\":{\"#\":\" 567\",\"Attack\":\"140\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"112\",\"Sp. Def\":\"65\",\"Species\":\"First Bird Pokémon\",\"Speed\":\"110\",\"Total\":\"567\",\"Type\":[\"Rock\",\"Flying\"]},\"Ariados\":{\"#\":\" 168\",\"Attack\":\"90\",\"Defense\":\"70\",\"FlavorText\":\"Its feet are tipped with tiny hooked claws that enable it to scuttle on ceilings and vertical walls. It constricts its foe with thin and strong silk webbing.\",\"HP\":\"70\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"60\",\"Species\":\"Long Leg Pokémon\",\"Speed\":\"40\",\"Total\":\"390\",\"Type\":[\"bug\",\"Poison\"]},\"Armaldo\":{\"#\":\" 348\",\"Attack\":\"125\",\"Defense\":\"100\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"80\",\"Species\":\"Plate Pokémon\",\"Speed\":\"45\",\"Total\":\"495\",\"Type\":[\"Rock\",\"bug\"]},\"Aromatisse\":{\"#\":\" 683\",\"Attack\":\"72\",\"Defense\":\"72\",\"FlavorText\":\"\",\"HP\":\"101\",\"Sp. Atk\":\"99\",\"Sp. Def\":\"89\",\"Species\":\"Fragrance Pokémon\",\"Speed\":\"29\",\"Total\":\"462\",\"Type\":[\"Fairy\"]},\"Aron\":{\"#\":\" 304\",\"Attack\":\"70\",\"Defense\":\"100\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"40\",\"Species\":\"Iron Armor Pokémon\",\"Speed\":\"30\",\"Total\":\"330\",\"Type\":[\"Steel\",\"Rock\"]},\"Articuno\":{\"#\":\" 144\",\"Attack\":\"85\",\"Defense\":\"100\",\"FlavorText\":\"Legendary bird POKéMON. As it flies through the sky, it cools the air, causing snow to fall.\",\"HP\":\"90\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"125\",\"Species\":\"Freeze Pokémon\",\"Speed\":\"85\",\"Total\":\"580\",\"Type\":[\"Ice\",\"Flying\"]},\"Audino\":{\"#\":\" 531\",\"Attack\":\"60\",\"Defense\":\"86\",\"FlavorText\":\"\",\"HP\":\"103\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"86\",\"Species\":\"Hearing Pokémon\",\"Speed\":\"50\",\"Total\":\"445\",\"Type\":[\"Normal\"]},\"Audino ( Mega Audino )\":{\"#\":\" 531\",\"Attack\":\"60\",\"Defense\":\"126\",\"FlavorText\":\"\",\"HP\":\"103\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"126\",\"Species\":\"\",\"Speed\":\"50\",\"Total\":\"545\",\"Type\":[\"Normal\",\"Fairy\"]},\"Aurorus\":{\"#\":\" 699\",\"Attack\":\"77\",\"Defense\":\"72\",\"FlavorText\":\"\",\"HP\":\"123\",\"Sp. Atk\":\"99\",\"Sp. Def\":\"92\",\"Species\":\"Tundra Pokémon\",\"Speed\":\"58\",\"Total\":\"521\",\"Type\":[\"Rock\",\"Ice\"]},\"Avalugg\":{\"#\":\" 713\",\"Attack\":\"117\",\"Defense\":\"184\",\"FlavorText\":\"\",\"HP\":\"95\",\"Sp. Atk\":\"44\",\"Sp. Def\":\"46\",\"Species\":\"Iceberg Pokémon\",\"Speed\":\"28\",\"Total\":\"514\",\"Type\":[\"Ice\"]},\"Axew\":{\"#\":\" 610\",\"Attack\":\"87\",\"Defense\":\"60\",\"FlavorText\":\"They mark their territory by leaving gashes in trees with their tusks. If a tusk breaks, a new one grows in quickly.\",\"HP\":\"46\",\"Sp. Atk\":\"30\",\"Sp. Def\":\"40\",\"Species\":\"Tusk Pokémon\",\"Speed\":\"57\",\"Total\":\"320\",\"Type\":[\"Dragon\"]},\"Azelf\":{\"#\":\" 482\",\"Attack\":\"125\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"125\",\"Sp. Def\":\"70\",\"Species\":\"Willpower Pokémon\",\"Speed\":\"115\",\"Total\":\"580\",\"Type\":[\"Psychic\"]},\"Azumarill\":{\"#\":\" 184\",\"Attack\":\"50\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"100\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"80\",\"Species\":\"Aqua Rabbit Pokémon\",\"Speed\":\"50\",\"Total\":\"420\",\"Type\":[\"Water\",\"Fairy\"]},\"Azurill\":{\"#\":\" 298\",\"Attack\":\"20\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"20\",\"Sp. Def\":\"40\",\"Species\":\"Polka Dot Pokémon\",\"Speed\":\"20\",\"Total\":\"190\",\"Type\":[\"Normal\",\"Fairy\"]},\"Bagon\":{\"#\":\" 371\",\"Attack\":\"75\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"30\",\"Species\":\"Rock Head Pokémon\",\"Speed\":\"50\",\"Total\":\"300\",\"Type\":[\"Dragon\"]},\"Baltoy\":{\"#\":\" 343\",\"Attack\":\"40\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"40\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"70\",\"Species\":\"Clay Doll Pokémon\",\"Speed\":\"55\",\"Total\":\"300\",\"Type\":[\"Ground\",\"Psychic\"]},\"Banette\":{\"#\":\" 354\",\"Attack\":\"115\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"64\",\"Sp. Atk\":\"83\",\"Sp. Def\":\"63\",\"Species\":\"Marionette Pokémon\",\"Speed\":\"65\",\"Total\":\"455\",\"Type\":[\"Ghost\"]},\"Banette ( Mega Banette )\":{\"#\":\" 354\",\"Attack\":\"165\",\"Defense\":\"75\",\"FlavorText\":\"\",\"HP\":\"64\",\"Sp. Atk\":\"93\",\"Sp. Def\":\"83\",\"Species\":\"\",\"Speed\":\"75\",\"Total\":\"555\",\"Type\":[\"Ghost\"]},\"Barbaracle\":{\"#\":\" 689\",\"Attack\":\"105\",\"Defense\":\"115\",\"FlavorText\":\"\",\"HP\":\"72\",\"Sp. Atk\":\"54\",\"Sp. Def\":\"86\",\"Species\":\"Collective Pokémon\",\"Speed\":\"68\",\"Total\":\"500\",\"Type\":[\"Rock\",\"Water\"]},\"Barboach\":{\"#\":\" 339\",\"Attack\":\"48\",\"Defense\":\"43\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"46\",\"Sp. Def\":\"41\",\"Species\":\"Whiskers Pokémon\",\"Speed\":\"60\",\"Total\":\"288\",\"Type\":[\"Water\",\"Ground\"]},\"Basculin\":{\"#\":\" 550\",\"Attack\":\"92\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"55\",\"Species\":\"Hostile Pokémon\",\"Speed\":\"98\",\"Total\":\"460\",\"Type\":[\"Water\"]},\"Bastiodon\":{\"#\":\" 411\",\"Attack\":\"52\",\"Defense\":\"168\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"47\",\"Sp. Def\":\"138\",\"Species\":\"Shield Pokémon\",\"Speed\":\"30\",\"Total\":\"495\",\"Type\":[\"Rock\",\"Steel\"]},\"Bayleef\":{\"#\":\" 153\",\"Attack\":\"62\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"63\",\"Sp. Def\":\"80\",\"Species\":\"Leaf Pokémon\",\"Speed\":\"60\",\"Total\":\"405\",\"Type\":[\"Grass\"]},\"Beartic\":{\"#\":\" 614\",\"Attack\":\"110\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"95\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"80\",\"Species\":\"Freezing Pokémon\",\"Speed\":\"50\",\"Total\":\"485\",\"Type\":[\"Ice\"]},\"Beautifly\":{\"#\":\" 267\",\"Attack\":\"70\",\"Defense\":\"50\",\"FlavorText\":\"Despite its looks, it is aggressive. It jabs with its long, thin mouth if disturbed while collecting pollen.\",\"HP\":\"60\",\"Sp. Atk\":\"100\",\"Sp. Def\":\"50\",\"Species\":\"Butterfly Pokémon\",\"Speed\":\"65\",\"Total\":\"395\",\"Type\":[\"bug\",\"Flying\"]},\"Beedrill\":{\"#\":\" 015\",\"Attack\":\"90\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"45\",\"Sp. Def\":\"80\",\"Species\":\"Poison Bee Pokémon\",\"Speed\":\"75\",\"Total\":\"395\",\"Type\":[\"bug\",\"Poison\"]},\"Beedrill ( Mega Beedrill )\":{\"#\":\" 015\",\"Attack\":\"150\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"15\",\"Sp. Def\":\"80\",\"Species\":\"\",\"Speed\":\"145\",\"Total\":\"495\",\"Type\":[\"bug\",\"Poison\"]},\"Beheeyem\":{\"#\":\" 606\",\"Attack\":\"75\",\"Defense\":\"75\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"125\",\"Sp. Def\":\"95\",\"Species\":\"Cerebral Pokémon\",\"Speed\":\"40\",\"Total\":\"485\",\"Type\":[\"Psychic\"]},\"Beldum\":{\"#\":\" 374\",\"Attack\":\"55\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"40\",\"Sp. Atk\":\"35\",\"Sp. Def\":\"60\",\"Species\":\"Iron Ball Pokémon\",\"Speed\":\"30\",\"Total\":\"300\",\"Type\":[\"Steel\",\"Psychic\"]},\"Bellossom\":{\"#\":\" 182\",\"Attack\":\"80\",\"Defense\":\"95\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"100\",\"Species\":\"Flower Pokémon\",\"Speed\":\"50\",\"Total\":\"490\",\"Type\":[\"Grass\"]},\"Bellsprout\":{\"#\":\" 069\",\"Attack\":\"75\",\"Defense\":\"35\",\"FlavorText\":\"If it notices anything that moves, it immediately flings its vine at the object.\",\"HP\":\"50\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"30\",\"Species\":\"Flower Pokémon\",\"Speed\":\"40\",\"Total\":\"300\",\"Type\":[\"Grass\",\"Poison\"]},\"Bergmite\":{\"#\":\" 712\",\"Attack\":\"69\",\"Defense\":\"85\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"32\",\"Sp. Def\":\"35\",\"Species\":\"Ice Chunk Pokémon\",\"Speed\":\"28\",\"Total\":\"304\",\"Type\":[\"Ice\"]},\"Bibarel\":{\"#\":\" 400\",\"Attack\":\"85\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"79\",\"Sp. Atk\":\"55\",\"Sp. Def\":\"60\",\"Species\":\"Beaver Pokémon\",\"Speed\":\"71\",\"Total\":\"410\",\"Type\":[\"Normal\",\"Water\"]},\"Bidoof\":{\"#\":\" 399\",\"Attack\":\"45\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"59\",\"Sp. Atk\":\"35\",\"Sp. Def\":\"40\",\"Species\":\"Plump Mouse Pokémon\",\"Speed\":\"31\",\"Total\":\"250\",\"Type\":[\"Normal\"]},\"Binacle\":{\"#\":\" 688\",\"Attack\":\"52\",\"Defense\":\"67\",\"FlavorText\":\"\",\"HP\":\"42\",\"Sp. Atk\":\"39\",\"Sp. Def\":\"56\",\"Species\":\"Two-Handed Pokémon\",\"Speed\":\"50\",\"Total\":\"306\",\"Type\":[\"Rock\",\"Water\"]},\"Bisharp\":{\"#\":\" 625\",\"Attack\":\"125\",\"Defense\":\"100\",\"FlavorText\":\"Bisharp pursues prey in the company of a large group of Pawniard. Then Bisharp finishes off the prey.\",\"HP\":\"65\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"70\",\"Species\":\"Sword Blade Pokémon\",\"Speed\":\"70\",\"Total\":\"490\",\"Type\":[\"Dark\",\"Steel\"]},\"Blastoise\":{\"#\":\" 009\",\"Attack\":\"83\",\"Defense\":\"100\",\"FlavorText\":\"\",\"HP\":\"79\",\"Sp. Atk\":\"85\",\"Sp. Def\":\"105\",\"Species\":\"Shellfish Pokémon\",\"Speed\":\"78\",\"Total\":\"530\",\"Type\":[\"Water\"]},\"Blastoise ( Mega Blastoise )\":{\"#\":\" 009\",\"Attack\":\"103\",\"Defense\":\"120\",\"FlavorText\":\"\",\"HP\":\"79\",\"Sp. Atk\":\"135\",\"Sp. Def\":\"115\",\"Species\":\"\",\"Speed\":\"78\",\"Total\":\"630\",\"Type\":[\"Water\"]},\"Blaziken\":{\"#\":\" 257\",\"Attack\":\"120\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"80\",\"Sp. Atk\":\"110\",\"Sp. Def\":\"70\",\"Species\":\"Blaze Pokémon\",\"Speed\":\"80\",\"Total\":\"530\",\"Type\":[\"Fire\",\"Fighting\"]},\"Blaziken ( Mega Blaziken )\":{\"#\":\" 257\",\"Attack\":\"160\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"80\",\"Sp. Atk\":\"130\",\"Sp. Def\":\"80\",\"Species\":\"\",\"Speed\":\"100\",\"Total\":\"630\",\"Type\":[\"Fire\",\"Fighting\"]},\"Blissey\":{\"#\":\" 242\",\"Attack\":\"10\",\"Defense\":\"10\",\"FlavorText\":\"\",\"HP\":\"255\",\"Sp. Atk\":\"75\",\"Sp. Def\":\"135\",\"Species\":\"Happiness Pokémon\",\"Speed\":\"55\",\"Total\":\"540\",\"Type\":[\"Normal\"]},\"Blitzle\":{\"#\":\" 522\",\"Attack\":\"60\",\"Defense\":\"32\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"32\",\"Species\":\"Electrified Pokémon\",\"Speed\":\"76\",\"Total\":\"295\",\"Type\":[\"Electric\"]},\"Boldore\":{\"#\":\" 525\",\"Attack\":\"105\",\"Defense\":\"105\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"40\",\"Species\":\"Ore Pokémon\",\"Speed\":\"20\",\"Total\":\"390\",\"Type\":[\"Rock\"]},\"Bonsly\":{\"#\":\" 438\",\"Attack\":\"80\",\"Defense\":\"95\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"10\",\"Sp. Def\":\"45\",\"Species\":\"Bonsai Pokémon\",\"Speed\":\"10\",\"Total\":\"290\",\"Type\":[\"Rock\"]},\"Bouffalant\":{\"#\":\" 626\",\"Attack\":\"110\",\"Defense\":\"95\",\"FlavorText\":\"\",\"HP\":\"95\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"95\",\"Species\":\"Bash Buffalo Pokémon\",\"Speed\":\"55\",\"Total\":\"490\",\"Type\":[\"Normal\"]},\"Braixen\":{\"#\":\" 654\",\"Attack\":\"59\",\"Defense\":\"58\",\"FlavorText\":\"\",\"HP\":\"59\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"70\",\"Species\":\"Fox Pokémon\",\"Speed\":\"73\",\"Total\":\"409\",\"Type\":[\"Fire\"]},\"Braviary\":{\"#\":\" 628\",\"Attack\":\"123\",\"Defense\":\"75\",\"FlavorText\":\"\",\"HP\":\"100\",\"Sp. Atk\":\"57\",\"Sp. Def\":\"75\",\"Species\":\"Valiant Pokémon\",\"Speed\":\"80\",\"Total\":\"510\",\"Type\":[\"Normal\",\"Flying\"]},\"Breloom\":{\"#\":\" 286\",\"Attack\":\"130\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"60\",\"Species\":\"Mushroom Pokémon\",\"Speed\":\"70\",\"Total\":\"460\",\"Type\":[\"Grass\",\"Fighting\"]},\"Bronzong\":{\"#\":\" 437\",\"Attack\":\"89\",\"Defense\":\"116\",\"FlavorText\":\"\",\"HP\":\"67\",\"Sp. Atk\":\"79\",\"Sp. Def\":\"116\",\"Species\":\"Bronze Bell Pokémon\",\"Speed\":\"33\",\"Total\":\"500\",\"Type\":[\"Steel\",\"Psychic\"]},\"Bronzor\":{\"#\":\" 436\",\"Attack\":\"24\",\"Defense\":\"86\",\"FlavorText\":\"\",\"HP\":\"57\",\"Sp. Atk\":\"24\",\"Sp. Def\":\"86\",\"Species\":\"Bronze Pokémon\",\"Speed\":\"23\",\"Total\":\"300\",\"Type\":[\"Steel\",\"Psychic\"]},\"Budew\":{\"#\":\" 406\",\"Attack\":\"30\",\"Defense\":\"35\",\"FlavorText\":\"\",\"HP\":\"40\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"70\",\"Species\":\"Bud Pokémon\",\"Speed\":\"55\",\"Total\":\"280\",\"Type\":[\"Grass\",\"Poison\"]},\"Buizel\":{\"#\":\" 418\",\"Attack\":\"65\",\"Defense\":\"35\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"30\",\"Species\":\"Sea Weasel Pokémon\",\"Speed\":\"85\",\"Total\":\"330\",\"Type\":[\"Water\"]},\"Bulbasaur\":{\"#\":\" 001\",\"Attack\":\"49\",\"Defense\":\"49\",\"FlavorText\":\"While it is young, it uses the nutrients that are stored in the seeds on its back in order to grow.\",\"HP\":\"45\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"65\",\"Species\":\"Seed Pokémon\",\"Speed\":\"45\",\"Total\":\"318\",\"Type\":[\"Grass\",\"Poison\"]},\"Buneary\":{\"#\":\" 427\",\"Attack\":\"66\",\"Defense\":\"44\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"44\",\"Sp. Def\":\"56\",\"Species\":\"Rabbit Pokémon\",\"Speed\":\"85\",\"Total\":\"350\",\"Type\":[\"Normal\"]},\"Bunnelby\":{\"#\":\" 659\",\"Attack\":\"36\",\"Defense\":\"38\",\"FlavorText\":\"\",\"HP\":\"38\",\"Sp. Atk\":\"32\",\"Sp. Def\":\"36\",\"Species\":\"Digging Pokémon\",\"Speed\":\"57\",\"Total\":\"237\",\"Type\":[\"Normal\"]},\"Burmy\":{\"#\":\" 412\",\"Attack\":\"29\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"40\",\"Sp. Atk\":\"29\",\"Sp. Def\":\"45\",\"Species\":\"Bagworm Pokémon\",\"Speed\":\"36\",\"Total\":\"224\",\"Type\":[\"bug\"]},\"Butterfree\":{\"#\":\" 012\",\"Attack\":\"45\",\"Defense\":\"50\",\"FlavorText\":\"It flits from flower to flower, collecting honey. It can even identify distant flowers in bloom.\",\"HP\":\"60\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"80\",\"Species\":\"Butterfly Pokémon\",\"Speed\":\"70\",\"Total\":\"395\",\"Type\":[\"bug\",\"Flying\"]},\"Cacnea\":{\"#\":\" 331\",\"Attack\":\"85\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"85\",\"Sp. Def\":\"40\",\"Species\":\"Cactus Pokémon\",\"Speed\":\"35\",\"Total\":\"335\",\"Type\":[\"Grass\"]},\"Cacturne\":{\"#\":\" 332\",\"Attack\":\"115\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"115\",\"Sp. Def\":\"60\",\"Species\":\"Scarecrow Pokémon\",\"Speed\":\"55\",\"Total\":\"475\",\"Type\":[\"Grass\",\"Dark\"]},\"Camerupt\":{\"#\":\" 323\",\"Attack\":\"100\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"105\",\"Sp. Def\":\"75\",\"Species\":\"Eruption Pokémon\",\"Speed\":\"40\",\"Total\":\"460\",\"Type\":[\"Fire\",\"Ground\"]},\"Camerupt ( Mega Camerupt )\":{\"#\":\" 323\",\"Attack\":\"120\",\"Defense\":\"100\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"145\",\"Sp. Def\":\"105\",\"Species\":\"\",\"Speed\":\"20\",\"Total\":\"560\",\"Type\":[\"Fire\",\"Ground\"]},\"Carbink\":{\"#\":\" 703\",\"Attack\":\"50\",\"Defense\":\"150\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"150\",\"Species\":\"Jewel Pokémon\",\"Speed\":\"50\",\"Total\":\"500\",\"Type\":[\"Rock\",\"Fairy\"]},\"Carnivine\":{\"#\":\" 455\",\"Attack\":\"100\",\"Defense\":\"72\",\"FlavorText\":\"\",\"HP\":\"74\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"72\",\"Species\":\"bug Catcher Pokémon\",\"Speed\":\"46\",\"Total\":\"454\",\"Type\":[\"Grass\"]},\"Carracosta\":{\"#\":\" 565\",\"Attack\":\"108\",\"Defense\":\"133\",\"FlavorText\":\"\",\"HP\":\"74\",\"Sp. Atk\":\"83\",\"Sp. Def\":\"65\",\"Species\":\"Prototurtle Pokémon\",\"Speed\":\"32\",\"Total\":\"495\",\"Type\":[\"Water\",\"Rock\"]},\"Carvanha\":{\"#\":\" 318\",\"Attack\":\"90\",\"Defense\":\"20\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"20\",\"Species\":\"Savage Pokémon\",\"Speed\":\"65\",\"Total\":\"305\",\"Type\":[\"Water\",\"Dark\"]},\"Cascoon\":{\"#\":\" 268\",\"Attack\":\"35\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"25\",\"Sp. Def\":\"25\",\"Species\":\"Cocoon Pokémon\",\"Speed\":\"15\",\"Total\":\"205\",\"Type\":[\"bug\"]},\"Castform\":{\"#\":\" 351\",\"Attack\":\"70\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"70\",\"Species\":\"Weather Pokémon\",\"Speed\":\"70\",\"Total\":\"420\",\"Type\":[\"Normal\"]},\"Caterpie\":{\"#\":\" 010\",\"Attack\":\"30\",\"Defense\":\"35\",\"FlavorText\":\"It crawls into foliage where it camouflages itself among leaves that are the same color as its body.\",\"HP\":\"45\",\"Sp. Atk\":\"20\",\"Sp. Def\":\"20\",\"Species\":\"Worm Pokémon\",\"Speed\":\"45\",\"Total\":\"195\",\"Type\":[\"bug\"]},\"Celebi\":{\"#\":\" 251\",\"Attack\":\"100\",\"Defense\":\"100\",\"FlavorText\":\"\",\"HP\":\"100\",\"Sp. Atk\":\"100\",\"Sp. Def\":\"100\",\"Species\":\"Time Travel Pokémon\",\"Speed\":\"100\",\"Total\":\"600\",\"Type\":[\"Psychic\",\"Grass\"]},\"Chandelure\":{\"#\":\" 609\",\"Attack\":\"55\",\"Defense\":\"90\",\"FlavorText\":\"The spirits burned up in its ominous flame lose their way and wander this world forever.\",\"HP\":\"60\",\"Sp. Atk\":\"145\",\"Sp. Def\":\"90\",\"Species\":\"Luring Pokémon\",\"Speed\":\"80\",\"Total\":\"520\",\"Type\":[\"Ghost\",\"Fire\"]},\"Chansey\":{\"#\":\" 113\",\"Attack\":\"5\",\"Defense\":\"5\",\"FlavorText\":\"\",\"HP\":\"250\",\"Sp. Atk\":\"35\",\"Sp. Def\":\"105\",\"Species\":\"Egg Pokémon\",\"Speed\":\"50\",\"Total\":\"450\",\"Type\":[\"Normal\"]},\"Charizard\":{\"#\":\" 006\",\"Attack\":\"84\",\"Defense\":\"78\",\"FlavorText\":\"\",\"HP\":\"78\",\"Sp. Atk\":\"109\",\"Sp. Def\":\"85\",\"Species\":\"Flame Pokémon\",\"Speed\":\"100\",\"Total\":\"534\",\"Type\":[\"Fire\",\"Flying\"]},\"Charizard ( Mega Charizard X )\":{\"#\":\" 006\",\"Attack\":\"130\",\"Defense\":\"111\",\"FlavorText\":\"\",\"HP\":\"78\",\"Sp. Atk\":\"130\",\"Sp. Def\":\"85\",\"Species\":\"\",\"Speed\":\"100\",\"Total\":\"634\",\"Type\":[\"Fire\",\"Dragon\"]},\"Charizard ( Mega Charizard Y )\":{\"#\":\" 006\",\"Attack\":\"104\",\"Defense\":\"78\",\"FlavorText\":\"\",\"HP\":\"78\",\"Sp. Atk\":\"159\",\"Sp. Def\":\"115\",\"Species\":\"\",\"Speed\":\"100\",\"Total\":\"634\",\"Type\":[\"Fire\",\"Flying\"]},\"Charmander\":{\"#\":\" 004\",\"Attack\":\"52\",\"Defense\":\"43\",\"FlavorText\":\"If it's healthy, the flame on the tip of its tail will burn vigorously, even if it gets a bit wet.\",\"HP\":\"39\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"50\",\"Species\":\"Lizard Pokémon\",\"Speed\":\"65\",\"Total\":\"309\",\"Type\":[\"Fire\"]},\"Charmeleon\":{\"#\":\" 005\",\"Attack\":\"64\",\"Defense\":\"58\",\"FlavorText\":\"If it becomes agitated during battle, it spouts intense flames, incinerating its surroundings.\",\"HP\":\"58\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"65\",\"Species\":\"Flame Pokémon\",\"Speed\":\"80\",\"Total\":\"405\",\"Type\":[\"Fire\"]},\"Chatot\":{\"#\":\" 441\",\"Attack\":\"65\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"76\",\"Sp. Atk\":\"92\",\"Sp. Def\":\"42\",\"Species\":\"Music Note Pokémon\",\"Speed\":\"91\",\"Total\":\"411\",\"Type\":[\"Normal\",\"Flying\"]},\"Cherrim\":{\"#\":\" 421\",\"Attack\":\"60\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"87\",\"Sp. Def\":\"78\",\"Species\":\"Blossom Pokémon\",\"Speed\":\"85\",\"Total\":\"450\",\"Type\":[\"Grass\"]},\"Cherubi\":{\"#\":\" 420\",\"Attack\":\"35\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"62\",\"Sp. Def\":\"53\",\"Species\":\"Cherry Pokémon\",\"Speed\":\"35\",\"Total\":\"275\",\"Type\":[\"Grass\"]},\"Chesnaught\":{\"#\":\" 652\",\"Attack\":\"107\",\"Defense\":\"122\",\"FlavorText\":\"\",\"HP\":\"88\",\"Sp. Atk\":\"74\",\"Sp. Def\":\"75\",\"Species\":\"Spiny Armor Pokémon\",\"Speed\":\"64\",\"Total\":\"530\",\"Type\":[\"Grass\",\"Fighting\"]},\"Chespin\":{\"#\":\" 650\",\"Attack\":\"61\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"56\",\"Sp. Atk\":\"48\",\"Sp. Def\":\"45\",\"Species\":\"Spiny Nut Pokémon\",\"Speed\":\"38\",\"Total\":\"313\",\"Type\":[\"Grass\"]},\"Chikorita\":{\"#\":\" 152\",\"Attack\":\"49\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"49\",\"Sp. Def\":\"65\",\"Species\":\"Leaf Pokémon\",\"Speed\":\"45\",\"Total\":\"318\",\"Type\":[\"Grass\"]},\"Chimchar\":{\"#\":\" 390\",\"Attack\":\"58\",\"Defense\":\"44\",\"FlavorText\":\"\",\"HP\":\"44\",\"Sp. Atk\":\"58\",\"Sp. Def\":\"44\",\"Species\":\"Chimp Pokémon\",\"Speed\":\"61\",\"Total\":\"309\",\"Type\":[\"Fire\"]},\"Chimecho\":{\"#\":\" 358\",\"Attack\":\"50\",\"Defense\":\"70\",\"FlavorText\":\"Its cries echo inside its hollow body to emerge as beautiful notes for startling and repelling foes.\",\"HP\":\"65\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"80\",\"Species\":\"Wind Chime Pokémon\",\"Speed\":\"65\",\"Total\":\"425\",\"Type\":[\"Psychic\"]},\"Chinchou\":{\"#\":\" 170\",\"Attack\":\"38\",\"Defense\":\"38\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"56\",\"Sp. Def\":\"56\",\"Species\":\"Angler Pokémon\",\"Speed\":\"67\",\"Total\":\"330\",\"Type\":[\"Water\",\"Electric\"]},\"Chingling\":{\"#\":\" 433\",\"Attack\":\"30\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"50\",\"Species\":\"Bell Pokémon\",\"Speed\":\"45\",\"Total\":\"285\",\"Type\":[\"Psychic\"]},\"Cinccino\":{\"#\":\" 573\",\"Attack\":\"95\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"60\",\"Species\":\"Scarf Pokémon\",\"Speed\":\"115\",\"Total\":\"470\",\"Type\":[\"Normal\"]},\"Clamperl\":{\"#\":\" 366\",\"Attack\":\"64\",\"Defense\":\"85\",\"FlavorText\":\"\",\"HP\":\"35\",\"Sp. Atk\":\"74\",\"Sp. Def\":\"55\",\"Species\":\"Bivalve Pokémon\",\"Speed\":\"32\",\"Total\":\"345\",\"Type\":[\"Water\"]},\"Clauncher\":{\"#\":\" 692\",\"Attack\":\"53\",\"Defense\":\"62\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"58\",\"Sp. Def\":\"63\",\"Species\":\"Water Gun Pokémon\",\"Speed\":\"44\",\"Total\":\"330\",\"Type\":[\"Water\"]},\"Clawitzer\":{\"#\":\" 693\",\"Attack\":\"73\",\"Defense\":\"88\",\"FlavorText\":\"\",\"HP\":\"71\",\"Sp. Atk\":\"120\",\"Sp. Def\":\"89\",\"Species\":\"Howitzer Pokémon\",\"Speed\":\"59\",\"Total\":\"500\",\"Type\":[\"Water\"]},\"Claydol\":{\"#\":\" 344\",\"Attack\":\"70\",\"Defense\":\"105\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"120\",\"Species\":\"Clay Doll Pokémon\",\"Speed\":\"75\",\"Total\":\"500\",\"Type\":[\"Ground\",\"Psychic\"]},\"Clefable\":{\"#\":\" 036\",\"Attack\":\"70\",\"Defense\":\"73\",\"FlavorText\":\"\",\"HP\":\"95\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"90\",\"Species\":\"Fairy Pokémon\",\"Speed\":\"60\",\"Total\":\"483\",\"Type\":[\"Fairy\"]},\"Clefairy\":{\"#\":\" 035\",\"Attack\":\"45\",\"Defense\":\"48\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"65\",\"Species\":\"Fairy Pokémon\",\"Speed\":\"35\",\"Total\":\"323\",\"Type\":[\"Fairy\"]},\"Cleffa\":{\"#\":\" 173\",\"Attack\":\"25\",\"Defense\":\"28\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"45\",\"Sp. Def\":\"55\",\"Species\":\"Star Shape Pokémon\",\"Speed\":\"15\",\"Total\":\"218\",\"Type\":[\"Fairy\"]},\"Cloyster\":{\"#\":\" 091\",\"Attack\":\"95\",\"Defense\":\"180\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"85\",\"Sp. Def\":\"45\",\"Species\":\"Bivalve Pokémon\",\"Speed\":\"70\",\"Total\":\"525\",\"Type\":[\"Water\",\"Ice\"]},\"Cobalion\":{\"#\":\" 638\",\"Attack\":\"90\",\"Defense\":\"129\",\"FlavorText\":\"\",\"HP\":\"91\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"72\",\"Species\":\"Iron Will Pokémon\",\"Speed\":\"108\",\"Total\":\"580\",\"Type\":[\"Steel\",\"Fighting\"]},\"Cofagrigus\":{\"#\":\" 563\",\"Attack\":\"50\",\"Defense\":\"145\",\"FlavorText\":\"\",\"HP\":\"58\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"105\",\"Species\":\"Coffin Pokémon\",\"Speed\":\"30\",\"Total\":\"483\",\"Type\":[\"Ghost\"]},\"Combee\":{\"#\":\" 415\",\"Attack\":\"30\",\"Defense\":\"42\",\"FlavorText\":\"\",\"HP\":\"30\",\"Sp. Atk\":\"30\",\"Sp. Def\":\"42\",\"Species\":\"Tiny Bee Pokémon\",\"Speed\":\"70\",\"Total\":\"244\",\"Type\":[\"bug\",\"Flying\"]},\"Combusken\":{\"#\":\" 256\",\"Attack\":\"85\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"85\",\"Sp. Def\":\"60\",\"Species\":\"Young Fowl Pokémon\",\"Speed\":\"55\",\"Total\":\"405\",\"Type\":[\"Fire\",\"Fighting\"]},\"Conkeldurr\":{\"#\":\" 534\",\"Attack\":\"140\",\"Defense\":\"95\",\"FlavorText\":\"Rather than rely on force, they master moves that utilize the centrifugal force of spinning concrete.\",\"HP\":\"105\",\"Sp. Atk\":\"55\",\"Sp. Def\":\"65\",\"Species\":\"Muscular Pokémon\",\"Speed\":\"45\",\"Total\":\"505\",\"Type\":[\"Fighting\"]},\"Corphish\":{\"#\":\" 341\",\"Attack\":\"80\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"43\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"35\",\"Species\":\"Ruffian Pokémon\",\"Speed\":\"35\",\"Total\":\"308\",\"Type\":[\"Water\"]},\"Corsola\":{\"#\":\" 222\",\"Attack\":\"55\",\"Defense\":\"85\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"85\",\"Species\":\"Coral Pokémon\",\"Speed\":\"35\",\"Total\":\"380\",\"Type\":[\"Water\",\"Rock\"]},\"Cottonee\":{\"#\":\" 546\",\"Attack\":\"27\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"40\",\"Sp. Atk\":\"37\",\"Sp. Def\":\"50\",\"Species\":\"Cotton Puff Pokémon\",\"Speed\":\"66\",\"Total\":\"280\",\"Type\":[\"Grass\",\"Fairy\"]},\"Cradily\":{\"#\":\" 346\",\"Attack\":\"81\",\"Defense\":\"97\",\"FlavorText\":\"\",\"HP\":\"86\",\"Sp. Atk\":\"81\",\"Sp. Def\":\"107\",\"Species\":\"Barnacle Pokémon\",\"Speed\":\"43\",\"Total\":\"495\",\"Type\":[\"Rock\",\"Grass\"]},\"Cranidos\":{\"#\":\" 408\",\"Attack\":\"125\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"67\",\"Sp. Atk\":\"30\",\"Sp. Def\":\"30\",\"Species\":\"Head Butt Pokémon\",\"Speed\":\"58\",\"Total\":\"350\",\"Type\":[\"Rock\"]},\"Crawdaunt\":{\"#\":\" 342\",\"Attack\":\"120\",\"Defense\":\"85\",\"FlavorText\":\"\",\"HP\":\"63\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"55\",\"Species\":\"Rogue Pokémon\",\"Speed\":\"55\",\"Total\":\"468\",\"Type\":[\"Water\",\"Dark\"]},\"Cresselia\":{\"#\":\" 488\",\"Attack\":\"70\",\"Defense\":\"120\",\"FlavorText\":\"\",\"HP\":\"120\",\"Sp. Atk\":\"75\",\"Sp. Def\":\"130\",\"Species\":\"Lunar Pokémon\",\"Speed\":\"85\",\"Total\":\"600\",\"Type\":[\"Psychic\"]},\"Croagunk\":{\"#\":\" 453\",\"Attack\":\"61\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"48\",\"Sp. Atk\":\"61\",\"Sp. Def\":\"40\",\"Species\":\"Toxic Mouth Pokémon\",\"Speed\":\"50\",\"Total\":\"300\",\"Type\":[\"Poison\",\"Fighting\"]},\"Crobat\":{\"#\":\" 169\",\"Attack\":\"90\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"85\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"80\",\"Species\":\"Bat Pokémon\",\"Speed\":\"130\",\"Total\":\"535\",\"Type\":[\"Poison\",\"Flying\"]},\"Croconaw\":{\"#\":\" 159\",\"Attack\":\"80\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"59\",\"Sp. Def\":\"63\",\"Species\":\"Big Jaw Pokémon\",\"Speed\":\"58\",\"Total\":\"405\",\"Type\":[\"Water\"]},\"Crustle\":{\"#\":\" 558\",\"Attack\":\"95\",\"Defense\":\"125\",\"FlavorText\":\"Competing for territory, Crustle fight viciously. The one whose boulder is broken is the loser of the battle.\",\"HP\":\"70\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"75\",\"Species\":\"Stone Home Pokémon\",\"Speed\":\"45\",\"Total\":\"475\",\"Type\":[\"bug\",\"Rock\"]},\"Cryogonal\":{\"#\":\" 615\",\"Attack\":\"50\",\"Defense\":\"30\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"135\",\"Species\":\"Crystallizing Pokémon\",\"Speed\":\"105\",\"Total\":\"485\",\"Type\":[\"Ice\"]},\"Cubchoo\":{\"#\":\" 613\",\"Attack\":\"70\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"40\",\"Species\":\"Chill Pokémon\",\"Speed\":\"40\",\"Total\":\"305\",\"Type\":[\"Ice\"]},\"Cubone\":{\"#\":\" 104\",\"Attack\":\"50\",\"Defense\":\"95\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"50\",\"Species\":\"Lonely Pokémon\",\"Speed\":\"35\",\"Total\":\"320\",\"Type\":[\"Ground\"]},\"Cyndaquil\":{\"#\":\" 155\",\"Attack\":\"52\",\"Defense\":\"43\",\"FlavorText\":\"\",\"HP\":\"39\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"50\",\"Species\":\"Fire Mouse Pokémon\",\"Speed\":\"65\",\"Total\":\"309\",\"Type\":[\"Fire\"]},\"Darkrai\":{\"#\":\" 491\",\"Attack\":\"90\",\"Defense\":\"90\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"135\",\"Sp. Def\":\"90\",\"Species\":\"Pitch-Black Pokémon\",\"Speed\":\"125\",\"Total\":\"600\",\"Type\":[\"Dark\"]},\"Darmanitan ( Standard Mode )\":{\"#\":\" 555\",\"Attack\":\"140\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"105\",\"Sp. Atk\":\"30\",\"Sp. Def\":\"55\",\"Species\":\"\",\"Speed\":\"95\",\"Total\":\"480\",\"Type\":[\"Fire\"]},\"Darmanitan ( Zen Mode )\":{\"#\":\" 555\",\"Attack\":\"30\",\"Defense\":\"105\",\"FlavorText\":\"\",\"HP\":\"105\",\"Sp. Atk\":\"140\",\"Sp. Def\":\"105\",\"Species\":\"\",\"Speed\":\"55\",\"Total\":\"540\",\"Type\":[\"Fire\",\"Psychic\"]},\"Darumaka\":{\"#\":\" 554\",\"Attack\":\"90\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"15\",\"Sp. Def\":\"45\",\"Species\":\"Zen Charm Pokémon\",\"Speed\":\"50\",\"Total\":\"315\",\"Type\":[\"Fire\"]},\"Dedenne\":{\"#\":\" 702\",\"Attack\":\"58\",\"Defense\":\"57\",\"FlavorText\":\"\",\"HP\":\"67\",\"Sp. Atk\":\"81\",\"Sp. Def\":\"67\",\"Species\":\"Antenna Pokémon\",\"Speed\":\"101\",\"Total\":\"431\",\"Type\":[\"Electric\",\"Fairy\"]},\"Deerling\":{\"#\":\" 585\",\"Attack\":\"60\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"50\",\"Species\":\"Season Pokémon\",\"Speed\":\"75\",\"Total\":\"335\",\"Type\":[\"Normal\",\"Grass\"]},\"Deino\":{\"#\":\" 633\",\"Attack\":\"65\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"52\",\"Sp. Atk\":\"45\",\"Sp. Def\":\"50\",\"Species\":\"Irate Pokémon\",\"Speed\":\"38\",\"Total\":\"300\",\"Type\":[\"Dark\",\"Dragon\"]},\"Delcatty\":{\"#\":\" 301\",\"Attack\":\"65\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"55\",\"Sp. Def\":\"55\",\"Species\":\"Prim Pokémon\",\"Speed\":\"70\",\"Total\":\"380\",\"Type\":[\"Normal\"]},\"Delibird\":{\"#\":\" 225\",\"Attack\":\"55\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"45\",\"Species\":\"Delivery Pokémon\",\"Speed\":\"75\",\"Total\":\"330\",\"Type\":[\"Ice\",\"Flying\"]},\"Delphox\":{\"#\":\" 655\",\"Attack\":\"69\",\"Defense\":\"72\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"114\",\"Sp. Def\":\"100\",\"Species\":\"Fox Pokémon\",\"Speed\":\"104\",\"Total\":\"534\",\"Type\":[\"Fire\",\"Psychic\"]},\"Deoxys ( Attack Forme )\":{\"#\":\" 386\",\"Attack\":\"180\",\"Defense\":\"20\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"180\",\"Sp. Def\":\"20\",\"Species\":\"\",\"Speed\":\"150\",\"Total\":\"600\",\"Type\":[\"Psychic\"]},\"Deoxys ( Defense Forme )\":{\"#\":\" 386\",\"Attack\":\"70\",\"Defense\":\"160\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"160\",\"Species\":\"\",\"Speed\":\"90\",\"Total\":\"600\",\"Type\":[\"Psychic\"]},\"Deoxys ( Normal Forme )\":{\"#\":\" 386\",\"Attack\":\"150\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"150\",\"Sp. Def\":\"50\",\"Species\":\"\",\"Speed\":\"150\",\"Total\":\"600\",\"Type\":[\"Psychic\"]},\"Deoxys ( Speed Forme )\":{\"#\":\" 386\",\"Attack\":\"95\",\"Defense\":\"90\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"90\",\"Species\":\"\",\"Speed\":\"180\",\"Total\":\"600\",\"Type\":[\"Psychic\"]},\"Dewgong\":{\"#\":\" 087\",\"Attack\":\"70\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"95\",\"Species\":\"Sea Lion Pokémon\",\"Speed\":\"70\",\"Total\":\"475\",\"Type\":[\"Water\",\"Ice\"]},\"Dewott\":{\"#\":\" 502\",\"Attack\":\"75\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"83\",\"Sp. Def\":\"60\",\"Species\":\"Discipline Pokémon\",\"Speed\":\"60\",\"Total\":\"413\",\"Type\":[\"Water\"]},\"Dialga\":{\"#\":\" 483\",\"Attack\":\"120\",\"Defense\":\"120\",\"FlavorText\":\"\",\"HP\":\"100\",\"Sp. Atk\":\"150\",\"Sp. Def\":\"100\",\"Species\":\"Temporal Pokémon\",\"Speed\":\"90\",\"Total\":\"680\",\"Type\":[\"Steel\",\"Dragon\"]},\"Diancie\":{\"#\":\" 719\",\"Attack\":\"100\",\"Defense\":\"150\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"100\",\"Sp. Def\":\"150\",\"Species\":\"Jewel Pokémon\",\"Speed\":\"50\",\"Total\":\"600\",\"Type\":[\"Rock\",\"Fairy\"]},\"Diancie ( Mega Diancie )\":{\"#\":\" 719\",\"Attack\":\"160\",\"Defense\":\"110\",\"FlavorText\":\"\",\"HP\":\"50\",\"Sp. Atk\":\"160\",\"Sp. Def\":\"110\",\"Species\":\"\",\"Speed\":\"110\",\"Total\":\"700\",\"Type\":[\"Rock\",\"Fairy\"]},\"Diggersby\":{\"#\":\" 660\",\"Attack\":\"56\",\"Defense\":\"77\",\"FlavorText\":\"\",\"HP\":\"85\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"77\",\"Species\":\"Digging Pokémon\",\"Speed\":\"78\",\"Total\":\"423\",\"Type\":[\"Normal\",\"Ground\"]},\"Diglett\":{\"#\":\" 050\",\"Attack\":\"55\",\"Defense\":\"25\",\"FlavorText\":\"\",\"HP\":\"10\",\"Sp. Atk\":\"35\",\"Sp. Def\":\"45\",\"Species\":\"Mole Pokémon\",\"Speed\":\"95\",\"Total\":\"265\",\"Type\":[\"Ground\"]},\"Ditto\":{\"#\":\" 132\",\"Attack\":\"48\",\"Defense\":\"48\",\"FlavorText\":\"\",\"HP\":\"48\",\"Sp. Atk\":\"48\",\"Sp. Def\":\"48\",\"Species\":\"Transform Pokémon\",\"Speed\":\"48\",\"Total\":\"288\",\"Type\":[\"Normal\"]},\"Dodrio\":{\"#\":\" 085\",\"Attack\":\"110\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"60\",\"Species\":\"Triple Bird Pokémon\",\"Speed\":\"100\",\"Total\":\"460\",\"Type\":[\"Normal\",\"Flying\"]},\"Doduo\":{\"#\":\" 084\",\"Attack\":\"85\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"35\",\"Sp. Atk\":\"35\",\"Sp. Def\":\"35\",\"Species\":\"Twin Bird Pokémon\",\"Speed\":\"75\",\"Total\":\"310\",\"Type\":[\"Normal\",\"Flying\"]},\"Donphan\":{\"#\":\" 232\",\"Attack\":\"120\",\"Defense\":\"120\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"60\",\"Species\":\"Armor Pokémon\",\"Speed\":\"50\",\"Total\":\"500\",\"Type\":[\"Ground\"]},\"Doublade\":{\"#\":\" 680\",\"Attack\":\"110\",\"Defense\":\"150\",\"FlavorText\":\"\",\"HP\":\"59\",\"Sp. Atk\":\"45\",\"Sp. Def\":\"49\",\"Species\":\"Sword Pokémon\",\"Speed\":\"35\",\"Total\":\"448\",\"Type\":[\"Steel\",\"Ghost\"]},\"Dragalge\":{\"#\":\" 691\",\"Attack\":\"75\",\"Defense\":\"90\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"97\",\"Sp. Def\":\"123\",\"Species\":\"Mock Kelp Pokémon\",\"Speed\":\"44\",\"Total\":\"494\",\"Type\":[\"Poison\",\"Dragon\"]},\"Dragonair\":{\"#\":\" 148\",\"Attack\":\"84\",\"Defense\":\"65\",\"FlavorText\":\"It is called the divine POKéMON. When its entire body brightens slightly, the weather changes.\",\"HP\":\"61\",\"Sp. Atk\":\"70\",\"Sp. Def\":\"70\",\"Species\":\"Dragon Pokémon\",\"Speed\":\"70\",\"Total\":\"420\",\"Type\":[\"Dragon\"]},\"Dragonite\":{\"#\":\" 149\",\"Attack\":\"134\",\"Defense\":\"95\",\"FlavorText\":\"It is said that somewhere in the ocean lies an island where these gather. Only they live there.\",\"HP\":\"91\",\"Sp. Atk\":\"100\",\"Sp. Def\":\"100\",\"Species\":\"Dragon Pokémon\",\"Speed\":\"80\",\"Total\":\"600\",\"Type\":[\"Dragon\",\"Flying\"]},\"Drapion\":{\"#\":\" 452\",\"Attack\":\"90\",\"Defense\":\"110\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"75\",\"Species\":\"Ogre Scorp Pokémon\",\"Speed\":\"95\",\"Total\":\"500\",\"Type\":[\"Poison\",\"Dark\"]},\"Dratini\":{\"#\":\" 147\",\"Attack\":\"64\",\"Defense\":\"45\",\"FlavorText\":\"It sheds many layers of skin as it grows larger. During this process, it is protected by a rapid waterfall.\",\"HP\":\"41\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"50\",\"Species\":\"Dragon Pokémon\",\"Speed\":\"50\",\"Total\":\"300\",\"Type\":[\"Dragon\"]},\"Drifblim\":{\"#\":\" 426\",\"Attack\":\"80\",\"Defense\":\"44\",\"FlavorText\":\"\",\"HP\":\"150\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"54\",\"Species\":\"Blimp Pokémon\",\"Speed\":\"80\",\"Total\":\"498\",\"Type\":[\"Ghost\",\"Flying\"]},\"Drifloon\":{\"#\":\" 425\",\"Attack\":\"50\",\"Defense\":\"34\",\"FlavorText\":\"\",\"HP\":\"90\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"44\",\"Species\":\"Balloon Pokémon\",\"Speed\":\"70\",\"Total\":\"348\",\"Type\":[\"Ghost\",\"Flying\"]},\"Drilbur\":{\"#\":\" 529\",\"Attack\":\"85\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"30\",\"Sp. Def\":\"45\",\"Species\":\"Mole Pokémon\",\"Speed\":\"68\",\"Total\":\"328\",\"Type\":[\"Ground\"]},\"Drowzee\":{\"#\":\" 096\",\"Attack\":\"48\",\"Defense\":\"45\",\"FlavorText\":\"When it twitches its nose, it can tell where someone is sleeping and what that person is dreaming about.\",\"HP\":\"60\",\"Sp. Atk\":\"43\",\"Sp. Def\":\"90\",\"Species\":\"Hypnosis Pokémon\",\"Speed\":\"42\",\"Total\":\"328\",\"Type\":[\"Psychic\"]},\"Druddigon\":{\"#\":\" 621\",\"Attack\":\"120\",\"Defense\":\"90\",\"FlavorText\":\"It warms its body by absorbing sunlight with its wings. When its body temperature falls, it can no longer move.\",\"HP\":\"77\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"90\",\"Species\":\"Cave Pokémon\",\"Speed\":\"48\",\"Total\":\"485\",\"Type\":[\"Dragon\"]},\"Ducklett\":{\"#\":\" 580\",\"Attack\":\"44\",\"Defense\":\"50\",\"FlavorText\":\"They are better at swimming than flying, and they happily eat their favorite food, peat moss, as they dive underwater.\",\"HP\":\"62\",\"Sp. Atk\":\"44\",\"Sp. Def\":\"50\",\"Species\":\"Water Bird Pokémon\",\"Speed\":\"55\",\"Total\":\"305\",\"Type\":[\"Water\",\"Flying\"]},\"Dugtrio\":{\"#\":\" 051\",\"Attack\":\"80\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"35\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"70\",\"Species\":\"Mole Pokémon\",\"Speed\":\"120\",\"Total\":\"405\",\"Type\":[\"Ground\"]},\"Dunsparce\":{\"#\":\" 206\",\"Attack\":\"70\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"100\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"65\",\"Species\":\"Land Snake Pokémon\",\"Speed\":\"45\",\"Total\":\"415\",\"Type\":[\"Normal\"]},\"Duosion\":{\"#\":\" 578\",\"Attack\":\"40\",\"Defense\":\"50\",\"FlavorText\":\"When their two divided brains think the same thoughts, their psychic power is maximized.\",\"HP\":\"65\",\"Sp. Atk\":\"125\",\"Sp. Def\":\"60\",\"Species\":\"Mitosis Pokémon\",\"Speed\":\"30\",\"Total\":\"370\",\"Type\":[\"Psychic\"]},\"Durant\":{\"#\":\" 632\",\"Attack\":\"109\",\"Defense\":\"112\",\"FlavorText\":\"They attack in groups, covering themselves in steel armor to protect themselves from Heatmor.\",\"HP\":\"58\",\"Sp. Atk\":\"48\",\"Sp. Def\":\"48\",\"Species\":\"Iron Ant Pokémon\",\"Speed\":\"109\",\"Total\":\"484\",\"Type\":[\"bug\",\"Steel\"]},\"Dusclops\":{\"#\":\" 356\",\"Attack\":\"70\",\"Defense\":\"130\",\"FlavorText\":\"\",\"HP\":\"40\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"130\",\"Species\":\"Beckon Pokémon\",\"Speed\":\"25\",\"Total\":\"455\",\"Type\":[\"Ghost\"]},\"Dusknoir\":{\"#\":\" 477\",\"Attack\":\"100\",\"Defense\":\"135\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"135\",\"Species\":\"Gripper Pokémon\",\"Speed\":\"45\",\"Total\":\"525\",\"Type\":[\"Ghost\"]},\"Duskull\":{\"#\":\" 355\",\"Attack\":\"40\",\"Defense\":\"90\",\"FlavorText\":\"\",\"HP\":\"20\",\"Sp. Atk\":\"30\",\"Sp. Def\":\"90\",\"Species\":\"Requiem Pokémon\",\"Speed\":\"25\",\"Total\":\"295\",\"Type\":[\"Ghost\"]},\"Dustox\":{\"#\":\" 269\",\"Attack\":\"50\",\"Defense\":\"70\",\"FlavorText\":\"Toxic powder is scattered with each flap. At night, it is known to strip leaves off trees lining boulevards.\",\"HP\":\"60\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"90\",\"Species\":\"Poison Moth Pokémon\",\"Speed\":\"65\",\"Total\":\"385\",\"Type\":[\"bug\",\"Poison\"]},\"Dwebble\":{\"#\":\" 557\",\"Attack\":\"65\",\"Defense\":\"85\",\"FlavorText\":\"When it finds a stone of a suitable size, it secretes a liquid from its mouth to open up a hole to crawl into.\",\"HP\":\"50\",\"Sp. Atk\":\"35\",\"Sp. Def\":\"35\",\"Species\":\"Rock Inn Pokémon\",\"Speed\":\"55\",\"Total\":\"325\",\"Type\":[\"bug\",\"Rock\"]},\"Eelektrik\":{\"#\":\" 603\",\"Attack\":\"85\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"75\",\"Sp. Def\":\"70\",\"Species\":\"EleFish Pokémon\",\"Speed\":\"40\",\"Total\":\"405\",\"Type\":[\"Electric\"]},\"Eelektross\":{\"#\":\" 604\",\"Attack\":\"115\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"85\",\"Sp. Atk\":\"105\",\"Sp. Def\":\"80\",\"Species\":\"EleFish Pokémon\",\"Speed\":\"50\",\"Total\":\"515\",\"Type\":[\"Electric\"]},\"Eevee\":{\"#\":\" 133\",\"Attack\":\"55\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"45\",\"Sp. Def\":\"65\",\"Species\":\"Evolution Pokémon\",\"Speed\":\"55\",\"Total\":\"325\",\"Type\":[\"Normal\"]},\"Ekans\":{\"#\":\" 023\",\"Attack\":\"60\",\"Defense\":\"44\",\"FlavorText\":\"\",\"HP\":\"35\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"54\",\"Species\":\"Snake Pokémon\",\"Speed\":\"55\",\"Total\":\"288\",\"Type\":[\"Poison\"]},\"Electabuzz\":{\"#\":\" 125\",\"Attack\":\"83\",\"Defense\":\"57\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"85\",\"Species\":\"Electric Pokémon\",\"Speed\":\"105\",\"Total\":\"490\",\"Type\":[\"Electric\"]},\"Electivire\":{\"#\":\" 466\",\"Attack\":\"123\",\"Defense\":\"67\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"85\",\"Species\":\"Thunderbolt Pokémon\",\"Speed\":\"95\",\"Total\":\"540\",\"Type\":[\"Electric\"]},\"Electrike\":{\"#\":\" 309\",\"Attack\":\"45\",\"Defense\":\"40\",\"FlavorText\":\"It generates electricity using friction from the atmosphere. In seasons with especially arid air, its entire body blazes with violent showers of sparks.\",\"HP\":\"40\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"40\",\"Species\":\"Lightning Pokémon\",\"Speed\":\"65\",\"Total\":\"295\",\"Type\":[\"Electric\"]},\"Electrode\":{\"#\":\" 101\",\"Attack\":\"50\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"60\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"80\",\"Species\":\"Ball Pokémon\",\"Speed\":\"140\",\"Total\":\"480\",\"Type\":[\"Electric\"]},\"Elekid\":{\"#\":\" 239\",\"Attack\":\"63\",\"Defense\":\"37\",\"FlavorText\":\"If it touches metal and discharges the electricity it has stored in its body, an ELEKID begins swinging its arms in circles to recharge itself.\",\"HP\":\"45\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"55\",\"Species\":\"Electric Pokémon\",\"Speed\":\"95\",\"Total\":\"360\",\"Type\":[\"Electric\"]},\"Elgyem\":{\"#\":\" 605\",\"Attack\":\"55\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"85\",\"Sp. Def\":\"55\",\"Species\":\"Cerebral Pokémon\",\"Speed\":\"30\",\"Total\":\"335\",\"Type\":[\"Psychic\"]},\"Emboar\":{\"#\":\" 500\",\"Attack\":\"123\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"110\",\"Sp. Atk\":\"100\",\"Sp. Def\":\"65\",\"Species\":\"Mega Fire Pig Pokémon\",\"Speed\":\"65\",\"Total\":\"528\",\"Type\":[\"Fire\",\"Fighting\"]},\"Emolga\":{\"#\":\" 587\",\"Attack\":\"75\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"75\",\"Sp. Def\":\"60\",\"Species\":\"Sky Squirrel Pokémon\",\"Speed\":\"103\",\"Total\":\"428\",\"Type\":[\"Electric\",\"Flying\"]},\"Empoleon\":{\"#\":\" 395\",\"Attack\":\"86\",\"Defense\":\"88\",\"FlavorText\":\"\",\"HP\":\"84\",\"Sp. Atk\":\"111\",\"Sp. Def\":\"101\",\"Species\":\"Emperor Pokémon\",\"Speed\":\"60\",\"Total\":\"530\",\"Type\":[\"Water\",\"Steel\"]},\"Entei\":{\"#\":\" 244\",\"Attack\":\"115\",\"Defense\":\"85\",\"FlavorText\":\"\",\"HP\":\"115\",\"Sp. Atk\":\"90\",\"Sp. Def\":\"75\",\"Species\":\"Volcano Pokémon\",\"Speed\":\"100\",\"Total\":\"580\",\"Type\":[\"Fire\"]},\"Escavalier\":{\"#\":\" 589\",\"Attack\":\"135\",\"Defense\":\"105\",\"FlavorText\":\"These Pokémon evolve by wearing the shell covering of a Shelmet. The steel armor protects their whole body.\",\"HP\":\"70\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"105\",\"Species\":\"Cavalry Pokémon\",\"Speed\":\"20\",\"Total\":\"495\",\"Type\":[\"bug\",\"Steel\"]},\"Espeon\":{\"#\":\" 196\",\"Attack\":\"65\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"130\",\"Sp. Def\":\"95\",\"Species\":\"Sun Pokémon\",\"Speed\":\"110\",\"Total\":\"525\",\"Type\":[\"Psychic\"]},\"Espurr\":{\"#\":\" 677\",\"Attack\":\"48\",\"Defense\":\"54\",\"FlavorText\":\"\",\"HP\":\"62\",\"Sp. Atk\":\"63\",\"Sp. Def\":\"60\",\"Species\":\"Restraint Pokémon\",\"Speed\":\"68\",\"Total\":\"355\",\"Type\":[\"Psychic\"]},\"Excadrill\":{\"#\":\" 530\",\"Attack\":\"135\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"110\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"65\",\"Species\":\"Subterrene Pokémon\",\"Speed\":\"88\",\"Total\":\"508\",\"Type\":[\"Ground\",\"Steel\"]},\"Exeggcute\":{\"#\":\" 102\",\"Attack\":\"40\",\"Defense\":\"80\",\"FlavorText\":\"If even one is separated from the group, the energy bond between the six will make them rejoin instantly.\",\"HP\":\"60\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"45\",\"Species\":\"Egg Pokémon\",\"Speed\":\"40\",\"Total\":\"325\",\"Type\":[\"Grass\",\"Psychic\"]},\"Exeggutor\":{\"#\":\" 103\",\"Attack\":\"95\",\"Defense\":\"85\",\"FlavorText\":\"Living in a good environment makes it grow lots of heads. A head that drops off becomes an EXEGGCUTE.\",\"HP\":\"95\",\"Sp. Atk\":\"125\",\"Sp. Def\":\"65\",\"Species\":\"Coconut Pokémon\",\"Speed\":\"55\",\"Total\":\"520\",\"Type\":[\"Grass\",\"Psychic\"]},\"Exploud\":{\"#\":\" 295\",\"Attack\":\"91\",\"Defense\":\"63\",\"FlavorText\":\"\",\"HP\":\"104\",\"Sp. Atk\":\"91\",\"Sp. Def\":\"73\",\"Species\":\"Loud Noise Pokémon\",\"Speed\":\"68\",\"Total\":\"490\",\"Type\":[\"Normal\"]},\"Farfetch'd\":{\"#\":\" 083\",\"Attack\":\"65\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"52\",\"Sp. Atk\":\"58\",\"Sp. Def\":\"62\",\"Species\":\"\",\"Speed\":\"60\",\"Total\":\"352\",\"Type\":[\"Normal\",\"Flying\"]},\"Fearow\":{\"#\":\" 022\",\"Attack\":\"90\",\"Defense\":\"65\",\"FlavorText\":\"It uses its long beak to attack. It has a surprisingly long reach, so it must be treated with caution.\",\"HP\":\"65\",\"Sp. Atk\":\"61\",\"Sp. Def\":\"61\",\"Species\":\"Beak Pokémon\",\"Speed\":\"100\",\"Total\":\"442\",\"Type\":[\"Normal\",\"Flying\"]},\"Feebas\":{\"#\":\" 349\",\"Attack\":\"15\",\"Defense\":\"20\",\"FlavorText\":\"\",\"HP\":\"20\",\"Sp. Atk\":\"10\",\"Sp. Def\":\"55\",\"Species\":\"Fish Pokémon\",\"Speed\":\"80\",\"Total\":\"200\",\"Type\":[\"Water\"]},\"Fennekin\":{\"#\":\" 653\",\"Attack\":\"45\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"40\",\"Sp. Atk\":\"62\",\"Sp. Def\":\"60\",\"Species\":\"Fox Pokémon\",\"Speed\":\"60\",\"Total\":\"307\",\"Type\":[\"Fire\"]},\"Feraligatr\":{\"#\":\" 160\",\"Attack\":\"105\",\"Defense\":\"100\",\"FlavorText\":\"\",\"HP\":\"85\",\"Sp. Atk\":\"79\",\"Sp. Def\":\"83\",\"Species\":\"Big Jaw Pokémon\",\"Speed\":\"78\",\"Total\":\"530\",\"Type\":[\"Water\"]},\"Ferroseed\":{\"#\":\" 597\",\"Attack\":\"50\",\"Defense\":\"91\",\"FlavorText\":\"\",\"HP\":\"44\",\"Sp. Atk\":\"24\",\"Sp. Def\":\"86\",\"Species\":\"Thorn Seed Pokémon\",\"Speed\":\"10\",\"Total\":\"305\",\"Type\":[\"Grass\",\"Steel\"]},\"Ferrothorn\":{\"#\":\" 598\",\"Attack\":\"94\",\"Defense\":\"131\",\"FlavorText\":\"\",\"HP\":\"74\",\"Sp. Atk\":\"54\",\"Sp. Def\":\"116\",\"Species\":\"Thorn Pod Pokémon\",\"Speed\":\"20\",\"Total\":\"489\",\"Type\":[\"Grass\",\"Steel\"]},\"Finneon\":{\"#\":\" 456\",\"Attack\":\"49\",\"Defense\":\"56\",\"FlavorText\":\"\",\"HP\":\"49\",\"Sp. Atk\":\"49\",\"Sp. Def\":\"61\",\"Species\":\"Wing Fish Pokémon\",\"Speed\":\"66\",\"Total\":\"330\",\"Type\":[\"Water\"]},\"Flaaffy\":{\"#\":\" 180\",\"Attack\":\"55\",\"Defense\":\"55\",\"FlavorText\":\"Its fleece quality changes to generate strong static electricity with a small amount of wool. The bare, slick parts of its hide are shielded against electricity.\",\"HP\":\"70\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"60\",\"Species\":\"Wool Pokémon\",\"Speed\":\"45\",\"Total\":\"365\",\"Type\":[\"Electric\"]},\"Flabébé\":{\"#\":\" 669\",\"Attack\":\"38\",\"Defense\":\"39\",\"FlavorText\":\"\",\"HP\":\"44\",\"Sp. Atk\":\"61\",\"Sp. Def\":\"79\",\"Species\":\"\",\"Speed\":\"42\",\"Total\":\"303\",\"Type\":[\"Fairy\"]},\"Flareon\":{\"#\":\" 136\",\"Attack\":\"130\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"65\",\"Sp. Atk\":\"95\",\"Sp. Def\":\"110\",\"Species\":\"Flame Pokémon\",\"Speed\":\"65\",\"Total\":\"525\",\"Type\":[\"Fire\"]},\"Fletchinder\":{\"#\":\" 662\",\"Attack\":\"73\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"62\",\"Sp. Atk\":\"56\",\"Sp. Def\":\"52\",\"Species\":\"Ember Pokémon\",\"Speed\":\"84\",\"Total\":\"382\",\"Type\":[\"Fire\",\"Flying\"]},\"Fletchling\":{\"#\":\" 661\",\"Attack\":\"50\",\"Defense\":\"43\",\"FlavorText\":\"\",\"HP\":\"45\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"38\",\"Species\":\"Tiny Robin Pokémon\",\"Speed\":\"62\",\"Total\":\"278\",\"Type\":[\"Normal\",\"Flying\"]},\"Floatzel\":{\"#\":\" 419\",\"Attack\":\"105\",\"Defense\":\"55\",\"FlavorText\":\"\",\"HP\":\"85\",\"Sp. Atk\":\"85\",\"Sp. Def\":\"50\",\"Species\":\"Sea Weasel Pokémon\",\"Speed\":\"115\",\"Total\":\"495\",\"Type\":[\"Water\"]},\"Floette\":{\"#\":\" 670\",\"Attack\":\"45\",\"Defense\":\"47\",\"FlavorText\":\"\",\"HP\":\"54\",\"Sp. Atk\":\"75\",\"Sp. Def\":\"98\",\"Species\":\"Single Bloom Pokémon\",\"Speed\":\"52\",\"Total\":\"371\",\"Type\":[\"Fairy\"]},\"Florges\":{\"#\":\" 671\",\"Attack\":\"65\",\"Defense\":\"68\",\"FlavorText\":\"\",\"HP\":\"78\",\"Sp. Atk\":\"112\",\"Sp. Def\":\"154\",\"Species\":\"Garden Pokémon\",\"Speed\":\"75\",\"Total\":\"552\",\"Type\":[\"Fairy\"]},\"Flygon\":{\"#\":\" 330\",\"Attack\":\"100\",\"Defense\":\"80\",\"FlavorText\":\"\",\"HP\":\"80\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"80\",\"Species\":\"Mystic Pokémon\",\"Speed\":\"100\",\"Total\":\"520\",\"Type\":[\"Ground\",\"Dragon\"]},\"Foongus\":{\"#\":\" 590\",\"Attack\":\"55\",\"Defense\":\"45\",\"FlavorText\":\"\",\"HP\":\"69\",\"Sp. Atk\":\"55\",\"Sp. Def\":\"55\",\"Species\":\"Mushroom Pokémon\",\"Speed\":\"15\",\"Total\":\"294\",\"Type\":[\"Grass\",\"Poison\"]},\"Forretress\":{\"#\":\" 205\",\"Attack\":\"90\",\"Defense\":\"140\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"60\",\"Species\":\"Bagworm Pokémon\",\"Speed\":\"40\",\"Total\":\"465\",\"Type\":[\"bug\",\"Steel\"]},\"Fraxure\":{\"#\":\" 611\",\"Attack\":\"117\",\"Defense\":\"70\",\"FlavorText\":\"A broken tusk will not grow back, so it diligently sharpens its tusks on river rocks after the end of a battle.\",\"HP\":\"66\",\"Sp. Atk\":\"40\",\"Sp. Def\":\"50\",\"Species\":\"Axe Jaw Pokémon\",\"Speed\":\"67\",\"Total\":\"410\",\"Type\":[\"Dragon\"]},\"Frillish\":{\"#\":\" 592\",\"Attack\":\"40\",\"Defense\":\"50\",\"FlavorText\":\"\",\"HP\":\"55\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"85\",\"Species\":\"Floating Pokémon\",\"Speed\":\"40\",\"Total\":\"335\",\"Type\":[\"Water\",\"Ghost\"]},\"Froakie\":{\"#\":\" 656\",\"Attack\":\"56\",\"Defense\":\"40\",\"FlavorText\":\"\",\"HP\":\"41\",\"Sp. Atk\":\"62\",\"Sp. Def\":\"44\",\"Species\":\"Bubble Frog Pokémon\",\"Speed\":\"71\",\"Total\":\"314\",\"Type\":[\"Water\"]},\"Frogadier\":{\"#\":\" 657\",\"Attack\":\"63\",\"Defense\":\"52\",\"FlavorText\":\"\",\"HP\":\"54\",\"Sp. Atk\":\"83\",\"Sp. Def\":\"56\",\"Species\":\"Bubble Frog Pokémon\",\"Speed\":\"97\",\"Total\":\"405\",\"Type\":[\"Water\"]},\"Froslass\":{\"#\":\" 478\",\"Attack\":\"80\",\"Defense\":\"70\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"70\",\"Species\":\"Snow Land Pokémon\",\"Speed\":\"110\",\"Total\":\"480\",\"Type\":[\"Ice\",\"Ghost\"]},\"Furfrou\":{\"#\":\" 676\",\"Attack\":\"80\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"75\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"90\",\"Species\":\"Poodle Pokémon\",\"Speed\":\"102\",\"Total\":\"472\",\"Type\":[\"Normal\"]},\"Furret\":{\"#\":\" 162\",\"Attack\":\"76\",\"Defense\":\"64\",\"FlavorText\":\"A FURRET has a very slim build. When under attack, it can squirm through narrow spaces and get away. In spite of its short limbs, it is very nimble and fleet.\",\"HP\":\"85\",\"Sp. Atk\":\"45\",\"Sp. Def\":\"55\",\"Species\":\"Long Body Pokémon\",\"Speed\":\"90\",\"Total\":\"415\",\"Type\":[\"Normal\"]},\"Gabite\":{\"#\":\" 444\",\"Attack\":\"90\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"68\",\"Sp. Atk\":\"50\",\"Sp. Def\":\"55\",\"Species\":\"Cave Pokémon\",\"Speed\":\"82\",\"Total\":\"410\",\"Type\":[\"Dragon\",\"Ground\"]},\"Gallade\":{\"#\":\" 475\",\"Attack\":\"125\",\"Defense\":\"65\",\"FlavorText\":\"\",\"HP\":\"68\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"115\",\"Species\":\"Blade Pokémon\",\"Speed\":\"80\",\"Total\":\"518\",\"Type\":[\"Psychic\",\"Fighting\"]},\"Gallade ( Mega Gallade )\":{\"#\":\" 475\",\"Attack\":\"165\",\"Defense\":\"95\",\"FlavorText\":\"\",\"HP\":\"68\",\"Sp. Atk\":\"65\",\"Sp. Def\":\"115\",\"Species\":\"\",\"Speed\":\"110\",\"Total\":\"618\",\"Type\":[\"Psychic\",\"Fighting\"]},\"Galvantula\":{\"#\":\" 596\",\"Attack\":\"77\",\"Defense\":\"60\",\"FlavorText\":\"\",\"HP\":\"70\",\"Sp. Atk\":\"97\",\"Sp. Def\":\"60\",\"Species\":\"EleSpider Pokémon\",\"Speed\":\"108\",\"Total\":\"472\",\"Type\":[\"bug\",\"Electric\"]},\"Garbodor\":{\"#\":\" 569\",\"Attack\":\"95\",\"Defense\":\"82\",\"FlavorText\":\"Consuming garbage makes new kinds of poison gases and liquids inside their bodies.\",\"HP\":\"80\",\"Sp. Atk\":\"60\",\"Sp. Def\":\"82\",\"Species\":\"Trash Heap Pokémon\",\"Speed\":\"75\",\"Total\":\"474\",\"Type\":[\"Poison\"]},\"Garchomp\":{\"#\":\" 445\",\"Attack\":\"130\",\"Defense\":\"95\",\"FlavorText\":\"\",\"HP\":\"108\",\"Sp. Atk\":\"80\",\"Sp. Def\":\"85\",\"Species\":\"Mach Pokémon\",\"Speed\":\"102\",\"Total\":\"600\",\"Type\":[\"Dragon\",\"Ground\"]},\"Garchomp ( Mega Garchomp )\":{\"#\":\" 445\",\"Attack\":\"170\",\"Defense\":\"115\",\"FlavorText\":\"\",\"HP\":\"108\",\"Sp. Atk\":\"120\",\"Sp. Def\":\"95\",\"Species\":\"\",\"Speed\":\"92\",\"Total\":\"700\",\"Type\":[\"Dragon\",\"Ground\"]}}";
+ JSONObject jsonObject = new JSONObject(data);
+ Iterator iterator = jsonObject.keys();
+ while (iterator.hasNext()) {
+ String name = iterator.next();
+ if (!name.contains("(")) {
+ pokemons.add(new Pokemon(name, jsonObject.getJSONObject(name)));
+ }
+ }
+ return pokemons;
+ } catch (JSONException e) {
+ Log.i("JSON error", "error parsing json data");
+ }
+ return pokemons;
+ }
+
+}
diff --git a/app/src/main/java/com/example/nzp/pokedex/PokedexAdapter.java b/app/src/main/java/com/example/nzp/pokedex/PokedexAdapter.java
new file mode 100644
index 0000000..f2d6db3
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/PokedexAdapter.java
@@ -0,0 +1,132 @@
+package com.example.nzp.pokedex;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Filter;
+import android.widget.Filterable;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.squareup.picasso.Picasso;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * Created by nzp on 9/19/17.
+ *
+ * PokedexAdapter adapts the Pokemon data from Pokedex.java and makes it easy to display and filter
+ * in a RecyclerView.
+ */
+
+public class PokedexAdapter extends RecyclerView.Adapter implements Filterable {
+
+
+ public static final ArrayList ALL_POKEMON = new Pokedex().getPokemon();
+
+ private Context context;
+ private ArrayList filteredPokemon;
+ private ArrayList truePokemon;
+ private DisplayStyle displayStyle;
+
+ public PokedexAdapter(Context context, ArrayList filteredPokemon, ArrayList truePokemon, DisplayStyle displayStyle) {
+ this.context = context;
+ this.filteredPokemon = filteredPokemon == null ? new ArrayList<>(ALL_POKEMON) : filteredPokemon;
+ this.truePokemon = truePokemon == null ? new ArrayList<>(this.filteredPokemon) : truePokemon;
+ this.displayStyle = displayStyle;
+ }
+
+
+ @Override
+ public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ int layoutId = (displayStyle == DisplayStyle.LIST) ? R.layout.row_view : R.layout.grid_view;
+ View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
+ return new CustomViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(CustomViewHolder holder, int position) {
+ final Pokemon pokemon = truePokemon.get(position);
+ String filename = "http://assets.pokemon.com/assets/cms2/img/pokedex/full/" + pokemon.number + ".png";
+ Picasso.with(context).load(filename).into(holder.listImageView);
+ holder.listTextView.setText(pokemon.name + " #" + pokemon.number);
+ holder.listParentView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(context, PokemonDisplay.class);
+ intent.putExtra("number", pokemon.number);
+ context.startActivity(intent);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return truePokemon.size();
+ }
+
+ @Override
+ public Filter getFilter() {
+ return new PokedexSearchFilter(this, filteredPokemon);
+ }
+
+ public void filterPokemon(PokedexFilter filter) {
+ filteredPokemon = new ArrayList<>();
+ for (Pokemon pokemon : ALL_POKEMON) {
+ int mAtk = Integer.valueOf(pokemon.attack);
+ int mDef = Integer.valueOf(pokemon.defense);
+ int mHP = Integer.valueOf(pokemon.hp);
+ if (mAtk >= filter.getMinAtk() && mDef >= filter.getMinDef() && mHP >= filter.getMinHP()) {
+ for (int i = 0; i < pokemon.type.length; i += 1) {
+ if (filter.getAllowedTypes().contains(pokemon.type[i])) {
+ filteredPokemon.add(pokemon);
+ break;
+ }
+ }
+ }
+ }
+ setData(filteredPokemon);
+ }
+
+ public ArrayList getFilteredPokemon() {
+ return filteredPokemon;
+ }
+
+ public ArrayList getTruePokemon() {
+ return truePokemon;
+ }
+
+ public int getRandomPokemon(int n) {
+ ArrayList randomPokemon = new ArrayList<>(filteredPokemon);
+ Collections.shuffle(randomPokemon);
+ if (n >= randomPokemon.size()) {
+ n = randomPokemon.size();
+ }
+ setData(new ArrayList<>(randomPokemon.subList(0, n)));
+ return n;
+ }
+
+ public void setData(ArrayList newData) {
+ truePokemon = newData;
+ notifyDataSetChanged();
+ }
+
+ public class CustomViewHolder extends RecyclerView.ViewHolder {
+
+ View listParentView;
+ ImageView listImageView;
+ TextView listTextView;
+
+ public CustomViewHolder(View itemView) {
+ super(itemView);
+ listParentView = itemView.findViewById(R.id.listParentView);
+ listImageView = itemView.findViewById(R.id.listImageView);
+ listTextView = itemView.findViewById(R.id.listTextView);
+
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/nzp/pokedex/PokedexFilter.java b/app/src/main/java/com/example/nzp/pokedex/PokedexFilter.java
new file mode 100644
index 0000000..eed1837
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/PokedexFilter.java
@@ -0,0 +1,96 @@
+package com.example.nzp.pokedex;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import static com.example.nzp.pokedex.Pokemon.NUM_TYPES;
+
+/**
+ * Created by nzp on 9/19/17.
+ *
+ * Holds information about what the user whats to filter (whether or not they want each type, plus
+ * minimum ATK, DEF, and HP values.
+ * Also provides a 30 character (or less) description of the filter to display.
+ */
+
+public class PokedexFilter {
+
+ private ArrayList allowedTypes;
+ private int minAtk, minDef, minHP;
+
+ /* Empty constructor filters nothing. */
+ public PokedexFilter() {
+ this(new ArrayList<>(Arrays.asList(Pokemon.TYPES)), 0, 0, 0);
+ }
+
+ public PokedexFilter(ArrayList allowedTypes, int minAtk, int minDef, int minHP) {
+ this.allowedTypes = allowedTypes;
+ this.minAtk = minAtk;
+ this.minDef = minDef;
+ this.minHP = minHP;
+ }
+
+ public int getMinAtk() {
+ return minAtk;
+ }
+
+ public int getMinDef() {
+ return minDef;
+ }
+
+ public int getMinHP() {
+ return minHP;
+ }
+
+ public ArrayList getAllowedTypes() {
+ return allowedTypes;
+ }
+
+ @Override
+ public String toString() {
+ //If no filter, there is no string representation
+ StringBuilder builder = new StringBuilder();
+ boolean atkFiltered = getMinAtk() > 0;
+ boolean defFiltered = getMinDef() > 0;
+ boolean hpFiltered = getMinHP() > 0;
+ int numTypes = getAllowedTypes().size();
+ int numFilteredStats = (atkFiltered ? 1 : 0) + (defFiltered ? 1 : 0) + (hpFiltered ? 1 : 0);
+
+ //Type filters
+ if (numTypes == 0) {
+ builder.append("Showing no types");
+ } else if (numTypes == 1) {
+ String type = getAllowedTypes().get(0);
+ builder.append("Showing ").append(type).append(" types");
+ } else if (numTypes == 2 && numFilteredStats < 2) {
+ builder.append("Showing ").append(getAllowedTypes().get(0))
+ .append(" and ").append(getAllowedTypes().get(1)).append(" types");
+ } else if (numTypes == NUM_TYPES) {
+ builder.append("Showing all types");
+ } else {
+ builder.append("Showing ").append(numTypes).append(" types");
+ }
+
+
+ //Handle ATK, DEF, and HP filters
+ if (numFilteredStats == 3) { //all 3 are true
+ builder.append(", filtered by 3 stats");
+ } else if (numFilteredStats == 2) { //exactly 2 are true
+ builder.append(", filtered by 2 stats");
+ } else if (atkFiltered) {
+ builder.append(", ATK ≥ ").append(getMinAtk());
+ } else if (defFiltered) {
+ builder.append(", DEF ≥ ").append(getMinDef());
+ } else if (hpFiltered) {
+ builder.append(", HP ≥ ").append(getMinHP());
+ }
+
+ builder.append(".");
+
+ if (builder.toString().equals("Showing all types.")) {
+ return null;
+ }
+ return builder.toString();
+ }
+
+}
diff --git a/app/src/main/java/com/example/nzp/pokedex/PokedexSearchFilter.java b/app/src/main/java/com/example/nzp/pokedex/PokedexSearchFilter.java
new file mode 100644
index 0000000..1386913
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/PokedexSearchFilter.java
@@ -0,0 +1,52 @@
+package com.example.nzp.pokedex;
+
+import android.widget.Filter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by nzp on 9/19/17.
+ *
+ * Filters the Pokedex based on a CharSequence.
+ */
+
+public class PokedexSearchFilter extends Filter {
+
+ private PokedexAdapter adapter;
+ private ArrayList all;
+ private ArrayList filtered;
+
+ public PokedexSearchFilter(PokedexAdapter adapter, ArrayList all) {
+ this.adapter = adapter;
+ this.all = all;
+ }
+
+ @Override
+ protected FilterResults performFiltering(CharSequence charSequence) {
+ String charString = charSequence.toString();
+ if (charString.isEmpty()) {
+ filtered = all;
+ } else {
+ //First pass gets most relevant pokemon
+ ArrayList filteredList = new ArrayList<>();
+ for (Pokemon pokemon : all) {
+ //Add if number or name is similar
+ if (pokemon.name.toLowerCase().startsWith(charString.toLowerCase()) || pokemon.number.startsWith(charString)) {
+ filteredList.add(pokemon);
+ }
+ }
+ filtered = filteredList;
+ }
+
+ FilterResults filterResults = new FilterResults();
+ filterResults.values = filtered;
+ return filterResults;
+ }
+
+ @Override
+ protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
+ filtered = (ArrayList) filterResults.values;
+ adapter.setData(filtered);
+ }
+}
diff --git a/app/src/main/java/com/example/nzp/pokedex/Pokemon.java b/app/src/main/java/com/example/nzp/pokedex/Pokemon.java
new file mode 100644
index 0000000..c6de468
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/Pokemon.java
@@ -0,0 +1,64 @@
+package com.example.nzp.pokedex;
+
+import android.util.Log;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Created by nzp on 9/19/17.
+ *
+ * The Pokemon class. Modified from the original from Pokedex.java.
+ */
+
+public class Pokemon {
+
+ public static final String[] TYPES = {
+ "Bug", "Dark", "Dragon", "Electric", "Fairy", "Fighting", "Fire", "Flying", "Ghost",
+ "Grass", "Ground", "Ice", "Normal", "Poison", "Psychic", "Rock", "Steel", "Water"
+ };
+ public static final int NUM_TYPES = TYPES.length;
+ public static final int HIGHEST_ATK = 180;
+ public static final int HIGHEST_DEF = 230;
+ public static final int HIGHEST_HP = 255;
+
+ String name;
+ String number;
+ String attack;
+ String defense;
+ String hp;
+ String species;
+ String specialAttack;
+ String specialDefense;
+ String speed;
+ String total;
+ String[] type;
+
+ public Pokemon(String name, JSONObject jsonData) {
+ try {
+ this.name = name;
+ number = jsonData.getString("#").trim();
+ attack = jsonData.getString("Attack").trim();
+ defense = jsonData.getString("Defense").trim();
+ hp = jsonData.getString("HP").trim();
+ species = jsonData.getString("Species").trim();
+ specialAttack = jsonData.getString("Sp. Atk").trim();
+ specialDefense = jsonData.getString("Sp. Def").trim();
+ speed = jsonData.getString("Speed").trim();
+ total = jsonData.getString("Total").trim();
+
+
+ //Additional code to support types
+ String types = jsonData.getString("Type").trim();
+ type = types.substring(1, types.length() - 1).split(","); //split into array of type strings
+ for (int i = 0; i < type.length; i += 1) {
+ type[i] = type[i].substring(1, type[i].length() - 1); //remove "" around each type string
+ type[i] = type[i].substring(0, 1).toUpperCase() + type[i].substring(1).toLowerCase();
+ }
+
+ } catch (JSONException e) {
+ Log.i("JSON error", "error parsing json data");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/nzp/pokedex/PokemonDisplay.java b/app/src/main/java/com/example/nzp/pokedex/PokemonDisplay.java
new file mode 100644
index 0000000..27f714a
--- /dev/null
+++ b/app/src/main/java/com/example/nzp/pokedex/PokemonDisplay.java
@@ -0,0 +1,97 @@
+package com.example.nzp.pokedex;
+
+
+import android.content.Intent;
+import android.net.Uri;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.squareup.picasso.Picasso;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class PokemonDisplay extends AppCompatActivity {
+
+ TextView name;
+ TextView pokemonID;
+ TextView species;
+ TextView HP;
+ TextView attack;
+ TextView defense;
+ TextView specialAttack;
+ TextView specialDefense;
+ TextView speed;
+ TextView total;
+ TextView type;
+ ImageView image;
+ Button searchButton;
+
+ Pokedex mPokedex;
+ ArrayList list;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_pokemon_display);
+
+ name = (TextView) findViewById(R.id.name);
+ pokemonID = (TextView) findViewById(R.id.pokemonID);
+ species = (TextView) findViewById(R.id.species);
+ HP = (TextView) findViewById(R.id.HP);
+ attack = (TextView) findViewById(R.id.attack);
+ defense = (TextView) findViewById(R.id.defense);
+ specialAttack = (TextView) findViewById(R.id.specialAttack);
+ specialDefense = (TextView) findViewById(R.id.specialDefense);
+ speed = (TextView) findViewById(R.id.speed);
+ total = (TextView) findViewById(R.id.total);
+ type = (TextView) findViewById(R.id.type);
+ image = (ImageView) findViewById(R.id.pokemonPic);
+ searchButton = (Button)findViewById(R.id.searchButton);
+
+ mPokedex = new Pokedex();
+ list = mPokedex.getPokemon();
+
+ int j = 0;
+ String pokemonNumber = getIntent().getStringExtra("number");
+ for (; j < list.size(); j += 1) {
+ if (list.get(j).number.equals(pokemonNumber)) {
+ break;
+ }
+ }
+ final int i = j;
+
+ name.setText(list.get(i).name);
+ species.setText(list.get(i).species);
+ HP.setText(list.get(i).hp);
+ //name.setText(list.get(i).hp.toString());
+ //HP.setText(list.get(i).hp);
+ attack.setText(list.get(i).attack);
+ defense.setText(list.get(i).defense);
+ pokemonID.setText(list.get(i).number);
+ specialAttack.setText(list.get(i).specialAttack);
+ specialDefense.setText(list.get(i).specialDefense);
+ speed.setText(list.get(i).speed);
+ total.setText(list.get(i).total);
+ type.setText(Arrays.toString(list.get(i).type));
+
+ //display the image of the pokemon
+ String filename = "http://assets.pokemon.com/assets/cms2/img/pokedex/full/" + list.get(i).number + ".png";
+ Picasso.with(getApplicationContext()).load(filename).into(image);
+
+ searchButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Uri uri = Uri.parse("http://www.google.com/#q="+list.get(i).name);
+ Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ startActivity(intent);
+ }
+ });
+
+ }
+}
diff --git a/app/src/main/res/background 7.jpg b/app/src/main/res/background 7.jpg
new file mode 100644
index 0000000..e5f03f3
Binary files /dev/null and b/app/src/main/res/background 7.jpg differ
diff --git a/app/src/main/res/background1.jpg b/app/src/main/res/background1.jpg
new file mode 100644
index 0000000..bb3bda1
Binary files /dev/null and b/app/src/main/res/background1.jpg differ
diff --git a/app/src/main/res/background2.jpg b/app/src/main/res/background2.jpg
new file mode 100644
index 0000000..9c0679e
Binary files /dev/null and b/app/src/main/res/background2.jpg differ
diff --git a/app/src/main/res/background3.jpg b/app/src/main/res/background3.jpg
new file mode 100644
index 0000000..53af2b3
Binary files /dev/null and b/app/src/main/res/background3.jpg differ
diff --git a/app/src/main/res/background4.jpg b/app/src/main/res/background4.jpg
new file mode 100644
index 0000000..0ee922b
Binary files /dev/null and b/app/src/main/res/background4.jpg differ
diff --git a/app/src/main/res/background5.jpg b/app/src/main/res/background5.jpg
new file mode 100644
index 0000000..6511a64
Binary files /dev/null and b/app/src/main/res/background5.jpg differ
diff --git a/app/src/main/res/background6.jpg b/app/src/main/res/background6.jpg
new file mode 100644
index 0000000..b4000bd
Binary files /dev/null and b/app/src/main/res/background6.jpg differ
diff --git a/app/src/main/res/drawable/ak4.jpg b/app/src/main/res/drawable/ak4.jpg
new file mode 100644
index 0000000..42bc3c0
Binary files /dev/null and b/app/src/main/res/drawable/ak4.jpg differ
diff --git a/app/src/main/res/drawable/attackicon.png b/app/src/main/res/drawable/attackicon.png
new file mode 100644
index 0000000..020b3f0
Binary files /dev/null and b/app/src/main/res/drawable/attackicon.png differ
diff --git a/app/src/main/res/drawable/background1.jpg b/app/src/main/res/drawable/background1.jpg
new file mode 100644
index 0000000..bb3bda1
Binary files /dev/null and b/app/src/main/res/drawable/background1.jpg differ
diff --git a/app/src/main/res/drawable/background10.jpg b/app/src/main/res/drawable/background10.jpg
new file mode 100644
index 0000000..7889061
Binary files /dev/null and b/app/src/main/res/drawable/background10.jpg differ
diff --git a/app/src/main/res/drawable/background11.jpg b/app/src/main/res/drawable/background11.jpg
new file mode 100644
index 0000000..bcfe9e4
Binary files /dev/null and b/app/src/main/res/drawable/background11.jpg differ
diff --git a/app/src/main/res/drawable/background12.jpg b/app/src/main/res/drawable/background12.jpg
new file mode 100644
index 0000000..4d13457
Binary files /dev/null and b/app/src/main/res/drawable/background12.jpg differ
diff --git a/app/src/main/res/drawable/background2.jpg b/app/src/main/res/drawable/background2.jpg
new file mode 100644
index 0000000..9c0679e
Binary files /dev/null and b/app/src/main/res/drawable/background2.jpg differ
diff --git a/app/src/main/res/drawable/background3.jpg b/app/src/main/res/drawable/background3.jpg
new file mode 100644
index 0000000..53af2b3
Binary files /dev/null and b/app/src/main/res/drawable/background3.jpg differ
diff --git a/app/src/main/res/drawable/background4.jpg b/app/src/main/res/drawable/background4.jpg
new file mode 100644
index 0000000..0ee922b
Binary files /dev/null and b/app/src/main/res/drawable/background4.jpg differ
diff --git a/app/src/main/res/drawable/background5.jpg b/app/src/main/res/drawable/background5.jpg
new file mode 100644
index 0000000..6511a64
Binary files /dev/null and b/app/src/main/res/drawable/background5.jpg differ
diff --git a/app/src/main/res/drawable/background6.jpg b/app/src/main/res/drawable/background6.jpg
new file mode 100644
index 0000000..b4000bd
Binary files /dev/null and b/app/src/main/res/drawable/background6.jpg differ
diff --git a/app/src/main/res/drawable/background7.jpg b/app/src/main/res/drawable/background7.jpg
new file mode 100644
index 0000000..e5f03f3
Binary files /dev/null and b/app/src/main/res/drawable/background7.jpg differ
diff --git a/app/src/main/res/drawable/background8.jpg b/app/src/main/res/drawable/background8.jpg
new file mode 100644
index 0000000..53f4903
Binary files /dev/null and b/app/src/main/res/drawable/background8.jpg differ
diff --git a/app/src/main/res/drawable/background9.jpg b/app/src/main/res/drawable/background9.jpg
new file mode 100644
index 0000000..0097c03
Binary files /dev/null and b/app/src/main/res/drawable/background9.jpg differ
diff --git a/app/src/main/res/drawable/backgroundpokemon.jpg b/app/src/main/res/drawable/backgroundpokemon.jpg
new file mode 100644
index 0000000..b55a3b1
Binary files /dev/null and b/app/src/main/res/drawable/backgroundpokemon.jpg differ
diff --git a/app/src/main/res/drawable/boot.png b/app/src/main/res/drawable/boot.png
new file mode 100644
index 0000000..6a54de4
Binary files /dev/null and b/app/src/main/res/drawable/boot.png differ
diff --git a/app/src/main/res/drawable/bug.png b/app/src/main/res/drawable/bug.png
new file mode 100644
index 0000000..6d364be
Binary files /dev/null and b/app/src/main/res/drawable/bug.png differ
diff --git a/app/src/main/res/drawable/crystal.png b/app/src/main/res/drawable/crystal.png
new file mode 100644
index 0000000..0c577ed
Binary files /dev/null and b/app/src/main/res/drawable/crystal.png differ
diff --git a/app/src/main/res/drawable/defenseicon.png b/app/src/main/res/drawable/defenseicon.png
new file mode 100644
index 0000000..8ec5c77
Binary files /dev/null and b/app/src/main/res/drawable/defenseicon.png differ
diff --git a/app/src/main/res/drawable/greenpokeball.png b/app/src/main/res/drawable/greenpokeball.png
new file mode 100644
index 0000000..78067eb
Binary files /dev/null and b/app/src/main/res/drawable/greenpokeball.png differ
diff --git a/app/src/main/res/drawable/healthicon.png b/app/src/main/res/drawable/healthicon.png
new file mode 100644
index 0000000..68c5057
Binary files /dev/null and b/app/src/main/res/drawable/healthicon.png differ
diff --git a/app/src/main/res/drawable/heart.png b/app/src/main/res/drawable/heart.png
new file mode 100644
index 0000000..bed280d
Binary files /dev/null and b/app/src/main/res/drawable/heart.png differ
diff --git a/app/src/main/res/drawable/ic_search_black_24dp.xml b/app/src/main/res/drawable/ic_search_black_24dp.xml
new file mode 100644
index 0000000..affc7ba
--- /dev/null
+++ b/app/src/main/res/drawable/ic_search_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/lightbackground.jpg b/app/src/main/res/drawable/lightbackground.jpg
new file mode 100644
index 0000000..ad3244c
Binary files /dev/null and b/app/src/main/res/drawable/lightbackground.jpg differ
diff --git a/app/src/main/res/drawable/magicicon.png b/app/src/main/res/drawable/magicicon.png
new file mode 100644
index 0000000..0da0d35
Binary files /dev/null and b/app/src/main/res/drawable/magicicon.png differ
diff --git a/app/src/main/res/drawable/magicshield.png b/app/src/main/res/drawable/magicshield.png
new file mode 100644
index 0000000..b09daf7
Binary files /dev/null and b/app/src/main/res/drawable/magicshield.png differ
diff --git a/app/src/main/res/drawable/physicaldefense.png b/app/src/main/res/drawable/physicaldefense.png
new file mode 100644
index 0000000..972231f
Binary files /dev/null and b/app/src/main/res/drawable/physicaldefense.png differ
diff --git a/app/src/main/res/drawable/pokeballblue.png b/app/src/main/res/drawable/pokeballblue.png
new file mode 100644
index 0000000..fba9df2
Binary files /dev/null and b/app/src/main/res/drawable/pokeballblue.png differ
diff --git a/app/src/main/res/drawable/pokeballgreen.png b/app/src/main/res/drawable/pokeballgreen.png
new file mode 100644
index 0000000..bf00110
Binary files /dev/null and b/app/src/main/res/drawable/pokeballgreen.png differ
diff --git a/app/src/main/res/drawable/pokeballlyellow.png b/app/src/main/res/drawable/pokeballlyellow.png
new file mode 100644
index 0000000..b0fa335
Binary files /dev/null and b/app/src/main/res/drawable/pokeballlyellow.png differ
diff --git a/app/src/main/res/drawable/pokeballocean.png b/app/src/main/res/drawable/pokeballocean.png
new file mode 100644
index 0000000..9402f50
Binary files /dev/null and b/app/src/main/res/drawable/pokeballocean.png differ
diff --git a/app/src/main/res/drawable/pokeballorange.png b/app/src/main/res/drawable/pokeballorange.png
new file mode 100644
index 0000000..516b05e
Binary files /dev/null and b/app/src/main/res/drawable/pokeballorange.png differ
diff --git a/app/src/main/res/drawable/pokeballred.png b/app/src/main/res/drawable/pokeballred.png
new file mode 100644
index 0000000..d8c4555
Binary files /dev/null and b/app/src/main/res/drawable/pokeballred.png differ
diff --git a/app/src/main/res/drawable/pokeballyellow.png b/app/src/main/res/drawable/pokeballyellow.png
new file mode 100644
index 0000000..f47c315
Binary files /dev/null and b/app/src/main/res/drawable/pokeballyellow.png differ
diff --git a/app/src/main/res/drawable/pokemonbackground.jpg b/app/src/main/res/drawable/pokemonbackground.jpg
new file mode 100644
index 0000000..dd59ec9
Binary files /dev/null and b/app/src/main/res/drawable/pokemonbackground.jpg differ
diff --git a/app/src/main/res/drawable/pokemonbar.png b/app/src/main/res/drawable/pokemonbar.png
new file mode 100644
index 0000000..f36c532
Binary files /dev/null and b/app/src/main/res/drawable/pokemonbar.png differ
diff --git a/app/src/main/res/drawable/pokemonseries1.jpg b/app/src/main/res/drawable/pokemonseries1.jpg
new file mode 100644
index 0000000..ec3b468
Binary files /dev/null and b/app/src/main/res/drawable/pokemonseries1.jpg differ
diff --git a/app/src/main/res/drawable/speedicon.png b/app/src/main/res/drawable/speedicon.png
new file mode 100644
index 0000000..7f82b6f
Binary files /dev/null and b/app/src/main/res/drawable/speedicon.png differ
diff --git a/app/src/main/res/drawable/speedicon2.png b/app/src/main/res/drawable/speedicon2.png
new file mode 100644
index 0000000..b97700a
Binary files /dev/null and b/app/src/main/res/drawable/speedicon2.png differ
diff --git a/app/src/main/res/drawable/sword.png b/app/src/main/res/drawable/sword.png
new file mode 100644
index 0000000..8cbe2bc
Binary files /dev/null and b/app/src/main/res/drawable/sword.png differ
diff --git a/app/src/main/res/drawable/trigger.png b/app/src/main/res/drawable/trigger.png
new file mode 100644
index 0000000..f58eb3b
Binary files /dev/null and b/app/src/main/res/drawable/trigger.png differ
diff --git a/app/src/main/res/drawable/type.png b/app/src/main/res/drawable/type.png
new file mode 100644
index 0000000..b7d5db6
Binary files /dev/null and b/app/src/main/res/drawable/type.png differ
diff --git a/app/src/main/res/drawable/yellowbackground.jpg b/app/src/main/res/drawable/yellowbackground.jpg
new file mode 100644
index 0000000..ec08285
Binary files /dev/null and b/app/src/main/res/drawable/yellowbackground.jpg differ
diff --git a/app/src/main/res/layout/activity_filter.xml b/app/src/main/res/layout/activity_filter.xml
new file mode 100644
index 0000000..2e1947f
--- /dev/null
+++ b/app/src/main/res/layout/activity_filter.xml
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..c047b28
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_pokemon_display.xml b/app/src/main/res/layout/activity_pokemon_display.xml
new file mode 100644
index 0000000..2c181e8
--- /dev/null
+++ b/app/src/main/res/layout/activity_pokemon_display.xml
@@ -0,0 +1,367 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/grid_view.xml b/app/src/main/res/layout/grid_view.xml
new file mode 100644
index 0000000..6446aee
--- /dev/null
+++ b/app/src/main/res/layout/grid_view.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/row_view.xml b/app/src/main/res/layout/row_view.xml
new file mode 100644
index 0000000..caeaf26
--- /dev/null
+++ b/app/src/main/res/layout/row_view.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml
new file mode 100644
index 0000000..63ed27c
--- /dev/null
+++ b/app/src/main/res/menu/main_menu.xml
@@ -0,0 +1,25 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9a078e3
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..efc028a
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..3af2608
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9bec2e6
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..aee44e1
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..34947cd
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..4f24af1
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,28 @@
+
+
+ #3F51B5
+ #3F51B5
+ #6a7aa5
+ #e9c36b
+ #7A1EA1
+ #691A99
+ #68EFAD
+ #b4f53a
+ #5ff086
+ #9575CD
+ #a16872
+ #bfe0f1
+ #B388FF
+ #673AB7
+ #aa8f75
+ #807e86
+ #F8BBD0
+ #F4FF81
+ #fee557
+ #C6FF00
+ #AEEA00
+ #B2FF59
+ #76FF03
+ #55a9ea
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..b439aa4
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,39 @@
+
+ Pokedex
+ Search
+ Display as
+ Show Random 20
+ Min ATK: %d
+ Min DEF: %d
+ Min HP: %d
+ Total:
+ SpDefense
+ SpAttack
+ Defense
+ Attack
+ Speed
+ HP
+ Species:
+ Pokemon #:
+ Name:
+ Search this Pokemon
+ Dark
+ Dragon
+ Electric
+ Fairy
+ Fighting
+ Fire
+ Flying
+ Ghost
+ Grass
+ Ground
+ Ice
+ Normal
+ Poison
+ Psychic
+ Rock
+ Steel
+ Water
+ Check All
+ Save Choices
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..5885930
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/app/src/test/java/com/example/nzp/pokedex/ExampleUnitTest.java b/app/src/test/java/com/example/nzp/pokedex/ExampleUnitTest.java
new file mode 100644
index 0000000..b0cb07a
--- /dev/null
+++ b/app/src/test/java/com/example/nzp/pokedex/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.example.nzp.pokedex;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() throws Exception {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..c2eea8e
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,23 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:2.3.3'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..aac7c9b
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,17 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..13372ae
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..56aed4b
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Sat Sep 16 13:22:55 PDT 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..9d82f78
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..aec9973
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app'