From 03fc27bd8321a0fa726ef99b92686a14dfcbfc81 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 18:18:59 +0000 Subject: [PATCH 01/39] Use small icons and original Pokemon names --- index.html | 4 +- pokemon.json | 4352 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 4353 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 6d3e821c..d45ff7dd 100644 --- a/index.html +++ b/index.html @@ -80,12 +80,12 @@ var infowindow = new google.maps.InfoWindow({ }); - var image = "http://icons.iconarchive.com/icons/hektakun/pokemon/72/" + pad(p.id, 3) + "-" + cap(p.name) + "-icon.png"; + var image = "https://raw.githubusercontent.com/AHAAAAAAA/PokemonGo-Map/master/static/icons/" + p.id + ".png"; var marker = new google.maps.Marker({ map: map, position: {lat: p.lat, lng: p.lng}, - label: p.name.charAt(0), + label: '', title: ""+p.name+"
Time left: " + p.timeleft + "s
Lat: "+p.lat+"
Long: "+p.lng, icon: image }); diff --git a/pokemon.json b/pokemon.json index 42333ab3..6e053a16 100644 --- a/pokemon.json +++ b/pokemon.json @@ -1 +1,4351 @@ -[{"Number":"001","Name":"Bulbasaur","Classification":"Seed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Tackle","Vine Whip"],"Weight":"6.9 kg","Height":"0.7 m","Next Evolution Requirements":{"Amount":25,"Name":"Bulbasaur candies"},"Next evolution(s)":[{"Number":"002","Name":"Ivysaur"},{"Number":"003","Name":"Venusaur"}]},{"Number":"002","Name":"Ivysaur","Classification":"Seed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Razor Leaf","Vine Whip"],"Weight":"13.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"001","Name":"Bulbasaur"}],"Next Evolution Requirements":{"Amount":100,"Name":"Bulbasaur candies"},"Next evolution(s)":[{"Number":"003","Name":"Venusaur"}]},{"Number":"003","Name":"Venusaur","Classification":"Seed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Razor Leaf","Vine Whip"],"Weight":"100.0 kg","Height":"2.0 m","Previous evolution(s)":[{"Number":"001","Name":"Bulbasaur"},{"Number":"002","Name":"Ivysaur"}]},{"Number":"004","Name":"Charmander","Classification":"Lizard Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Scratch"],"Weight":"8.5 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":25,"Name":"Charmander candies"},"Next evolution(s)":[{"Number":"005","Name":"Charmeleon"},{"Number":"006","Name":"Charizard"}]},{"Number":"005","Name":"Charmeleon","Classification":"Flame Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember",""],"Weight":"19.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"004","Name":"Charmander"}],"Next Evolution Requirements":{"Amount":100,"Name":"Charmander candies"},"Next evolution(s)":[{"Number":"006","Name":"Charizard"}]},{"Number":"006","Name":"Charizard","Classification":"Flame Pokèmon","Type I":["Fire"],"Type II":["Flying"],"Weaknesses":["Water","Electric","Rock"],"Fast Attack(s)":["Ember","Wing Attack"],"Weight":"90.5 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"004","Name":"Charmander"},{"Number":"005","Name":"Charmeleon"}]},{"Number":"007","Name":"Squirtle","Classification":"Tiny Turtle Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Tackle","Bubble"],"Weight":"9.0 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":25,"Name":"Squirtle candies"},"Next evolution(s)":[{"Number":"008","Name":"Wartortle"},{"Number":"009","Name":"Blastoise"}]},{"Number":"008","Name":"Wartortle","Classification":"Turtle Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bite","Water Gun"],"Weight":"22.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"007","Name":"Squirtle"}],"Next Evolution Requirements":{"Amount":100,"Name":"Squirtle candies"},"Next evolution(s)":[{"Number":"009","Name":"Blastoise"}]},{"Number":"009","Name":"Blastoise","Classification":"Shellfish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bite","Water Gun"],"Weight":"85.5 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"007","Name":"Squirtle"},{"Number":"008","Name":"Wartortle"}]},{"Number":"010","Name":"Caterpie","Classification":"Worm Pokèmon","Type I":["Bug"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":["Bug Bite","Tackle"],"Weight":"2.9 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":12,"Name":"Caterpie candies"},"Next evolution(s)":[{"Number":"011","Name":"Metapod"},{"Number":"012","Name":"Butterfree"}]},{"Number":"011","Name":"Metapod","Classification":"Cocoon Pokèmon","Type I":["Bug"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":["Bug Bite","Tackle"],"Weight":"9.9 kg","Height":"0.7 m","Previous evolution(s)":[{"Number":"010","Name":"Caterpie"}],"Next Evolution Requirements":{"Amount":50,"Name":"Caterpie candies"},"Next evolution(s)":[{"Number":"012","Name":"Butterfree"}]},{"Number":"012","Name":"Butterfree","Classification":"Butterfly Pokèmon","Type I":["Bug"],"Type II":["Flying"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":["Bug Bite","Confusion"],"Weight":"32.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"010","Name":"Caterpie"},{"Number":"011","Name":"Metapod"}]},{"Number":"013","Name":"Weedle","Classification":"Hairy Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Poison Sting"],"Weight":"3.2 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":12,"Name":"Weedle candies"},"Next evolution(s)":[{"Number":"014","Name":"Kakuna"},{"Number":"015","Name":"Beedrill"}]},{"Number":"014","Name":"Kakuna","Classification":"Cocoon Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Posion Sting"],"Weight":"10.0 kg","Height":"0.6 m","Previous evolution(s)":[{"Number":"013","Name":"Weedle"}],"Next Evolution Requirements":{"Amount":50,"Name":"Weedle candies"},"Next evolution(s)":[{"Number":"015","Name":"Beedrill"}]},{"Number":"015","Name":"Beedrill","Classification":"Poison Bee Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Poison Jab"],"Weight":"29.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"013","Name":"Weedle"},{"Number":"014","Name":"Kakuna"}]},{"Number":"016","Name":"Pidgey","Classification":"Tiny Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Quick Attack","Tackle"],"Special Attack(s)":["Aerial Ace","Air Cutter","Twister"],"Weight":"1.8 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":12,"Name":"Pidgey candies"},"Next evolution(s)":[{"Number":"017","Name":"Pidgeotto"},{"Number":"018","Name":"Pidgeot"}]},{"Number":"017","Name":"Pidgeotto","Classification":"Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Steel Wing","Wing Attack"],"Special Attack(s)":["Aerial Ace","Air Cutter","Twister"],"Weight":"30.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"016","Name":"Pidgey"}],"Next Evolution Requirements":{"Amount":50,"Name":"Pidgey candies"},"Next evolution(s)":[{"Number":"018","Name":"Pidgeot"}]},{"Number":"018","Name":"Pidgeot","Classification":"Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Steel Wing","Wing Attack"],"Special Attack(s)":["Hurricane"],"Weight":"39.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"016","Name":"Pidgey"},{"Number":"017","Name":"Pidgeotto"}]},{"Number":"019","Name":"Rattata","Classification":"Mouse Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Quick Attack","Tackle"],"Special Attack(s)":["Body Slam","Dig","Hyper Fang"],"Weight":"3.5 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":25,"Name":"Rattata candies"},"Next evolution(s)":[{"Number":"020","Name":"Raticate"}]},{"Number":"020","Name":"Raticate","Classification":"Mouse Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Bite","Quick Attack"],"Special Attack(s)":["Dig","Hyper Beam","Hyper Fang"],"Weight":"18.5 kg","Height":"0.7 m","Previous evolution(s)":[{"Number":"019","Name":"Rattata"}]},{"Number":"021","Name":"Spearow","Classification":"Tiny Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Peck","Quick Attack"],"Weight":"2.0 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Spearow candies"},"Next evolution(s)":[{"Number":"022","Name":"Fearow"}]},{"Number":"022","Name":"Fearow","Classification":"Beak Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Peck","Steel Wing"],"Weight":"38.0 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"021","Name":"Spearow"}]},{"Number":"023","Name":"Ekans","Classification":"Snake Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Poison Sting"],"Weight":"6.9 kg","Height":"2.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Ekans candies"},"Next evolution(s)":[{"Number":"024","Name":"Arbok"}]},{"Number":"024","Name":"Arbok","Classification":"Cobra Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Bite"],"Weight":"65.0 kg","Height":"3.5 m","Previous evolution(s)":[{"Number":"023","Name":"Ekans"}]},{"Number":"025","Name":"Pikachu","Classification":"Mouse Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Quick Attack","Thunder Shock"],"Weight":"6.0 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Pikachu candies"},"Next evolution(s)":[{"Number":"026","Name":"Raichu"}]},{"Number":"026","Name":"Raichu","Classification":"Mouse Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Thunder Shock","Spark"],"Weight":"30.0 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"025","Name":"Pikachu"}]},{"Number":"027","Name":"Sandshrew","Classification":"Mouse Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Shot","Scratch"],"Weight":"12.0 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Sandshrew candies"},"Next evolution(s)":[{"Number":"028","Name":"Sandslash"}]},{"Number":"028","Name":"Sandslash","Classification":"Mouse Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Metal Claw","Mud Shot"],"Weight":"29.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"027","Name":"Sandshrew"}]},{"Number":"029","Name":"Nidoran F","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Sting"],"Weight":"7.0 kg","Height":"0.4 m","Next evolution(s)":[{"Number":"030","Name":"Nidorina"},{"Number":"031","Name":"Nidoqueen"}]},{"Number":"030","Name":"Nidorina","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Sting"],"Weight":"20.0 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"029","Name":"Nidoran F"}],"Next Evolution Requirements":{"Amount":100,"Name":"Nidoran F candies"},"Next evolution(s)":[{"Number":"031","Name":"Nidoqueen"}]},{"Number":"031","Name":"Nidoqueen","Classification":"Drill Pokèmon","Type I":["Poison"],"Type II":["Ground"],"Weaknesses":["Water","Ice","Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Jab"],"Weight":"60.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"029","Name":"Nidoran F"},{"Number":"030","Name":"Nidorina"}]},{"Number":"032","Name":"Nidoran M","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Peck","Poison Sting"],"Weight":"9.0 kg","Height":"0.5 m","Next evolution(s)":[{"Number":"033","Name":"Nidorino"},{"Number":"034","Name":"Nidoking"}]},{"Number":"033","Name":"Nidorino","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Jab"],"Weight":"19.5 kg","Height":"0.9 m","Previous evolution(s)":[{"Number":"032","Name":"Nidoran M"}],"Next Evolution Requirements":{"Amount":100,"Name":"NidoranM candies"},"Next evolution(s)":[{"Number":"034","Name":"Nidoking"}]},{"Number":"034","Name":"Nidoking","Classification":"Drill Pokèmon","Type I":["Poison"],"Type II":["Ground"],"Weaknesses":["Water","Ice","Ground","Psychic"],"Fast Attack(s)":["Fury Cutter","Poison Jab"],"Weight":"62.0 kg","Height":"1.4 m","Previous evolution(s)":[{"Number":"032","Name":"Nidoran M"},{"Number":"033","Name":"Nidorino"}]},{"Number":"035","Name":"Clefairy","Classification":"Fairy Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Pound","Zen Headbutt"],"Weight":"7.5 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Clefairy candies"},"Next evolution(s)":[{"Number":"036","Name":"Clefable"}]},{"Number":"036","Name":"Clefable","Classification":"Fairy Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Pound","Zen Headbutt"],"Weight":"40.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"035","Name":"Clefairy"}]},{"Number":"037","Name":"Vulpix","Classification":"Fox Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Quick Attack"],"Weight":"9.9 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Vulpi"},"Next evolution(s)":[{"Number":"038","Name":"Ninetales"}]},{"Number":"038","Name":"Ninetales","Classification":"Fox Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Quick Attack"],"Weight":"19.9 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"037","Name":"Vulpix"}]},{"Number":"039","Name":"Jigglypuff","Classification":"Balloon Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Feint Attack","Pound"],"Weight":"5.5 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Jigglypuff candies"},"Next evolution(s)":[{"Number":"039","Name":"Jigglypuff"}]},{"Number":"040","Name":"Wigglytuff","Classification":"Balloon Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Feint Attack","Pound"],"Weight":"12.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"040","Name":"Wigglytuff"}]},{"Number":"041","Name":"Zubat","Classification":"Bat Pokèmon","Type I":["Poison"],"Type II":["Flying"],"Weaknesses":["Electric","Ice","Psychic","Rock"],"Fast Attack(s)":["Bite","Quick Attack"],"Weight":"7.5 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":50,"Name":"Zubat candies"},"Next evolution(s)":[{"Number":"042","Name":"Golbat"}]},{"Number":"042","Name":"Golbat","Classification":"Bat Pokèmon","Type I":["Poison"],"Type II":["Flying"],"Weaknesses":["Electric","Ice","Psychic","Rock"],"Fast Attack(s)":["Bite","Wing Attack"],"Weight":"55.0 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"041","Name":"Zubat"}]},{"Number":"043","Name":"Oddish","Classification":"Weed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"5.4 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":25,"Name":"Oddish candies"},"Next evolution(s)":[{"Number":"044","Name":"Gloom"},{"Number":"045","Name":"Vileplume"}]},{"Number":"044","Name":"Gloom","Classification":"Weed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"8.6 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"043","Name":"Oddish"}],"Next Evolution Requirements":{"Amount":100,"Name":"Oddish candies"},"Next evolution(s)":[{"Number":"045","Name":"Vileplume"}]},{"Number":"045","Name":"Vileplume","Classification":"Flower Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid",""],"Weight":"18.6 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"043","Name":"Oddish"},{"Number":"044","Name":"Gloom"}]},{"Number":"046","Name":"Paras","Classification":"Mushroom Pokèmon","Type I":["Bug"],"Type II":["Grass"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"Fast Attack(s)":["Bug Bite","Scratch"],"Weight":"5.4 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Paras candies"},"Next evolution(s)":[{"Number":"047","Name":"Parasect"}]},{"Number":"047","Name":"Parasect","Classification":"Mushroom Pokèmon","Type I":["Bug"],"Type II":["Grass"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"Fast Attack(s)":["Bug Bite","Fury Cutter"],"Weight":"29.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"046","Name":"Paras"}]},{"Number":"048","Name":"Venonat","Classification":"Insect Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Confusion"],"Weight":"30.0 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Venonat candies"},"Next evolution(s)":[{"Number":"049","Name":"Venomoth"}]},{"Number":"049","Name":"Venomoth","Classification":"Poison Moth Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Confusion"],"Weight":"12.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"048","Name":"Venonat"}]},{"Number":"050","Name":"Diglett","Classification":"Mole Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Shot","Scratch"],"Weight":"0.8 kg","Height":"0.2 m","Next Evolution Requirements":{"Amount":50,"Name":"Diglett candies"},"Next evolution(s)":[{"Number":"051","Name":"Dugtrio"}]},{"Number":"051","Name":"Dugtrio","Classification":"Mole Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Shot","Sucker Punch"],"Weight":"33.3 kg","Height":"0.7 m","Previous evolution(s)":[{"Number":"050","Name":"Diglett"}]},{"Number":"052","Name":"Meowth","Classification":"Scratch Cat Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Bite","Scratch"],"Weight":"4.2 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Meowth candies"},"Next evolution(s)":[{"Number":"053","Name":"Persian"}]},{"Number":"053","Name":"Persian","Classification":"Classy Cat Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Feint Attack","Scratch"],"Weight":"32.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"052","Name":"Meowth"}]},{"Number":"054","Name":"Psyduck","Classification":"Duck Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Water Gun","Zen Headbutt"],"Weight":"19.6 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":50,"Name":"Psyduck candies"},"Next evolution(s)":[{"Number":"055","Name":"Golduck"}]},{"Number":"055","Name":"Golduck","Classification":"Duck Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"76.6 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"054","Name":"Psyduck"}]},{"Number":"056","Name":"Mankey","Classification":"Pig Monkey Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Scratch"],"Weight":"28.0 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Mankey candies"},"Next evolution(s)":[{"Number":"057","Name":"Primeape"}]},{"Number":"057","Name":"Primeape","Classification":"Pig Monkey Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Low Kick"],"Weight":"32.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"056","Name":"Mankey"}]},{"Number":"058","Name":"Growlithe","Classification":"Puppy Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Bite","Ember"],"Weight":"19.0 kg","Height":"0.7 m","Next Evolution Requirements":{"Amount":50,"Name":"Growlithe candies"},"Next evolution(s)":[{"Number":"059","Name":"Arcanine"}]},{"Number":"059","Name":"Arcanine","Classification":"Legendary Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Bite","Fire Fang"],"Weight":"155.0 kg","Height":"1.9 m","Previous evolution(s)":[{"Number":"058","Name":"Growlithe"}]},{"Number":"060","Name":"Poliwag","Classification":"Tadpole Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"12.4 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":25,"Name":"Poliwag candies"},"Next evolution(s)":[{"Number":"061","Name":"Poliwhirl"},{"Number":"062","Name":"Poliwrath"}]},{"Number":"061","Name":"Poliwhirl","Classification":"Tadpole Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"20.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"060","Name":"Poliwag"}],"Next Evolution Requirements":{"Amount":100,"Name":"Poliwag candies"},"Next evolution(s)":[{"Number":"062","Name":"Poliwrath"}]},{"Number":"062","Name":"Poliwrath","Classification":"Tadpole Pokèmon","Type I":["Water"],"Type II":["Fighting"],"Weaknesses":["Electric","Grass","Flying","Psychic","Fairy"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"54.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"060","Name":"Poliwag"},{"Number":"061","Name":"Poliwhirl"}]},{"Number":"063","Name":"Abra","Classification":"Psi Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Zen Headbutt",""],"Weight":"19.5 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":25,"Name":"Abra candies"},"Next evolution(s)":[{"Number":"064","Name":"Kadabra"},{"Number":"065","Name":"Alakazam"}]},{"Number":"064","Name":"Kadabra","Classification":"Psi Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Psycho Cut"],"Weight":"56.5 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"063","Name":"Abra"}],"Next Evolution Requirements":{"Amount":100,"Name":"Abra candies"},"Next evolution(s)":[{"Number":"065","Name":"Alakazam"}]},{"Number":"065","Name":"Alakazam","Classification":"Psi Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Psycho Cut"],"Weight":"48.0 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"063","Name":"Abra"},{"Number":"064","Name":"Kadabra"}]},{"Number":"066","Name":"Machop","Classification":"Superpower Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Low Kick"],"Weight":"19.5 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":25,"Name":"Machop candies"},"Next evolution(s)":[{"Number":"067","Name":"Machoke"},{"Number":"068","Name":"Machamp"}]},{"Number":"067","Name":"Machoke","Classification":"Superpower Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Low Kick"],"Weight":"70.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"066","Name":"Machop"}],"Next Evolution Requirements":{"Amount":100,"Name":"Machop candies"},"Next evolution(s)":[{"Number":"068","Name":"Machamp"}]},{"Number":"068","Name":"Machamp","Classification":"Superpower Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Bullet Punch","Karate Chop"],"Weight":"130.0 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"066","Name":"Machop"},{"Number":"067","Name":"Machoke"}]},{"Number":"069","Name":"Bellsprout","Classification":"Flower Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Vine Whip"],"Weight":"4.0 kg","Height":"0.7 m","Next Evolution Requirements":{"Amount":25,"Name":"Bellsprout candies"},"Next evolution(s)":[{"Number":"070","Name":"Weepinbell"},{"Number":"071","Name":"Victreebel"}]},{"Number":"070","Name":"Weepinbell","Classification":"Flycatcher Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"6.4 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"069","Name":"Bellsprout"}],"Next Evolution Requirements":{"Amount":100,"Name":"Bellsprout candies"},"Next evolution(s)":[{"Number":"071","Name":"Victreebel"}]},{"Number":"071","Name":"Victreebel","Classification":"Flycatcher Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"15.5 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"069","Name":"Bellsprout"},{"Number":"070","Name":"Weepinbell"}]},{"Number":"072","Name":"Tentacool","Classification":"Jellyfish Pokèmon","Type I":["Water"],"Type II":["Poison"],"Weaknesses":["Electric","Ground","Psychic"],"Fast Attack(s)":["Bubble","Poison Sting"],"Weight":"45.5 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":50,"Name":"Tentacool candies"},"Next evolution(s)":[{"Number":"073","Name":"Tentacruel"}]},{"Number":"073","Name":"Tentacruel","Classification":"Jellyfish Pokèmon","Type I":["Water"],"Type II":["Poison"],"Weaknesses":["Electric","Ground","Psychic"],"Fast Attack(s)":["Acid","Poison Jab"],"Weight":"55.0 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"072","Name":"Tentacool"}]},{"Number":"074","Name":"Geodude","Classification":"Rock Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Rock Throw","Tackle"],"Weight":"20.0 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":25,"Name":"Geodude candies"},"Next evolution(s)":[{"Number":"075","Name":"Graveler"},{"Number":"076","Name":"Golem"}]},{"Number":"075","Name":"Graveler","Classification":"Rock Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Shot","Rock Throw"],"Weight":"105.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"074","Name":"Geodude"}],"Next Evolution Requirements":{"Amount":100,"Name":"Geodude candies"},"Next evolution(s)":[{"Number":"076","Name":"Golem"}]},{"Number":"076","Name":"Golem","Classification":"Megaton Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Shot","Rock Throw"],"Weight":"300.0 kg","Height":"1.4 m","Previous evolution(s)":[{"Number":"074","Name":"Geodude"},{"Number":"075","Name":"Graveler"}]},{"Number":"077","Name":"Ponyta","Classification":"Fire Horse Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Tackle"],"Weight":"30.0 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Ponyta candies"},"Next evolution(s)":[{"Number":"078","Name":"Rapidash"}]},{"Number":"078","Name":"Rapidash","Classification":"Fire Horse Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Low Kick"],"Weight":"95.0 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"077","Name":"Ponyta"}]},{"Number":"079","Name":"Slowpoke","Classification":"Dopey Pokèmon","Type I":["Water"],"Type II":["Psychic"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Water Gun"],"Weight":"36.0 kg","Height":"1.2 m","Next Evolution Requirements":{"Amount":50,"Name":"Slowpoke candies"},"Next evolution(s)":[{"Number":"080","Name":"Slowbro"}]},{"Number":"080","Name":"Slowbro","Classification":"Hermit Crab Pokèmon","Type I":["Water"],"Type II":["Psychic"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Water Gun"],"Weight":"78.5 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"079","Name":"Slowpoke"}]},{"Number":"081","Name":"Magnemite","Classification":"Magnet Pokèmon","Type I":["Electric"],"Type II":["Steel"],"Weaknesses":["Fire","Water","Ground"],"Fast Attack(s)":["Spark","Thunder Shock"],"Weight":"6.0 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Magnemite candies"},"Next evolution(s)":[{"Number":"082","Name":"Magneton"}]},{"Number":"082","Name":"Magneton","Classification":"Magnet Pokèmon","Type I":["Electric"],"Type II":["Steel"],"Weaknesses":["Fire","Water","Ground"],"Fast Attack(s)":["Spark","Thunder Shock"],"Weight":"60.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"081","Name":"Magnemite"}]},{"Number":"083","Name":"Farfetch'd","Classification":"Wild Duck Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"15.0 kg","Height":"0.8 m"},{"Number":"084","Name":"Doduo","Classification":"Twin Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Peck","Quick Attack"],"Weight":"39.2 kg","Height":"1.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Doduo candies"},"Next evolution(s)":[{"Number":"085","Name":"Dodrio"}]},{"Number":"085","Name":"Dodrio","Classification":"Triple Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Feint Attack","Steel Wing"],"Weight":"85.2 kg","Height":"1.8 m","Previous evolution(s)":[{"Number":"084","Name":"Doduo"}]},{"Number":"086","Name":"Seel","Classification":"Sea Lion Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Ice Shard","Water Gun"],"Weight":"90.0 kg","Height":"1.1 m","Next Evolution Requirements":{"Amount":50,"Name":"Seel candies"},"Next evolution(s)":[{"Number":"087","Name":"Dewgong"}]},{"Number":"087","Name":"Dewgong","Classification":"Sea Lion Pokèmon","Type I":["Water"],"Type II":["Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":["Frost Breath","Ice Shard"],"Weight":"120.0 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"086","Name":"Seel"}]},{"Number":"088","Name":"Grimer","Classification":"Sludge Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Mud Slap"],"Weight":"30.0 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":50,"Name":"Grimer candies"},"Next evolution(s)":[{"Number":"089","Name":"Muk"}]},{"Number":"089","Name":"Muk","Classification":"Sludge Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Poison Jab",""],"Weight":"30.0 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"088","Name":"Grimer"}]},{"Number":"090","Name":"Shellder","Classification":"Bivalve Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Ice Shard","Tackle"],"Weight":"4.0 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Shellder candies"},"Next evolution(s)":[{"Number":"091","Name":"Cloyster"}]},{"Number":"091","Name":"Cloyster","Classification":"Bivalve Pokèmon","Type I":["Water"],"Type II":["Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":["Frost Breath","Ice Shard"],"Weight":"132.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"090","Name":"Shellder"}]},{"Number":"092","Name":"Gastly","Classification":"Gas Pokèmon","Type I":["Ghost"],"Type II":["Poison"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":["Lick","Sucker Punch"],"Weight":"0.1 kg","Height":"1.3 m","Next Evolution Requirements":{"Amount":25,"Name":"Gastly candies"},"Next evolution(s)":[{"Number":"093","Name":"Haunter"},{"Number":"094","Name":"Gengar"}]},{"Number":"093","Name":"Haunter","Classification":"Gas Pokèmon","Type I":["Ghost"],"Type II":["Poison"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":["Lick","Shadow Claw"],"Weight":"0.1 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"092","Name":"Gastly"}],"Next Evolution Requirements":{"Amount":100,"Name":"Gastly candies"},"Next evolution(s)":[{"Number":"094","Name":"Gengar"}]},{"Number":"094","Name":"Gengar","Classification":"Shadow Pokèmon","Type I":["Ghost"],"Type II":["Poison"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":["Shadow Claw","Sucker Punch"],"Weight":"40.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"092","Name":"Gastly"},{"Number":"093","Name":"Haunter"}]},{"Number":"095","Name":"Onix","Classification":"Rock Snake Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Rock Throw","Tackle"],"Weight":"210.0 kg","Height":"8.8 m"},{"Number":"096","Name":"Drowzee","Classification":"Hypnosis Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Pound"],"Weight":"32.4 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Drowzee candies"},"Next evolution(s)":[{"Number":"097","Name":"Hypno"}]},{"Number":"097","Name":"Hypno","Classification":"Hypnosis Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"75.6 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"096","Name":"Drowzee"}]},{"Number":"098","Name":"Krabby","Classification":"River Crab Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"6.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Krabby candies"},"Next evolution(s)":[{"Number":"099","Name":"Kingler"}]},{"Number":"099","Name":"Kingler","Classification":"Pincer Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Metal Claw","Mud Shot"],"Weight":"60.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"098","Name":"Krabby"}]},{"Number":"100","Name":"Voltorb","Classification":"Ball Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Spark","Tackle"],"Weight":"10.4 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Voltorb candies"},"Next evolution(s)":[{"Number":"101","Name":"Electrode"}]},{"Number":"101","Name":"Electrode","Classification":"Ball Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Spark",""],"Weight":"66.6 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"100","Name":"Voltorb"}]},{"Number":"102","Name":"Exeggcute","Classification":"Egg Pokèmon","Type I":["Grass"],"Type II":["Psychic"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion",""],"Weight":"2.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"E"},"Next evolution(s)":[{"Number":"103","Name":"Exeggutor"}]},{"Number":"103","Name":"Exeggutor","Classification":"Coconut Pokèmon","Type I":["Grass"],"Type II":["Psychic"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"120.0 kg","Height":"2.0 m","Previous evolution(s)":[{"Number":"102","Name":"Exeggcute"}]},{"Number":"104","Name":"Cubone","Classification":"Lonely Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"6.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Cubone candies"},"Next evolution(s)":[{"Number":"105","Name":"Marowak"}]},{"Number":"105","Name":"Marowak","Classification":"Bone Keeper Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"45.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"104","Name":"Cubone"}]},{"Number":"106","Name":"Hitmonlee","Classification":"Kicking Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Low Kick","Rock Smash"],"Weight":"49.8 kg","Height":"1.5 m","Next evolution(s)":[{"Number":"107","Name":"Hitmonchan"}]},{"Number":"107","Name":"Hitmonchan","Classification":"Punching Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Bullet Punch","Rock Smash"],"Weight":"50.2 kg","Height":"1.4 m","Previous evolution(s)":[{"Number":"106","Name":"Hitmonlee"}]},{"Number":"108","Name":"Lickitung","Classification":"Licking Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Lick","Zen Headbutt"],"Weight":"65.5 kg","Height":"1.2 m"},{"Number":"109","Name":"Koffing","Classification":"Poison Gas Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Tackle"],"Weight":"1.0 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Koffing candies"},"Next evolution(s)":[{"Number":"110","Name":"Weezing"}]},{"Number":"110","Name":"Weezing","Classification":"Poison Gas Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Tackle"],"Weight":"9.5 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"109","Name":"Koffing"}]},{"Number":"111","Name":"Rhyhorn","Classification":"Spikes Pokèmon","Type I":["Ground"],"Type II":["Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"115.0 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Rhyhorn candies"},"Next evolution(s)":[{"Number":"112","Name":"Rhydon"}]},{"Number":"112","Name":"Rhydon","Classification":"Drill Pokèmon","Type I":["Ground"],"Type II":["Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"120.0 kg","Height":"1.9 m","Previous evolution(s)":[{"Number":"111","Name":"Rhyhorn"}]},{"Number":"113","Name":"Chansey","Classification":"Egg Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Pound","Zen Headbutt"],"Weight":"34.6 kg","Height":"1.1 m"},{"Number":"114","Name":"Tangela","Classification":"Vine Pokèmon","Type I":["Grass"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":["Vine Whip",""],"Weight":"35.0 kg","Height":"1.0 m"},{"Number":"115","Name":"Kangaskhan","Classification":"Parent Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Low Kick",""],"Weight":"80.0 kg","Height":"2.2 m"},{"Number":"116","Name":"Horsea","Classification":"Dragon Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Water Gun"],"Weight":"8.0 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Horsea candies"},"Next evolution(s)":[{"Number":"117","Name":"Seadra"}]},{"Number":"117","Name":"Seadra","Classification":"Dragon Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Dragon Breath","Water Gun"],"Weight":"25.0 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"116","Name":"Horsea"}]},{"Number":"118","Name":"Goldeen","Classification":"Goldfish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Peck","Mud Shot"],"Weight":"15.0 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Goldeen candies"},"Next evolution(s)":[{"Number":"119","Name":"Seaking"}]},{"Number":"119","Name":"Seaking","Classification":"Goldfish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Peck","Poison Jab"],"Weight":"39.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"118","Name":"Goldeen"}]},{"Number":"120","Name":"Staryu","Classification":"Starshape Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Quick Attack","Water Gun"],"Weight":"34.5 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":50,"Name":"Staryu candies"},"Next evolution(s)":[{"Number":"120","Name":"Staryu"}]},{"Number":"121","Name":"Starmie","Classification":"Mysterious Pokèmon","Type I":["Water"],"Type II":["Psychic"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":["Quick Attack","Water Gun"],"Weight":"80.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"121","Name":"Starmie"}]},{"Number":"122","Name":"Mr. Mime","Classification":"Barrier Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"54.5 kg","Height":"1.3 m"},{"Number":"123","Name":"Scyther","Classification":"Mantis Pokèmon","Type I":["Bug"],"Type II":["Flying"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":["Fury Cutter","Steel Wing"],"Weight":"56.0 kg","Height":"1.5 m"},{"Number":"124","Name":"Jynx","Classification":"Humanshape Pokèmon","Type I":["Ice"],"Type II":["Psychic"],"Weaknesses":["Fire","Bug","Rock","Ghost","Dark","Steel"],"Fast Attack(s)":["Frost Breath","Pound"],"Weight":"40.6 kg","Height":"1.4 m"},{"Number":"125","Name":"Electabuzz","Classification":"Electric Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Low Kick","Thunder Shock"],"Weight":"30.0 kg","Height":"1.1 m"},{"Number":"126","Name":"Magmar","Classification":"Spitfire Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Karate Chop"],"Weight":"44.5 kg","Height":"1.3 m"},{"Number":"127","Name":"Pinsir","Classification":"Stagbeetle Pokèmon","Type I":["Bug"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":["Fury Cutter","Rock Smash"],"Weight":"55.0 kg","Height":"1.5 m"},{"Number":"128","Name":"Tauros","Classification":"Wild Bull Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Tackle","Zen Headbutt"],"Weight":"88.4 kg","Height":"1.4 m"},{"Number":"129","Name":"Magikarp","Classification":"Fish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Splash",""],"Weight":"10.0 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":400,"Name":"Magikarp candies"},"Next evolution(s)":[{"Number":"130","Name":"Gyarados"}]},{"Number":"130","Name":"Gyarados","Classification":"Atrocious Pokèmon","Type I":["Water"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Bite","Dragon Breath"],"Weight":"235.0 kg","Height":"6.5 m","Previous evolution(s)":[{"Number":"129","Name":"Magikarp"}]},{"Number":"131","Name":"Lapras","Classification":"Transport Pokèmon","Type I":["Water"],"Type II":["Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":["Frost Breath","Ice Shard"],"Weight":"220.0 kg","Height":"2.5 m"},{"Number":"132","Name":"Ditto","Classification":"Transform Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"4.0 kg","Height":"0.3 m"},{"Number":"133","Name":"Eevee","Classification":"Evolution Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Quick Attack","Tackle"],"Weight":"6.5 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":25,"Name":"Eevee candies"},"Next evolution(s)":[{"Number":"134","Name":"Vaporeon"},{"Number":"135","Name":"Jolteon"},{"Number":"136","Name":"Flareon"}]},{"Number":"134","Name":"Vaporeon","Classification":"Bubble Jet Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Water Gun",""],"Weight":"29.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"133","Name":"Eevee"}]},{"Number":"135","Name":"Jolteon","Classification":"Lightning Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Thunder Shock",""],"Weight":"24.5 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"133","Name":"Eevee"}]},{"Number":"136","Name":"Flareon","Classification":"Flame Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember",""],"Weight":"25.0 kg","Height":"0.9 m","Previous evolution(s)":[{"Number":"133","Name":"Eevee"}]},{"Number":"137","Name":"Porygon","Classification":"Virtual Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Quick Attack","Tackle"],"Weight":"36.5 kg","Height":"0.8 m"},{"Number":"138","Name":"Omanyte","Classification":"Spiral Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Water Gun",""],"Weight":"7.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Omanyte candies"},"Next evolution(s)":[{"Number":"139","Name":"Omastar"}]},{"Number":"139","Name":"Omastar","Classification":"Spiral Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Rock Throw","Water Gun"],"Weight":"35.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"138","Name":"Omanyte"}]},{"Number":"140","Name":"Kabuto","Classification":"Shellfish Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Mud Shot","Scratch"],"Weight":"11.5 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Kabuto candies"},"Next evolution(s)":[{"Number":"141","Name":"Kabutops"}]},{"Number":"141","Name":"Kabutops","Classification":"Shellfish Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Fury Cutter","Mud Shot"],"Weight":"40.5 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"140","Name":"Kabuto"}]},{"Number":"142","Name":"Aerodactyl","Classification":"Fossil Pokèmon","Type I":["Rock"],"Type II":["Flying"],"Weaknesses":["Water","Electric","Ice","Rock","Steel"],"Fast Attack(s)":["Bite","Steel Wing"],"Weight":"59.0 kg","Height":"1.8 m"},{"Number":"143","Name":"Snorlax","Classification":"Sleeping Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Lick","Zen Headbutt"],"Weight":"460.0 kg","Height":"2.1 m"},{"Number":"144","Name":"Articuno","Classification":"Freeze Pokèmon","Type I":["Ice"],"Type II":["Flying"],"Weaknesses":["Fire","Electric","Rock","Steel"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"55.4 kg","Height":"1.7 m"},{"Number":"145","Name":"Zapdos","Classification":"Electric Pokèmon","Type I":["Electric"],"Type II":["Flying"],"Weaknesses":["Ice","Rock"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"52.6 kg","Height":"1.6 m"},{"Number":"146","Name":"Moltres","Classification":"Flame Pokèmon","Type I":["Fire"],"Type II":["Flying"],"Weaknesses":["Water","Electric","Rock"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"60.0 kg","Height":"2.0 m"},{"Number":"147","Name":"Dratini","Classification":"Dragon Pokèmon","Type I":["Dragon"],"Weaknesses":["Ice","Dragon","Fairy"],"Fast Attack(s)":["Dragon Breath",""],"Weight":"3.3 kg","Height":"1.8 m","Next Evolution Requirements":{"Amount":25,"Name":"Dratini candies"}},{"Number":"148","Name":"Dragonair","Classification":"Dragon Pokèmon","Type I":["Dragon"],"Weaknesses":["Ice","Dragon","Fairy"],"Fast Attack(s)":["Dragon Breath",""],"Weight":"16.5 kg","Height":"4.0 m","Next Evolution Requirements":{"Amount":100,"Name":"Dratini candies"},"Next evolution(s)":[{"Number":"149","Name":"Dragonite"}]},{"Number":"149","Name":"Dragonite","Classification":"Dragon Pokèmon","Type I":["Dragon"],"Type II":["Flying"],"Weaknesses":["Ice","Rock","Dragon","Fairy"],"Fast Attack(s)":["Dragon Breath","Steel Wing"],"Weight":"210.0 kg","Height":"2.2 m","Previous evolution(s)":[{"Number":"148","Name":"Dragonair"}]},{"Number":"150","Name":"Mewtwo","Classification":"Genetic Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"122.0 kg","Height":"2.0 m"},{"Number":"151","Name":"Mew","Classification":"New Species Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"4.0 kg","Height":"0.4 m"}] +[ + { + "Name" : "Fushigidane", + "Type II" : [ + "Poison" + ], + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "Classification" : "Seed Pokèmon", + "Type I" : [ + "Grass" + ], + "Fast Attack(s)" : [ + "Tackle", + "Vine Whip" + ], + "Weight" : "6.9 kg", + "Height" : "0.7 m", + "Number" : "001", + "Next Evolution Requirements" : { + "Name" : "Bulbasaur candies", + "Amount" : 25 + }, + "Next evolution(s)" : [ + { + "Name" : "Ivysaur", + "Number" : "002" + }, + { + "Name" : "Venusaur", + "Number" : "003" + } + ] + }, + { + "Height" : "1.0 m", + "Number" : "002", + "Next evolution(s)" : [ + { + "Number" : "003", + "Name" : "Venusaur" + } + ], + "Next Evolution Requirements" : { + "Name" : "Bulbasaur candies", + "Amount" : 100 + }, + "Fast Attack(s)" : [ + "Razor Leaf", + "Vine Whip" + ], + "Previous evolution(s)" : [ + { + "Number" : "001", + "Name" : "Bulbasaur" + } + ], + "Type I" : [ + "Grass" + ], + "Weight" : "13.0 kg", + "Name" : "Fushigisou", + "Type II" : [ + "Poison" + ], + "Classification" : "Seed Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ] + }, + { + "Number" : "003", + "Height" : "2.0 m", + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "Classification" : "Seed Pokèmon", + "Type II" : [ + "Poison" + ], + "Name" : "Fushigibana", + "Type I" : [ + "Grass" + ], + "Previous evolution(s)" : [ + { + "Number" : "001", + "Name" : "Bulbasaur" + }, + { + "Number" : "002", + "Name" : "Ivysaur" + } + ], + "Fast Attack(s)" : [ + "Razor Leaf", + "Vine Whip" + ], + "Weight" : "100.0 kg" + }, + { + "Weight" : "8.5 kg", + "Type I" : [ + "Fire" + ], + "Fast Attack(s)" : [ + "Ember", + "Scratch" + ], + "Classification" : "Lizard Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Name" : "Hitokage", + "Next Evolution Requirements" : { + "Amount" : 25, + "Name" : "Charmander candies" + }, + "Next evolution(s)" : [ + { + "Number" : "005", + "Name" : "Charmeleon" + }, + { + "Number" : "006", + "Name" : "Charizard" + } + ], + "Number" : "004", + "Height" : "0.6 m" + }, + { + "Next evolution(s)" : [ + { + "Number" : "006", + "Name" : "Charizard" + } + ], + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Charmander candies" + }, + "Height" : "1.1 m", + "Number" : "005", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Classification" : "Flame Pokèmon", + "Name" : "Lizardo", + "Weight" : "19.0 kg", + "Fast Attack(s)" : [ + "Ember", + "" + ], + "Previous evolution(s)" : [ + { + "Number" : "004", + "Name" : "Charmander" + } + ], + "Type I" : [ + "Fire" + ] + }, + { + "Height" : "1.7 m", + "Number" : "006", + "Classification" : "Flame Pokèmon", + "Weaknesses" : [ + "Water", + "Electric", + "Rock" + ], + "Name" : "Lizardon", + "Type II" : [ + "Flying" + ], + "Weight" : "90.5 kg", + "Previous evolution(s)" : [ + { + "Number" : "004", + "Name" : "Charmander" + }, + { + "Name" : "Charmeleon", + "Number" : "005" + } + ], + "Fast Attack(s)" : [ + "Ember", + "Wing Attack" + ], + "Type I" : [ + "Fire" + ] + }, + { + "Weight" : "9.0 kg", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Tackle", + "Bubble" + ], + "Name" : "Zenigame", + "Classification" : "Tiny Turtle Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Height" : "0.5 m", + "Number" : "007", + "Next Evolution Requirements" : { + "Amount" : 25, + "Name" : "Squirtle candies" + }, + "Next evolution(s)" : [ + { + "Name" : "Wartortle", + "Number" : "008" + }, + { + "Name" : "Blastoise", + "Number" : "009" + } + ] + }, + { + "Classification" : "Turtle Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Name" : "Kameil", + "Weight" : "22.5 kg", + "Previous evolution(s)" : [ + { + "Name" : "Squirtle", + "Number" : "007" + } + ], + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Bite", + "Water Gun" + ], + "Next evolution(s)" : [ + { + "Name" : "Blastoise", + "Number" : "009" + } + ], + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Squirtle candies" + }, + "Number" : "008", + "Height" : "1.0 m" + }, + { + "Weight" : "85.5 kg", + "Previous evolution(s)" : [ + { + "Number" : "007", + "Name" : "Squirtle" + }, + { + "Number" : "008", + "Name" : "Wartortle" + } + ], + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Bite", + "Water Gun" + ], + "Name" : "Kamex", + "Classification" : "Shellfish Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Number" : "009", + "Height" : "1.6 m" + }, + { + "Next evolution(s)" : [ + { + "Number" : "011", + "Name" : "Metapod" + }, + { + "Number" : "012", + "Name" : "Butterfree" + } + ], + "Next Evolution Requirements" : { + "Amount" : 12, + "Name" : "Caterpie candies" + }, + "Number" : "010", + "Height" : "0.3 m", + "Weaknesses" : [ + "Fire", + "Flying", + "Rock" + ], + "Classification" : "Worm Pokèmon", + "Name" : "Caterpie", + "Weight" : "2.9 kg", + "Type I" : [ + "Bug" + ], + "Fast Attack(s)" : [ + "Bug Bite", + "Tackle" + ] + }, + { + "Next evolution(s)" : [ + { + "Name" : "Butterfree", + "Number" : "012" + } + ], + "Next Evolution Requirements" : { + "Name" : "Caterpie candies", + "Amount" : 50 + }, + "Number" : "011", + "Height" : "0.7 m", + "Fast Attack(s)" : [ + "Bug Bite", + "Tackle" + ], + "Previous evolution(s)" : [ + { + "Name" : "Caterpie", + "Number" : "010" + } + ], + "Type I" : [ + "Bug" + ], + "Weight" : "9.9 kg", + "Weaknesses" : [ + "Fire", + "Flying", + "Rock" + ], + "Classification" : "Cocoon Pokèmon", + "Name" : "Transel" + }, + { + "Height" : "1.1 m", + "Number" : "012", + "Classification" : "Butterfly Pokèmon", + "Weaknesses" : [ + "Fire", + "Electric", + "Ice", + "Flying", + "Rock" + ], + "Name" : "Butterfree", + "Type II" : [ + "Flying" + ], + "Weight" : "32.0 kg", + "Previous evolution(s)" : [ + { + "Number" : "010", + "Name" : "Caterpie" + }, + { + "Name" : "Metapod", + "Number" : "011" + } + ], + "Type I" : [ + "Bug" + ], + "Fast Attack(s)" : [ + "Bug Bite", + "Confusion" + ] + }, + { + "Height" : "0.3 m", + "Number" : "013", + "Next evolution(s)" : [ + { + "Number" : "014", + "Name" : "Kakuna" + }, + { + "Number" : "015", + "Name" : "Beedrill" + } + ], + "Next Evolution Requirements" : { + "Name" : "Weedle candies", + "Amount" : 12 + }, + "Weight" : "3.2 kg", + "Fast Attack(s)" : [ + "Bug Bite", + "Poison Sting" + ], + "Type I" : [ + "Bug" + ], + "Name" : "Beedle", + "Type II" : [ + "Poison" + ], + "Weaknesses" : [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "Classification" : "Hairy Pokèmon" + }, + { + "Weight" : "10.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Weedle", + "Number" : "013" + } + ], + "Type I" : [ + "Bug" + ], + "Fast Attack(s)" : [ + "Bug Bite", + "Posion Sting" + ], + "Classification" : "Cocoon Pokèmon", + "Weaknesses" : [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "Type II" : [ + "Poison" + ], + "Name" : "Cocoon", + "Next Evolution Requirements" : { + "Name" : "Weedle candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Number" : "015", + "Name" : "Beedrill" + } + ], + "Number" : "014", + "Height" : "0.6 m" + }, + { + "Weaknesses" : [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "Classification" : "Poison Bee Pokèmon", + "Type II" : [ + "Poison" + ], + "Name" : "Spear", + "Weight" : "29.5 kg", + "Fast Attack(s)" : [ + "Bug Bite", + "Poison Jab" + ], + "Previous evolution(s)" : [ + { + "Name" : "Weedle", + "Number" : "013" + }, + { + "Name" : "Kakuna", + "Number" : "014" + } + ], + "Type I" : [ + "Bug" + ], + "Number" : "015", + "Height" : "1.0 m" + }, + { + "Height" : "0.3 m", + "Number" : "016", + "Next evolution(s)" : [ + { + "Number" : "017", + "Name" : "Pidgeotto" + }, + { + "Number" : "018", + "Name" : "Pidgeot" + } + ], + "Next Evolution Requirements" : { + "Name" : "Pidgey candies", + "Amount" : 12 + }, + "Name" : "Poppo", + "Type II" : [ + "Flying" + ], + "Classification" : "Tiny Bird Pokèmon", + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Fast Attack(s)" : [ + "Quick Attack", + "Tackle" + ], + "Type I" : [ + "Normal" + ], + "Special Attack(s)" : [ + "Aerial Ace", + "Air Cutter", + "Twister" + ], + "Weight" : "1.8 kg" + }, + { + "Fast Attack(s)" : [ + "Steel Wing", + "Wing Attack" + ], + "Previous evolution(s)" : [ + { + "Number" : "016", + "Name" : "Pidgey" + } + ], + "Type I" : [ + "Normal" + ], + "Weight" : "30.0 kg", + "Special Attack(s)" : [ + "Aerial Ace", + "Air Cutter", + "Twister" + ], + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Classification" : "Bird Pokèmon", + "Name" : "Pigeon", + "Type II" : [ + "Flying" + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Pidgey candies" + }, + "Next evolution(s)" : [ + { + "Name" : "Pidgeot", + "Number" : "018" + } + ], + "Height" : "1.1 m", + "Number" : "017" + }, + { + "Height" : "1.5 m", + "Number" : "018", + "Previous evolution(s)" : [ + { + "Number" : "016", + "Name" : "Pidgey" + }, + { + "Number" : "017", + "Name" : "Pidgeotto" + } + ], + "Fast Attack(s)" : [ + "Steel Wing", + "Wing Attack" + ], + "Type I" : [ + "Normal" + ], + "Special Attack(s)" : [ + "Hurricane" + ], + "Weight" : "39.5 kg", + "Name" : "Pigeot", + "Type II" : [ + "Flying" + ], + "Classification" : "Bird Pokèmon", + "Weaknesses" : [ + "Electric", + "Rock" + ] + }, + { + "Fast Attack(s)" : [ + "Quick Attack", + "Tackle" + ], + "Type I" : [ + "Normal" + ], + "Special Attack(s)" : [ + "Body Slam", + "Dig", + "Hyper Fang" + ], + "Weight" : "3.5 kg", + "Classification" : "Mouse Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Name" : "Koratta", + "Next evolution(s)" : [ + { + "Name" : "Raticate", + "Number" : "020" + } + ], + "Next Evolution Requirements" : { + "Name" : "Rattata candies", + "Amount" : 25 + }, + "Number" : "019", + "Height" : "0.3 m" + }, + { + "Height" : "0.7 m", + "Number" : "020", + "Name" : "Ratta", + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Mouse Pokèmon", + "Special Attack(s)" : [ + "Dig", + "Hyper Beam", + "Hyper Fang" + ], + "Weight" : "18.5 kg", + "Type I" : [ + "Normal" + ], + "Previous evolution(s)" : [ + { + "Number" : "019", + "Name" : "Rattata" + } + ], + "Fast Attack(s)" : [ + "Bite", + "Quick Attack" + ] + }, + { + "Type II" : [ + "Flying" + ], + "Name" : "Onisuzume", + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Classification" : "Tiny Bird Pokèmon", + "Fast Attack(s)" : [ + "Peck", + "Quick Attack" + ], + "Type I" : [ + "Normal" + ], + "Weight" : "2.0 kg", + "Number" : "021", + "Height" : "0.3 m", + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Spearow candies" + }, + "Next evolution(s)" : [ + { + "Name" : "Fearow", + "Number" : "022" + } + ] + }, + { + "Weight" : "38.0 kg", + "Fast Attack(s)" : [ + "Peck", + "Steel Wing" + ], + "Previous evolution(s)" : [ + { + "Name" : "Spearow", + "Number" : "021" + } + ], + "Type I" : [ + "Normal" + ], + "Classification" : "Beak Pokèmon", + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Type II" : [ + "Flying" + ], + "Name" : "Onidrill", + "Number" : "022", + "Height" : "1.2 m" + }, + { + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Ekans candies" + }, + "Next evolution(s)" : [ + { + "Number" : "024", + "Name" : "Arbok" + } + ], + "Number" : "023", + "Height" : "2.0 m", + "Weight" : "6.9 kg", + "Fast Attack(s)" : [ + "Acid", + "Poison Sting" + ], + "Type I" : [ + "Poison" + ], + "Classification" : "Snake Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Name" : "Arbo" + }, + { + "Height" : "3.5 m", + "Number" : "024", + "Weight" : "65.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Ekans", + "Number" : "023" + } + ], + "Fast Attack(s)" : [ + "Acid", + "Bite" + ], + "Type I" : [ + "Poison" + ], + "Name" : "Arbok", + "Classification" : "Cobra Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic" + ] + }, + { + "Next evolution(s)" : [ + { + "Name" : "Raichu", + "Number" : "026" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Pikachu candies" + }, + "Number" : "025", + "Height" : "0.4 m", + "Fast Attack(s)" : [ + "Quick Attack", + "Thunder Shock" + ], + "Type I" : [ + "Electric" + ], + "Weight" : "6.0 kg", + "Classification" : "Mouse Pokèmon", + "Weaknesses" : [ + "Ground" + ], + "Name" : "Pikachu" + }, + { + "Height" : "0.8 m", + "Number" : "026", + "Weaknesses" : [ + "Ground" + ], + "Classification" : "Mouse Pokèmon", + "Name" : "Raichu", + "Type I" : [ + "Electric" + ], + "Previous evolution(s)" : [ + { + "Name" : "Pikachu", + "Number" : "025" + } + ], + "Fast Attack(s)" : [ + "Thunder Shock", + "Spark" + ], + "Weight" : "30.0 kg" + }, + { + "Next Evolution Requirements" : { + "Name" : "Sandshrew candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Sandslash", + "Number" : "028" + } + ], + "Height" : "0.6 m", + "Number" : "027", + "Weaknesses" : [ + "Water", + "Grass", + "Ice" + ], + "Classification" : "Mouse Pokèmon", + "Name" : "Sand", + "Fast Attack(s)" : [ + "Mud Shot", + "Scratch" + ], + "Type I" : [ + "Ground" + ], + "Weight" : "12.0 kg" + }, + { + "Height" : "1.0 m", + "Number" : "028", + "Weaknesses" : [ + "Water", + "Grass", + "Ice" + ], + "Classification" : "Mouse Pokèmon", + "Name" : "Sandpan", + "Previous evolution(s)" : [ + { + "Name" : "Sandshrew", + "Number" : "027" + } + ], + "Type I" : [ + "Ground" + ], + "Fast Attack(s)" : [ + "Metal Claw", + "Mud Shot" + ], + "Weight" : "29.5 kg" + }, + { + "Weight" : "7.0 kg", + "Fast Attack(s)" : [ + "Bite", + "Poison Sting" + ], + "Type I" : [ + "Poison" + ], + "Name" : "Nidoran♀", + "Classification" : "Poison Pin Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Height" : "0.4 m", + "Number" : "029", + "Next evolution(s)" : [ + { + "Name" : "Nidorina", + "Number" : "030" + }, + { + "Number" : "031", + "Name" : "Nidoqueen" + } + ] + }, + { + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Nidoran F candies" + }, + "Next evolution(s)" : [ + { + "Name" : "Nidoqueen", + "Number" : "031" + } + ], + "Height" : "0.8 m", + "Number" : "030", + "Classification" : "Poison Pin Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Name" : "Nidoriina", + "Fast Attack(s)" : [ + "Bite", + "Poison Sting" + ], + "Previous evolution(s)" : [ + { + "Number" : "029", + "Name" : "Nidoran F" + } + ], + "Type I" : [ + "Poison" + ], + "Weight" : "20.0 kg" + }, + { + "Weight" : "60.0 kg", + "Type I" : [ + "Poison" + ], + "Previous evolution(s)" : [ + { + "Name" : "Nidoran F", + "Number" : "029" + }, + { + "Name" : "Nidorina", + "Number" : "030" + } + ], + "Fast Attack(s)" : [ + "Bite", + "Poison Jab" + ], + "Classification" : "Drill Pokèmon", + "Weaknesses" : [ + "Water", + "Ice", + "Ground", + "Psychic" + ], + "Name" : "Nidoqueen", + "Type II" : [ + "Ground" + ], + "Number" : "031", + "Height" : "1.3 m" + }, + { + "Classification" : "Poison Pin Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Name" : "Nidoran♂", + "Weight" : "9.0 kg", + "Type I" : [ + "Poison" + ], + "Fast Attack(s)" : [ + "Peck", + "Poison Sting" + ], + "Next evolution(s)" : [ + { + "Name" : "Nidorino", + "Number" : "033" + }, + { + "Number" : "034", + "Name" : "Nidoking" + } + ], + "Number" : "032", + "Height" : "0.5 m" + }, + { + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "NidoranM candies" + }, + "Next evolution(s)" : [ + { + "Name" : "Nidoking", + "Number" : "034" + } + ], + "Number" : "033", + "Height" : "0.9 m", + "Fast Attack(s)" : [ + "Bite", + "Poison Jab" + ], + "Previous evolution(s)" : [ + { + "Name" : "Nidoran M", + "Number" : "032" + } + ], + "Type I" : [ + "Poison" + ], + "Weight" : "19.5 kg", + "Classification" : "Poison Pin Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Name" : "Nidorino" + }, + { + "Name" : "Nidoking", + "Type II" : [ + "Ground" + ], + "Classification" : "Drill Pokèmon", + "Weaknesses" : [ + "Water", + "Ice", + "Ground", + "Psychic" + ], + "Weight" : "62.0 kg", + "Fast Attack(s)" : [ + "Fury Cutter", + "Poison Jab" + ], + "Previous evolution(s)" : [ + { + "Number" : "032", + "Name" : "Nidoran M" + }, + { + "Number" : "033", + "Name" : "Nidorino" + } + ], + "Type I" : [ + "Poison" + ], + "Height" : "1.4 m", + "Number" : "034" + }, + { + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Fairy Pokèmon", + "Name" : "Pippi", + "Weight" : "7.5 kg", + "Fast Attack(s)" : [ + "Pound", + "Zen Headbutt" + ], + "Type I" : [ + "Normal" + ], + "Next evolution(s)" : [ + { + "Number" : "036", + "Name" : "Clefable" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Clefairy candies" + }, + "Height" : "0.6 m", + "Number" : "035" + }, + { + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Fairy Pokèmon", + "Name" : "Pixy", + "Previous evolution(s)" : [ + { + "Name" : "Clefairy", + "Number" : "035" + } + ], + "Fast Attack(s)" : [ + "Pound", + "Zen Headbutt" + ], + "Type I" : [ + "Normal" + ], + "Weight" : "40.0 kg", + "Number" : "036", + "Height" : "1.3 m" + }, + { + "Next evolution(s)" : [ + { + "Name" : "Ninetales", + "Number" : "038" + } + ], + "Next Evolution Requirements" : { + "Name" : "Vulpi", + "Amount" : 50 + }, + "Number" : "037", + "Height" : "0.6 m", + "Classification" : "Fox Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Name" : "Rokon", + "Fast Attack(s)" : [ + "Ember", + "Quick Attack" + ], + "Type I" : [ + "Fire" + ], + "Weight" : "9.9 kg" + }, + { + "Name" : "Kyukon", + "Classification" : "Fox Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Fast Attack(s)" : [ + "Ember", + "Quick Attack" + ], + "Previous evolution(s)" : [ + { + "Name" : "Vulpix", + "Number" : "037" + } + ], + "Type I" : [ + "Fire" + ], + "Weight" : "19.9 kg", + "Number" : "038", + "Height" : "1.1 m" + }, + { + "Name" : "Purin", + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Balloon Pokèmon", + "Weight" : "5.5 kg", + "Fast Attack(s)" : [ + "Feint Attack", + "Pound" + ], + "Type I" : [ + "Normal" + ], + "Number" : "039", + "Height" : "0.5 m", + "Next evolution(s)" : [ + { + "Name" : "Jigglypuff", + "Number" : "039" + } + ], + "Next Evolution Requirements" : { + "Name" : "Jigglypuff candies", + "Amount" : 50 + } + }, + { + "Type I" : [ + "Normal" + ], + "Previous evolution(s)" : [ + { + "Name" : "Wigglytuff", + "Number" : "040" + } + ], + "Fast Attack(s)" : [ + "Feint Attack", + "Pound" + ], + "Weight" : "12.0 kg", + "Name" : "Pukurin", + "Classification" : "Balloon Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Number" : "040", + "Height" : "1.0 m" + }, + { + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Zubat candies" + }, + "Next evolution(s)" : [ + { + "Name" : "Golbat", + "Number" : "042" + } + ], + "Height" : "0.8 m", + "Number" : "041", + "Weaknesses" : [ + "Electric", + "Ice", + "Psychic", + "Rock" + ], + "Classification" : "Bat Pokèmon", + "Name" : "Zubat", + "Type II" : [ + "Flying" + ], + "Fast Attack(s)" : [ + "Bite", + "Quick Attack" + ], + "Type I" : [ + "Poison" + ], + "Weight" : "7.5 kg" + }, + { + "Height" : "1.6 m", + "Number" : "042", + "Classification" : "Bat Pokèmon", + "Weaknesses" : [ + "Electric", + "Ice", + "Psychic", + "Rock" + ], + "Type II" : [ + "Flying" + ], + "Name" : "Golbat", + "Weight" : "55.0 kg", + "Previous evolution(s)" : [ + { + "Number" : "041", + "Name" : "Zubat" + } + ], + "Type I" : [ + "Poison" + ], + "Fast Attack(s)" : [ + "Bite", + "Wing Attack" + ] + }, + { + "Next evolution(s)" : [ + { + "Name" : "Gloom", + "Number" : "044" + }, + { + "Name" : "Vileplume", + "Number" : "045" + } + ], + "Next Evolution Requirements" : { + "Name" : "Oddish candies", + "Amount" : 25 + }, + "Height" : "0.5 m", + "Number" : "043", + "Classification" : "Weed Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "Name" : "Nazonokusa", + "Type II" : [ + "Poison" + ], + "Weight" : "5.4 kg", + "Type I" : [ + "Grass" + ], + "Fast Attack(s)" : [ + "Acid", + "Razor Leaf" + ] + }, + { + "Fast Attack(s)" : [ + "Acid", + "Razor Leaf" + ], + "Previous evolution(s)" : [ + { + "Number" : "043", + "Name" : "Oddish" + } + ], + "Type I" : [ + "Grass" + ], + "Weight" : "8.6 kg", + "Classification" : "Weed Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "Name" : "Kusaihana", + "Type II" : [ + "Poison" + ], + "Next evolution(s)" : [ + { + "Number" : "045", + "Name" : "Vileplume" + } + ], + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Oddish candies" + }, + "Number" : "044", + "Height" : "0.8 m" + }, + { + "Height" : "1.2 m", + "Number" : "045", + "Weight" : "18.6 kg", + "Previous evolution(s)" : [ + { + "Number" : "043", + "Name" : "Oddish" + }, + { + "Number" : "044", + "Name" : "Gloom" + } + ], + "Type I" : [ + "Grass" + ], + "Fast Attack(s)" : [ + "Acid", + "" + ], + "Classification" : "Flower Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "Name" : "Rafureshia", + "Type II" : [ + "Poison" + ] + }, + { + "Number" : "046", + "Height" : "0.3 m", + "Next Evolution Requirements" : { + "Name" : "Paras candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Parasect", + "Number" : "047" + } + ], + "Type II" : [ + "Grass" + ], + "Name" : "Paras", + "Weaknesses" : [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Rock" + ], + "Classification" : "Mushroom Pokèmon", + "Fast Attack(s)" : [ + "Bug Bite", + "Scratch" + ], + "Type I" : [ + "Bug" + ], + "Weight" : "5.4 kg" + }, + { + "Weight" : "29.5 kg", + "Previous evolution(s)" : [ + { + "Name" : "Paras", + "Number" : "046" + } + ], + "Type I" : [ + "Bug" + ], + "Fast Attack(s)" : [ + "Bug Bite", + "Fury Cutter" + ], + "Classification" : "Mushroom Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Rock" + ], + "Type II" : [ + "Grass" + ], + "Name" : "Parasect", + "Number" : "047", + "Height" : "1.0 m" + }, + { + "Next Evolution Requirements" : { + "Name" : "Venonat candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Number" : "049", + "Name" : "Venomoth" + } + ], + "Number" : "048", + "Height" : "1.0 m", + "Type I" : [ + "Bug" + ], + "Fast Attack(s)" : [ + "Bug Bite", + "Confusion" + ], + "Weight" : "30.0 kg", + "Weaknesses" : [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "Classification" : "Insect Pokèmon", + "Name" : "Kongpang", + "Type II" : [ + "Poison" + ] + }, + { + "Number" : "049", + "Height" : "1.5 m", + "Previous evolution(s)" : [ + { + "Name" : "Venonat", + "Number" : "048" + } + ], + "Fast Attack(s)" : [ + "Bug Bite", + "Confusion" + ], + "Type I" : [ + "Bug" + ], + "Weight" : "12.5 kg", + "Name" : "Morphon", + "Type II" : [ + "Poison" + ], + "Weaknesses" : [ + "Fire", + "Flying", + "Psychic", + "Rock" + ], + "Classification" : "Poison Moth Pokèmon" + }, + { + "Number" : "050", + "Height" : "0.2 m", + "Next evolution(s)" : [ + { + "Name" : "Dugtrio", + "Number" : "051" + } + ], + "Next Evolution Requirements" : { + "Name" : "Diglett candies", + "Amount" : 50 + }, + "Name" : "Digda", + "Weaknesses" : [ + "Water", + "Grass", + "Ice" + ], + "Classification" : "Mole Pokèmon", + "Type I" : [ + "Ground" + ], + "Fast Attack(s)" : [ + "Mud Shot", + "Scratch" + ], + "Weight" : "0.8 kg" + }, + { + "Name" : "Dugtrio", + "Classification" : "Mole Pokèmon", + "Weaknesses" : [ + "Water", + "Grass", + "Ice" + ], + "Type I" : [ + "Ground" + ], + "Previous evolution(s)" : [ + { + "Name" : "Diglett", + "Number" : "050" + } + ], + "Fast Attack(s)" : [ + "Mud Shot", + "Sucker Punch" + ], + "Weight" : "33.3 kg", + "Height" : "0.7 m", + "Number" : "051" + }, + { + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Bite", + "Scratch" + ], + "Weight" : "4.2 kg", + "Classification" : "Scratch Cat Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Name" : "Nyarth", + "Next Evolution Requirements" : { + "Name" : "Meowth candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Persian", + "Number" : "053" + } + ], + "Height" : "0.4 m", + "Number" : "052" + }, + { + "Height" : "1.0 m", + "Number" : "053", + "Classification" : "Classy Cat Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Name" : "Persian", + "Weight" : "32.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Meowth", + "Number" : "052" + } + ], + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Feint Attack", + "Scratch" + ] + }, + { + "Height" : "0.8 m", + "Number" : "054", + "Next Evolution Requirements" : { + "Name" : "Psyduck candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Number" : "055", + "Name" : "Golduck" + } + ], + "Name" : "Koduck", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Classification" : "Duck Pokèmon", + "Weight" : "19.6 kg", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Water Gun", + "Zen Headbutt" + ] + }, + { + "Weight" : "76.6 kg", + "Previous evolution(s)" : [ + { + "Name" : "Psyduck", + "Number" : "054" + } + ], + "Fast Attack(s)" : [ + "Confusion", + "Zen Headbutt" + ], + "Type I" : [ + "Water" + ], + "Classification" : "Duck Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Name" : "Golduck", + "Number" : "055", + "Height" : "1.7 m" + }, + { + "Height" : "0.5 m", + "Number" : "056", + "Next Evolution Requirements" : { + "Name" : "Mankey candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Number" : "057", + "Name" : "Primeape" + } + ], + "Fast Attack(s)" : [ + "Karate Chop", + "Scratch" + ], + "Type I" : [ + "Fighting" + ], + "Weight" : "28.0 kg", + "Name" : "Mankey", + "Weaknesses" : [ + "Flying", + "Psychic", + "Fairy" + ], + "Classification" : "Pig Monkey Pokèmon" + }, + { + "Height" : "1.0 m", + "Number" : "057", + "Previous evolution(s)" : [ + { + "Name" : "Mankey", + "Number" : "056" + } + ], + "Type I" : [ + "Fighting" + ], + "Fast Attack(s)" : [ + "Karate Chop", + "Low Kick" + ], + "Weight" : "32.0 kg", + "Classification" : "Pig Monkey Pokèmon", + "Weaknesses" : [ + "Flying", + "Psychic", + "Fairy" + ], + "Name" : "Okorizaru" + }, + { + "Height" : "0.7 m", + "Number" : "058", + "Next evolution(s)" : [ + { + "Name" : "Arcanine", + "Number" : "059" + } + ], + "Next Evolution Requirements" : { + "Name" : "Growlithe candies", + "Amount" : 50 + }, + "Name" : "Gardie", + "Classification" : "Puppy Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Weight" : "19.0 kg", + "Type I" : [ + "Fire" + ], + "Fast Attack(s)" : [ + "Bite", + "Ember" + ] + }, + { + "Weight" : "155.0 kg", + "Fast Attack(s)" : [ + "Bite", + "Fire Fang" + ], + "Previous evolution(s)" : [ + { + "Number" : "058", + "Name" : "Growlithe" + } + ], + "Type I" : [ + "Fire" + ], + "Name" : "Windie", + "Classification" : "Legendary Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Height" : "1.9 m", + "Number" : "059" + }, + { + "Next Evolution Requirements" : { + "Amount" : 25, + "Name" : "Poliwag candies" + }, + "Next evolution(s)" : [ + { + "Name" : "Poliwhirl", + "Number" : "061" + }, + { + "Name" : "Poliwrath", + "Number" : "062" + } + ], + "Number" : "060", + "Height" : "0.6 m", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Classification" : "Tadpole Pokèmon", + "Name" : "Nyoromo", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Bubble", + "Mud Shot" + ], + "Weight" : "12.4 kg" + }, + { + "Classification" : "Tadpole Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Name" : "Nyorozo", + "Weight" : "20.0 kg", + "Type I" : [ + "Water" + ], + "Previous evolution(s)" : [ + { + "Name" : "Poliwag", + "Number" : "060" + } + ], + "Fast Attack(s)" : [ + "Bubble", + "Mud Shot" + ], + "Next Evolution Requirements" : { + "Name" : "Poliwag candies", + "Amount" : 100 + }, + "Next evolution(s)" : [ + { + "Number" : "062", + "Name" : "Poliwrath" + } + ], + "Number" : "061", + "Height" : "1.0 m" + }, + { + "Height" : "1.3 m", + "Number" : "062", + "Classification" : "Tadpole Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass", + "Flying", + "Psychic", + "Fairy" + ], + "Type II" : [ + "Fighting" + ], + "Name" : "Nyorobon", + "Weight" : "54.0 kg", + "Fast Attack(s)" : [ + "Bubble", + "Mud Shot" + ], + "Previous evolution(s)" : [ + { + "Name" : "Poliwag", + "Number" : "060" + }, + { + "Number" : "061", + "Name" : "Poliwhirl" + } + ], + "Type I" : [ + "Water" + ] + }, + { + "Next Evolution Requirements" : { + "Amount" : 25, + "Name" : "Abra candies" + }, + "Next evolution(s)" : [ + { + "Number" : "064", + "Name" : "Kadabra" + }, + { + "Number" : "065", + "Name" : "Alakazam" + } + ], + "Height" : "0.9 m", + "Number" : "063", + "Classification" : "Psi Pokèmon", + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Name" : "Casey", + "Type I" : [ + "Psychic" + ], + "Fast Attack(s)" : [ + "Zen Headbutt", + "" + ], + "Weight" : "19.5 kg" + }, + { + "Next evolution(s)" : [ + { + "Name" : "Alakazam", + "Number" : "065" + } + ], + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Abra candies" + }, + "Height" : "1.3 m", + "Number" : "064", + "Classification" : "Psi Pokèmon", + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Name" : "Yungerer", + "Weight" : "56.5 kg", + "Type I" : [ + "Psychic" + ], + "Previous evolution(s)" : [ + { + "Name" : "Abra", + "Number" : "063" + } + ], + "Fast Attack(s)" : [ + "Confusion", + "Psycho Cut" + ] + }, + { + "Name" : "Foodin", + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Classification" : "Psi Pokèmon", + "Weight" : "48.0 kg", + "Type I" : [ + "Psychic" + ], + "Previous evolution(s)" : [ + { + "Number" : "063", + "Name" : "Abra" + }, + { + "Name" : "Kadabra", + "Number" : "064" + } + ], + "Fast Attack(s)" : [ + "Confusion", + "Psycho Cut" + ], + "Height" : "1.5 m", + "Number" : "065" + }, + { + "Fast Attack(s)" : [ + "Karate Chop", + "Low Kick" + ], + "Type I" : [ + "Fighting" + ], + "Weight" : "19.5 kg", + "Classification" : "Superpower Pokèmon", + "Weaknesses" : [ + "Flying", + "Psychic", + "Fairy" + ], + "Name" : "Wanriky", + "Next evolution(s)" : [ + { + "Number" : "067", + "Name" : "Machoke" + }, + { + "Number" : "068", + "Name" : "Machamp" + } + ], + "Next Evolution Requirements" : { + "Name" : "Machop candies", + "Amount" : 25 + }, + "Height" : "0.8 m", + "Number" : "066" + }, + { + "Number" : "067", + "Height" : "1.5 m", + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Machop candies" + }, + "Next evolution(s)" : [ + { + "Number" : "068", + "Name" : "Machamp" + } + ], + "Name" : "Goriky", + "Classification" : "Superpower Pokèmon", + "Weaknesses" : [ + "Flying", + "Psychic", + "Fairy" + ], + "Type I" : [ + "Fighting" + ], + "Previous evolution(s)" : [ + { + "Number" : "066", + "Name" : "Machop" + } + ], + "Fast Attack(s)" : [ + "Karate Chop", + "Low Kick" + ], + "Weight" : "70.5 kg" + }, + { + "Fast Attack(s)" : [ + "Bullet Punch", + "Karate Chop" + ], + "Previous evolution(s)" : [ + { + "Number" : "066", + "Name" : "Machop" + }, + { + "Number" : "067", + "Name" : "Machoke" + } + ], + "Type I" : [ + "Fighting" + ], + "Weight" : "130.0 kg", + "Classification" : "Superpower Pokèmon", + "Weaknesses" : [ + "Flying", + "Psychic", + "Fairy" + ], + "Name" : "Kairiky", + "Number" : "068", + "Height" : "1.6 m" + }, + { + "Height" : "0.7 m", + "Number" : "069", + "Next evolution(s)" : [ + { + "Number" : "070", + "Name" : "Weepinbell" + }, + { + "Number" : "071", + "Name" : "Victreebel" + } + ], + "Next Evolution Requirements" : { + "Name" : "Bellsprout candies", + "Amount" : 25 + }, + "Weight" : "4.0 kg", + "Type I" : [ + "Grass" + ], + "Fast Attack(s)" : [ + "Acid", + "Vine Whip" + ], + "Type II" : [ + "Poison" + ], + "Name" : "Madatsubomi", + "Classification" : "Flower Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ] + }, + { + "Height" : "1.0 m", + "Number" : "070", + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Bellsprout candies" + }, + "Next evolution(s)" : [ + { + "Number" : "071", + "Name" : "Victreebel" + } + ], + "Name" : "Utsudon", + "Type II" : [ + "Poison" + ], + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "Classification" : "Flycatcher Pokèmon", + "Weight" : "6.4 kg", + "Previous evolution(s)" : [ + { + "Number" : "069", + "Name" : "Bellsprout" + } + ], + "Type I" : [ + "Grass" + ], + "Fast Attack(s)" : [ + "Acid", + "Razor Leaf" + ] + }, + { + "Type II" : [ + "Poison" + ], + "Name" : "Utsubot", + "Classification" : "Flycatcher Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Flying", + "Psychic" + ], + "Previous evolution(s)" : [ + { + "Name" : "Bellsprout", + "Number" : "069" + }, + { + "Name" : "Weepinbell", + "Number" : "070" + } + ], + "Type I" : [ + "Grass" + ], + "Fast Attack(s)" : [ + "Acid", + "Razor Leaf" + ], + "Weight" : "15.5 kg", + "Number" : "071", + "Height" : "1.7 m" + }, + { + "Name" : "Menokurage", + "Type II" : [ + "Poison" + ], + "Classification" : "Jellyfish Pokèmon", + "Weaknesses" : [ + "Electric", + "Ground", + "Psychic" + ], + "Weight" : "45.5 kg", + "Fast Attack(s)" : [ + "Bubble", + "Poison Sting" + ], + "Type I" : [ + "Water" + ], + "Height" : "0.9 m", + "Number" : "072", + "Next evolution(s)" : [ + { + "Number" : "073", + "Name" : "Tentacruel" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Tentacool candies" + } + }, + { + "Height" : "1.6 m", + "Number" : "073", + "Type II" : [ + "Poison" + ], + "Name" : "Dokukurage", + "Weaknesses" : [ + "Electric", + "Ground", + "Psychic" + ], + "Classification" : "Jellyfish Pokèmon", + "Weight" : "55.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Tentacool", + "Number" : "072" + } + ], + "Fast Attack(s)" : [ + "Acid", + "Poison Jab" + ], + "Type I" : [ + "Water" + ] + }, + { + "Type I" : [ + "Rock" + ], + "Fast Attack(s)" : [ + "Rock Throw", + "Tackle" + ], + "Weight" : "20.0 kg", + "Name" : "Ishitsubute", + "Type II" : [ + "Ground" + ], + "Weaknesses" : [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "Classification" : "Rock Pokèmon", + "Number" : "074", + "Height" : "0.4 m", + "Next evolution(s)" : [ + { + "Name" : "Graveler", + "Number" : "075" + }, + { + "Name" : "Golem", + "Number" : "076" + } + ], + "Next Evolution Requirements" : { + "Amount" : 25, + "Name" : "Geodude candies" + } + }, + { + "Weight" : "105.0 kg", + "Fast Attack(s)" : [ + "Mud Shot", + "Rock Throw" + ], + "Previous evolution(s)" : [ + { + "Name" : "Geodude", + "Number" : "074" + } + ], + "Type I" : [ + "Rock" + ], + "Type II" : [ + "Ground" + ], + "Name" : "Golone", + "Classification" : "Rock Pokèmon", + "Weaknesses" : [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "Height" : "1.0 m", + "Number" : "075", + "Next evolution(s)" : [ + { + "Name" : "Golem", + "Number" : "076" + } + ], + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Geodude candies" + } + }, + { + "Name" : "Golonya", + "Type II" : [ + "Ground" + ], + "Classification" : "Megaton Pokèmon", + "Weaknesses" : [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "Weight" : "300.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Geodude", + "Number" : "074" + }, + { + "Name" : "Graveler", + "Number" : "075" + } + ], + "Fast Attack(s)" : [ + "Mud Shot", + "Rock Throw" + ], + "Type I" : [ + "Rock" + ], + "Number" : "076", + "Height" : "1.4 m" + }, + { + "Next Evolution Requirements" : { + "Name" : "Ponyta candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Rapidash", + "Number" : "078" + } + ], + "Number" : "077", + "Height" : "1.0 m", + "Weight" : "30.0 kg", + "Fast Attack(s)" : [ + "Ember", + "Tackle" + ], + "Type I" : [ + "Fire" + ], + "Classification" : "Fire Horse Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Name" : "Ponyta" + }, + { + "Height" : "1.7 m", + "Number" : "078", + "Weight" : "95.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Ponyta", + "Number" : "077" + } + ], + "Fast Attack(s)" : [ + "Ember", + "Low Kick" + ], + "Type I" : [ + "Fire" + ], + "Classification" : "Fire Horse Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Name" : "Gallop" + }, + { + "Weaknesses" : [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "Classification" : "Dopey Pokèmon", + "Type II" : [ + "Psychic" + ], + "Name" : "Yadon", + "Weight" : "36.0 kg", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Confusion", + "Water Gun" + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Slowpoke candies" + }, + "Next evolution(s)" : [ + { + "Number" : "080", + "Name" : "Slowbro" + } + ], + "Number" : "079", + "Height" : "1.2 m" + }, + { + "Height" : "1.6 m", + "Number" : "080", + "Fast Attack(s)" : [ + "Confusion", + "Water Gun" + ], + "Previous evolution(s)" : [ + { + "Name" : "Slowpoke", + "Number" : "079" + } + ], + "Type I" : [ + "Water" + ], + "Weight" : "78.5 kg", + "Name" : "Yadoran", + "Type II" : [ + "Psychic" + ], + "Classification" : "Hermit Crab Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ] + }, + { + "Fast Attack(s)" : [ + "Spark", + "Thunder Shock" + ], + "Type I" : [ + "Electric" + ], + "Weight" : "6.0 kg", + "Name" : "Coil", + "Type II" : [ + "Steel" + ], + "Weaknesses" : [ + "Fire", + "Water", + "Ground" + ], + "Classification" : "Magnet Pokèmon", + "Height" : "0.3 m", + "Number" : "081", + "Next evolution(s)" : [ + { + "Name" : "Magneton", + "Number" : "082" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Magnemite candies" + } + }, + { + "Height" : "1.0 m", + "Number" : "082", + "Weight" : "60.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Magnemite", + "Number" : "081" + } + ], + "Fast Attack(s)" : [ + "Spark", + "Thunder Shock" + ], + "Type I" : [ + "Electric" + ], + "Weaknesses" : [ + "Fire", + "Water", + "Ground" + ], + "Classification" : "Magnet Pokèmon", + "Name" : "Rarecoil", + "Type II" : [ + "Steel" + ] + }, + { + "Height" : "0.8 m", + "Number" : "083", + "Fast Attack(s)" : [ + "Unknown" + ], + "Type I" : [ + "Normal" + ], + "Special Attack(s)" : [ + "Unknown" + ], + "Weight" : "15.0 kg", + "Type II" : [ + "Flying" + ], + "Name" : "Kamonegi", + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Classification" : "Wild Duck Pokèmon" + }, + { + "Next Evolution Requirements" : { + "Name" : "Doduo candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Dodrio", + "Number" : "085" + } + ], + "Height" : "1.4 m", + "Number" : "084", + "Weight" : "39.2 kg", + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Peck", + "Quick Attack" + ], + "Classification" : "Twin Bird Pokèmon", + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Type II" : [ + "Flying" + ], + "Name" : "Dodo" + }, + { + "Type II" : [ + "Flying" + ], + "Name" : "Dodorio", + "Classification" : "Triple Bird Pokèmon", + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Weight" : "85.2 kg", + "Previous evolution(s)" : [ + { + "Number" : "084", + "Name" : "Doduo" + } + ], + "Fast Attack(s)" : [ + "Feint Attack", + "Steel Wing" + ], + "Type I" : [ + "Normal" + ], + "Number" : "085", + "Height" : "1.8 m" + }, + { + "Next evolution(s)" : [ + { + "Number" : "087", + "Name" : "Dewgong" + } + ], + "Next Evolution Requirements" : { + "Name" : "Seel candies", + "Amount" : 50 + }, + "Height" : "1.1 m", + "Number" : "086", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Classification" : "Sea Lion Pokèmon", + "Name" : "Pawou", + "Weight" : "90.0 kg", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Ice Shard", + "Water Gun" + ] + }, + { + "Previous evolution(s)" : [ + { + "Number" : "086", + "Name" : "Seel" + } + ], + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Frost Breath", + "Ice Shard" + ], + "Weight" : "120.0 kg", + "Classification" : "Sea Lion Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "Name" : "Jugon", + "Type II" : [ + "Ice" + ], + "Number" : "087", + "Height" : "1.7 m" + }, + { + "Next evolution(s)" : [ + { + "Number" : "089", + "Name" : "Muk" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Grimer candies" + }, + "Height" : "0.9 m", + "Number" : "088", + "Type I" : [ + "Poison" + ], + "Fast Attack(s)" : [ + "Acid", + "Mud Slap" + ], + "Weight" : "30.0 kg", + "Classification" : "Sludge Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Name" : "Betbeter" + }, + { + "Height" : "1.2 m", + "Number" : "089", + "Type I" : [ + "Poison" + ], + "Previous evolution(s)" : [ + { + "Name" : "Grimer", + "Number" : "088" + } + ], + "Fast Attack(s)" : [ + "Poison Jab", + "" + ], + "Weight" : "30.0 kg", + "Name" : "Betbeton", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Classification" : "Sludge Pokèmon" + }, + { + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Classification" : "Bivalve Pokèmon", + "Name" : "Shellder", + "Weight" : "4.0 kg", + "Fast Attack(s)" : [ + "Ice Shard", + "Tackle" + ], + "Type I" : [ + "Water" + ], + "Next Evolution Requirements" : { + "Name" : "Shellder candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Cloyster", + "Number" : "091" + } + ], + "Height" : "0.3 m", + "Number" : "090" + }, + { + "Weaknesses" : [ + "Electric", + "Grass", + "Fighting", + "Rock" + ], + "Classification" : "Bivalve Pokèmon", + "Name" : "Parshen", + "Type II" : [ + "Ice" + ], + "Type I" : [ + "Water" + ], + "Previous evolution(s)" : [ + { + "Name" : "Shellder", + "Number" : "090" + } + ], + "Fast Attack(s)" : [ + "Frost Breath", + "Ice Shard" + ], + "Weight" : "132.5 kg", + "Height" : "1.5 m", + "Number" : "091" + }, + { + "Number" : "092", + "Height" : "1.3 m", + "Next evolution(s)" : [ + { + "Number" : "093", + "Name" : "Haunter" + }, + { + "Number" : "094", + "Name" : "Gengar" + } + ], + "Next Evolution Requirements" : { + "Amount" : 25, + "Name" : "Gastly candies" + }, + "Type I" : [ + "Ghost" + ], + "Fast Attack(s)" : [ + "Lick", + "Sucker Punch" + ], + "Weight" : "0.1 kg", + "Name" : "Ghos", + "Type II" : [ + "Poison" + ], + "Weaknesses" : [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "Classification" : "Gas Pokèmon" + }, + { + "Number" : "093", + "Height" : "1.6 m", + "Next evolution(s)" : [ + { + "Number" : "094", + "Name" : "Gengar" + } + ], + "Next Evolution Requirements" : { + "Name" : "Gastly candies", + "Amount" : 100 + }, + "Name" : "Ghost", + "Type II" : [ + "Poison" + ], + "Classification" : "Gas Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "Previous evolution(s)" : [ + { + "Number" : "092", + "Name" : "Gastly" + } + ], + "Fast Attack(s)" : [ + "Lick", + "Shadow Claw" + ], + "Type I" : [ + "Ghost" + ], + "Weight" : "0.1 kg" + }, + { + "Height" : "1.5 m", + "Number" : "094", + "Classification" : "Shadow Pokèmon", + "Weaknesses" : [ + "Ground", + "Psychic", + "Ghost", + "Dark" + ], + "Name" : "Gangar", + "Type II" : [ + "Poison" + ], + "Type I" : [ + "Ghost" + ], + "Previous evolution(s)" : [ + { + "Name" : "Gastly", + "Number" : "092" + }, + { + "Number" : "093", + "Name" : "Haunter" + } + ], + "Fast Attack(s)" : [ + "Shadow Claw", + "Sucker Punch" + ], + "Weight" : "40.5 kg" + }, + { + "Height" : "8.8 m", + "Number" : "095", + "Classification" : "Rock Snake Pokèmon", + "Weaknesses" : [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "Name" : "Iwark", + "Type II" : [ + "Ground" + ], + "Weight" : "210.0 kg", + "Type I" : [ + "Rock" + ], + "Fast Attack(s)" : [ + "Rock Throw", + "Tackle" + ] + }, + { + "Next evolution(s)" : [ + { + "Number" : "097", + "Name" : "Hypno" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Drowzee candies" + }, + "Height" : "1.0 m", + "Number" : "096", + "Fast Attack(s)" : [ + "Confusion", + "Pound" + ], + "Type I" : [ + "Psychic" + ], + "Weight" : "32.4 kg", + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Classification" : "Hypnosis Pokèmon", + "Name" : "Sleepe" + }, + { + "Height" : "1.6 m", + "Number" : "097", + "Name" : "Sleeper", + "Classification" : "Hypnosis Pokèmon", + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Weight" : "75.6 kg", + "Previous evolution(s)" : [ + { + "Number" : "096", + "Name" : "Drowzee" + } + ], + "Type I" : [ + "Psychic" + ], + "Fast Attack(s)" : [ + "Confusion", + "Zen Headbutt" + ] + }, + { + "Next Evolution Requirements" : { + "Name" : "Krabby candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Number" : "099", + "Name" : "Kingler" + } + ], + "Number" : "098", + "Height" : "0.4 m", + "Weight" : "6.5 kg", + "Fast Attack(s)" : [ + "Bubble", + "Mud Shot" + ], + "Type I" : [ + "Water" + ], + "Classification" : "River Crab Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Name" : "Crab" + }, + { + "Number" : "099", + "Height" : "1.3 m", + "Weight" : "60.0 kg", + "Previous evolution(s)" : [ + { + "Number" : "098", + "Name" : "Krabby" + } + ], + "Fast Attack(s)" : [ + "Metal Claw", + "Mud Shot" + ], + "Type I" : [ + "Water" + ], + "Classification" : "Pincer Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Name" : "Kingler" + }, + { + "Weight" : "10.4 kg", + "Type I" : [ + "Electric" + ], + "Fast Attack(s)" : [ + "Spark", + "Tackle" + ], + "Name" : "Biriridama", + "Weaknesses" : [ + "Ground" + ], + "Classification" : "Ball Pokèmon", + "Number" : "100", + "Height" : "0.5 m", + "Next Evolution Requirements" : { + "Name" : "Voltorb candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Number" : "101", + "Name" : "Electrode" + } + ] + }, + { + "Number" : "101", + "Height" : "1.2 m", + "Previous evolution(s)" : [ + { + "Name" : "Voltorb", + "Number" : "100" + } + ], + "Fast Attack(s)" : [ + "Spark", + "" + ], + "Type I" : [ + "Electric" + ], + "Weight" : "66.6 kg", + "Name" : "Marumine", + "Weaknesses" : [ + "Ground" + ], + "Classification" : "Ball Pokèmon" + }, + { + "Next evolution(s)" : [ + { + "Name" : "Exeggutor", + "Number" : "103" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "E" + }, + "Height" : "0.4 m", + "Number" : "102", + "Weight" : "2.5 kg", + "Type I" : [ + "Grass" + ], + "Fast Attack(s)" : [ + "Confusion", + "" + ], + "Classification" : "Egg Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Ghost", + "Dark" + ], + "Name" : "Tamatama", + "Type II" : [ + "Psychic" + ] + }, + { + "Number" : "103", + "Height" : "2.0 m", + "Weight" : "120.0 kg", + "Type I" : [ + "Grass" + ], + "Previous evolution(s)" : [ + { + "Number" : "102", + "Name" : "Exeggcute" + } + ], + "Fast Attack(s)" : [ + "Confusion", + "Zen Headbutt" + ], + "Weaknesses" : [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug", + "Ghost", + "Dark" + ], + "Classification" : "Coconut Pokèmon", + "Name" : "Nassy", + "Type II" : [ + "Psychic" + ] + }, + { + "Next Evolution Requirements" : { + "Name" : "Cubone candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Marowak", + "Number" : "105" + } + ], + "Height" : "0.4 m", + "Number" : "104", + "Weight" : "6.5 kg", + "Type I" : [ + "Ground" + ], + "Fast Attack(s)" : [ + "Mud Slap", + "Rock Smash" + ], + "Classification" : "Lonely Pokèmon", + "Weaknesses" : [ + "Water", + "Grass", + "Ice" + ], + "Name" : "Karakara" + }, + { + "Number" : "105", + "Height" : "1.0 m", + "Weaknesses" : [ + "Water", + "Grass", + "Ice" + ], + "Classification" : "Bone Keeper Pokèmon", + "Name" : "Garagara", + "Previous evolution(s)" : [ + { + "Name" : "Cubone", + "Number" : "104" + } + ], + "Fast Attack(s)" : [ + "Mud Slap", + "Rock Smash" + ], + "Type I" : [ + "Ground" + ], + "Weight" : "45.0 kg" + }, + { + "Weight" : "49.8 kg", + "Fast Attack(s)" : [ + "Low Kick", + "Rock Smash" + ], + "Type I" : [ + "Fighting" + ], + "Name" : "Sawamular", + "Classification" : "Kicking Pokèmon", + "Weaknesses" : [ + "Flying", + "Psychic", + "Fairy" + ], + "Number" : "106", + "Height" : "1.5 m", + "Next evolution(s)" : [ + { + "Name" : "Hitmonchan", + "Number" : "107" + } + ] + }, + { + "Type I" : [ + "Fighting" + ], + "Previous evolution(s)" : [ + { + "Number" : "106", + "Name" : "Hitmonlee" + } + ], + "Fast Attack(s)" : [ + "Bullet Punch", + "Rock Smash" + ], + "Weight" : "50.2 kg", + "Classification" : "Punching Pokèmon", + "Weaknesses" : [ + "Flying", + "Psychic", + "Fairy" + ], + "Name" : "Ebiwalar", + "Height" : "1.4 m", + "Number" : "107" + }, + { + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Lick", + "Zen Headbutt" + ], + "Weight" : "65.5 kg", + "Name" : "Beroringa", + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Licking Pokèmon", + "Number" : "108", + "Height" : "1.2 m" + }, + { + "Next evolution(s)" : [ + { + "Name" : "Weezing", + "Number" : "110" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Koffing candies" + }, + "Number" : "109", + "Height" : "0.6 m", + "Fast Attack(s)" : [ + "Acid", + "Tackle" + ], + "Type I" : [ + "Poison" + ], + "Weight" : "1.0 kg", + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Classification" : "Poison Gas Pokèmon", + "Name" : "Dogars" + }, + { + "Number" : "110", + "Height" : "1.2 m", + "Weight" : "9.5 kg", + "Fast Attack(s)" : [ + "Acid", + "Tackle" + ], + "Previous evolution(s)" : [ + { + "Name" : "Koffing", + "Number" : "109" + } + ], + "Type I" : [ + "Poison" + ], + "Weaknesses" : [ + "Ground", + "Psychic" + ], + "Classification" : "Poison Gas Pokèmon", + "Name" : "Matadogas" + }, + { + "Weight" : "115.0 kg", + "Fast Attack(s)" : [ + "Mud Slap", + "Rock Smash" + ], + "Type I" : [ + "Ground" + ], + "Name" : "Sihorn", + "Type II" : [ + "Rock" + ], + "Weaknesses" : [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "Classification" : "Spikes Pokèmon", + "Number" : "111", + "Height" : "1.0 m", + "Next Evolution Requirements" : { + "Name" : "Rhyhorn candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Rhydon", + "Number" : "112" + } + ] + }, + { + "Previous evolution(s)" : [ + { + "Name" : "Rhyhorn", + "Number" : "111" + } + ], + "Fast Attack(s)" : [ + "Mud Slap", + "Rock Smash" + ], + "Type I" : [ + "Ground" + ], + "Weight" : "120.0 kg", + "Name" : "Sidon", + "Type II" : [ + "Rock" + ], + "Classification" : "Drill Pokèmon", + "Weaknesses" : [ + "Water", + "Grass", + "Ice", + "Fighting", + "Ground", + "Steel" + ], + "Number" : "112", + "Height" : "1.9 m" + }, + { + "Height" : "1.1 m", + "Number" : "113", + "Name" : "Lucky", + "Classification" : "Egg Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Fast Attack(s)" : [ + "Pound", + "Zen Headbutt" + ], + "Type I" : [ + "Normal" + ], + "Weight" : "34.6 kg" + }, + { + "Height" : "1.0 m", + "Number" : "114", + "Fast Attack(s)" : [ + "Vine Whip", + "" + ], + "Type I" : [ + "Grass" + ], + "Weight" : "35.0 kg", + "Classification" : "Vine Pokèmon", + "Weaknesses" : [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug" + ], + "Name" : "Monjara" + }, + { + "Number" : "115", + "Height" : "2.2 m", + "Weight" : "80.0 kg", + "Fast Attack(s)" : [ + "Low Kick", + "" + ], + "Type I" : [ + "Normal" + ], + "Classification" : "Parent Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Name" : "Garura" + }, + { + "Height" : "0.4 m", + "Number" : "116", + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Horsea candies" + }, + "Next evolution(s)" : [ + { + "Number" : "117", + "Name" : "Seadra" + } + ], + "Fast Attack(s)" : [ + "Bubble", + "Water Gun" + ], + "Type I" : [ + "Water" + ], + "Weight" : "8.0 kg", + "Name" : "Tattu", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Classification" : "Dragon Pokèmon" + }, + { + "Height" : "1.2 m", + "Number" : "117", + "Previous evolution(s)" : [ + { + "Name" : "Horsea", + "Number" : "116" + } + ], + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Dragon Breath", + "Water Gun" + ], + "Weight" : "25.0 kg", + "Classification" : "Dragon Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Name" : "Seadra" + }, + { + "Weight" : "15.0 kg", + "Fast Attack(s)" : [ + "Peck", + "Mud Shot" + ], + "Type I" : [ + "Water" + ], + "Name" : "Tosakinto", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Classification" : "Goldfish Pokèmon", + "Height" : "0.6 m", + "Number" : "118", + "Next evolution(s)" : [ + { + "Number" : "119", + "Name" : "Seaking" + } + ], + "Next Evolution Requirements" : { + "Amount" : 50, + "Name" : "Goldeen candies" + } + }, + { + "Name" : "Azumao", + "Classification" : "Goldfish Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Fast Attack(s)" : [ + "Peck", + "Poison Jab" + ], + "Previous evolution(s)" : [ + { + "Name" : "Goldeen", + "Number" : "118" + } + ], + "Type I" : [ + "Water" + ], + "Weight" : "39.0 kg", + "Height" : "1.3 m", + "Number" : "119" + }, + { + "Classification" : "Starshape Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Name" : "Hitodeman", + "Weight" : "34.5 kg", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Quick Attack", + "Water Gun" + ], + "Next evolution(s)" : [ + { + "Number" : "120", + "Name" : "Staryu" + } + ], + "Next Evolution Requirements" : { + "Name" : "Staryu candies", + "Amount" : 50 + }, + "Number" : "120", + "Height" : "0.8 m" + }, + { + "Weaknesses" : [ + "Electric", + "Grass", + "Bug", + "Ghost", + "Dark" + ], + "Classification" : "Mysterious Pokèmon", + "Type II" : [ + "Psychic" + ], + "Name" : "Starmie", + "Weight" : "80.0 kg", + "Previous evolution(s)" : [ + { + "Name" : "Starmie", + "Number" : "121" + } + ], + "Fast Attack(s)" : [ + "Quick Attack", + "Water Gun" + ], + "Type I" : [ + "Water" + ], + "Height" : "1.1 m", + "Number" : "121" + }, + { + "Type I" : [ + "Psychic" + ], + "Fast Attack(s)" : [ + "Confusion", + "Zen Headbutt" + ], + "Weight" : "54.5 kg", + "Name" : "Barrierd", + "Classification" : "Barrier Pokèmon", + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Height" : "1.3 m", + "Number" : "122" + }, + { + "Name" : "Strike", + "Type II" : [ + "Flying" + ], + "Weaknesses" : [ + "Fire", + "Electric", + "Ice", + "Flying", + "Rock" + ], + "Classification" : "Mantis Pokèmon", + "Fast Attack(s)" : [ + "Fury Cutter", + "Steel Wing" + ], + "Type I" : [ + "Bug" + ], + "Weight" : "56.0 kg", + "Height" : "1.5 m", + "Number" : "123" + }, + { + "Number" : "124", + "Height" : "1.4 m", + "Type II" : [ + "Psychic" + ], + "Name" : "Rougela", + "Classification" : "Humanshape Pokèmon", + "Weaknesses" : [ + "Fire", + "Bug", + "Rock", + "Ghost", + "Dark", + "Steel" + ], + "Weight" : "40.6 kg", + "Type I" : [ + "Ice" + ], + "Fast Attack(s)" : [ + "Frost Breath", + "Pound" + ] + }, + { + "Weaknesses" : [ + "Ground" + ], + "Classification" : "Electric Pokèmon", + "Name" : "Eleboo", + "Weight" : "30.0 kg", + "Type I" : [ + "Electric" + ], + "Fast Attack(s)" : [ + "Low Kick", + "Thunder Shock" + ], + "Number" : "125", + "Height" : "1.1 m" + }, + { + "Fast Attack(s)" : [ + "Ember", + "Karate Chop" + ], + "Type I" : [ + "Fire" + ], + "Weight" : "44.5 kg", + "Classification" : "Spitfire Pokèmon", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Name" : "Boober", + "Height" : "1.3 m", + "Number" : "126" + }, + { + "Weight" : "55.0 kg", + "Fast Attack(s)" : [ + "Fury Cutter", + "Rock Smash" + ], + "Type I" : [ + "Bug" + ], + "Name" : "Kailios", + "Weaknesses" : [ + "Fire", + "Flying", + "Rock" + ], + "Classification" : "Stagbeetle Pokèmon", + "Number" : "127", + "Height" : "1.5 m" + }, + { + "Classification" : "Wild Bull Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Name" : "Kentauros", + "Weight" : "88.4 kg", + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Tackle", + "Zen Headbutt" + ], + "Number" : "128", + "Height" : "1.4 m" + }, + { + "Height" : "0.9 m", + "Number" : "129", + "Next evolution(s)" : [ + { + "Name" : "Gyarados", + "Number" : "130" + } + ], + "Next Evolution Requirements" : { + "Name" : "Magikarp candies", + "Amount" : 400 + }, + "Weight" : "10.0 kg", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Splash", + "" + ], + "Name" : "Koiking", + "Classification" : "Fish Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass" + ] + }, + { + "Weight" : "235.0 kg", + "Type I" : [ + "Water" + ], + "Previous evolution(s)" : [ + { + "Name" : "Magikarp", + "Number" : "129" + } + ], + "Fast Attack(s)" : [ + "Bite", + "Dragon Breath" + ], + "Classification" : "Atrocious Pokèmon", + "Weaknesses" : [ + "Electric", + "Rock" + ], + "Name" : "Gyarados", + "Type II" : [ + "Flying" + ], + "Number" : "130", + "Height" : "6.5 m" + }, + { + "Number" : "131", + "Height" : "2.5 m", + "Type I" : [ + "Water" + ], + "Fast Attack(s)" : [ + "Frost Breath", + "Ice Shard" + ], + "Weight" : "220.0 kg", + "Name" : "Laplace", + "Type II" : [ + "Ice" + ], + "Classification" : "Transport Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass", + "Fighting", + "Rock" + ] + }, + { + "Special Attack(s)" : [ + "Unknown" + ], + "Weight" : "4.0 kg", + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Unknown" + ], + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Transform Pokèmon", + "Name" : "Metamon", + "Height" : "0.3 m", + "Number" : "132" + }, + { + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Quick Attack", + "Tackle" + ], + "Weight" : "6.5 kg", + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Evolution Pokèmon", + "Name" : "Eievui", + "Next evolution(s)" : [ + { + "Number" : "134", + "Name" : "Vaporeon" + }, + { + "Number" : "135", + "Name" : "Jolteon" + }, + { + "Number" : "136", + "Name" : "Flareon" + } + ], + "Next Evolution Requirements" : { + "Amount" : 25, + "Name" : "Eevee candies" + }, + "Height" : "0.3 m", + "Number" : "133" + }, + { + "Number" : "134", + "Height" : "1.0 m", + "Name" : "Showers", + "Weaknesses" : [ + "Electric", + "Grass" + ], + "Classification" : "Bubble Jet Pokèmon", + "Type I" : [ + "Water" + ], + "Previous evolution(s)" : [ + { + "Name" : "Eevee", + "Number" : "133" + } + ], + "Fast Attack(s)" : [ + "Water Gun", + "" + ], + "Weight" : "29.0 kg" + }, + { + "Previous evolution(s)" : [ + { + "Name" : "Eevee", + "Number" : "133" + } + ], + "Type I" : [ + "Electric" + ], + "Fast Attack(s)" : [ + "Thunder Shock", + "" + ], + "Weight" : "24.5 kg", + "Name" : "Thunders", + "Classification" : "Lightning Pokèmon", + "Weaknesses" : [ + "Ground" + ], + "Height" : "0.8 m", + "Number" : "135" + }, + { + "Weight" : "25.0 kg", + "Type I" : [ + "Fire" + ], + "Previous evolution(s)" : [ + { + "Name" : "Eevee", + "Number" : "133" + } + ], + "Fast Attack(s)" : [ + "Ember", + "" + ], + "Name" : "Booster", + "Weaknesses" : [ + "Water", + "Ground", + "Rock" + ], + "Classification" : "Flame Pokèmon", + "Number" : "136", + "Height" : "0.9 m" + }, + { + "Height" : "0.8 m", + "Number" : "137", + "Weight" : "36.5 kg", + "Fast Attack(s)" : [ + "Quick Attack", + "Tackle" + ], + "Type I" : [ + "Normal" + ], + "Weaknesses" : [ + "Fighting" + ], + "Classification" : "Virtual Pokèmon", + "Name" : "Porygon" + }, + { + "Number" : "138", + "Height" : "0.4 m", + "Next Evolution Requirements" : { + "Name" : "Omanyte candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Omastar", + "Number" : "139" + } + ], + "Type II" : [ + "Water" + ], + "Name" : "Omnite", + "Weaknesses" : [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "Classification" : "Spiral Pokèmon", + "Fast Attack(s)" : [ + "Water Gun", + "" + ], + "Type I" : [ + "Rock" + ], + "Weight" : "7.5 kg" + }, + { + "Weight" : "35.0 kg", + "Fast Attack(s)" : [ + "Rock Throw", + "Water Gun" + ], + "Previous evolution(s)" : [ + { + "Name" : "Omanyte", + "Number" : "138" + } + ], + "Type I" : [ + "Rock" + ], + "Type II" : [ + "Water" + ], + "Name" : "Omstar", + "Classification" : "Spiral Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "Height" : "1.0 m", + "Number" : "139" + }, + { + "Next Evolution Requirements" : { + "Name" : "Kabuto candies", + "Amount" : 50 + }, + "Next evolution(s)" : [ + { + "Name" : "Kabutops", + "Number" : "141" + } + ], + "Number" : "140", + "Height" : "0.5 m", + "Weight" : "11.5 kg", + "Fast Attack(s)" : [ + "Mud Shot", + "Scratch" + ], + "Type I" : [ + "Rock" + ], + "Weaknesses" : [ + "Electric", + "Grass", + "Fighting", + "Ground" + ], + "Classification" : "Shellfish Pokèmon", + "Type II" : [ + "Water" + ], + "Name" : "Kabuto" + }, + { + "Number" : "141", + "Height" : "1.3 m", + "Previous evolution(s)" : [ + { + "Name" : "Kabuto", + "Number" : "140" + } + ], + "Fast Attack(s)" : [ + "Fury Cutter", + "Mud Shot" + ], + "Type I" : [ + "Rock" + ], + "Weight" : "40.5 kg", + "Name" : "Kabutops", + "Type II" : [ + "Water" + ], + "Classification" : "Shellfish Pokèmon", + "Weaknesses" : [ + "Electric", + "Grass", + "Fighting", + "Ground" + ] + }, + { + "Number" : "142", + "Height" : "1.8 m", + "Fast Attack(s)" : [ + "Bite", + "Steel Wing" + ], + "Type I" : [ + "Rock" + ], + "Weight" : "59.0 kg", + "Name" : "Ptera", + "Type II" : [ + "Flying" + ], + "Classification" : "Fossil Pokèmon", + "Weaknesses" : [ + "Water", + "Electric", + "Ice", + "Rock", + "Steel" + ] + }, + { + "Name" : "Kabigon", + "Classification" : "Sleeping Pokèmon", + "Weaknesses" : [ + "Fighting" + ], + "Weight" : "460.0 kg", + "Type I" : [ + "Normal" + ], + "Fast Attack(s)" : [ + "Lick", + "Zen Headbutt" + ], + "Height" : "2.1 m", + "Number" : "143" + }, + { + "Special Attack(s)" : [ + "Unknown" + ], + "Weight" : "55.4 kg", + "Fast Attack(s)" : [ + "Unknown" + ], + "Type I" : [ + "Ice" + ], + "Weaknesses" : [ + "Fire", + "Electric", + "Rock", + "Steel" + ], + "Classification" : "Freeze Pokèmon", + "Name" : "Freezer", + "Type II" : [ + "Flying" + ], + "Number" : "144", + "Height" : "1.7 m" + }, + { + "Weaknesses" : [ + "Ice", + "Rock" + ], + "Classification" : "Electric Pokèmon", + "Name" : "Thunder", + "Type II" : [ + "Flying" + ], + "Type I" : [ + "Electric" + ], + "Fast Attack(s)" : [ + "Unknown" + ], + "Special Attack(s)" : [ + "Unknown" + ], + "Weight" : "52.6 kg", + "Height" : "1.6 m", + "Number" : "145" + }, + { + "Number" : "146", + "Height" : "2.0 m", + "Fast Attack(s)" : [ + "Unknown" + ], + "Type I" : [ + "Fire" + ], + "Special Attack(s)" : [ + "Unknown" + ], + "Weight" : "60.0 kg", + "Classification" : "Flame Pokèmon", + "Weaknesses" : [ + "Water", + "Electric", + "Rock" + ], + "Name" : "Fire", + "Type II" : [ + "Flying" + ] + }, + { + "Next Evolution Requirements" : { + "Name" : "Dratini candies", + "Amount" : 25 + }, + "Number" : "147", + "Height" : "1.8 m", + "Classification" : "Dragon Pokèmon", + "Weaknesses" : [ + "Ice", + "Dragon", + "Fairy" + ], + "Name" : "Miniryu", + "Fast Attack(s)" : [ + "Dragon Breath", + "" + ], + "Type I" : [ + "Dragon" + ], + "Weight" : "3.3 kg" + }, + { + "Next evolution(s)" : [ + { + "Number" : "149", + "Name" : "Dragonite" + } + ], + "Next Evolution Requirements" : { + "Amount" : 100, + "Name" : "Dratini candies" + }, + "Height" : "4.0 m", + "Number" : "148", + "Classification" : "Dragon Pokèmon", + "Weaknesses" : [ + "Ice", + "Dragon", + "Fairy" + ], + "Name" : "Hakuryu", + "Type I" : [ + "Dragon" + ], + "Fast Attack(s)" : [ + "Dragon Breath", + "" + ], + "Weight" : "16.5 kg" + }, + { + "Number" : "149", + "Height" : "2.2 m", + "Name" : "Kairyu", + "Type II" : [ + "Flying" + ], + "Classification" : "Dragon Pokèmon", + "Weaknesses" : [ + "Ice", + "Rock", + "Dragon", + "Fairy" + ], + "Previous evolution(s)" : [ + { + "Name" : "Dragonair", + "Number" : "148" + } + ], + "Type I" : [ + "Dragon" + ], + "Fast Attack(s)" : [ + "Dragon Breath", + "Steel Wing" + ], + "Weight" : "210.0 kg" + }, + { + "Height" : "2.0 m", + "Number" : "150", + "Weight" : "122.0 kg", + "Special Attack(s)" : [ + "Unknown" + ], + "Type I" : [ + "Psychic" + ], + "Fast Attack(s)" : [ + "Unknown" + ], + "Classification" : "Genetic Pokèmon", + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Name" : "Mewtwo" + }, + { + "Number" : "151", + "Height" : "0.4 m", + "Weight" : "4.0 kg", + "Special Attack(s)" : [ + "Unknown" + ], + "Type I" : [ + "Psychic" + ], + "Fast Attack(s)" : [ + "Unknown" + ], + "Weaknesses" : [ + "Bug", + "Ghost", + "Dark" + ], + "Classification" : "New Species Pokèmon", + "Name" : "Mew" + } +] From cbe604672f186ab1d8ff28f2089f666f9c43f822 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 18:20:11 +0000 Subject: [PATCH 02/39] gitignore stuff --- .gitignore | 5 + data.json | 3 - pokemon_pb2.py | 1794 ------------------------------------------------ 3 files changed, 5 insertions(+), 1797 deletions(-) delete mode 100644 data.json delete mode 100644 pokemon_pb2.py diff --git a/.gitignore b/.gitignore index 72364f99..384b2087 100644 --- a/.gitignore +++ b/.gitignore @@ -87,3 +87,8 @@ ENV/ # Rope project settings .ropeproject + +data.json +core +pokemon_pb2.py +*~ \ No newline at end of file diff --git a/data.json b/data.json deleted file mode 100644 index 41b42e67..00000000 --- a/data.json +++ /dev/null @@ -1,3 +0,0 @@ -[ - -] diff --git a/pokemon_pb2.py b/pokemon_pb2.py deleted file mode 100644 index 95f4675b..00000000 --- a/pokemon_pb2.py +++ /dev/null @@ -1,1794 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: pokemon.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='pokemon.proto', - package='', - serialized_pb=_b('\n\rpokemon.proto\"\xc5\x06\n\x0eRequestEnvelop\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x0e\n\x06rpc_id\x18\x03 \x01(\x03\x12*\n\x08requests\x18\x04 \x03(\x0b\x32\x18.RequestEnvelop.Requests\x12*\n\x08unknown6\x18\x06 \x01(\x0b\x32\x18.RequestEnvelop.Unknown6\x12\x10\n\x08latitude\x18\x07 \x01(\x06\x12\x11\n\tlongitude\x18\x08 \x01(\x06\x12\x10\n\x08\x61ltitude\x18\t \x01(\x06\x12&\n\x04\x61uth\x18\n \x01(\x0b\x32\x18.RequestEnvelop.AuthInfo\x12\x1f\n\tunknown11\x18\x0b \x01(\x0b\x32\x0c.UnknownAuth\x12\x11\n\tunknown12\x18\x0c \x01(\x03\x1a)\n\x08Requests\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x1a$\n\x13MessageSingleString\x12\r\n\x05\x62ytes\x18\x01 \x02(\x0c\x1a\x1e\n\x10MessageSingleInt\x12\n\n\x02\x66\x31\x18\x01 \x02(\x03\x1a(\n\x0eMessageTwoInts\x12\n\n\x02\x66\x31\x18\x01 \x02(\x03\x12\n\n\x02\x66\x35\x18\x05 \x02(\x03\x1a@\n\x0bMessageQuad\x12\n\n\x02\x66\x31\x18\x01 \x02(\x0c\x12\n\n\x02\x66\x32\x18\x02 \x02(\x0c\x12\x0b\n\x03lat\x18\x03 \x02(\x06\x12\x0c\n\x04long\x18\x04 \x02(\x06\x1a\x16\n\x03Wat\x12\x0f\n\x04lols\x18\x80\x80\x80@ \x03(\x03\x1aI\n\x08Unknown3\x12\x10\n\x08unknown4\x18\x01 \x02(\x0c\x12\x10\n\x08unknown2\x18\x02 \x01(\x0c\x12\x0b\n\x03lat\x18\x03 \x01(\x06\x12\x0c\n\x04long\x18\x04 \x01(\x06\x1ao\n\x08Unknown6\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x33\n\x08unknown2\x18\x02 \x02(\x0b\x32!.RequestEnvelop.Unknown6.Unknown2\x1a\x1c\n\x08Unknown2\x12\x10\n\x08unknown1\x18\x01 \x02(\x0c\x1au\n\x08\x41uthInfo\x12\x10\n\x08provider\x18\x01 \x02(\t\x12+\n\x05token\x18\x02 \x02(\x0b\x32\x1c.RequestEnvelop.AuthInfo.JWT\x1a*\n\x03JWT\x12\x10\n\x08\x63ontents\x18\x01 \x02(\t\x12\x11\n\tunknown13\x18\x02 \x02(\x05\"F\n\x0bUnknownAuth\x12\x11\n\tunknown71\x18\x01 \x01(\x0c\x12\x11\n\tunknown72\x18\x02 \x01(\x03\x12\x11\n\tunknown73\x18\x03 \x01(\x0c\"\xac\x13\n\x0fResponseEnvelop\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x10\n\x08unknown2\x18\x02 \x01(\x03\x12\x0f\n\x07\x61pi_url\x18\x03 \x01(\t\x12+\n\x08unknown6\x18\x06 \x01(\x0b\x32\x19.ResponseEnvelop.Unknown6\x12\x1e\n\x08unknown7\x18\x07 \x01(\x0b\x32\x0c.UnknownAuth\x12\x0f\n\x07payload\x18\x64 \x03(\x0c\x1ap\n\x08Unknown6\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x34\n\x08unknown2\x18\x02 \x02(\x0b\x32\".ResponseEnvelop.Unknown6.Unknown2\x1a\x1c\n\x08Unknown2\x12\x10\n\x08unknown1\x18\x01 \x02(\x0c\x1a\x41\n\x10HeartbeatPayload\x12-\n\x05\x63\x65lls\x18\x01 \x03(\x0b\x32\x1e.ResponseEnvelop.ClientMapCell\x1a\xe9\x03\n\rClientMapCell\x12\x10\n\x08S2CellId\x18\x01 \x02(\x04\x12\x12\n\nAsOfTimeMs\x18\x02 \x02(\x03\x12/\n\x04\x46ort\x18\x03 \x03(\x0b\x32!.ResponseEnvelop.PokemonFortProto\x12:\n\nSpawnPoint\x18\x04 \x03(\x0b\x32&.ResponseEnvelop.ClientSpawnPointProto\x12\x36\n\x0bWildPokemon\x18\x05 \x03(\x0b\x32!.ResponseEnvelop.WildPokemonProto\x12\x17\n\x0fIsTruncatedList\x18\x07 \x01(\x08\x12=\n\x0b\x46ortSummary\x18\x08 \x03(\x0b\x32(.ResponseEnvelop.PokemonSummaryFortProto\x12\x43\n\x13\x44\x65\x63imatedSpawnPoint\x18\t \x03(\x0b\x32&.ResponseEnvelop.ClientSpawnPointProto\x12\x34\n\nMapPokemon\x18\n \x03(\x0b\x32 .ResponseEnvelop.MapPokemonProto\x12:\n\rNearbyPokemon\x18\x0b \x03(\x0b\x32#.ResponseEnvelop.NearbyPokemonProto\x1ah\n\x0bWildPokemon\x12\x10\n\x08UniqueId\x18\x01 \x02(\t\x12\x11\n\tPokemonId\x18\x02 \x02(\t\x12\x34\n\x07pokemon\x18\x0b \x03(\x0b\x32#.ResponseEnvelop.NearbyPokemonProto\x1a\x92\x01\n\x0fMapPokemonProto\x12\x14\n\x0cSpawnpointId\x18\x01 \x02(\t\x12\x13\n\x0b\x45ncounterId\x18\x02 \x02(\x04\x12\x15\n\rPokedexTypeId\x18\x03 \x02(\x05\x12\x18\n\x10\x45xpirationTimeMs\x18\x04 \x02(\x03\x12\x10\n\x08Latitude\x18\x05 \x02(\x01\x12\x11\n\tLongitude\x18\x06 \x02(\x01\x1a\xe7\x02\n\x10PokemonFortProto\x12\x0e\n\x06\x46ortId\x18\x01 \x02(\t\x12\x16\n\x0eLastModifiedMs\x18\x02 \x02(\x03\x12\x10\n\x08Latitude\x18\x03 \x02(\x01\x12\x11\n\tLongitude\x18\x04 \x02(\x01\x12\x0c\n\x04Team\x18\x05 \x02(\x05\x12\x16\n\x0eGuardPokemonId\x18\x06 \x02(\x05\x12\x19\n\x11GuardPokemonLevel\x18\x07 \x02(\x05\x12\x0f\n\x07\x45nabled\x18\x08 \x02(\x08\x12\x10\n\x08\x46ortType\x18\t \x02(\x05\x12\x11\n\tGymPoints\x18\n \x02(\x03\x12\x12\n\nIsInBattle\x18\x0b \x02(\x08\x12\x37\n\rActivePokemon\x18\r \x01(\x0b\x32 .ResponseEnvelop.MapPokemonProto\x12\x1a\n\x12\x43ooldownCompleteMs\x18\x0e \x02(\x03\x12\x0f\n\x07Sponsor\x18\x0f \x02(\x05\x12\x15\n\rRenderingType\x18\x10 \x01(\x05\x1am\n\x17PokemonSummaryFortProto\x12\x15\n\rFortSummaryId\x18\x01 \x02(\t\x12\x16\n\x0eLastModifiedMs\x18\x02 \x02(\x03\x12\x10\n\x08Latitude\x18\x03 \x02(\x01\x12\x11\n\tLongitude\x18\x04 \x02(\x01\x1a<\n\x15\x43lientSpawnPointProto\x12\x10\n\x08Latitude\x18\x02 \x02(\x01\x12\x11\n\tLongitude\x18\x03 \x02(\x01\x1a\xfa\x01\n\x10WildPokemonProto\x12\x13\n\x0b\x45ncounterId\x18\x01 \x01(\x04\x12\x16\n\x0eLastModifiedMs\x18\x02 \x01(\x03\x12\x10\n\x08Latitude\x18\x03 \x01(\x01\x12\x11\n\tLongitude\x18\x04 \x01(\x01\x12\x14\n\x0cSpawnPointId\x18\x05 \x01(\t\x12:\n\x07pokemon\x18\x07 \x01(\x0b\x32).ResponseEnvelop.WildPokemonProto.Pokemon\x12\x18\n\x10TimeTillHiddenMs\x18\x0b \x01(\x05\x1a(\n\x07Pokemon\x12\n\n\x02Id\x18\x01 \x01(\x04\x12\x11\n\tPokemonId\x18\x02 \x01(\x05\x1aX\n\x12NearbyPokemonProto\x12\x15\n\rPokedexNumber\x18\x01 \x01(\x05\x12\x16\n\x0e\x44istanceMeters\x18\x02 \x01(\x02\x12\x13\n\x0b\x45ncounterId\x18\x03 \x01(\x04\x1aM\n\x0eProfilePayload\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12)\n\x07profile\x18\x02 \x01(\x0b\x32\x18.ResponseEnvelop.Profile\x1a\xa8\x03\n\x07Profile\x12\x15\n\rcreation_time\x18\x01 \x02(\x03\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x0c\n\x04team\x18\x05 \x01(\x05\x12\x10\n\x08tutorial\x18\x07 \x01(\x0c\x12\x36\n\x06\x61vatar\x18\x08 \x01(\x0b\x32&.ResponseEnvelop.Profile.AvatarDetails\x12\x14\n\x0cpoke_storage\x18\t \x01(\x05\x12\x14\n\x0citem_storage\x18\n \x01(\x05\x12\x11\n\tunknown11\x18\x0b \x01(\t\x12\x11\n\tunknown12\x18\x0c \x01(\t\x12\x11\n\tunknown13\x18\r \x01(\t\x12\x33\n\x08\x63urrency\x18\x0e \x03(\x0b\x32!.ResponseEnvelop.Profile.Currency\x1aX\n\rAvatarDetails\x12\x10\n\x08unknown2\x18\x02 \x01(\x05\x12\x10\n\x08unknown3\x18\x03 \x01(\x05\x12\x10\n\x08unknown9\x18\t \x01(\x05\x12\x11\n\tunknown10\x18\n \x01(\x05\x1a(\n\x08\x43urrency\x12\x0c\n\x04type\x18\x01 \x02(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x05') -) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - - - - -_REQUESTENVELOP_REQUESTS = _descriptor.Descriptor( - name='Requests', - full_name='RequestEnvelop.Requests', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='type', full_name='RequestEnvelop.Requests.type', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='message', full_name='RequestEnvelop.Requests.message', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=305, - serialized_end=346, -) - -_REQUESTENVELOP_MESSAGESINGLESTRING = _descriptor.Descriptor( - name='MessageSingleString', - full_name='RequestEnvelop.MessageSingleString', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='bytes', full_name='RequestEnvelop.MessageSingleString.bytes', index=0, - number=1, type=12, cpp_type=9, label=2, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=348, - serialized_end=384, -) - -_REQUESTENVELOP_MESSAGESINGLEINT = _descriptor.Descriptor( - name='MessageSingleInt', - full_name='RequestEnvelop.MessageSingleInt', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='f1', full_name='RequestEnvelop.MessageSingleInt.f1', index=0, - number=1, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=386, - serialized_end=416, -) - -_REQUESTENVELOP_MESSAGETWOINTS = _descriptor.Descriptor( - name='MessageTwoInts', - full_name='RequestEnvelop.MessageTwoInts', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='f1', full_name='RequestEnvelop.MessageTwoInts.f1', index=0, - number=1, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='f5', full_name='RequestEnvelop.MessageTwoInts.f5', index=1, - number=5, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=418, - serialized_end=458, -) - -_REQUESTENVELOP_MESSAGEQUAD = _descriptor.Descriptor( - name='MessageQuad', - full_name='RequestEnvelop.MessageQuad', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='f1', full_name='RequestEnvelop.MessageQuad.f1', index=0, - number=1, type=12, cpp_type=9, label=2, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='f2', full_name='RequestEnvelop.MessageQuad.f2', index=1, - number=2, type=12, cpp_type=9, label=2, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='lat', full_name='RequestEnvelop.MessageQuad.lat', index=2, - number=3, type=6, cpp_type=4, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='long', full_name='RequestEnvelop.MessageQuad.long', index=3, - number=4, type=6, cpp_type=4, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=460, - serialized_end=524, -) - -_REQUESTENVELOP_WAT = _descriptor.Descriptor( - name='Wat', - full_name='RequestEnvelop.Wat', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='lols', full_name='RequestEnvelop.Wat.lols', index=0, - number=134217728, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=526, - serialized_end=548, -) - -_REQUESTENVELOP_UNKNOWN3 = _descriptor.Descriptor( - name='Unknown3', - full_name='RequestEnvelop.Unknown3', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown4', full_name='RequestEnvelop.Unknown3.unknown4', index=0, - number=1, type=12, cpp_type=9, label=2, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown2', full_name='RequestEnvelop.Unknown3.unknown2', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='lat', full_name='RequestEnvelop.Unknown3.lat', index=2, - number=3, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='long', full_name='RequestEnvelop.Unknown3.long', index=3, - number=4, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=550, - serialized_end=623, -) - -_REQUESTENVELOP_UNKNOWN6_UNKNOWN2 = _descriptor.Descriptor( - name='Unknown2', - full_name='RequestEnvelop.Unknown6.Unknown2', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown1', full_name='RequestEnvelop.Unknown6.Unknown2.unknown1', index=0, - number=1, type=12, cpp_type=9, label=2, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=708, - serialized_end=736, -) - -_REQUESTENVELOP_UNKNOWN6 = _descriptor.Descriptor( - name='Unknown6', - full_name='RequestEnvelop.Unknown6', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown1', full_name='RequestEnvelop.Unknown6.unknown1', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown2', full_name='RequestEnvelop.Unknown6.unknown2', index=1, - number=2, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[_REQUESTENVELOP_UNKNOWN6_UNKNOWN2, ], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=625, - serialized_end=736, -) - -_REQUESTENVELOP_AUTHINFO_JWT = _descriptor.Descriptor( - name='JWT', - full_name='RequestEnvelop.AuthInfo.JWT', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='contents', full_name='RequestEnvelop.AuthInfo.JWT.contents', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown13', full_name='RequestEnvelop.AuthInfo.JWT.unknown13', index=1, - number=2, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=813, - serialized_end=855, -) - -_REQUESTENVELOP_AUTHINFO = _descriptor.Descriptor( - name='AuthInfo', - full_name='RequestEnvelop.AuthInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='provider', full_name='RequestEnvelop.AuthInfo.provider', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='token', full_name='RequestEnvelop.AuthInfo.token', index=1, - number=2, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[_REQUESTENVELOP_AUTHINFO_JWT, ], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=738, - serialized_end=855, -) - -_REQUESTENVELOP = _descriptor.Descriptor( - name='RequestEnvelop', - full_name='RequestEnvelop', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown1', full_name='RequestEnvelop.unknown1', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='rpc_id', full_name='RequestEnvelop.rpc_id', index=1, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='requests', full_name='RequestEnvelop.requests', index=2, - number=4, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown6', full_name='RequestEnvelop.unknown6', index=3, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='latitude', full_name='RequestEnvelop.latitude', index=4, - number=7, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='longitude', full_name='RequestEnvelop.longitude', index=5, - number=8, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='altitude', full_name='RequestEnvelop.altitude', index=6, - number=9, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='auth', full_name='RequestEnvelop.auth', index=7, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown11', full_name='RequestEnvelop.unknown11', index=8, - number=11, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown12', full_name='RequestEnvelop.unknown12', index=9, - number=12, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[_REQUESTENVELOP_REQUESTS, _REQUESTENVELOP_MESSAGESINGLESTRING, _REQUESTENVELOP_MESSAGESINGLEINT, _REQUESTENVELOP_MESSAGETWOINTS, _REQUESTENVELOP_MESSAGEQUAD, _REQUESTENVELOP_WAT, _REQUESTENVELOP_UNKNOWN3, _REQUESTENVELOP_UNKNOWN6, _REQUESTENVELOP_AUTHINFO, ], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=18, - serialized_end=855, -) - - -_UNKNOWNAUTH = _descriptor.Descriptor( - name='UnknownAuth', - full_name='UnknownAuth', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown71', full_name='UnknownAuth.unknown71', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown72', full_name='UnknownAuth.unknown72', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown73', full_name='UnknownAuth.unknown73', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=857, - serialized_end=927, -) - - -_RESPONSEENVELOP_UNKNOWN6_UNKNOWN2 = _descriptor.Descriptor( - name='Unknown2', - full_name='ResponseEnvelop.Unknown6.Unknown2', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown1', full_name='ResponseEnvelop.Unknown6.Unknown2.unknown1', index=0, - number=1, type=12, cpp_type=9, label=2, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=708, - serialized_end=736, -) - -_RESPONSEENVELOP_UNKNOWN6 = _descriptor.Descriptor( - name='Unknown6', - full_name='ResponseEnvelop.Unknown6', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown1', full_name='ResponseEnvelop.Unknown6.unknown1', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown2', full_name='ResponseEnvelop.Unknown6.unknown2', index=1, - number=2, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[_RESPONSEENVELOP_UNKNOWN6_UNKNOWN2, ], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=1096, - serialized_end=1208, -) - -_RESPONSEENVELOP_HEARTBEATPAYLOAD = _descriptor.Descriptor( - name='HeartbeatPayload', - full_name='ResponseEnvelop.HeartbeatPayload', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='cells', full_name='ResponseEnvelop.HeartbeatPayload.cells', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=1210, - serialized_end=1275, -) - -_RESPONSEENVELOP_CLIENTMAPCELL = _descriptor.Descriptor( - name='ClientMapCell', - full_name='ResponseEnvelop.ClientMapCell', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='S2CellId', full_name='ResponseEnvelop.ClientMapCell.S2CellId', index=0, - number=1, type=4, cpp_type=4, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='AsOfTimeMs', full_name='ResponseEnvelop.ClientMapCell.AsOfTimeMs', index=1, - number=2, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Fort', full_name='ResponseEnvelop.ClientMapCell.Fort', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='SpawnPoint', full_name='ResponseEnvelop.ClientMapCell.SpawnPoint', index=3, - number=4, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='WildPokemon', full_name='ResponseEnvelop.ClientMapCell.WildPokemon', index=4, - number=5, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='IsTruncatedList', full_name='ResponseEnvelop.ClientMapCell.IsTruncatedList', index=5, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='FortSummary', full_name='ResponseEnvelop.ClientMapCell.FortSummary', index=6, - number=8, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='DecimatedSpawnPoint', full_name='ResponseEnvelop.ClientMapCell.DecimatedSpawnPoint', index=7, - number=9, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='MapPokemon', full_name='ResponseEnvelop.ClientMapCell.MapPokemon', index=8, - number=10, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='NearbyPokemon', full_name='ResponseEnvelop.ClientMapCell.NearbyPokemon', index=9, - number=11, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=1278, - serialized_end=1767, -) - -_RESPONSEENVELOP_WILDPOKEMON = _descriptor.Descriptor( - name='WildPokemon', - full_name='ResponseEnvelop.WildPokemon', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='UniqueId', full_name='ResponseEnvelop.WildPokemon.UniqueId', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='PokemonId', full_name='ResponseEnvelop.WildPokemon.PokemonId', index=1, - number=2, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='pokemon', full_name='ResponseEnvelop.WildPokemon.pokemon', index=2, - number=11, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=1769, - serialized_end=1873, -) - -_RESPONSEENVELOP_MAPPOKEMONPROTO = _descriptor.Descriptor( - name='MapPokemonProto', - full_name='ResponseEnvelop.MapPokemonProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='SpawnpointId', full_name='ResponseEnvelop.MapPokemonProto.SpawnpointId', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='EncounterId', full_name='ResponseEnvelop.MapPokemonProto.EncounterId', index=1, - number=2, type=4, cpp_type=4, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='PokedexTypeId', full_name='ResponseEnvelop.MapPokemonProto.PokedexTypeId', index=2, - number=3, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='ExpirationTimeMs', full_name='ResponseEnvelop.MapPokemonProto.ExpirationTimeMs', index=3, - number=4, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Latitude', full_name='ResponseEnvelop.MapPokemonProto.Latitude', index=4, - number=5, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Longitude', full_name='ResponseEnvelop.MapPokemonProto.Longitude', index=5, - number=6, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=1876, - serialized_end=2022, -) - -_RESPONSEENVELOP_POKEMONFORTPROTO = _descriptor.Descriptor( - name='PokemonFortProto', - full_name='ResponseEnvelop.PokemonFortProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='FortId', full_name='ResponseEnvelop.PokemonFortProto.FortId', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='LastModifiedMs', full_name='ResponseEnvelop.PokemonFortProto.LastModifiedMs', index=1, - number=2, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Latitude', full_name='ResponseEnvelop.PokemonFortProto.Latitude', index=2, - number=3, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Longitude', full_name='ResponseEnvelop.PokemonFortProto.Longitude', index=3, - number=4, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Team', full_name='ResponseEnvelop.PokemonFortProto.Team', index=4, - number=5, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='GuardPokemonId', full_name='ResponseEnvelop.PokemonFortProto.GuardPokemonId', index=5, - number=6, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='GuardPokemonLevel', full_name='ResponseEnvelop.PokemonFortProto.GuardPokemonLevel', index=6, - number=7, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Enabled', full_name='ResponseEnvelop.PokemonFortProto.Enabled', index=7, - number=8, type=8, cpp_type=7, label=2, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='FortType', full_name='ResponseEnvelop.PokemonFortProto.FortType', index=8, - number=9, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='GymPoints', full_name='ResponseEnvelop.PokemonFortProto.GymPoints', index=9, - number=10, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='IsInBattle', full_name='ResponseEnvelop.PokemonFortProto.IsInBattle', index=10, - number=11, type=8, cpp_type=7, label=2, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='ActivePokemon', full_name='ResponseEnvelop.PokemonFortProto.ActivePokemon', index=11, - number=13, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='CooldownCompleteMs', full_name='ResponseEnvelop.PokemonFortProto.CooldownCompleteMs', index=12, - number=14, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Sponsor', full_name='ResponseEnvelop.PokemonFortProto.Sponsor', index=13, - number=15, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='RenderingType', full_name='ResponseEnvelop.PokemonFortProto.RenderingType', index=14, - number=16, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2025, - serialized_end=2384, -) - -_RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO = _descriptor.Descriptor( - name='PokemonSummaryFortProto', - full_name='ResponseEnvelop.PokemonSummaryFortProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='FortSummaryId', full_name='ResponseEnvelop.PokemonSummaryFortProto.FortSummaryId', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='LastModifiedMs', full_name='ResponseEnvelop.PokemonSummaryFortProto.LastModifiedMs', index=1, - number=2, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Latitude', full_name='ResponseEnvelop.PokemonSummaryFortProto.Latitude', index=2, - number=3, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Longitude', full_name='ResponseEnvelop.PokemonSummaryFortProto.Longitude', index=3, - number=4, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2386, - serialized_end=2495, -) - -_RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO = _descriptor.Descriptor( - name='ClientSpawnPointProto', - full_name='ResponseEnvelop.ClientSpawnPointProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='Latitude', full_name='ResponseEnvelop.ClientSpawnPointProto.Latitude', index=0, - number=2, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Longitude', full_name='ResponseEnvelop.ClientSpawnPointProto.Longitude', index=1, - number=3, type=1, cpp_type=5, label=2, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2497, - serialized_end=2557, -) - -_RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON = _descriptor.Descriptor( - name='Pokemon', - full_name='ResponseEnvelop.WildPokemonProto.Pokemon', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='Id', full_name='ResponseEnvelop.WildPokemonProto.Pokemon.Id', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='PokemonId', full_name='ResponseEnvelop.WildPokemonProto.Pokemon.PokemonId', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2770, - serialized_end=2810, -) - -_RESPONSEENVELOP_WILDPOKEMONPROTO = _descriptor.Descriptor( - name='WildPokemonProto', - full_name='ResponseEnvelop.WildPokemonProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='EncounterId', full_name='ResponseEnvelop.WildPokemonProto.EncounterId', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='LastModifiedMs', full_name='ResponseEnvelop.WildPokemonProto.LastModifiedMs', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Latitude', full_name='ResponseEnvelop.WildPokemonProto.Latitude', index=2, - number=3, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='Longitude', full_name='ResponseEnvelop.WildPokemonProto.Longitude', index=3, - number=4, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='SpawnPointId', full_name='ResponseEnvelop.WildPokemonProto.SpawnPointId', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='pokemon', full_name='ResponseEnvelop.WildPokemonProto.pokemon', index=5, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='TimeTillHiddenMs', full_name='ResponseEnvelop.WildPokemonProto.TimeTillHiddenMs', index=6, - number=11, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[_RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON, ], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2560, - serialized_end=2810, -) - -_RESPONSEENVELOP_NEARBYPOKEMONPROTO = _descriptor.Descriptor( - name='NearbyPokemonProto', - full_name='ResponseEnvelop.NearbyPokemonProto', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='PokedexNumber', full_name='ResponseEnvelop.NearbyPokemonProto.PokedexNumber', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='DistanceMeters', full_name='ResponseEnvelop.NearbyPokemonProto.DistanceMeters', index=1, - number=2, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='EncounterId', full_name='ResponseEnvelop.NearbyPokemonProto.EncounterId', index=2, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2812, - serialized_end=2900, -) - -_RESPONSEENVELOP_PROFILEPAYLOAD = _descriptor.Descriptor( - name='ProfilePayload', - full_name='ResponseEnvelop.ProfilePayload', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown1', full_name='ResponseEnvelop.ProfilePayload.unknown1', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='profile', full_name='ResponseEnvelop.ProfilePayload.profile', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2902, - serialized_end=2979, -) - -_RESPONSEENVELOP_PROFILE_AVATARDETAILS = _descriptor.Descriptor( - name='AvatarDetails', - full_name='ResponseEnvelop.Profile.AvatarDetails', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown2', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown2', index=0, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown3', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown3', index=1, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown9', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown9', index=2, - number=9, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown10', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown10', index=3, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=3276, - serialized_end=3364, -) - -_RESPONSEENVELOP_PROFILE_CURRENCY = _descriptor.Descriptor( - name='Currency', - full_name='ResponseEnvelop.Profile.Currency', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='type', full_name='ResponseEnvelop.Profile.Currency.type', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='amount', full_name='ResponseEnvelop.Profile.Currency.amount', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=3366, - serialized_end=3406, -) - -_RESPONSEENVELOP_PROFILE = _descriptor.Descriptor( - name='Profile', - full_name='ResponseEnvelop.Profile', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='creation_time', full_name='ResponseEnvelop.Profile.creation_time', index=0, - number=1, type=3, cpp_type=2, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='username', full_name='ResponseEnvelop.Profile.username', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='team', full_name='ResponseEnvelop.Profile.team', index=2, - number=5, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='tutorial', full_name='ResponseEnvelop.Profile.tutorial', index=3, - number=7, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='avatar', full_name='ResponseEnvelop.Profile.avatar', index=4, - number=8, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='poke_storage', full_name='ResponseEnvelop.Profile.poke_storage', index=5, - number=9, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='item_storage', full_name='ResponseEnvelop.Profile.item_storage', index=6, - number=10, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown11', full_name='ResponseEnvelop.Profile.unknown11', index=7, - number=11, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown12', full_name='ResponseEnvelop.Profile.unknown12', index=8, - number=12, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown13', full_name='ResponseEnvelop.Profile.unknown13', index=9, - number=13, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='currency', full_name='ResponseEnvelop.Profile.currency', index=10, - number=14, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[_RESPONSEENVELOP_PROFILE_AVATARDETAILS, _RESPONSEENVELOP_PROFILE_CURRENCY, ], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=2982, - serialized_end=3406, -) - -_RESPONSEENVELOP = _descriptor.Descriptor( - name='ResponseEnvelop', - full_name='ResponseEnvelop', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='unknown1', full_name='ResponseEnvelop.unknown1', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown2', full_name='ResponseEnvelop.unknown2', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='api_url', full_name='ResponseEnvelop.api_url', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown6', full_name='ResponseEnvelop.unknown6', index=3, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='unknown7', full_name='ResponseEnvelop.unknown7', index=4, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='payload', full_name='ResponseEnvelop.payload', index=5, - number=100, type=12, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[_RESPONSEENVELOP_UNKNOWN6, _RESPONSEENVELOP_HEARTBEATPAYLOAD, _RESPONSEENVELOP_CLIENTMAPCELL, _RESPONSEENVELOP_WILDPOKEMON, _RESPONSEENVELOP_MAPPOKEMONPROTO, _RESPONSEENVELOP_POKEMONFORTPROTO, _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO, _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO, _RESPONSEENVELOP_WILDPOKEMONPROTO, _RESPONSEENVELOP_NEARBYPOKEMONPROTO, _RESPONSEENVELOP_PROFILEPAYLOAD, _RESPONSEENVELOP_PROFILE, ], - enum_types=[ - ], - options=None, - is_extendable=False, - extension_ranges=[], - oneofs=[ - ], - serialized_start=930, - serialized_end=3406, -) - -_REQUESTENVELOP_REQUESTS.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_MESSAGESINGLESTRING.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_MESSAGESINGLEINT.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_MESSAGETWOINTS.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_MESSAGEQUAD.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_WAT.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_UNKNOWN3.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_UNKNOWN6_UNKNOWN2.containing_type = _REQUESTENVELOP_UNKNOWN6 -_REQUESTENVELOP_UNKNOWN6.fields_by_name['unknown2'].message_type = _REQUESTENVELOP_UNKNOWN6_UNKNOWN2 -_REQUESTENVELOP_UNKNOWN6.containing_type = _REQUESTENVELOP -_REQUESTENVELOP_AUTHINFO_JWT.containing_type = _REQUESTENVELOP_AUTHINFO -_REQUESTENVELOP_AUTHINFO.fields_by_name['token'].message_type = _REQUESTENVELOP_AUTHINFO_JWT -_REQUESTENVELOP_AUTHINFO.containing_type = _REQUESTENVELOP -_REQUESTENVELOP.fields_by_name['requests'].message_type = _REQUESTENVELOP_REQUESTS -_REQUESTENVELOP.fields_by_name['unknown6'].message_type = _REQUESTENVELOP_UNKNOWN6 -_REQUESTENVELOP.fields_by_name['auth'].message_type = _REQUESTENVELOP_AUTHINFO -_REQUESTENVELOP.fields_by_name['unknown11'].message_type = _UNKNOWNAUTH -_RESPONSEENVELOP_UNKNOWN6_UNKNOWN2.containing_type = _RESPONSEENVELOP_UNKNOWN6 -_RESPONSEENVELOP_UNKNOWN6.fields_by_name['unknown2'].message_type = _RESPONSEENVELOP_UNKNOWN6_UNKNOWN2 -_RESPONSEENVELOP_UNKNOWN6.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_HEARTBEATPAYLOAD.fields_by_name['cells'].message_type = _RESPONSEENVELOP_CLIENTMAPCELL -_RESPONSEENVELOP_HEARTBEATPAYLOAD.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['Fort'].message_type = _RESPONSEENVELOP_POKEMONFORTPROTO -_RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['SpawnPoint'].message_type = _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO -_RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['WildPokemon'].message_type = _RESPONSEENVELOP_WILDPOKEMONPROTO -_RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['FortSummary'].message_type = _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO -_RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['DecimatedSpawnPoint'].message_type = _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO -_RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['MapPokemon'].message_type = _RESPONSEENVELOP_MAPPOKEMONPROTO -_RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['NearbyPokemon'].message_type = _RESPONSEENVELOP_NEARBYPOKEMONPROTO -_RESPONSEENVELOP_CLIENTMAPCELL.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_WILDPOKEMON.fields_by_name['pokemon'].message_type = _RESPONSEENVELOP_NEARBYPOKEMONPROTO -_RESPONSEENVELOP_WILDPOKEMON.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_MAPPOKEMONPROTO.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_POKEMONFORTPROTO.fields_by_name['ActivePokemon'].message_type = _RESPONSEENVELOP_MAPPOKEMONPROTO -_RESPONSEENVELOP_POKEMONFORTPROTO.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON.containing_type = _RESPONSEENVELOP_WILDPOKEMONPROTO -_RESPONSEENVELOP_WILDPOKEMONPROTO.fields_by_name['pokemon'].message_type = _RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON -_RESPONSEENVELOP_WILDPOKEMONPROTO.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_NEARBYPOKEMONPROTO.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_PROFILEPAYLOAD.fields_by_name['profile'].message_type = _RESPONSEENVELOP_PROFILE -_RESPONSEENVELOP_PROFILEPAYLOAD.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP_PROFILE_AVATARDETAILS.containing_type = _RESPONSEENVELOP_PROFILE -_RESPONSEENVELOP_PROFILE_CURRENCY.containing_type = _RESPONSEENVELOP_PROFILE -_RESPONSEENVELOP_PROFILE.fields_by_name['avatar'].message_type = _RESPONSEENVELOP_PROFILE_AVATARDETAILS -_RESPONSEENVELOP_PROFILE.fields_by_name['currency'].message_type = _RESPONSEENVELOP_PROFILE_CURRENCY -_RESPONSEENVELOP_PROFILE.containing_type = _RESPONSEENVELOP -_RESPONSEENVELOP.fields_by_name['unknown6'].message_type = _RESPONSEENVELOP_UNKNOWN6 -_RESPONSEENVELOP.fields_by_name['unknown7'].message_type = _UNKNOWNAUTH -DESCRIPTOR.message_types_by_name['RequestEnvelop'] = _REQUESTENVELOP -DESCRIPTOR.message_types_by_name['UnknownAuth'] = _UNKNOWNAUTH -DESCRIPTOR.message_types_by_name['ResponseEnvelop'] = _RESPONSEENVELOP - -RequestEnvelop = _reflection.GeneratedProtocolMessageType('RequestEnvelop', (_message.Message,), dict( - - Requests = _reflection.GeneratedProtocolMessageType('Requests', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_REQUESTS, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.Requests) - )) - , - - MessageSingleString = _reflection.GeneratedProtocolMessageType('MessageSingleString', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_MESSAGESINGLESTRING, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageSingleString) - )) - , - - MessageSingleInt = _reflection.GeneratedProtocolMessageType('MessageSingleInt', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_MESSAGESINGLEINT, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageSingleInt) - )) - , - - MessageTwoInts = _reflection.GeneratedProtocolMessageType('MessageTwoInts', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_MESSAGETWOINTS, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageTwoInts) - )) - , - - MessageQuad = _reflection.GeneratedProtocolMessageType('MessageQuad', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_MESSAGEQUAD, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageQuad) - )) - , - - Wat = _reflection.GeneratedProtocolMessageType('Wat', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_WAT, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.Wat) - )) - , - - Unknown3 = _reflection.GeneratedProtocolMessageType('Unknown3', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_UNKNOWN3, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.Unknown3) - )) - , - - Unknown6 = _reflection.GeneratedProtocolMessageType('Unknown6', (_message.Message,), dict( - - Unknown2 = _reflection.GeneratedProtocolMessageType('Unknown2', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_UNKNOWN6_UNKNOWN2, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.Unknown6.Unknown2) - )) - , - DESCRIPTOR = _REQUESTENVELOP_UNKNOWN6, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.Unknown6) - )) - , - - AuthInfo = _reflection.GeneratedProtocolMessageType('AuthInfo', (_message.Message,), dict( - - JWT = _reflection.GeneratedProtocolMessageType('JWT', (_message.Message,), dict( - DESCRIPTOR = _REQUESTENVELOP_AUTHINFO_JWT, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.AuthInfo.JWT) - )) - , - DESCRIPTOR = _REQUESTENVELOP_AUTHINFO, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop.AuthInfo) - )) - , - DESCRIPTOR = _REQUESTENVELOP, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:RequestEnvelop) - )) -_sym_db.RegisterMessage(RequestEnvelop) -_sym_db.RegisterMessage(RequestEnvelop.Requests) -_sym_db.RegisterMessage(RequestEnvelop.MessageSingleString) -_sym_db.RegisterMessage(RequestEnvelop.MessageSingleInt) -_sym_db.RegisterMessage(RequestEnvelop.MessageTwoInts) -_sym_db.RegisterMessage(RequestEnvelop.MessageQuad) -_sym_db.RegisterMessage(RequestEnvelop.Wat) -_sym_db.RegisterMessage(RequestEnvelop.Unknown3) -_sym_db.RegisterMessage(RequestEnvelop.Unknown6) -_sym_db.RegisterMessage(RequestEnvelop.Unknown6.Unknown2) -_sym_db.RegisterMessage(RequestEnvelop.AuthInfo) -_sym_db.RegisterMessage(RequestEnvelop.AuthInfo.JWT) - -UnknownAuth = _reflection.GeneratedProtocolMessageType('UnknownAuth', (_message.Message,), dict( - DESCRIPTOR = _UNKNOWNAUTH, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:UnknownAuth) - )) -_sym_db.RegisterMessage(UnknownAuth) - -ResponseEnvelop = _reflection.GeneratedProtocolMessageType('ResponseEnvelop', (_message.Message,), dict( - - Unknown6 = _reflection.GeneratedProtocolMessageType('Unknown6', (_message.Message,), dict( - - Unknown2 = _reflection.GeneratedProtocolMessageType('Unknown2', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_UNKNOWN6_UNKNOWN2, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.Unknown6.Unknown2) - )) - , - DESCRIPTOR = _RESPONSEENVELOP_UNKNOWN6, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.Unknown6) - )) - , - - HeartbeatPayload = _reflection.GeneratedProtocolMessageType('HeartbeatPayload', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_HEARTBEATPAYLOAD, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.HeartbeatPayload) - )) - , - - ClientMapCell = _reflection.GeneratedProtocolMessageType('ClientMapCell', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_CLIENTMAPCELL, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.ClientMapCell) - )) - , - - WildPokemon = _reflection.GeneratedProtocolMessageType('WildPokemon', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_WILDPOKEMON, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.WildPokemon) - )) - , - - MapPokemonProto = _reflection.GeneratedProtocolMessageType('MapPokemonProto', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_MAPPOKEMONPROTO, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.MapPokemonProto) - )) - , - - PokemonFortProto = _reflection.GeneratedProtocolMessageType('PokemonFortProto', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_POKEMONFORTPROTO, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.PokemonFortProto) - )) - , - - PokemonSummaryFortProto = _reflection.GeneratedProtocolMessageType('PokemonSummaryFortProto', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.PokemonSummaryFortProto) - )) - , - - ClientSpawnPointProto = _reflection.GeneratedProtocolMessageType('ClientSpawnPointProto', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.ClientSpawnPointProto) - )) - , - - WildPokemonProto = _reflection.GeneratedProtocolMessageType('WildPokemonProto', (_message.Message,), dict( - - Pokemon = _reflection.GeneratedProtocolMessageType('Pokemon', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.WildPokemonProto.Pokemon) - )) - , - DESCRIPTOR = _RESPONSEENVELOP_WILDPOKEMONPROTO, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.WildPokemonProto) - )) - , - - NearbyPokemonProto = _reflection.GeneratedProtocolMessageType('NearbyPokemonProto', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_NEARBYPOKEMONPROTO, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.NearbyPokemonProto) - )) - , - - ProfilePayload = _reflection.GeneratedProtocolMessageType('ProfilePayload', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_PROFILEPAYLOAD, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.ProfilePayload) - )) - , - - Profile = _reflection.GeneratedProtocolMessageType('Profile', (_message.Message,), dict( - - AvatarDetails = _reflection.GeneratedProtocolMessageType('AvatarDetails', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_PROFILE_AVATARDETAILS, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.Profile.AvatarDetails) - )) - , - - Currency = _reflection.GeneratedProtocolMessageType('Currency', (_message.Message,), dict( - DESCRIPTOR = _RESPONSEENVELOP_PROFILE_CURRENCY, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.Profile.Currency) - )) - , - DESCRIPTOR = _RESPONSEENVELOP_PROFILE, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop.Profile) - )) - , - DESCRIPTOR = _RESPONSEENVELOP, - __module__ = 'pokemon_pb2' - # @@protoc_insertion_point(class_scope:ResponseEnvelop) - )) -_sym_db.RegisterMessage(ResponseEnvelop) -_sym_db.RegisterMessage(ResponseEnvelop.Unknown6) -_sym_db.RegisterMessage(ResponseEnvelop.Unknown6.Unknown2) -_sym_db.RegisterMessage(ResponseEnvelop.HeartbeatPayload) -_sym_db.RegisterMessage(ResponseEnvelop.ClientMapCell) -_sym_db.RegisterMessage(ResponseEnvelop.WildPokemon) -_sym_db.RegisterMessage(ResponseEnvelop.MapPokemonProto) -_sym_db.RegisterMessage(ResponseEnvelop.PokemonFortProto) -_sym_db.RegisterMessage(ResponseEnvelop.PokemonSummaryFortProto) -_sym_db.RegisterMessage(ResponseEnvelop.ClientSpawnPointProto) -_sym_db.RegisterMessage(ResponseEnvelop.WildPokemonProto) -_sym_db.RegisterMessage(ResponseEnvelop.WildPokemonProto.Pokemon) -_sym_db.RegisterMessage(ResponseEnvelop.NearbyPokemonProto) -_sym_db.RegisterMessage(ResponseEnvelop.ProfilePayload) -_sym_db.RegisterMessage(ResponseEnvelop.Profile) -_sym_db.RegisterMessage(ResponseEnvelop.Profile.AvatarDetails) -_sym_db.RegisterMessage(ResponseEnvelop.Profile.Currency) - - -# @@protoc_insertion_point(module_scope) From bdaed61ed4b910a179dd712f638b51426646e01c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 22:01:43 +0000 Subject: [PATCH 03/39] Show player on map --- index.html | 3 +++ main.py | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index d45ff7dd..902cdbf5 100644 --- a/index.html +++ b/index.html @@ -81,6 +81,9 @@ }); var image = "https://raw.githubusercontent.com/AHAAAAAAA/PokemonGo-Map/master/static/icons/" + p.id + ".png"; + if (p.id == -1) { + image = 'https://agents.farmers.com/images/walking.png'; + } var marker = new google.maps.Marker({ map: map, diff --git a/main.py b/main.py index d127db01..46607132 100644 --- a/main.py +++ b/main.py @@ -256,10 +256,11 @@ def heartbeat(api_endpoint, access_token, response): m4, pokemon_pb2.RequestEnvelop.Requests(), m5) + hbtime = time.time() payload = response.payload[0] heartbeat = pokemon_pb2.ResponseEnvelop.HeartbeatPayload() heartbeat.ParseFromString(payload) - return heartbeat + return ((FLOAT_LAT, FLOAT_LONG), hbtime, heartbeat) def main(): write_data_to_file() @@ -328,7 +329,8 @@ def main(): visible = [] - for hh in hs: + for (coords, hbtime, hh) in hs: + add_pokemon(-1, 'player', coords[0], coords[1], hbtime, 5) for cell in hh.cells: for wild in cell.WildPokemon: hash = wild.SpawnPointId + ':' + str(wild.pokemon.PokemonId) @@ -337,7 +339,7 @@ def main(): seen.add(hash) print('') - for cell in h.cells: + for cell in h[2].cells: if cell.NearbyPokemon: other = LatLng.from_point(Cell(CellId(cell.S2CellId)).get_center()) diff = other - origin From 5bde09d4ffd10334f811f840141e908aa54dd925 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 22:03:02 +0000 Subject: [PATCH 04/39] Rename config.json to config.json.example --- .gitignore | 3 ++- config.json => config.json.example | 0 2 files changed, 2 insertions(+), 1 deletion(-) rename config.json => config.json.example (100%) diff --git a/.gitignore b/.gitignore index 384b2087..7602be33 100644 --- a/.gitignore +++ b/.gitignore @@ -91,4 +91,5 @@ ENV/ data.json core pokemon_pb2.py -*~ \ No newline at end of file +*~ +config.json diff --git a/config.json b/config.json.example similarity index 100% rename from config.json rename to config.json.example From b85ab8d8e09e1a924cf3dcd0515930c4a2b88932 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 22:17:39 +0000 Subject: [PATCH 05/39] Make times reasonably accurate --- main.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index 46607132..ffa8de12 100644 --- a/main.py +++ b/main.py @@ -134,6 +134,7 @@ def api_req(api_endpoint, access_token, *mehs, **kw): protobuf = p_req.SerializeToString() r = SESSION.post(api_endpoint, data=protobuf, verify=False) + reqtime = time.time() p_ret = pokemon_pb2.ResponseEnvelop() p_ret.ParseFromString(r.content) @@ -147,7 +148,7 @@ def api_req(api_endpoint, access_token, *mehs, **kw): print("[ ] Sleeping for 1 second") time.sleep(1) - return p_ret + return (reqtime, p_ret) except Exception, e: if DEBUG: print(e) @@ -186,7 +187,7 @@ def get_profile(access_token, api, useauth, *reqq): return api_req(api, access_token, req, useauth = useauth) def get_api_endpoint(access_token, api = API_URL): - p_ret = get_profile(access_token, api, None) + (rtime, p_ret) = get_profile(access_token, api, None) try: return ('https://%s/rpc' % p_ret.api_url) except: @@ -247,7 +248,7 @@ def heartbeat(api_endpoint, access_token, response): m.lat = COORDS_LATITUDE m.long = COORDS_LONGITUDE m1.message = m.SerializeToString() - response = get_profile( + (hbtime, response) = get_profile( access_token, api_endpoint, response.unknown7, @@ -256,7 +257,6 @@ def heartbeat(api_endpoint, access_token, response): m4, pokemon_pb2.RequestEnvelop.Requests(), m5) - hbtime = time.time() payload = response.payload[0] heartbeat = pokemon_pb2.ResponseEnvelop.HeartbeatPayload() heartbeat.ParseFromString(payload) @@ -292,7 +292,7 @@ def main(): return print('[+] Received API endpoint: {}'.format(api_endpoint)) - response = get_profile(access_token, api_endpoint, None) + (rtime, response) = get_profile(access_token, api_endpoint, None) if response is not None: print('[+] Login successful') @@ -330,12 +330,13 @@ def main(): visible = [] for (coords, hbtime, hh) in hs: + hbtime = int(hbtime) add_pokemon(-1, 'player', coords[0], coords[1], hbtime, 5) for cell in hh.cells: for wild in cell.WildPokemon: hash = wild.SpawnPointId + ':' + str(wild.pokemon.PokemonId) if (hash not in seen): - visible.append(wild) + visible.append((hbtime, wild)) seen.add(hash) print('') @@ -352,7 +353,7 @@ def main(): print(' (%s) %s' % (poke.PokedexNumber, pokemons[poke.PokedexNumber - 1]['Name'])) print('') - for poke in visible: + for (timestamp, poke) in visible: other = LatLng.from_degrees(poke.Latitude, poke.Longitude) diff = other - origin # print(diff) @@ -362,7 +363,6 @@ def main(): print("(%s) %s is visible at (%s, %s) for %s seconds (%sm %s from you)" % (poke.pokemon.PokemonId, pokemons[poke.pokemon.PokemonId - 1]['Name'], poke.Latitude, poke.Longitude, poke.TimeTillHiddenMs / 1000, int(origin.get_distance(other).radians * 6366468.241830914), direction)) - timestamp = int(time.time()) add_pokemon(poke.pokemon.PokemonId, pokemons[poke.pokemon.PokemonId - 1]['Name'], poke.Latitude, poke.Longitude, timestamp, poke.TimeTillHiddenMs / 1000) write_data_to_file() From b182bc4e874c9beb7bd2c6a7b78abcd3915540fe Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 22:18:01 +0000 Subject: [PATCH 06/39] No need to clear data from previous session until we have done at least a first pass --- main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/main.py b/main.py index ffa8de12..d4ef011b 100644 --- a/main.py +++ b/main.py @@ -263,7 +263,6 @@ def heartbeat(api_endpoint, access_token, response): return ((FLOAT_LAT, FLOAT_LONG), hbtime, heartbeat) def main(): - write_data_to_file() pokemons = json.load(open('pokemon.json')) parser = argparse.ArgumentParser() parser.add_argument("-u", "--username", help="PTC Username", required=True) From 6c0f05fa6293fd71ec723b6e476bcf023b0f4c9d Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 22:32:07 +0000 Subject: [PATCH 07/39] Be more resilient to failures --- main.py | 54 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/main.py b/main.py index d4ef011b..275f7d76 100644 --- a/main.py +++ b/main.py @@ -189,7 +189,10 @@ def get_profile(access_token, api, useauth, *reqq): def get_api_endpoint(access_token, api = API_URL): (rtime, p_ret) = get_profile(access_token, api, None) try: - return ('https://%s/rpc' % p_ret.api_url) + if p_ret.api_url: + return ('https://%s/rpc' % p_ret.api_url) + else: + return None except: return None @@ -285,30 +288,35 @@ def main(): return print('[+] RPC Session Token: {} ...'.format(access_token[:25])) - api_endpoint = get_api_endpoint(access_token) - if api_endpoint is None: - print('[-] RPC server offline') - return + while True: + api_endpoint = get_api_endpoint(access_token) + if api_endpoint is None: + print('[-] RPC server offline') + else: + break print('[+] Received API endpoint: {}'.format(api_endpoint)) - (rtime, response) = get_profile(access_token, api_endpoint, None) - if response is not None: - print('[+] Login successful') - - payload = response.payload[0] - profile = pokemon_pb2.ResponseEnvelop.ProfilePayload() - profile.ParseFromString(payload) - print('[+] Username: {}'.format(profile.profile.username)) - - creation_time = datetime.fromtimestamp(int(profile.profile.creation_time)/1000) - print('[+] You are playing Pokemon Go since: {}'.format( - creation_time.strftime('%Y-%m-%d %H:%M:%S'), - )) - - for curr in profile.profile.currency: - print('[+] {}: {}'.format(curr.type, curr.amount)) - else: - print('[-] Ooops...') + while True: + (rtime, response) = get_profile(access_token, api_endpoint, None) + if response is not None and len(response.payload): + print('[+] Login successful') + + payload = response.payload[0] + profile = pokemon_pb2.ResponseEnvelop.ProfilePayload() + profile.ParseFromString(payload) + print('[+] Username: {}'.format(profile.profile.username)) + + creation_time = datetime.fromtimestamp(int(profile.profile.creation_time)/1000) + print('[+] You are playing Pokemon Go since: {}'.format( + creation_time.strftime('%Y-%m-%d %H:%M:%S'), + )) + + for curr in profile.profile.currency: + print('[+] {}: {}'.format(curr.type, curr.amount)) + + break + else: + print('[-] Ooops...') origin = LatLng.from_degrees(FLOAT_LAT, FLOAT_LONG) step = 0 From a6c99e4f037078e6d6d00deb21aefab8b856d588 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 22:39:13 +0000 Subject: [PATCH 08/39] Store expiry time rather than time left in data --- index.html | 2 ++ main.py | 12 +++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/index.html b/index.html index 902cdbf5..5b4f80c4 100644 --- a/index.html +++ b/index.html @@ -84,6 +84,8 @@ if (p.id == -1) { image = 'https://agents.farmers.com/images/walking.png'; } + + p.timeleft = Math.floor(p.expiry - p.timestamp); var marker = new google.maps.Marker({ map: map, diff --git a/main.py b/main.py index 275f7d76..b81aa45e 100644 --- a/main.py +++ b/main.py @@ -64,11 +64,10 @@ def h2f(hex): def prune(): # prune despawned pokemon - cur_time = int(time.time()) + cur_time = time.time() for i, poke in reversed(list(enumerate(DATA))): - poke['timeleft'] = poke['timeleft'] - (cur_time - poke['timestamp']) poke['timestamp'] = cur_time - if poke['timeleft'] <= 0: + if poke['expiry'] <= cur_time: DATA.pop(i) def write_data_to_file(): @@ -84,7 +83,7 @@ def add_pokemon(pokeId, name, lat, lng, timestamp, timeleft): 'lat': lat, 'lng': lng, 'timestamp': timestamp, - 'timeleft': timeleft + 'expiry': timestamp + timeleft }); def set_location(location_name): @@ -149,7 +148,7 @@ def api_req(api_endpoint, access_token, *mehs, **kw): print("[ ] Sleeping for 1 second") time.sleep(1) return (reqtime, p_ret) - except Exception, e: + except Exception as e: if DEBUG: print(e) print('[-] API request error, retrying') @@ -214,7 +213,7 @@ def login_ptc(username, password): ticket = None try: ticket = re.sub('.*ticket=', '', r1.history[0].headers['Location']) - except e: + except Exception as e: if DEBUG: print(r1.json()['errors'][0]) return None @@ -337,7 +336,6 @@ def main(): visible = [] for (coords, hbtime, hh) in hs: - hbtime = int(hbtime) add_pokemon(-1, 'player', coords[0], coords[1], hbtime, 5) for cell in hh.cells: for wild in cell.WildPokemon: From d4bdfa12aac81d3edb23e4e5e669277ddc3413c5 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 22:58:55 +0000 Subject: [PATCH 09/39] Use a hash to avoid duplicates of the same pokemon --- index.html | 13 +++++++++---- main.py | 33 ++++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/index.html b/index.html index 5b4f80c4..d71762ee 100644 --- a/index.html +++ b/index.html @@ -50,13 +50,14 @@ } + var preLength = -1; function refreshData() { getFile("data.json", true, function(response) { console.log("Refreshing data..."); - var preLength = data.length; data = JSON.parse(response); - if (preLength != data.length) { + if (preLength != response.length) { + preLength = response.length; // Clear markers for (var i = 0; i < markers.length; i++) { listeners[i].a.remove(); @@ -67,8 +68,12 @@ markers = []; // Add updated markers - for (var i = 0; i < data.length; i++) { - var p = data[i]; + for (var pokehash in data) { + if (!data.hasOwnProperty(pokehash)) { + // inherited, not interesting to us + continue; + } + var p = data[pokehash]; if (!updated) { map.setZoom(16); map.panTo({lat: p.lat, lng: p.lng}); diff --git a/main.py b/main.py index b81aa45e..94f214a0 100644 --- a/main.py +++ b/main.py @@ -51,7 +51,7 @@ def getNeighbors(): NUM_STEPS = 20 DATA_FILE = 'data.json' -DATA = [] +DATA = {} def f2i(float): return struct.unpack(' Date: Sun, 17 Jul 2016 22:59:52 +0000 Subject: [PATCH 10/39] Load existing data at startup --- main.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main.py b/main.py index 94f214a0..963228d9 100644 --- a/main.py +++ b/main.py @@ -70,6 +70,12 @@ def prune(): if poke['expiry'] <= cur_time: del DATA[pokehash] +try: + with open(DATA_FILE, 'r') as f: + DATA = json.load(f) +except: + pass + def write_data_to_file(): prune() From eee29e3ad973447dbfb526f9593a195cc6c4237c Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 23:28:23 +0000 Subject: [PATCH 11/39] Sort "Hide Pokemon" list --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index 6fe35708..b546e473 100644 --- a/index.html +++ b/index.html @@ -112,6 +112,7 @@ // Pokemon not hidden if(layers.indexOf(p.name) == -1){ layers.push(p.name); + layers.sort(); } console.log("Adding marker " + p.name); From 594bce22898a783d931209932934ddd217e73b39 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 23:33:39 +0000 Subject: [PATCH 12/39] Break down days, hours, and minutes --- index.html | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index b546e473..487c6635 100644 --- a/index.html +++ b/index.html @@ -124,13 +124,28 @@ image = 'https://agents.farmers.com/images/walking.png'; } - p.timeleft = Math.floor(p.expiry - p.timestamp); + p.timeleft = p.expiry - p.timestamp; + timeleft_strify = p.timeleft + p.timeleft_str = '' + if (timeleft_strify > 86400) { + p.timeleft_str += Math.floor(timeleft_strify / 86400) + " days, "; + timeleft_strify %= 86400; + } + if (timeleft_strify > 3600) { + p.timeleft_str += Math.floor(timeleft_strify / 3600) + "h"; + timeleft_strify %= 3600; + } + if (timeleft_strify > 60) { + p.timeleft_str += Math.floor(timeleft_strify / 60) + "m"; + timeleft_strify %= 60; + } + p.timeleft_str += Math.floor(timeleft_strify) + "s"; var marker = new google.maps.Marker({ map: map, position: {lat: p.lat, lng: p.lng}, label: "", - title: ""+p.name+"
Time left: " + p.timeleft + "s
Lat: "+p.lat+"
Long: "+p.lng, + title: ""+p.name+"
Time left: " + p.timeleft_str + "
Lat: "+p.lat+"
Long: "+p.lng, icon: image }); From fd25da553dc9d29f1422015f58be6a321ea636fa Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 23:46:57 +0000 Subject: [PATCH 13/39] Don't delete and recreate markers for every refresh --- index.html | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/index.html b/index.html index 487c6635..6315d8c2 100644 --- a/index.html +++ b/index.html @@ -87,13 +87,20 @@ if (preLength != response.length) { preLength = response.length; // Clear markers - for (var i = 0; i < markers.length; i++) { - listeners[i].a.remove(); - listeners[i].b.remove(); - markers[i].setMap(null); + for (var pokehash in markers) { + if (!markers.hasOwnProperty(pokehash)) { + continue; + } + if (data.hasOwnProperty(pokehash) && hidden_layers.indexOf(data[pokehash].name) == -1) { + continue; + } + var marker = markers[pokehash]; + marker.listeners[0].remove(); + marker.listeners[1].remove(); + marker.setMap(null); + + delete markers[pokehash]; } - listeners = []; - markers = []; // Add updated markers for (var pokehash in data) { @@ -101,6 +108,9 @@ // inherited, not interesting to us continue; } + if (markers.hasOwnProperty(pokehash)) { + continue; + } var p = data[pokehash]; if (!updated) { map.setZoom(16); @@ -149,19 +159,19 @@ icon: image }); - var listenerPair = { - a: google.maps.event.addListener(marker, 'mouseover', function() { + var listenerPair = [ + google.maps.event.addListener(marker, 'mouseover', function() { infowindow.setContent(this.title); infowindow.open(map, this); }), - b: google.maps.event.addListener(marker, 'mouseout', function() { + google.maps.event.addListener(marker, 'mouseout', function() { infowindow.close(map, this); }) - }; + ]; - listeners.push(listenerPair); - markers.push(marker); + marker.listeners = listenerPair; + markers[pokehash] = marker; } } @@ -182,8 +192,7 @@ data = {}; map = null; - markers = []; - listeners = []; + markers = {}; hidden_layers = []; layers = []; updated = false; From a44106e4c3657ceeea82a53cf0764e0593d7f507 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sun, 17 Jul 2016 23:58:07 +0000 Subject: [PATCH 14/39] Count number of pokemon seen on the map --- index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 6315d8c2..b6c56a73 100644 --- a/index.html +++ b/index.html @@ -123,6 +123,7 @@ if(layers.indexOf(p.name) == -1){ layers.push(p.name); layers.sort(); + document.getElementById('pknum').innerHTML = " (" + (layers.length - 1) + ")"; } console.log("Adding marker " + p.name); @@ -216,7 +217,7 @@ var legend = document.createElement('div'); legend.id = 'legend'; var content = []; - content.push('

Hide Pokemon

'); + content.push('

Hide Pokemon

'); content.push('
'); legend.innerHTML = content.join(''); legend.index = 1; From 201f4fb0cccc0c37299837c0a1e0ac04a9099245 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 18 Jul 2016 01:33:49 +0000 Subject: [PATCH 15/39] Show pokemon counts --- index.html | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index b6c56a73..b8917506 100644 --- a/index.html +++ b/index.html @@ -103,15 +103,21 @@ } // Add updated markers + var numPkmnType = {}; for (var pokehash in data) { if (!data.hasOwnProperty(pokehash)) { // inherited, not interesting to us continue; } + var p = data[pokehash]; + if (numPkmnType.hasOwnProperty(p.id)) { + numPkmnType[p.id] += 1; + } else { + numPkmnType[p.id] = 1; + } if (markers.hasOwnProperty(pokehash)) { continue; } - var p = data[pokehash]; if (!updated) { map.setZoom(16); map.panTo({lat: p.lat, lng: p.lng}); @@ -120,9 +126,9 @@ if(hidden_layers.indexOf(p.name) == -1){ // Pokemon not hidden - if(layers.indexOf(p.name) == -1){ - layers.push(p.name); - layers.sort(); + if (layers.findIndex(function(v){ return v.name == p.name; }) == -1) { + layers.push(p); + layers.sort(function(a, b){ return a.name.localeCompare(b.name); }); document.getElementById('pknum').innerHTML = " (" + (layers.length - 1) + ")"; } console.log("Adding marker " + p.name); @@ -179,12 +185,15 @@ // Draw layer manager var list = document.getElementById('legend-list'); var content = []; - for (var id in layers) { - var pkmn = layers[id]; - var checked = hidden_layers.indexOf(pkmn) != -1 ? "checked": ""; - content.push("
  • " + - pkmn + "<\/li>"); + pkmn.name + " (" + numPkmnType[pkmn.id] + ")" + "<\/li>"); } list.innerHTML = content.join(''); } From bc031b60b0792439b81a4d6e6075837ceb396439 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 18 Jul 2016 01:37:44 +0000 Subject: [PATCH 16/39] Retry heartbeat if it fails --- main.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 963228d9..3ca73250 100644 --- a/main.py +++ b/main.py @@ -267,15 +267,18 @@ def heartbeat(api_endpoint, access_token, response): m.lat = COORDS_LATITUDE m.long = COORDS_LONGITUDE m1.message = m.SerializeToString() - (hbtime, response) = get_profile( - access_token, - api_endpoint, - response.unknown7, - m1, - pokemon_pb2.RequestEnvelop.Requests(), - m4, - pokemon_pb2.RequestEnvelop.Requests(), - m5) + while True: + (hbtime, response) = get_profile( + access_token, + api_endpoint, + response.unknown7, + m1, + pokemon_pb2.RequestEnvelop.Requests(), + m4, + pokemon_pb2.RequestEnvelop.Requests(), + m5) + if response.payload: + break payload = response.payload[0] heartbeat = pokemon_pb2.ResponseEnvelop.HeartbeatPayload() heartbeat.ParseFromString(payload) From 25fd49d6430d62d6e684aae3fc5275681f109caa Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 18 Jul 2016 02:00:28 +0000 Subject: [PATCH 17/39] Atomically update data file --- main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 3ca73250..eb91d7c0 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,7 @@ import struct import json import argparse +import os import pokemon_pb2 import time @@ -79,8 +80,9 @@ def prune(): def write_data_to_file(): prune() - with open(DATA_FILE, 'w') as f: + with open(DATA_FILE + ".new", 'w') as f: json.dump(DATA, f, indent=2) + os.rename(DATA_FILE + ".new", DATA_FILE); def add_pokemon(pokeId, name, lat, lng, timestamp, timeleft): expiry = timestamp + timeleft From 32fa478ca881a6f6215b9ef0da3d0d46062f6acc Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 18 Jul 2016 02:47:03 +0000 Subject: [PATCH 18/39] Avoid using title for HTML content --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index b8917506..143ee879 100644 --- a/index.html +++ b/index.html @@ -162,13 +162,13 @@ map: map, position: {lat: p.lat, lng: p.lng}, label: "", - title: ""+p.name+"
    Time left: " + p.timeleft_str + "
    Lat: "+p.lat+"
    Long: "+p.lng, + details: ""+p.name+"
    Time left: " + p.timeleft_str + "
    Lat: "+p.lat+"
    Long: "+p.lng, icon: image }); var listenerPair = [ google.maps.event.addListener(marker, 'mouseover', function() { - infowindow.setContent(this.title); + infowindow.setContent(this.details); infowindow.open(map, this); }), From f4b148f244c5ff1caefd9a110505324ebcda4d7f Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 18 Jul 2016 02:49:30 +0000 Subject: [PATCH 19/39] Update details for existing markers so the timeleft counts down --- index.html | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/index.html b/index.html index 143ee879..8c52f16d 100644 --- a/index.html +++ b/index.html @@ -115,9 +115,6 @@ } else { numPkmnType[p.id] = 1; } - if (markers.hasOwnProperty(pokehash)) { - continue; - } if (!updated) { map.setZoom(16); map.panTo({lat: p.lat, lng: p.lng}); @@ -126,20 +123,6 @@ if(hidden_layers.indexOf(p.name) == -1){ // Pokemon not hidden - if (layers.findIndex(function(v){ return v.name == p.name; }) == -1) { - layers.push(p); - layers.sort(function(a, b){ return a.name.localeCompare(b.name); }); - document.getElementById('pknum').innerHTML = " (" + (layers.length - 1) + ")"; - } - console.log("Adding marker " + p.name); - - var infowindow = new google.maps.InfoWindow({ - }); - - var image = "https://raw.githubusercontent.com/AHAAAAAAA/PokemonGo-Map/master/static/icons/" + p.id + ".png"; - if (p.id == -1) { - image = 'https://agents.farmers.com/images/walking.png'; - } p.timeleft = p.expiry - p.timestamp; timeleft_strify = p.timeleft @@ -157,12 +140,35 @@ timeleft_strify %= 60; } p.timeleft_str += Math.floor(timeleft_strify) + "s"; + + detail_str = "" + p.name + "
    Time left: " + p.timeleft_str + "
    Lat: " + p.lat + "
    Long: " + p.lng; + + if (markers.hasOwnProperty(pokehash)) { + console.log("Updating marker " + p.name); + markers[pokehash].details = detail_str; + continue; + } + + if (layers.findIndex(function(v){ return v.name == p.name; }) == -1) { + layers.push(p); + layers.sort(function(a, b){ return a.name.localeCompare(b.name); }); + document.getElementById('pknum').innerHTML = " (" + (layers.length - 1) + ")"; + } + console.log("Adding marker " + p.name); + + var infowindow = new google.maps.InfoWindow({ + }); + + var image = "https://raw.githubusercontent.com/AHAAAAAAA/PokemonGo-Map/master/static/icons/" + p.id + ".png"; + if (p.id == -1) { + image = 'https://agents.farmers.com/images/walking.png'; + } var marker = new google.maps.Marker({ map: map, position: {lat: p.lat, lng: p.lng}, label: "", - details: ""+p.name+"
    Time left: " + p.timeleft_str + "
    Lat: "+p.lat+"
    Long: "+p.lng, + details: detail_str, icon: image }); From 7b5ea8fb228b60095fa54f67ef020a5bc8f16a5f Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 18 Jul 2016 15:41:32 +0200 Subject: [PATCH 20/39] Change HTML page title --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 8c52f16d..622d9acd 100644 --- a/index.html +++ b/index.html @@ -1,7 +1,7 @@ - Drawing tools + Pokémap