diff --git a/.gitignore b/.gitignore index 7a27be4..3eab994 100755 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ themes/jez-cas-soul-link/** themes/kyu-foul-cagelocke/** themes/pikaboo/ themes/assets/themes.js +.idea/* \ No newline at end of file diff --git a/assets/data/README.md b/assets/data/README.md old mode 100755 new mode 100644 diff --git a/assets/data/abilities.js b/assets/data/abilities.js new file mode 100644 index 0000000..fc7f652 --- /dev/null +++ b/assets/data/abilities.js @@ -0,0 +1,274 @@ +let abilities = [ + { id: 1, name: 'Stench', description: 'By releasing stench when attacking, this Pokémon may cause the target to flinch.', gen: 3 }, + { id: 2, name: 'Drizzle', description: 'The Pokémon makes it rain when it enters a battle.', gen: 3 }, + { id: 3, name: 'Speed Boost', description: 'Its Speed stat is boosted every turn.', gen: 3 }, + { id: 4, name: 'Battle Armor', description: 'Hard armor protects the Pokémon from critical hits.', gen: 3 }, + { id: 5, name: 'Sturdy', description: 'It cannot be knocked out with one hit. One-hit KO moves cannot knock it out, either.', gen: 3 }, + { id: 6, name: 'Damp', description: 'Prevents the use of explosive moves, such as Self-Destruct, by dampening its surroundings.', gen: 3 }, + { id: 7, name: 'Limber', description: 'Its limber body protects the Pokémon from paralysis.', gen: 3 }, + { id: 8, name: 'Sand Veil', description: 'Boosts the Pokémon\'s evasiveness in a sandstorm.', gen: 3 }, + { id: 9, name: 'Static', description: 'The Pokémon is charged with static electricity, so contact with it may cause paralysis.', gen: 3 }, + { id: 10, name: 'Volt Absorb', description: 'Restores HP if hit by an Electric-type move instead of taking damage.', gen: 3 }, + { id: 11, name: 'Water Absorb', description: 'Restores HP if hit by a Water-type move instead of taking damage.', gen: 3 }, + { id: 12, name: 'Oblivious', description: 'The Pokémon is oblivious, and that keeps it from being infatuated or falling for taunts.', gen: 3 }, + { id: 13, name: 'Cloud Nine', description: 'Eliminates the effects of weather.', gen: 3 }, + { id: 14, name: 'Compound Eyes', description: 'The Pokémon\'s compound eyes boost its accuracy.', gen: 3 }, + { id: 15, name: 'Insomnia', description: 'The Pokémon is suffering from insomnia and cannot fall asleep.', gen: 3 }, + { id: 16, name: 'Color Change', description: 'The Pokémon\'s type becomes the type of the move used on it.', gen: 3 }, + { id: 17, name: 'Immunity', description: 'The immune system of the Pokémon prevents it from getting poisoned.', gen: 3 }, + { id: 18, name: 'Flash Fire', description: 'Powers up the Pokémon\'s Fire-type moves if it\'s hit by one.', gen: 3 }, + { id: 19, name: 'Shield Dust', description: 'This Pokémon\'s dust blocks the additional effects of attacks taken.', gen: 3 }, + { id: 20, name: 'Own Tempo', description: 'This Pokémon has its own tempo, and that prevents it from becoming confused.', gen: 3 }, + { id: 21, name: 'Suction Cups', description: 'This Pokémon uses suction cups to stay in one spot to negate all moves and items that force switching out.', gen: 3 }, + { id: 22, name: 'Intimidate', description: 'The Pokémon intimidates opposing Pokémon upon entering battle, lowering their Attack stat.', gen: 3 }, + { id: 23, name: 'Shadow Tag', description: 'This Pokémon steps on the opposing Pokémon\'s shadow to prevent it from escaping.', gen: 3 }, + { id: 24, name: 'Rough Skin', description: 'This Pokémon inflicts damage with its rough skin to the attacker on contact.', gen: 3 }, + { id: 25, name: 'Wonder Guard', description: 'Its mysterious power only lets supereffective moves hit the Pokémon.', gen: 3 }, + { id: 26, name: 'Levitate', description: 'By floating in the air, the Pokémon receives full immunity to all Ground-type moves.', gen: 3 }, + { id: 27, name: 'Effect Spore', description: 'Contact with the Pokémon may inflict poison, sleep, or paralysis on its attacker.', gen: 3 }, + { id: 28, name: 'Synchronize', description: 'The attacker will receive the same status condition if it inflicts a burn, poison, or paralysis to the Pokémon.', gen: 3 }, + { id: 29, name: 'Clear Body', description: 'Prevents other Pokémon\'s moves or Abilities from lowering the Pokémon\'s stats.', gen: 3 }, + { id: 30, name: 'Natural Cure', description: 'All status conditions heal when the Pokémon switches out.', gen: 3 }, + { id: 31, name: 'Lightning Rod', description: 'The Pokémon draws in all Electric-type moves. Instead of being hit by Electric-type moves, it boosts its Sp. Atk.', gen: 3 }, + { id: 32, name: 'Serene Grace', description: 'Boosts the likelihood of additional effects occurring when attacking.', gen: 3 }, + { id: 33, name: 'Swift Swim', description: 'Boosts the Pokémon\'s Speed stat in rain.', gen: 3 }, + { id: 34, name: 'Chlorophyll', description: 'Boosts the Pokémon\'s Speed stat in harsh sunlight.', gen: 3 }, + { id: 35, name: 'Illuminate', description: 'Raises the likelihood of meeting wild Pokémon by illuminating the surroundings.', gen: 3 }, + { id: 36, name: 'Trace', description: 'When it enters a battle, the Pokémon copies an opposing Pokémon\'s Ability.', gen: 3 }, + { id: 37, name: 'Huge Power', description: 'Doubles the Pokémon\'s Attack stat.', gen: 3 }, + { id: 38, name: 'Poison Point', description: 'Contact with the Pokémon may poison the attacker.', gen: 3 }, + { id: 39, name: 'Inner Focus', description: 'The Pokémon\'s intensely focused, and that protects the Pokémon from flinching.', gen: 3 }, + { id: 40, name: 'Magma Armor', description: 'The Pokémon is covered with hot magma, which prevents the Pokémon from becoming frozen.', gen: 3 }, + { id: 41, name: 'Water Veil', description: 'The Pokémon is covered with a water veil, which prevents the Pokémon from getting a burn.', gen: 3 }, + { id: 42, name: 'Magnet Pull', description: 'Prevents Steel-type Pokémon from escaping using its magnetic force.', gen: 3 }, + { id: 43, name: 'Soundproof', description: 'Soundproofing gives the Pokémon full immunity to all sound-based moves.', gen: 3 }, + { id: 44, name: 'Rain Dish', description: 'The Pokémon gradually regains HP in rain.', gen: 3 }, + { id: 45, name: 'Sand Stream', description: 'The Pokémon summons a sandstorm when it enters a battle.', gen: 3 }, + { id: 46, name: 'Pressure', description: 'By putting pressure on the opposing Pokémon, it raises their PP usage.', gen: 3 }, + { id: 47, name: 'Thick Fat', description: 'The Pokémon is protected by a layer of thick fat, which halves the damage taken from Fire- and Ice-type moves.', gen: 3 }, + { id: 48, name: 'Early Bird', description: 'The Pokémon awakens from sleep twice as fast as other Pokémon.', gen: 3 }, + { id: 49, name: 'Flame Body', description: 'Contact with the Pokémon may burn the attacker.', gen: 3 }, + { id: 50, name: 'Run Away', description: 'Enables a sure getaway from wild Pokémon.', gen: 3 }, + { id: 51, name: 'Keen Eye', description: 'Keen eyes prevent other Pokémon from lowering this Pokémon\'s accuracy.', gen: 3 }, + { id: 52, name: 'Hyper Cutter', description: 'The Pokémon\'s proud of its powerful pincers. They prevent other Pokémon from lowering its Attack stat.', gen: 3 }, + { id: 53, name: 'Pickup', description: 'The Pokémon may pick up the item an opposing Pokémon used during a battle. It may pick up items outside of battle, too.', gen: 3 }, + { id: 54, name: 'Truant', description: 'The Pokémon can\'t use a move if it had used a move on the previous turn.', gen: 3 }, + { id: 55, name: 'Hustle', description: 'Boosts the Attack stat, but lowers accuracy.', gen: 3 }, + { id: 56, name: 'Cute Charm', description: 'Contact with the Pokémon may cause infatuation.', gen: 3 }, + { id: 57, name: 'Plus', description: 'Boosts the Sp. Atk stat of the Pokémon if an ally with the Plus or Minus Ability is also in battle.', gen: 3 }, + { id: 58, name: 'Minus', description: 'Boosts the Sp. Atk stat of the Pokémon if an ally with the Plus or Minus Ability is also in battle.', gen: 3 }, + { id: 59, name: 'Forecast', description: 'The Pokémon transforms with the weather to change its type to Water, Fire, or Ice.', gen: 3 }, + { id: 60, name: 'Sticky Hold', description: 'Items held by the Pokémon are stuck fast and cannot be removed by other Pokémon.', gen: 3 }, + { id: 61, name: 'Shed Skin', description: 'The Pokémon may heal its own status conditions by shedding its skin.', gen: 3 }, + { id: 62, name: 'Guts', description: 'It\'s so gutsy that having a status condition boosts the Pokémon\'s Attack stat.', gen: 3 }, + { id: 63, name: 'Marvel Scale', description: 'The Pokémon\'s marvelous scales boost the Defense stat if it has a status condition.', gen: 3 }, + { id: 64, name: 'Liquid Ooze', description: 'The oozed liquid has a strong stench, which damages attackers using any draining move.', gen: 3 }, + { id: 65, name: 'Overgrow', description: 'Powers up Grass-type moves when the Pokémon\'s HP is low.', gen: 3 }, + { id: 66, name: 'Blaze', description: 'Powers up Fire-type moves when the Pokémon\'s HP is low.', gen: 3 }, + { id: 67, name: 'Torrent', description: 'Powers up Water-type moves when the Pokémon\'s HP is low.', gen: 3 }, + { id: 68, name: 'Swarm', description: 'Powers up Bug-type moves when the Pokémon\'s HP is low.', gen: 3 }, + { id: 69, name: 'Rock Head', description: 'Protects the Pokémon from recoil damage.', gen: 3 }, + { id: 70, name: 'Drought', description: 'Turns the sunlight harsh when the Pokémon enters a battle.', gen: 3 }, + { id: 71, name: 'Arena Trap', description: 'Prevents opposing Pokémon from fleeing.', gen: 3 }, + { id: 72, name: 'Vital Spirit', description: 'The Pokémon is full of vitality, and that prevents it from falling asleep.', gen: 3 }, + { id: 73, name: 'White Smoke', description: 'The Pokémon is protected by its white smoke, which prevents other Pokémon from lowering its stats.', gen: 3 }, + { id: 74, name: 'Pure Power', description: 'Using its pure power, the Pokémon doubles its Attack stat.', gen: 3 }, + { id: 75, name: 'Shell Armor', description: 'A hard shell protects the Pokémon from critical hits.', gen: 3 }, + { id: 76, name: 'Air Lock', description: 'Eliminates the effects of weather.', gen: 3 }, + { id: 77, name: 'Tangled Feet', description: 'Raises evasiveness if the Pokémon is confused.', gen: 4 }, + { id: 78, name: 'Motor Drive', description: 'Boosts its Speed stat if hit by an Electric-type move instead of taking damage.', gen: 4 }, + { id: 79, name: 'Rivalry', description: 'Becomes competitive and deals more damage to Pokémon of the same gender, but deals less to Pokémon of the opposite gender.', gen: 4 }, + { id: 80, name: 'Steadfast', description: 'The Pokémon\'s determination boosts the Speed stat each time the Pokémon flinches.', gen: 4 }, + { id: 81, name: 'Snow Cloak', description: 'Boosts evasiveness in a hailstorm.', gen: 4 }, + { id: 82, name: 'Gluttony', description: 'Makes the Pokémon eat a held Berry when its HP drops to half or less, which is sooner than usual.', gen: 4 }, + { id: 83, name: 'Anger Point', description: 'The Pokémon is angered when it takes a critical hit, and that maxes its Attack stat.', gen: 4 }, + { id: 84, name: 'Unburden', description: 'Boosts the Speed stat if the Pokémon\'s held item is used or lost.', gen: 4 }, + { id: 85, name: 'Heatproof', description: 'The heatproof body of the Pokémon halves the damage from Fire-type moves that hit it.', gen: 4 }, + { id: 86, name: 'Simple', description: 'The stat changes the Pokémon receives are doubled.', gen: 4 }, + { id: 87, name: 'Dry Skin', description: 'Restores HP in rain or when hit by Water-type moves. Reduces HP in harsh sunlight, and increases the damage received from Fire-type moves.', gen: 4 }, + { id: 88, name: 'Download', description: 'Compares an opposing Pokémon\'s Defense and Sp. Def stats before raising its own Attack or Sp. Atk stat—whichever will be more effective.', gen: 4 }, + { id: 89, name: 'Iron Fist', description: 'Powers up punching moves.', gen: 4 }, + { id: 90, name: 'Poison Heal', description: 'Restores HP if the Pokémon is poisoned instead of losing HP.', gen: 4 }, + { id: 91, name: 'Adaptability', description: 'Powers up moves of the same type as the Pokémon.', gen: 4 }, + { id: 92, name: 'Skill Link', description: 'Maximizes the number of times multistrike moves hit.', gen: 4 }, + { id: 93, name: 'Hydration', description: 'Heals status conditions if it\'s raining.', gen: 4 }, + { id: 94, name: 'Solar Power', description: 'Boosts the Sp. Atk stat in harsh sunlight, but HP decreases every turn.', gen: 4 }, + { id: 95, name: 'Quick Feet', description: 'Boosts the Speed stat if the Pokémon has a status condition.', gen: 4 }, + { id: 96, name: 'Normalize', description: 'All the Pokémon\'s moves become Normal type. The power of those moves is boosted a little.', gen: 4 }, + { id: 97, name: 'Sniper', description: 'Powers up moves if they become critical hits when attacking.', gen: 4 }, + { id: 98, name: 'Magic Guard', description: 'The Pokémon only takes damage from attacks.', gen: 4 }, + { id: 99, name: 'No Guard', description: 'The Pokémon employs no-guard tactics to ensure incoming and outgoing attacks always land.', gen: 4 }, + { id: 100, name: 'Stall', description: 'The Pokémon moves after all other Pokémon do.', gen: 4 }, + { id: 101, name: 'Technician', description: 'Powers up the Pokémon\'s weaker moves.', gen: 4 }, + { id: 102, name: 'Leaf Guard', description: 'Prevents status conditions in harsh sunlight.', gen: 4 }, + { id: 103, name: 'Klutz', description: 'The Pokémon can\'t use any held items.', gen: 4 }, + { id: 104, name: 'Mold Breaker', description: 'Moves can be used on the target regardless of its Abilities.', gen: 4 }, + { id: 105, name: 'Super Luck', description: 'The Pokémon is so lucky that the critical-hit ratios of its moves are boosted.', gen: 4 }, + { id: 106, name: 'Aftermath', description: 'Damages the attacker if it contacts the Pokémon with a finishing hit.', gen: 4 }, + { id: 107, name: 'Anticipation', description: 'The Pokémon can sense an opposing Pokémon\'s dangerous moves.', gen: 4 }, + { id: 108, name: 'Forewarn', description: 'When it enters a battle, the Pokémon can tell one of the moves an opposing Pokémon has.', gen: 4 }, + { id: 109, name: 'Unaware', description: 'When attacking, the Pokémon ignores the target Pokémon\'s stat changes.', gen: 4 }, + { id: 110, name: 'Tinted Lens', description: 'The Pokémon can use \'not very effective\' moves to deal regular damage.', gen: 4 }, + { id: 111, name: 'Filter', description: 'Reduces the power of supereffective attacks taken.', gen: 4 }, + { id: 112, name: 'Slow Start', description: 'For five turns, the Pokémon\'s Attack and Speed stats are halved.', gen: 4 }, + { id: 113, name: 'Scrappy', description: 'The Pokémon can hit Ghost-type Pokémon with Normal- and Fighting-type moves.', gen: 4 }, + { id: 114, name: 'Storm Drain', description: 'Draws in all Water-type moves. Instead of being hit by Water-type moves, it boosts its Sp. Atk.', gen: 4 }, + { id: 115, name: 'Ice Body', description: 'The Pokémon gradually regains HP in a hailstorm.', gen: 4 }, + { id: 116, name: 'Solid Rock', description: 'Reduces the power of supereffective attacks taken.', gen: 4 }, + { id: 117, name: 'Snow Warning', description: 'The Pokémon summons a hailstorm when it enters a battle.', gen: 4 }, + { id: 118, name: 'Honey Gather', description: 'The Pokémon may gather Honey after a battle.', gen: 4 }, + { id: 119, name: 'Frisk', description: 'When it enters a battle, the Pokémon can check an opposing Pokémon\'s held item.', gen: 4 }, + { id: 120, name: 'Reckless', description: 'Powers up moves that have recoil damage.', gen: 4 }, + { id: 121, name: 'Multitype', description: 'Changes the Pokémon\'s type to match the Plate or Z-Crystal it holds.', gen: 4 }, + { id: 122, name: 'Flower Gift', description: 'Boosts the Attack and Sp. Def stats of itself and allies in harsh sunlight.', gen: 4 }, + { id: 123, name: 'Bad Dreams', description: 'Reduces the HP of sleeping opposing Pokémon.', gen: 4 }, + { id: 124, name: 'Pickpocket', description: 'Steals an item from an attacker that made direct contact.', gen: 5 }, + { id: 125, name: 'Sheer Force', description: 'Removes additional effects to increase the power of moves when attacking.', gen: 5 }, + { id: 126, name: 'Contrary', description: 'Makes stat changes have an opposite effect.', gen: 5 }, + { id: 127, name: 'Unnerve', description: 'Unnerves opposing Pokémon and makes them unable to eat Berries.', gen: 5 }, + { id: 128, name: 'Defiant', description: 'Boosts the Pokémon\'s Attack stat sharply when its stats are lowered.', gen: 5 }, + { id: 129, name: 'Defeatist', description: 'Halves the Pokémon\'s Attack and Sp. Atk stats when its HP becomes half or less.', gen: 5 }, + { id: 130, name: 'Cursed Body', description: 'May disable a move used on the Pokémon.', gen: 5 }, + { id: 131, name: 'Healer', description: 'Sometimes heals an ally\'s status condition.', gen: 5 }, + { id: 132, name: 'Friend Guard', description: 'Reduces damage done to allies.', gen: 5 }, + { id: 133, name: 'Weak Armor', description: 'Physical attacks to the Pokémon lower its Defense stat but sharply raise its Speed stat.', gen: 5 }, + { id: 134, name: 'Heavy Metal', description: 'Doubles the Pokémon\'s weight.', gen: 5 }, + { id: 135, name: 'Light Metal', description: 'Halves the Pokémon\'s weight.', gen: 5 }, + { id: 136, name: 'Multiscale', description: 'Reduces the amount of damage the Pokémon takes while its HP is full.', gen: 5 }, + { id: 137, name: 'Toxic Boost', description: 'Powers up physical attacks when the Pokémon is poisoned.', gen: 5 }, + { id: 138, name: 'Flare Boost', description: 'Powers up special attacks when the Pokémon is burned.', gen: 5 }, + { id: 139, name: 'Harvest', description: 'May create another Berry after one is used.', gen: 5 }, + { id: 140, name: 'Telepathy', description: 'Anticipates an ally\'s attack and dodges it.', gen: 5 }, + { id: 141, name: 'Moody', description: 'Raises one stat sharply and lowers another every turn.', gen: 5 }, + { id: 142, name: 'Overcoat', description: 'Protects the Pokémon from things like sand, hail, and powder.', gen: 5 }, + { id: 143, name: 'Poison Touch', description: 'May poison a target when the Pokémon makes contact.', gen: 5 }, + { id: 144, name: 'Regenerator', description: 'Restores a little HP when withdrawn from battle.', gen: 5 }, + { id: 145, name: 'Big Pecks', description: 'Protects the Pokémon from Defense-lowering effects.', gen: 5 }, + { id: 146, name: 'Sand Rush', description: 'Boosts the Pokémon\'s Speed stat in a sandstorm.', gen: 5 }, + { id: 147, name: 'Wonder Skin', description: 'Makes status moves more likely to miss.', gen: 5 }, + { id: 148, name: 'Analytic', description: 'Boosts move power when the Pokémon moves last.', gen: 5 }, + { id: 149, name: 'Illusion', description: 'Comes out disguised as the Pokémon in the party\'s last spot.', gen: 5 }, + { id: 150, name: 'Imposter', description: 'The Pokémon transforms itself into the Pokémon it\'s facing.', gen: 5 }, + { id: 151, name: 'Infiltrator', description: 'Passes through the opposing Pokémon\'s barrier, substitute, and the like and strikes.', gen: 5 }, + { id: 152, name: 'Mummy', description: 'Contact with the Pokémon changes the attacker\'s Ability to Mummy.', gen: 5 }, + { id: 153, name: 'Moxie', description: 'The Pokémon shows moxie, and that boosts the Attack stat after knocking out any Pokémon.', gen: 5 }, + { id: 154, name: 'Justified', description: 'Being hit by a Dark-type move boosts the Attack stat of the Pokémon, for justice.', gen: 5 }, + { id: 155, name: 'Rattled', description: 'Dark-, Ghost-, and Bug-type moves scare the Pokémon and boost its Speed stat.', gen: 5 }, + { id: 156, name: 'Magic Bounce', description: 'Reflects status moves instead of getting hit by them.', gen: 5 }, + { id: 157, name: 'Sap Sipper', description: 'Boosts the Attack stat if hit by a Grass-type move instead of taking damage.', gen: 5 }, + { id: 158, name: 'Prankster', description: 'Gives priority to a status move.', gen: 5 }, + { id: 159, name: 'Sand Force', description: 'Boosts the power of Rock-, Ground-, and Steel-type moves in a sandstorm.', gen: 5 }, + { id: 160, name: 'Iron Barbs', description: 'Inflicts damage on the attacker upon contact with iron barbs.', gen: 5 }, + { id: 161, name: 'Zen Mode', description: 'Changes the Pokémon\'s shape when HP is half or less.', gen: 5 }, + { id: 162, name: 'Victory Star', description: 'Boosts the accuracy of its allies and itself.', gen: 5 }, + { id: 163, name: 'Turboblaze', description: 'Moves can be used on the target regardless of its Abilities.', gen: 5 }, + { id: 164, name: 'Teravolt', description: 'Moves can be used on the target regardless of its Abilities.', gen: 5 }, + { id: 165, name: 'Aroma Veil', description: 'Protects itself and its allies from attacks that limit their move choices.', gen: 6 }, + { id: 166, name: 'Flower Veil', description: 'Ally Grass-type Pokémon are protected from status conditions and the lowering of their stats.', gen: 6 }, + { id: 167, name: 'Cheek Pouch', description: 'Restores HP as well when the Pokémon eats a Berry.', gen: 6 }, + { id: 168, name: 'Protean', description: 'Changes the Pokémon\'s type to the type of the move it\'s about to use.', gen: 6 }, + { id: 169, name: 'Fur Coat', description: 'Halves the damage from physical moves.', gen: 6 }, + { id: 170, name: 'Magician', description: 'The Pokémon steals the held item of a Pokémon it hits with a move.', gen: 6 }, + { id: 171, name: 'Bulletproof', description: 'Protects the Pokémon from some ball and bomb moves.', gen: 6 }, + { id: 172, name: 'Competitive', description: 'Boosts the Sp. Atk stat sharply when a stat is lowered.', gen: 6 }, + { id: 173, name: 'Strong Jaw', description: 'The Pokémon\'s strong jaw boosts the power of its biting moves.', gen: 6 }, + { id: 174, name: 'Refrigerate', description: 'Normal-type moves become Ice-type moves. The power of those moves is boosted a little.', gen: 6 }, + { id: 175, name: 'Sweet Veil', description: 'Prevents itself and ally Pokémon from falling asleep.', gen: 6 }, + { id: 176, name: 'Stance Change', description: 'The Pokémon changes its form to Blade Forme when it uses an attack move and changes to Shield Forme when it uses King\'s Shield.', gen: 6 }, + { id: 177, name: 'Gale Wings', description: 'Gives priority to Flying-type moves when the Pokémon\'s HP is full.', gen: 6 }, + { id: 178, name: 'Mega Launcher', description: 'Powers up aura and pulse moves.', gen: 6 }, + { id: 179, name: 'Grass Pelt', description: 'Boosts the Pokémon\'s Defense stat on Grassy Terrain.', gen: 6 }, + { id: 180, name: 'Symbiosis', description: 'The Pokémon passes its item to an ally that has used up an item.', gen: 6 }, + { id: 181, name: 'Tough Claws', description: 'Powers up moves that make direct contact.', gen: 6 }, + { id: 182, name: 'Pixilate', description: 'Normal-type moves become Fairy-type moves. The power of those moves is boosted a little.', gen: 6 }, + { id: 183, name: 'Gooey', description: 'Contact with the Pokémon lowers the attacker\'s Speed stat.', gen: 6 }, + { id: 184, name: 'Aerilate', description: 'Normal-type moves become Flying-type moves. The power of those moves is boosted a little.', gen: 6 }, + { id: 185, name: 'Parental Bond', description: 'Parent and child each attacks.', gen: 6 }, + { id: 186, name: 'Dark Aura', description: 'Powers up each Pokémon\'s Dark-type moves.', gen: 6 }, + { id: 187, name: 'Fairy Aura', description: 'Powers up each Pokémon\'s Fairy-type moves.', gen: 6 }, + { id: 188, name: 'Aura Break', description: 'The effects of \'Aura\' Abilities are reversed to lower the power of affected moves.', gen: 6 }, + { id: 189, name: 'Primordial Sea', description: 'The Pokémon changes the weather to nullify Fire-type attacks.', gen: 6 }, + { id: 190, name: 'Desolate Land', description: 'The Pokémon changes the weather to nullify Water-type attacks.', gen: 6 }, + { id: 191, name: 'Delta Stream', description: 'The Pokémon changes the weather to eliminate all of the Flying type\'s weaknesses.', gen: 6 }, + { id: 192, name: 'Stamina', description: 'Boosts the Defense stat when hit by an attack.', gen: 7 }, + { id: 193, name: 'Wimp Out', description: 'The Pokémon cowardly switches out when its HP becomes half or less.', gen: 7 }, + { id: 194, name: 'Emergency Exit', description: 'The Pokémon, sensing danger, switches out when its HP becomes half or less.', gen: 7 }, + { id: 195, name: 'Water Compaction', description: 'Boosts the Pokémon\'s Defense stat sharply when hit by a Water-type move.', gen: 7 }, + { id: 196, name: 'Merciless', description: 'The Pokémon\'s attacks become critical hits if the target is poisoned.', gen: 7 }, + { id: 197, name: 'Shields Down', description: 'When its HP becomes half or less, the Pokémon\'s shell breaks and it becomes aggressive.', gen: 7 }, + { id: 198, name: 'Stakeout', description: 'Doubles the damage dealt to the target\'s replacement if the target switches out.', gen: 7 }, + { id: 199, name: 'Water Bubble', description: 'Lowers the power of Fire-type moves done to the Pokémon and prevents the Pokémon from getting a burn.', gen: 7 }, + { id: 200, name: 'Steelworker', description: 'Powers up Steel-type moves.', gen: 7 }, + { id: 201, name: 'Berserk', description: 'Boosts the Pokémon\'s Sp. Atk stat when it takes a hit that causes its HP to become half or less.', gen: 7 }, + { id: 202, name: 'Slush Rush', description: 'Boosts the Pokémon\'s Speed stat in a hailstorm.', gen: 7 }, + { id: 203, name: 'Long Reach', description: 'The Pokémon uses its moves without making contact with the target.', gen: 7 }, + { id: 204, name: 'Liquid Voice', description: 'All sound-based moves become Water-type moves.', gen: 7 }, + { id: 205, name: 'Triage', description: 'Gives priority to a healing move.', gen: 7 }, + { id: 206, name: 'Galvanize', description: 'Normal-type moves become Electric-type moves. The power of those moves is boosted a little.', gen: 7 }, + { id: 207, name: 'Surge Surfer', description: 'Doubles the Pokémon\'s Speed stat on Electric Terrain.', gen: 7 }, + { id: 208, name: 'Schooling', description: 'When it has a lot of HP, the Pokémon forms a powerful school. It stops schooling when its HP is low.', gen: 7 }, + { id: 209, name: 'Disguise', description: 'Once per battle, the shroud that covers the Pokémon can protect it from an attack.', gen: 7 }, + { id: 210, name: 'Battle Bond', description: 'Defeating an opposing Pokémon strengthens the Pokémon\'s bond with its Trainer, and it becomes Ash-Greninja. Water Shuriken gets more powerful.', gen: 7 }, + { id: 211, name: 'Power Construct', description: 'Other Cells gather to aid when its HP becomes half or less. Then the Pokémon changes its form to Complete Forme.', gen: 7 }, + { id: 212, name: 'Corrosion', description: 'The Pokémon can poison the target even if it\'s a Steel or Poison type.', gen: 7 }, + { id: 213, name: 'Comatose', description: 'It\'s always drowsing and will never wake up. It can attack without waking up.', gen: 7 }, + { id: 214, name: 'Queenly Majesty', description: 'Its majesty pressures the opposing Pokémon, making it unable to attack using priority moves.', gen: 7 }, + { id: 215, name: 'Innards Out', description: 'Damages the attacker landing the finishing hit by the amount equal to its last HP.', gen: 7 }, + { id: 216, name: 'Dancer', description: 'When another Pokémon uses a dance move, it can use a dance move following it regardless of its Speed.', gen: 7 }, + { id: 217, name: 'Battery', description: 'Powers up ally Pokémon\'s special moves.', gen: 7 }, + { id: 218, name: 'Fluffy', description: 'Halves the damage taken from moves that make direct contact, but doubles that of Fire-type moves.', gen: 7 }, + { id: 219, name: 'Dazzling', description: 'Surprises the opposing Pokémon, making it unable to attack using priority moves.', gen: 7 }, + { id: 220, name: 'Soul-Heart', description: 'Boosts its Sp. Atk stat every time a Pokémon faints.', gen: 7 }, + { id: 221, name: 'Tangling Hair', description: 'Contact with the Pokémon lowers the attacker\'s Speed stat.', gen: 7 }, + { id: 222, name: 'Receiver', description: 'The Pokémon copies the Ability of a defeated ally.', gen: 7 }, + { id: 223, name: 'Power of Alchemy', description: 'The Pokémon copies the Ability of a defeated ally.', gen: 7 }, + { id: 224, name: 'Beast Boost', description: 'The Pokémon boosts its most proficient stat each time it knocks out a Pokémon.', gen: 7 }, + { id: 225, name: 'RKS System', description: 'Changes the Pokémon\'s type to match the memory disc it holds.', gen: 7 }, + { id: 226, name: 'Electric Surge', description: 'Turns the ground into Electric Terrain when the Pokémon enters a battle.', gen: 7 }, + { id: 227, name: 'Psychic Surge', description: 'Turns the ground into Psychic Terrain when the Pokémon enters a battle.', gen: 7 }, + { id: 228, name: 'Misty Surge', description: 'Turns the ground into Misty Terrain when the Pokémon enters a battle.', gen: 7 }, + { id: 229, name: 'Grassy Surge', description: 'Turns the ground into Grassy Terrain when the Pokémon enters a battle.', gen: 7 }, + { id: 230, name: 'Full Metal Body', description: 'Prevents other Pokémon\'s moves or Abilities from lowering the Pokémon\'s stats.', gen: 7 }, + { id: 231, name: 'Shadow Shield', description: 'Reduces the amount of damage the Pokémon takes while its HP is full.', gen: 7 }, + { id: 232, name: 'Prism Armor', description: 'Reduces the power of supereffective attacks taken.', gen: 7 }, + { id: 233, name: 'Neuroforce', description: 'Powers up moves that are super effective.', gen: 7 }, + { id: 234, name: 'Intrepid Sword', description: 'Boosts the Pokémon\'s Attack stat when the Pokémon enters a battle.', gen: 8 }, + { id: 235, name: 'Dauntless Shield', description: 'Boosts the Pokémon\'s Defense stat when the Pokémon enters a battle.', gen: 8 }, + { id: 236, name: 'Libero', description: 'Changes the Pokémon\'s type to the type of the move it\'s about to use.', gen: 8 }, + { id: 237, name: 'Ball Fetch', description: 'If the Pokémon is not holding an item, it will fetch the Poké Ball from the first failed throw of the battle.', gen: 8 }, + { id: 238, name: 'Cotton Down', description: 'When the Pokémon is hit by an attack, it scatters cotton fluff around and lowers the Speed stat of all Pokémon except itself.', gen: 8 }, + { id: 239, name: 'Propeller Tail', description: 'Ignores the effects of opposing Pokémon\'s Abilities and moves that draw in moves.', gen: 8 }, + { id: 240, name: 'Mirror Armor', description: 'Bounces back only the stat-lowering effects that the Pokémon receives.', gen: 8 }, + { id: 241, name: 'Gulp Missile', description: 'When the Pokémon uses Surf or Dive, it will come back with prey. When it takes damage, it will spit out the prey to attack.', gen: 8 }, + { id: 242, name: 'Stalwart', description: 'Ignores the effects of opposing Pokémon\'s Abilities and moves that draw in moves.', gen: 8 }, + { id: 243, name: 'Steam Engine', description: 'Boosts the Pokémon\'s Speed stat drastically if hit by a Fire- or Water-type move.', gen: 8 }, + { id: 244, name: 'Punk Rock', description: 'Boosts the power of sound-based moves. The Pokémon also takes half the damage from these kinds of moves.', gen: 8 }, + { id: 245, name: 'Sand Spit', description: 'The Pokémon creates a sandstorm when it\'s hit by an attack.', gen: 8 }, + { id: 246, name: 'Ice Scales', description: 'The Pokémon is protected by ice scales, which halve the damage taken from special moves.', gen: 8 }, + { id: 247, name: 'Ripen', description: 'Ripens Berries and doubles their effect.', gen: 8 }, + { id: 248, name: 'Ice Face', description: 'The Pokémon\'s ice head can take a physical attack as a substitute, but the attack also changes the Pokémon\'s appearance. The ice will be restored when it hails.', gen: 8 }, + { id: 249, name: 'Power Spot', description: 'Just being next to the Pokémon powers up moves.', gen: 8 }, + { id: 250, name: 'Mimicry', description: 'Changes the Pokémon\'s type depending on the terrain.', gen: 8 }, + { id: 251, name: 'Screen Cleaner', description: 'When the Pokémon enters a battle, the effects of Light Screen, Reflect, and Aurora Veil are nullified for both opposing and ally Pokémon.', gen: 8 }, + { id: 252, name: 'Steely Spirit', description: 'Powers up ally Pokémon\'s Steel-type moves.', gen: 8 }, + { id: 253, name: 'Perish Body', description: 'When hit by a move that makes direct contact, the Pokémon and the attacker will faint after three turns unless they switch out of battle.', gen: 8 }, + { id: 254, name: 'Wandering Spirit', description: 'The Pokémon exchanges Abilities with a Pokémon that hits it with a move that makes direct contact.', gen: 8 }, + { id: 255, name: 'Gorilla Tactics', description: 'Boosts the Pokémon\'s Attack stat but only allows the use of the first selected move.', gen: 8 }, + { id: 256, name: 'Neutralizing Gas', description: 'If the Pokémon with Neutralizing Gas is in the battle, the effects of all Pokémon\'s Abilities will be nullified or will not be triggered.', gen: 8 }, + { id: 257, name: 'Pastel Veil', description: 'Protects the Pokémon and its ally Pokémon from being poisoned.', gen: 8 }, + { id: 258, name: 'Hunger Switch', description: 'The Pokémon changes its form, alternating between its Full Belly Mode and Hangry Mode after the end of each turn.', gen: 8 }, + { id: 259, name: 'Quick Draw', description: 'Enables the Pokémon to move first occasionally.', gen: 8 }, + { id: 260, name: 'Unseen Fist', description: 'If the Pokémon uses moves that make direct contact, it can attack the target even if the target protects itself.', gen: 8 }, + { id: 261, name: 'Curious Medicine', description: 'When the Pokémon enters a battle, it scatters medicine from its shell, which removes all stat changes from allies.', gen: 8 }, + { id: 262, name: 'Transistor', description: 'Powers up Electric-type moves.', gen: 8 }, + { id: 263, name: 'Dragon\'s Maw', description: 'Powers up Dragon-type moves.', gen: 8 }, + { id: 264, name: 'Chilling Neigh', description: 'When the Pokémon knocks out a target, it utters a chilling neigh, which boosts its Attack stat.', gen: 8 }, + { id: 265, name: 'Grim Neigh', description: 'When the Pokémon knocks out a target, it utters a terrifying neigh, which boosts its Sp. Atk stat.', gen: 8 }, + { id: 266, name: 'As One', description: 'This Ability combines the effects of both Calyrex\'s Unnerve Ability and Glastrier\'s Chilling Neigh Ability/Spectrier\'s Grim Neigh Ability.', gen: 8 }, + { id: 267, name: 'As One', description: 'This Ability combines the effects of both Calyrex\'s Unnerve Ability and Glastrier\'s Chilling Neigh Ability/Spectrier\'s Grim Neigh Ability.', gen: 8 } +] + +function getAbilityById (abilityId) { + if (abilityId === 0) return null + return abilities.find(ability => ability.id === parseInt(abilityId)) +} \ No newline at end of file diff --git a/assets/data/badges.js b/assets/data/badges.js old mode 100755 new mode 100644 index 1082608..93fbb32 --- a/assets/data/badges.js +++ b/assets/data/badges.js @@ -124,6 +124,52 @@ var badges = [ 'Earth' ] }, + { + id: 'POKEMON_GLDA', + folder: 'jhoto', + badges: [ + 'Zephyr', + 'Hive', + 'Plain', + 'Fog', + 'Storm', + 'Mineral', + 'Glacier', + 'Rising', + + 'Boulder', + 'Cascade', + 'Thunder', + 'Rainbow', + 'Soul', + 'Marsh', + 'Volcano', + 'Earth' + ] + }, + { + id: 'POKEMON_SLVA', + folder: 'jhoto', + badges: [ + 'Zephyr', + 'Hive', + 'Plain', + 'Fog', + 'Storm', + 'Mineral', + 'Glacier', + 'Rising', + + 'Boulder', + 'Cascade', + 'Thunder', + 'Rainbow', + 'Soul', + 'Marsh', + 'Volcano', + 'Earth' + ] + }, { id: 'POKEMON RUBY', folder: 'hoenn', @@ -505,5 +551,126 @@ var badges = [ 'Dark', 'Dragon' ] - } + }, + { + id: 'POKEMON BD', + folder: 'sinnoh', + badges: [ + 'Coal', + 'Forest', + 'Cobble', + 'Fen', + 'Relic', + 'Mine', + 'Icicle', + 'Beacon' + ] + }, + { + id: 'POKEMON SP', + folder: 'sinnoh', + badges: [ + 'Coal', + 'Forest', + 'Cobble', + 'Fen', + 'Relic', + 'Mine', + 'Icicle', + 'Beacon' + ] + }, + { + id: 'POKEMON LA', + folder: 'hisui', + badges: [ + 'plate_mind', + 'plate_insect', + 'plate_earth', + 'plate_splash', + 'plate_flame', + 'plate_toxic', + 'plate_zap', + 'plate_icicle', + 'plate_stone', + 'plate_fist', + 'plate_draco', + 'plate_iron', + 'plate_pixie', + 'plate_spooky', + 'plate_legend', + 'star_rank_1', + 'star_rank_2', + 'star_rank_3', + 'star_rank_4', + 'star_rank_5', + 'star_rank_6', + 'star_rank_7', + 'star_rank_8', + 'star_rank_9', + 'star_rank_10' + ], + groups: [ + {translationKey: 'Arceus Plates', key: 'plate_'}, + {translationKey: 'Rank Star', key: 'star_'} + ] + }, + { + id: 'POKEMON SC', + folder: 'paldea', + badges: [ + 'gym_bug', + 'gym_ghost', + 'gym_ice', + 'gym_psychic', + 'star_dark', + 'star_fighting', + 'star_poison', + 'titan_flying', + 'titan_rock', + 'gym_electric', + 'gym_grass', + 'gym_normal', + 'gym_water', + 'star_fairy', + 'star_fire', + 'titan_dragon', + 'titan_ground', + 'titan_steel' + ], + groups: [ + {translationKey: 'Gym Badges', key: 'gym_'}, + {translationKey: 'Operation Starfall', key: 'star_'}, + {translationKey: 'Path Of Legends (Titans)', key: 'titan_'} + ] + }, + { + id: 'POKEMON VI', + folder: 'paldea', + badges: [ + 'gym_bug', + 'gym_ghost', + 'gym_ice', + 'gym_psychic', + 'star_dark', + 'star_fighting', + 'star_poison', + 'titan_flying', + 'titan_rock', + 'gym_electric', + 'gym_grass', + 'gym_normal', + 'gym_water', + 'star_fairy', + 'star_fire', + 'titan_dragon', + 'titan_ground', + 'titan_steel' + ], + groups: [ + {translationKey: 'Gym Badges', key: 'gym_'}, + {translationKey: 'Operation Starfall', key: 'star_'}, + {translationKey: 'Path Of Legends (Titans)', key: 'titan_'} + ] + } ] diff --git a/assets/data/card-art.json b/assets/data/card-art.json new file mode 100644 index 0000000..c483b5b --- /dev/null +++ b/assets/data/card-art.json @@ -0,0 +1,24448 @@ +{ + "cards": [ + { + "id": "det1-4", + "imageUrl": "https://images.pokemontcg.io/det1/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/det1/4_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Detective Pikachu", + "setCode": "det1" + }, + { + "id": "bw5-3", + "imageUrl": "https://images.pokemontcg.io/bw5/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/3_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "xy1-1", + "imageUrl": "https://images.pokemontcg.io/xy1/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/1_hires.png", + "name": "Venusaur-EX", + "nationalPokedexNumber": 3, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "ex3-98", + "imageUrl": "https://images.pokemontcg.io/ex3/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/98_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex3-99", + "imageUrl": "https://images.pokemontcg.io/ex3/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/99_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex3-100", + "imageUrl": "https://images.pokemontcg.io/ex3/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/100_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ecard3-146", + "imageUrl": "https://images.pokemontcg.io/ecard3/146.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/146_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "xy1-141", + "imageUrl": "https://images.pokemontcg.io/xy1/141.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/141_hires.png", + "name": "Venusaur-EX", + "nationalPokedexNumber": 3, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "ex15-100", + "imageUrl": "https://images.pokemontcg.io/ex15/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/100_hires.png", + "name": "Charizard Star δ", + "nationalPokedexNumber": 6, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "pl4-1", + "imageUrl": "https://images.pokemontcg.io/pl4/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/1_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "base5-21", + "imageUrl": "https://images.pokemontcg.io/base5/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/21_hires.png", + "name": "Dark Charizard", + "nationalPokedexNumber": 6, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-32", + "imageUrl": "https://images.pokemontcg.io/base5/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/32_hires.png", + "name": "Dark Charmeleon", + "nationalPokedexNumber": 5, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex6-55", + "imageUrl": "https://images.pokemontcg.io/ex6/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/55_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-31", + "imageUrl": "https://images.pokemontcg.io/ex6/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/31_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-35", + "imageUrl": "https://images.pokemontcg.io/ex6/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/35_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "swsh35-74", + "imageUrl": "https://images.pokemontcg.io/swsh35/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh35/74_hires.png", + "name": "Charizard VMAX", + "nationalPokedexNumber": 6, + "set": "Champion's Path", + "setCode": "swsh35" + }, + { + "id": "ecard1-39", + "imageUrl": "https://images.pokemontcg.io/ecard1/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/39_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy2-13", + "imageUrl": "https://images.pokemontcg.io/xy2/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/13_hires.png", + "name": "M Charizard-EX", + "nationalPokedexNumber": 6, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "ex6-113", + "imageUrl": "https://images.pokemontcg.io/ex6/113.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/113_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "dp7-102", + "imageUrl": "https://images.pokemontcg.io/dp7/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/102_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "base1-15", + "imageUrl": "https://images.pokemontcg.io/base1/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/15_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base6-3", + "imageUrl": "https://images.pokemontcg.io/base6/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/3_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard1-73", + "imageUrl": "https://images.pokemontcg.io/ecard1/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/73_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-94", + "imageUrl": "https://images.pokemontcg.io/ecard1/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/94_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-6", + "imageUrl": "https://images.pokemontcg.io/ecard1/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/6_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "dp3-3", + "imageUrl": "https://images.pokemontcg.io/dp3/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/3_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base6-47", + "imageUrl": "https://images.pokemontcg.io/base6/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/47_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "dp3-20", + "imageUrl": "https://images.pokemontcg.io/dp3/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/20_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex7-110", + "imageUrl": "https://images.pokemontcg.io/ex7/110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/110_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "pop5-10", + "imageUrl": "https://images.pokemontcg.io/pop5/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop5/10_hires.png", + "name": "Charmander (Delta Species)", + "nationalPokedexNumber": 4, + "set": "POP Series 5", + "setCode": "pop5" + }, + { + "id": "dp3-46", + "imageUrl": "https://images.pokemontcg.io/dp3/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/46_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "bw11-18", + "imageUrl": "https://images.pokemontcg.io/bw11/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/18_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "bw11-19", + "imageUrl": "https://images.pokemontcg.io/bw11/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/19_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "dp3-51", + "imageUrl": "https://images.pokemontcg.io/dp3/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/51_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ecard1-82", + "imageUrl": "https://images.pokemontcg.io/ecard1/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/82_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "bw7-18", + "imageUrl": "https://images.pokemontcg.io/bw7/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/18_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "swshp-SWSH092", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH092.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH092_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": null, + "setCode": "swshp" + }, + { + "id": "xyp-XY121", + "imageUrl": "https://images.pokemontcg.io/xyp/XY121.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY121_hires.png", + "name": "Charizard-EX", + "nationalPokedexNumber": 6, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "xyp-XY123", + "imageUrl": "https://images.pokemontcg.io/xyp/XY123.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY123_hires.png", + "name": "Venusaur-EX", + "nationalPokedexNumber": 3, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "xy12-13", + "imageUrl": "https://images.pokemontcg.io/xy12/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/13_hires.png", + "name": "M Charizard-EX", + "nationalPokedexNumber": 6, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm3-18a", + "imageUrl": "https://images.pokemontcg.io/sm3/18a.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/18a_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "g1-rc3", + "imageUrl": "https://images.pokemontcg.io/g1/RC3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/RC3_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ex16-6", + "imageUrl": "https://images.pokemontcg.io/ex16/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/6_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "xy2-11", + "imageUrl": "https://images.pokemontcg.io/xy2/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/11_hires.png", + "name": "Charizard-EX", + "nationalPokedexNumber": 6, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "xy2-12", + "imageUrl": "https://images.pokemontcg.io/xy2/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/12_hires.png", + "name": "Charizard-EX", + "nationalPokedexNumber": 6, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "bw11-17", + "imageUrl": "https://images.pokemontcg.io/bw11/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/17_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "swsh45sv-SV107", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV107_hires.png", + "name": "Charizard VMAX", + "nationalPokedexNumber": 6, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "bw5-2", + "imageUrl": "https://images.pokemontcg.io/bw5/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/2_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "xy2-69", + "imageUrl": "https://images.pokemontcg.io/xy2/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/69_hires.png", + "name": "M Charizard-EX", + "nationalPokedexNumber": 6, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "base6-18", + "imageUrl": "https://images.pokemontcg.io/base6/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/18_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "pl3-20", + "imageUrl": "https://images.pokemontcg.io/pl3/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/20_hires.png", + "name": "Charizard G", + "nationalPokedexNumber": 6, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pop2-6", + "imageUrl": "https://images.pokemontcg.io/pop2/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop2/6_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "POP Series 2", + "setCode": "pop2" + }, + { + "id": "xy2-107", + "imageUrl": "https://images.pokemontcg.io/xy2/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/107_hires.png", + "name": "M Charizard-EX", + "nationalPokedexNumber": 6, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "base6-68", + "imageUrl": "https://images.pokemontcg.io/base6/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/68_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm9-1", + "imageUrl": "https://images.pokemontcg.io/sm9/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/1_hires.png", + "name": "Celebi & Venusaur-GX", + "nationalPokedexNumber": 3, + "set": null, + "setCode": "sm9" + }, + { + "id": "pl3-62", + "imageUrl": "https://images.pokemontcg.io/pl3/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/62_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm9-11", + "imageUrl": "https://images.pokemontcg.io/sm9/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/11_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-12", + "imageUrl": "https://images.pokemontcg.io/sm9/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/12_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-13", + "imageUrl": "https://images.pokemontcg.io/sm9/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/13_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-14", + "imageUrl": "https://images.pokemontcg.io/sm9/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/14_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": null, + "setCode": "sm9" + }, + { + "id": "pl3-93", + "imageUrl": "https://images.pokemontcg.io/pl3/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/93_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "ex14-29", + "imageUrl": "https://images.pokemontcg.io/ex14/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/29_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex14-30", + "imageUrl": "https://images.pokemontcg.io/ex14/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/30_hires.png", + "name": "Charmeleon δ", + "nationalPokedexNumber": 5, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex14-48", + "imageUrl": "https://images.pokemontcg.io/ex14/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/48_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "basep-13", + "imageUrl": "https://images.pokemontcg.io/basep/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/13_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "sm9-159", + "imageUrl": "https://images.pokemontcg.io/sm9/159.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/159_hires.png", + "name": "Celebi & Venusaur-GX", + "nationalPokedexNumber": 3, + "set": null, + "setCode": "sm9" + }, + { + "id": "xy12-1", + "imageUrl": "https://images.pokemontcg.io/xy12/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/1_hires.png", + "name": "Venusaur-EX", + "nationalPokedexNumber": 3, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ex14-4", + "imageUrl": "https://images.pokemontcg.io/ex14/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/4_hires.png", + "name": "Charizard δ", + "nationalPokedexNumber": 6, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex14-28", + "imageUrl": "https://images.pokemontcg.io/ex14/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/28_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex14-46", + "imageUrl": "https://images.pokemontcg.io/ex14/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/46_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "xy12-100", + "imageUrl": "https://images.pokemontcg.io/xy12/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/100_hires.png", + "name": "M Venusaur-EX", + "nationalPokedexNumber": 3, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ex6-58", + "imageUrl": "https://images.pokemontcg.io/ex6/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/58_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base4-44", + "imageUrl": "https://images.pokemontcg.io/base4/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/44_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": null, + "setCode": "base4" + }, + { + "id": "ecard1-97", + "imageUrl": "https://images.pokemontcg.io/ecard1/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/97_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "bw5-1", + "imageUrl": "https://images.pokemontcg.io/bw5/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/1_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "pl3-13", + "imageUrl": "https://images.pokemontcg.io/pl3/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/13_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "ecard1-68", + "imageUrl": "https://images.pokemontcg.io/ecard1/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/68_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm10-20", + "imageUrl": "https://images.pokemontcg.io/sm10/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/20_hires.png", + "name": "Reshiram & Charizard-GX", + "nationalPokedexNumber": 6, + "set": null, + "setCode": "sm10" + }, + { + "id": "bw8-136", + "imageUrl": "https://images.pokemontcg.io/bw8/136.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/136_hires.png", + "name": "Charizard", + "nationalPokedexNumber": 6, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "g1-rc4", + "imageUrl": "https://images.pokemontcg.io/g1/RC4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/RC4_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "pop2-7", + "imageUrl": "https://images.pokemontcg.io/pop2/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop2/7_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "POP Series 2", + "setCode": "pop2" + }, + { + "id": "pl3-143", + "imageUrl": "https://images.pokemontcg.io/pl3/143.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/143_hires.png", + "name": "Charizard G", + "nationalPokedexNumber": 6, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm10-217", + "imageUrl": "https://images.pokemontcg.io/sm10/217.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/217_hires.png", + "name": "Reshiram & Charizard-GX", + "nationalPokedexNumber": 6, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex14-45", + "imageUrl": "https://images.pokemontcg.io/ex14/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/45_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "dp3-77", + "imageUrl": "https://images.pokemontcg.io/dp3/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/77_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "dp3-82", + "imageUrl": "https://images.pokemontcg.io/dp3/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/82_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base4-18", + "imageUrl": "https://images.pokemontcg.io/base4/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/18_hires.png", + "name": "Venusaur", + "nationalPokedexNumber": 3, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-35", + "imageUrl": "https://images.pokemontcg.io/base4/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/35_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": null, + "setCode": "base4" + }, + { + "id": "sm35-2", + "imageUrl": "https://images.pokemontcg.io/sm35/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/2_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "ex14-34", + "imageUrl": "https://images.pokemontcg.io/ex14/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/34_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex14-35", + "imageUrl": "https://images.pokemontcg.io/ex14/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/35_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex6-54", + "imageUrl": "https://images.pokemontcg.io/ex6/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/54_hires.png", + "name": "Bulbasaur", + "nationalPokedexNumber": 1, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-105", + "imageUrl": "https://images.pokemontcg.io/ex6/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/105_hires.png", + "name": "Charizard ex", + "nationalPokedexNumber": 6, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-112", + "imageUrl": "https://images.pokemontcg.io/ex6/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/112_hires.png", + "name": "Venusaur ex", + "nationalPokedexNumber": 3, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm12-1", + "imageUrl": "https://images.pokemontcg.io/sm12/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/1_hires.png", + "name": "Venusaur & Snivy-GX", + "nationalPokedexNumber": 3, + "set": null, + "setCode": "sm12" + }, + { + "id": "pop3-14", + "imageUrl": "https://images.pokemontcg.io/pop3/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop3/14_hires.png", + "name": "Ivysaur", + "nationalPokedexNumber": 2, + "set": "POP Series 3", + "setCode": "pop3" + }, + { + "id": "ex16-28", + "imageUrl": "https://images.pokemontcg.io/ex16/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/28_hires.png", + "name": "Charmeleon", + "nationalPokedexNumber": 5, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "ex16-48", + "imageUrl": "https://images.pokemontcg.io/ex16/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/48_hires.png", + "name": "Charmander", + "nationalPokedexNumber": 4, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "gym2-39", + "imageUrl": "https://images.pokemontcg.io/gym2/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/39_hires.png", + "name": "Erika's Bulbasaur", + "nationalPokedexNumber": 1, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "base5-4", + "imageUrl": "https://images.pokemontcg.io/base5/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/4_hires.png", + "name": "Dark Charizard", + "nationalPokedexNumber": 6, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "swsh2-1", + "imageUrl": "https://images.pokemontcg.io/swsh2/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/1_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "base1-54", + "imageUrl": "https://images.pokemontcg.io/base1/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/54_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Base", + "setCode": "base1" + }, + { + "id": "swsh2-2", + "imageUrl": "https://images.pokemontcg.io/swsh2/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/2_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "sm10-33", + "imageUrl": "https://images.pokemontcg.io/sm10/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/33_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": null, + "setCode": "sm10" + }, + { + "id": "xy1-30", + "imageUrl": "https://images.pokemontcg.io/xy1/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/30_hires.png", + "name": "M Blastoise-EX", + "nationalPokedexNumber": 9, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "hgss2-13", + "imageUrl": "https://images.pokemontcg.io/hgss2/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/13_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex4-46", + "imageUrl": "https://images.pokemontcg.io/ex4/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/46_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "base5-3", + "imageUrl": "https://images.pokemontcg.io/base5/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/3_hires.png", + "name": "Dark Blastoise", + "nationalPokedexNumber": 9, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "hgss2-42", + "imageUrl": "https://images.pokemontcg.io/hgss2/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/42_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex6-82", + "imageUrl": "https://images.pokemontcg.io/ex6/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/82_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy1-29", + "imageUrl": "https://images.pokemontcg.io/xy1/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/29_hires.png", + "name": "Blastoise-EX", + "nationalPokedexNumber": 9, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "ex6-104", + "imageUrl": "https://images.pokemontcg.io/ex6/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/104_hires.png", + "name": "Blastoise ex", + "nationalPokedexNumber": 9, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "pl1-2", + "imageUrl": "https://images.pokemontcg.io/pl1/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/2_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "sm10-34", + "imageUrl": "https://images.pokemontcg.io/sm10/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/34_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": null, + "setCode": "sm10" + }, + { + "id": "ecard1-4", + "imageUrl": "https://images.pokemontcg.io/ecard1/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/4_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base6-39", + "imageUrl": "https://images.pokemontcg.io/base6/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/39_hires.png", + "name": "Dark Wartortle", + "nationalPokedexNumber": 8, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex14-42", + "imageUrl": "https://images.pokemontcg.io/ex14/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/42_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "base4-93", + "imageUrl": "https://images.pokemontcg.io/base4/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/93_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": null, + "setCode": "base4" + }, + { + "id": "dp3-75", + "imageUrl": "https://images.pokemontcg.io/dp3/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/75_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ecard1-96", + "imageUrl": "https://images.pokemontcg.io/ecard1/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/96_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm3-2", + "imageUrl": "https://images.pokemontcg.io/sm3/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/2_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "neo2-53", + "imageUrl": "https://images.pokemontcg.io/neo2/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/53_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": null, + "setCode": "neo2" + }, + { + "id": "xyp-XY122", + "imageUrl": "https://images.pokemontcg.io/xyp/XY122.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY122_hires.png", + "name": "Blastoise-EX", + "nationalPokedexNumber": 9, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "bw8-24", + "imageUrl": "https://images.pokemontcg.io/bw8/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/24_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "base4-68", + "imageUrl": "https://images.pokemontcg.io/base4/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/68_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": null, + "setCode": "base4" + }, + { + "id": "dp4-63", + "imageUrl": "https://images.pokemontcg.io/dp4/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/63_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "sm3-1", + "imageUrl": "https://images.pokemontcg.io/sm3/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/1_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "bw8-137", + "imageUrl": "https://images.pokemontcg.io/bw8/137.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/137_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "ecard1-87", + "imageUrl": "https://images.pokemontcg.io/ecard1/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/87_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy2-2", + "imageUrl": "https://images.pokemontcg.io/xy2/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/2_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "base6-4", + "imageUrl": "https://images.pokemontcg.io/base6/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/4_hires.png", + "name": "Dark Blastoise", + "nationalPokedexNumber": 9, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-54", + "imageUrl": "https://images.pokemontcg.io/base6/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/54_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-95", + "imageUrl": "https://images.pokemontcg.io/base6/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/95_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm9-24", + "imageUrl": "https://images.pokemontcg.io/sm9/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/24_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": null, + "setCode": "sm9" + }, + { + "id": "bw10-14", + "imageUrl": "https://images.pokemontcg.io/bw10/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/14_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "bw7-29", + "imageUrl": "https://images.pokemontcg.io/bw7/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/29_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "bw7-30", + "imageUrl": "https://images.pokemontcg.io/bw7/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/30_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "bw7-31", + "imageUrl": "https://images.pokemontcg.io/bw7/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/31_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "xy12-4", + "imageUrl": "https://images.pokemontcg.io/xy12/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/4_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-22", + "imageUrl": "https://images.pokemontcg.io/xy12/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/22_hires.png", + "name": "M Blastoise-EX", + "nationalPokedexNumber": 9, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ex14-2", + "imageUrl": "https://images.pokemontcg.io/ex14/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/2_hires.png", + "name": "Blastoise δ", + "nationalPokedexNumber": 9, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex14-63", + "imageUrl": "https://images.pokemontcg.io/ex14/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/63_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex14-43", + "imageUrl": "https://images.pokemontcg.io/ex14/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/43_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "g1-3", + "imageUrl": "https://images.pokemontcg.io/g1/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/3_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "g1-4", + "imageUrl": "https://images.pokemontcg.io/g1/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/4_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ecard1-36", + "imageUrl": "https://images.pokemontcg.io/ecard1/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/36_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-92", + "imageUrl": "https://images.pokemontcg.io/ecard1/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/92_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-132", + "imageUrl": "https://images.pokemontcg.io/ecard1/132.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/132_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy12-3", + "imageUrl": "https://images.pokemontcg.io/xy12/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/3_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm10-35", + "imageUrl": "https://images.pokemontcg.io/sm10/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/35_hires.png", + "name": "Blastoise-GX", + "nationalPokedexNumber": 9, + "set": null, + "setCode": "sm10" + }, + { + "id": "pop3-1", + "imageUrl": "https://images.pokemontcg.io/pop3/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop3/1_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "POP Series 3", + "setCode": "pop3" + }, + { + "id": "dp4-47", + "imageUrl": "https://images.pokemontcg.io/dp4/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/47_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "sm10-218", + "imageUrl": "https://images.pokemontcg.io/sm10/218.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/218_hires.png", + "name": "Blastoise-GX", + "nationalPokedexNumber": 9, + "set": null, + "setCode": "sm10" + }, + { + "id": "base4-2", + "imageUrl": "https://images.pokemontcg.io/base4/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/2_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": null, + "setCode": "base4" + }, + { + "id": "bw10-15", + "imageUrl": "https://images.pokemontcg.io/bw10/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/15_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "bw10-16", + "imageUrl": "https://images.pokemontcg.io/bw10/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/16_hires.png", + "name": "Blastoise", + "nationalPokedexNumber": 9, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "dp3-112", + "imageUrl": "https://images.pokemontcg.io/dp3/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/112_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "hgss1-46", + "imageUrl": "https://images.pokemontcg.io/hgss1/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/46_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "pl1-96", + "imageUrl": "https://images.pokemontcg.io/pl1/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/96_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "hgss2-63", + "imageUrl": "https://images.pokemontcg.io/hgss2/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/63_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex14-64", + "imageUrl": "https://images.pokemontcg.io/ex14/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/64_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex6-39", + "imageUrl": "https://images.pokemontcg.io/ex6/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/39_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-50", + "imageUrl": "https://images.pokemontcg.io/ex6/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/50_hires.png", + "name": "Wartortle", + "nationalPokedexNumber": 8, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-56", + "imageUrl": "https://images.pokemontcg.io/ex6/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/56_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-83", + "imageUrl": "https://images.pokemontcg.io/ex6/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/83_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base5-68", + "imageUrl": "https://images.pokemontcg.io/base5/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/68_hires.png", + "name": "Squirtle", + "nationalPokedexNumber": 7, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "sm10-2", + "imageUrl": "https://images.pokemontcg.io/sm10/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/2_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm12-212", + "imageUrl": "https://images.pokemontcg.io/sm12/212.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/212_hires.png", + "name": "Charizard & Braixen-GX", + "nationalPokedexNumber": 6, + "set": null, + "setCode": "sm12" + }, + { + "id": "base6-69", + "imageUrl": "https://images.pokemontcg.io/base6/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/69_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "hgss1-57", + "imageUrl": "https://images.pokemontcg.io/hgss1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/57_hires.png", + "name": "Caterpie", + "nationalPokedexNumber": 10, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "smp-SM60", + "imageUrl": "https://images.pokemontcg.io/smp/SM60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM60_hires.png", + "name": "Charizard-GX", + "nationalPokedexNumber": 6, + "set": null, + "setCode": "smp" + }, + { + "id": "ex11-1", + "imageUrl": "https://images.pokemontcg.io/ex11/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/1_hires.png", + "name": "Beedrill δ", + "nationalPokedexNumber": 15, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ecard3-70", + "imageUrl": "https://images.pokemontcg.io/ecard3/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/70_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "pl2-66", + "imageUrl": "https://images.pokemontcg.io/pl2/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/66_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "xy1-3", + "imageUrl": "https://images.pokemontcg.io/xy1/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/3_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "ex6-2", + "imageUrl": "https://images.pokemontcg.io/ex6/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/2_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy5-1", + "imageUrl": "https://images.pokemontcg.io/xy5/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/1_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "dp4-13", + "imageUrl": "https://images.pokemontcg.io/dp4/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/13_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "ex6-86", + "imageUrl": "https://images.pokemontcg.io/ex6/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/86_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex11-46", + "imageUrl": "https://images.pokemontcg.io/ex11/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/46_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "xy0-1", + "imageUrl": "https://images.pokemontcg.io/xy0/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy0/1_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Kalos Starter Set", + "setCode": "xy0" + }, + { + "id": "ecard1-38", + "imageUrl": "https://images.pokemontcg.io/ecard1/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/38_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base6-21", + "imageUrl": "https://images.pokemontcg.io/base6/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/21_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-99", + "imageUrl": "https://images.pokemontcg.io/base6/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/99_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "gym2-82", + "imageUrl": "https://images.pokemontcg.io/gym2/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/82_hires.png", + "name": "Koga's Weedle", + "nationalPokedexNumber": 13, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "pop4-12", + "imageUrl": "https://images.pokemontcg.io/pop4/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop4/12_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "POP Series 4", + "setCode": "pop4" + }, + { + "id": "pl2-86", + "imageUrl": "https://images.pokemontcg.io/pl2/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/86_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "dp4-73", + "imageUrl": "https://images.pokemontcg.io/dp4/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/73_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "sm3-3", + "imageUrl": "https://images.pokemontcg.io/sm3/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/3_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "ex6-73", + "imageUrl": "https://images.pokemontcg.io/ex6/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/73_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "swsh6-1", + "imageUrl": "https://images.pokemontcg.io/swsh6/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/1_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": null, + "setCode": "swsh6" + }, + { + "id": "ecard3-114", + "imageUrl": "https://images.pokemontcg.io/ecard3/114.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/114_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard1-123", + "imageUrl": "https://images.pokemontcg.io/ecard1/123.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/123_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm4-3", + "imageUrl": "https://images.pokemontcg.io/sm4/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/3_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "swsh3-177", + "imageUrl": "https://images.pokemontcg.io/swsh3/177.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/177_hires.png", + "name": "Butterfree V", + "nationalPokedexNumber": 12, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "swsh3-1", + "imageUrl": "https://images.pokemontcg.io/swsh3/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/1_hires.png", + "name": "Butterfree V", + "nationalPokedexNumber": 12, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "pl3-17", + "imageUrl": "https://images.pokemontcg.io/pl3/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/17_hires.png", + "name": "Butterfree FB", + "nationalPokedexNumber": 12, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base6-50", + "imageUrl": "https://images.pokemontcg.io/base6/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/50_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm9-4", + "imageUrl": "https://images.pokemontcg.io/sm9/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/4_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-3", + "imageUrl": "https://images.pokemontcg.io/sm9/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/3_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-5", + "imageUrl": "https://images.pokemontcg.io/sm9/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/5_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm4-1", + "imageUrl": "https://images.pokemontcg.io/sm4/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/1_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "xy2-75", + "imageUrl": "https://images.pokemontcg.io/xy2/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/75_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "neo2-70", + "imageUrl": "https://images.pokemontcg.io/neo2/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/70_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": null, + "setCode": "neo2" + }, + { + "id": "swsh3-190", + "imageUrl": "https://images.pokemontcg.io/swsh3/190.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/190_hires.png", + "name": "Butterfree VMAX", + "nationalPokedexNumber": 12, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "base6-85", + "imageUrl": "https://images.pokemontcg.io/base6/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/85_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "hgss2-69", + "imageUrl": "https://images.pokemontcg.io/hgss2/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/69_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "xyp-XY158", + "imageUrl": "https://images.pokemontcg.io/xyp/XY158.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY158_hires.png", + "name": "M Beedrill-EX", + "nationalPokedexNumber": 15, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "ex13-77", + "imageUrl": "https://images.pokemontcg.io/ex13/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/77_hires.png", + "name": "Pidgey δ", + "nationalPokedexNumber": 16, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "sm10-4", + "imageUrl": "https://images.pokemontcg.io/sm10/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/4_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": null, + "setCode": "sm10" + }, + { + "id": "swsh6-2", + "imageUrl": "https://images.pokemontcg.io/swsh6/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/2_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": null, + "setCode": "swsh6" + }, + { + "id": "base6-20", + "imageUrl": "https://images.pokemontcg.io/base6/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/20_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "swsh6-3", + "imageUrl": "https://images.pokemontcg.io/swsh6/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/3_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": null, + "setCode": "swsh6" + }, + { + "id": "neo2-41", + "imageUrl": "https://images.pokemontcg.io/neo2/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/41_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": null, + "setCode": "neo2" + }, + { + "id": "dp4-14", + "imageUrl": "https://images.pokemontcg.io/dp4/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/14_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "hgss4-71", + "imageUrl": "https://images.pokemontcg.io/hgss4/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/71_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex11-87", + "imageUrl": "https://images.pokemontcg.io/ex11/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/87_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "dp4-93", + "imageUrl": "https://images.pokemontcg.io/dp4/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/93_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "dp3-99", + "imageUrl": "https://images.pokemontcg.io/dp3/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/99_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base4-21", + "imageUrl": "https://images.pokemontcg.io/base4/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/21_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-34", + "imageUrl": "https://images.pokemontcg.io/base4/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/34_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": null, + "setCode": "base4" + }, + { + "id": "hgss2-32", + "imageUrl": "https://images.pokemontcg.io/hgss2/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/32_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "hgss2-12", + "imageUrl": "https://images.pokemontcg.io/hgss2/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/12_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "hgss1-16", + "imageUrl": "https://images.pokemontcg.io/hgss1/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/16_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "base2-33", + "imageUrl": "https://images.pokemontcg.io/base2/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/33_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-1", + "imageUrl": "https://images.pokemontcg.io/ex6/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/1_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-36", + "imageUrl": "https://images.pokemontcg.io/ex6/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/36_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "bw9-1", + "imageUrl": "https://images.pokemontcg.io/bw9/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/1_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "bw9-2", + "imageUrl": "https://images.pokemontcg.io/bw9/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/2_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "bw9-3", + "imageUrl": "https://images.pokemontcg.io/bw9/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/3_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "gym2-9", + "imageUrl": "https://images.pokemontcg.io/gym2/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/9_hires.png", + "name": "Koga's Beedrill", + "nationalPokedexNumber": 15, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "pl4-53", + "imageUrl": "https://images.pokemontcg.io/pl4/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/53_hires.png", + "name": "Beedrill G", + "nationalPokedexNumber": 15, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "gym2-80", + "imageUrl": "https://images.pokemontcg.io/gym2/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/80_hires.png", + "name": "Koga's Pidgey", + "nationalPokedexNumber": 16, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "xy12-7", + "imageUrl": "https://images.pokemontcg.io/xy12/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/7_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "base1-69", + "imageUrl": "https://images.pokemontcg.io/base1/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/69_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Base", + "setCode": "base1" + }, + { + "id": "swsh4-1", + "imageUrl": "https://images.pokemontcg.io/swsh4/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh4/1_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Vivid Voltage", + "setCode": "swsh4" + }, + { + "id": "sm4-2", + "imageUrl": "https://images.pokemontcg.io/sm4/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/2_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "swsh4-2", + "imageUrl": "https://images.pokemontcg.io/swsh4/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh4/2_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Vivid Voltage", + "setCode": "swsh4" + }, + { + "id": "swsh4-3", + "imageUrl": "https://images.pokemontcg.io/swsh4/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh4/3_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Vivid Voltage", + "setCode": "swsh4" + }, + { + "id": "col1-67", + "imageUrl": "https://images.pokemontcg.io/col1/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/67_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "sm115-3", + "imageUrl": "https://images.pokemontcg.io/sm115/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/3_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-2", + "imageUrl": "https://images.pokemontcg.io/sm115/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/2_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": null, + "setCode": "sm115" + }, + { + "id": "si1-9", + "imageUrl": "https://images.pokemontcg.io/si1/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/9_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "neo2-18", + "imageUrl": "https://images.pokemontcg.io/neo2/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/18_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": null, + "setCode": "neo2" + }, + { + "id": "neo2-19", + "imageUrl": "https://images.pokemontcg.io/neo2/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/19_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": null, + "setCode": "neo2" + }, + { + "id": "swsh35-2", + "imageUrl": "https://images.pokemontcg.io/swsh35/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh35/2_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Champion's Path", + "setCode": "swsh35" + }, + { + "id": "neo2-42", + "imageUrl": "https://images.pokemontcg.io/neo2/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/42_hires.png", + "name": "Metapod", + "nationalPokedexNumber": 11, + "set": null, + "setCode": "neo2" + }, + { + "id": "base4-100", + "imageUrl": "https://images.pokemontcg.io/base4/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/100_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": null, + "setCode": "base4" + }, + { + "id": "base1-17", + "imageUrl": "https://images.pokemontcg.io/base1/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/17_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base1-33", + "imageUrl": "https://images.pokemontcg.io/base1/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/33_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base1-57", + "imageUrl": "https://images.pokemontcg.io/base1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/57_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": "Base", + "setCode": "base1" + }, + { + "id": "sm9-2", + "imageUrl": "https://images.pokemontcg.io/sm9/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/2_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": null, + "setCode": "sm9" + }, + { + "id": "swsh2-3", + "imageUrl": "https://images.pokemontcg.io/swsh2/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/3_hires.png", + "name": "Butterfree", + "nationalPokedexNumber": 12, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "xy12-6", + "imageUrl": "https://images.pokemontcg.io/xy12/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/6_hires.png", + "name": "Kakuna", + "nationalPokedexNumber": 14, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy5-3", + "imageUrl": "https://images.pokemontcg.io/xy5/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/3_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "ecard3-154", + "imageUrl": "https://images.pokemontcg.io/ecard3/154.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/154_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-5", + "imageUrl": "https://images.pokemontcg.io/ecard3/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/5_hires.png", + "name": "Beedrill", + "nationalPokedexNumber": 15, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-115", + "imageUrl": "https://images.pokemontcg.io/ecard3/115.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/115_hires.png", + "name": "Weedle", + "nationalPokedexNumber": 13, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm9-121", + "imageUrl": "https://images.pokemontcg.io/sm9/121.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/121_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-122", + "imageUrl": "https://images.pokemontcg.io/sm9/122.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/122_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": null, + "setCode": "sm9" + }, + { + "id": "hgss4-47", + "imageUrl": "https://images.pokemontcg.io/hgss4/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/47_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "hgss3-34", + "imageUrl": "https://images.pokemontcg.io/hgss3/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/34_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "base5-66", + "imageUrl": "https://images.pokemontcg.io/base5/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/66_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "hgss2-62", + "imageUrl": "https://images.pokemontcg.io/hgss2/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/62_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex6-77", + "imageUrl": "https://images.pokemontcg.io/ex6/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/77_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy12-65", + "imageUrl": "https://images.pokemontcg.io/xy12/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/65_hires.png", + "name": "M Pidgeot-EX", + "nationalPokedexNumber": 18, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ex7-72", + "imageUrl": "https://images.pokemontcg.io/ex7/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/72_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base6-33", + "imageUrl": "https://images.pokemontcg.io/base6/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/33_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-34", + "imageUrl": "https://images.pokemontcg.io/base6/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/34_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard1-23", + "imageUrl": "https://images.pokemontcg.io/ecard1/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/23_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base6-89", + "imageUrl": "https://images.pokemontcg.io/base6/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/89_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex13-14", + "imageUrl": "https://images.pokemontcg.io/ex13/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/14_hires.png", + "name": "Pidgeot δ", + "nationalPokedexNumber": 18, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "dp3-58", + "imageUrl": "https://images.pokemontcg.io/dp3/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/58_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ecard1-59", + "imageUrl": "https://images.pokemontcg.io/ecard1/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/59_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-130", + "imageUrl": "https://images.pokemontcg.io/ecard1/130.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/130_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "gym1-83", + "imageUrl": "https://images.pokemontcg.io/gym1/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/83_hires.png", + "name": "Lt. Surge's Spearow", + "nationalPokedexNumber": 21, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex13-49", + "imageUrl": "https://images.pokemontcg.io/ex13/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/49_hires.png", + "name": "Pidgeotto δ", + "nationalPokedexNumber": 17, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "sm9-123", + "imageUrl": "https://images.pokemontcg.io/sm9/123.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/123_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": null, + "setCode": "sm9" + }, + { + "id": "ecard1-128", + "imageUrl": "https://images.pokemontcg.io/ecard1/128.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/128_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "hgss3-64", + "imageUrl": "https://images.pokemontcg.io/hgss3/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/64_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ecard1-88", + "imageUrl": "https://images.pokemontcg.io/ecard1/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/88_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy6-65", + "imageUrl": "https://images.pokemontcg.io/xy6/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/65_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "bw7-104", + "imageUrl": "https://images.pokemontcg.io/bw7/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/104_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "ecard3-89", + "imageUrl": "https://images.pokemontcg.io/ecard3/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/89_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm10-143", + "imageUrl": "https://images.pokemontcg.io/sm10/143.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/143_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-144", + "imageUrl": "https://images.pokemontcg.io/sm10/144.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/144_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex6-10", + "imageUrl": "https://images.pokemontcg.io/ex6/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/10_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "gym1-51", + "imageUrl": "https://images.pokemontcg.io/gym1/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/51_hires.png", + "name": "Lt. Surge's Raticate", + "nationalPokedexNumber": 20, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex2-81", + "imageUrl": "https://images.pokemontcg.io/ex2/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/81_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex6-81", + "imageUrl": "https://images.pokemontcg.io/ex6/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/81_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ecard3-90", + "imageUrl": "https://images.pokemontcg.io/ecard3/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/90_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "pl3-78", + "imageUrl": "https://images.pokemontcg.io/pl3/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/78_hires.png", + "name": "Raticate G", + "nationalPokedexNumber": 20, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pop2-2", + "imageUrl": "https://images.pokemontcg.io/pop2/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop2/2_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "POP Series 2", + "setCode": "pop2" + }, + { + "id": "xy2-76", + "imageUrl": "https://images.pokemontcg.io/xy2/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/76_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "base6-61", + "imageUrl": "https://images.pokemontcg.io/base6/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/61_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "gym2-53", + "imageUrl": "https://images.pokemontcg.io/gym2/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/53_hires.png", + "name": "Lt. Surge's Raticate", + "nationalPokedexNumber": 20, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "dp3-61", + "imageUrl": "https://images.pokemontcg.io/dp3/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/61_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "dp3-103", + "imageUrl": "https://images.pokemontcg.io/dp3/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/103_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "gym1-82", + "imageUrl": "https://images.pokemontcg.io/gym1/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/82_hires.png", + "name": "Lt. Surge's Rattata", + "nationalPokedexNumber": 19, + "set": null, + "setCode": "gym1" + }, + { + "id": "xy12-67", + "imageUrl": "https://images.pokemontcg.io/xy12/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/67_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "dp5-74", + "imageUrl": "https://images.pokemontcg.io/dp5/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/74_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "xy12-104", + "imageUrl": "https://images.pokemontcg.io/xy12/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/104_hires.png", + "name": "Pidgeot-EX", + "nationalPokedexNumber": 18, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-105", + "imageUrl": "https://images.pokemontcg.io/xy12/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/105_hires.png", + "name": "M Pidgeot-EX", + "nationalPokedexNumber": 18, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy2-77", + "imageUrl": "https://images.pokemontcg.io/xy2/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/77_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "hgss4-29", + "imageUrl": "https://images.pokemontcg.io/hgss4/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/29_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex6-45", + "imageUrl": "https://images.pokemontcg.io/ex6/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/45_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy4-78", + "imageUrl": "https://images.pokemontcg.io/xy4/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/78_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "base6-94", + "imageUrl": "https://images.pokemontcg.io/base6/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/94_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "bw9-88", + "imageUrl": "https://images.pokemontcg.io/bw9/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/88_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "sm1-76", + "imageUrl": "https://images.pokemontcg.io/sm1/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/76_hires.png", + "name": "Alolan Rattata", + "nationalPokedexNumber": 19, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "base4-28", + "imageUrl": "https://images.pokemontcg.io/base4/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/28_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-92", + "imageUrl": "https://images.pokemontcg.io/base4/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/92_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": null, + "setCode": "base4" + }, + { + "id": "sm9-124", + "imageUrl": "https://images.pokemontcg.io/sm9/124.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/124_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": null, + "setCode": "sm9" + }, + { + "id": "base2-8", + "imageUrl": "https://images.pokemontcg.io/base2/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/8_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-24", + "imageUrl": "https://images.pokemontcg.io/base2/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/24_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": null, + "setCode": "base2" + }, + { + "id": "ru1-15", + "imageUrl": "https://images.pokemontcg.io/ru1/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ru1/15_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Pokémon Rumble", + "setCode": "ru1" + }, + { + "id": "ex14-61", + "imageUrl": "https://images.pokemontcg.io/ex14/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/61_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex6-48", + "imageUrl": "https://images.pokemontcg.io/ex6/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/48_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex7-71", + "imageUrl": "https://images.pokemontcg.io/ex7/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/71_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base1-61", + "imageUrl": "https://images.pokemontcg.io/base1/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/61_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Base", + "setCode": "base1" + }, + { + "id": "bw9-87", + "imageUrl": "https://images.pokemontcg.io/bw9/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/87_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "base2-62", + "imageUrl": "https://images.pokemontcg.io/base2/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/62_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": null, + "setCode": "base2" + }, + { + "id": "col1-48", + "imageUrl": "https://images.pokemontcg.io/col1/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/48_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "dp3-35", + "imageUrl": "https://images.pokemontcg.io/dp3/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/35_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "bw7-105", + "imageUrl": "https://images.pokemontcg.io/bw7/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/105_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "xy12-66", + "imageUrl": "https://images.pokemontcg.io/xy12/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/66_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "col1-30", + "imageUrl": "https://images.pokemontcg.io/col1/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/30_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "base5-51", + "imageUrl": "https://images.pokemontcg.io/base5/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/51_hires.png", + "name": "Dark Raticate", + "nationalPokedexNumber": 20, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "sm3-81", + "imageUrl": "https://images.pokemontcg.io/sm3/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/81_hires.png", + "name": "Alolan Rattata", + "nationalPokedexNumber": 19, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "si1-2", + "imageUrl": "https://images.pokemontcg.io/si1/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/2_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "si1-6", + "imageUrl": "https://images.pokemontcg.io/si1/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/6_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "base4-58", + "imageUrl": "https://images.pokemontcg.io/base4/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/58_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": null, + "setCode": "base4" + }, + { + "id": "sm7-84", + "imageUrl": "https://images.pokemontcg.io/sm7/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/84_hires.png", + "name": "Alolan Rattata", + "nationalPokedexNumber": 19, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "sm7-85", + "imageUrl": "https://images.pokemontcg.io/sm7/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/85_hires.png", + "name": "Alolan Raticate-GX", + "nationalPokedexNumber": 20, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "pl4-29", + "imageUrl": "https://images.pokemontcg.io/pl4/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/29_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "pl4-73", + "imageUrl": "https://images.pokemontcg.io/pl4/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/73_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "sm1-77", + "imageUrl": "https://images.pokemontcg.io/sm1/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/77_hires.png", + "name": "Alolan Raticate", + "nationalPokedexNumber": 20, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "base4-89", + "imageUrl": "https://images.pokemontcg.io/base4/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/89_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": null, + "setCode": "base4" + }, + { + "id": "ex7-17", + "imageUrl": "https://images.pokemontcg.io/ex7/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/17_hires.png", + "name": "Dark Raticate", + "nationalPokedexNumber": 20, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base1-22", + "imageUrl": "https://images.pokemontcg.io/base1/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/22_hires.png", + "name": "Pidgeotto", + "nationalPokedexNumber": 17, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base1-40", + "imageUrl": "https://images.pokemontcg.io/base1/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/40_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "Base", + "setCode": "base1" + }, + { + "id": "xy9-87", + "imageUrl": "https://images.pokemontcg.io/xy9/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/87_hires.png", + "name": "Rattata", + "nationalPokedexNumber": 19, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "base4-14", + "imageUrl": "https://images.pokemontcg.io/base4/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/14_hires.png", + "name": "Pidgeot", + "nationalPokedexNumber": 18, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-86", + "imageUrl": "https://images.pokemontcg.io/base4/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/86_hires.png", + "name": "Pidgey", + "nationalPokedexNumber": 16, + "set": null, + "setCode": "base4" + }, + { + "id": "sm3-82", + "imageUrl": "https://images.pokemontcg.io/sm3/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/82_hires.png", + "name": "Alolan Raticate", + "nationalPokedexNumber": 20, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "xy9-88", + "imageUrl": "https://images.pokemontcg.io/xy9/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/88_hires.png", + "name": "Raticate", + "nationalPokedexNumber": 20, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "sm1-97", + "imageUrl": "https://images.pokemontcg.io/sm1/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/97_hires.png", + "name": "Spearow", + "nationalPokedexNumber": 21, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "xyp-XY174", + "imageUrl": "https://images.pokemontcg.io/xyp/XY174.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY174_hires.png", + "name": "Pikachu-EX", + "nationalPokedexNumber": 25, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "hgss3-83", + "imageUrl": "https://images.pokemontcg.io/hgss3/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/83_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ex15-13", + "imageUrl": "https://images.pokemontcg.io/ex15/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/13_hires.png", + "name": "Arbok δ", + "nationalPokedexNumber": 24, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "xy1-42", + "imageUrl": "https://images.pokemontcg.io/xy1/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/42_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "hgss2-15", + "imageUrl": "https://images.pokemontcg.io/hgss2/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/15_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "swsh1-66", + "imageUrl": "https://images.pokemontcg.io/swsh1/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/66_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "base5-2", + "imageUrl": "https://images.pokemontcg.io/base5/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/2_hires.png", + "name": "Dark Arbok", + "nationalPokedexNumber": 24, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "dp5-70", + "imageUrl": "https://images.pokemontcg.io/dp5/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/70_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "base5-83", + "imageUrl": "https://images.pokemontcg.io/base5/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/83_hires.png", + "name": "Dark Raichu", + "nationalPokedexNumber": 26, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex6-12", + "imageUrl": "https://images.pokemontcg.io/ex6/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/12_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "np-35", + "imageUrl": "https://images.pokemontcg.io/np/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/np/35_hires.png", + "name": "Pikachu δ", + "nationalPokedexNumber": 25, + "set": "Nintendo Black Star Promos", + "setCode": "np" + }, + { + "id": "ex6-24", + "imageUrl": "https://images.pokemontcg.io/ex6/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/24_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "dp2-94", + "imageUrl": "https://images.pokemontcg.io/dp2/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/94_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "pop9-3", + "imageUrl": "https://images.pokemontcg.io/pop9/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop9/3_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "POP Series 9", + "setCode": "pop9" + }, + { + "id": "ex15-47", + "imageUrl": "https://images.pokemontcg.io/ex15/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/47_hires.png", + "name": "Ekans δ", + "nationalPokedexNumber": 23, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "dp7-8", + "imageUrl": "https://images.pokemontcg.io/dp7/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/8_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "sm9-162", + "imageUrl": "https://images.pokemontcg.io/sm9/162.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/162_hires.png", + "name": "Pikachu & Zekrom-GX", + "nationalPokedexNumber": 25, + "set": null, + "setCode": "sm9" + }, + { + "id": "pl2-114", + "imageUrl": "https://images.pokemontcg.io/pl2/114.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/114_hires.png", + "name": "Surfing Pikachu", + "nationalPokedexNumber": 25, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "pl3-120", + "imageUrl": "https://images.pokemontcg.io/pl3/120.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/120_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "dp4-66", + "imageUrl": "https://images.pokemontcg.io/dp4/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/66_hires.png", + "name": "Ekans", + "nationalPokedexNumber": 23, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "dp7-70", + "imageUrl": "https://images.pokemontcg.io/dp7/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/70_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "pop6-9", + "imageUrl": "https://images.pokemontcg.io/pop6/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop6/9_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "POP Series 6", + "setCode": "pop6" + }, + { + "id": "base6-7", + "imageUrl": "https://images.pokemontcg.io/base6/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/7_hires.png", + "name": "Dark Raichu", + "nationalPokedexNumber": 26, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex2-37", + "imageUrl": "https://images.pokemontcg.io/ex2/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/37_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex2-98", + "imageUrl": "https://images.pokemontcg.io/ex2/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/98_hires.png", + "name": "Raichu ex", + "nationalPokedexNumber": 26, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "pop5-13", + "imageUrl": "https://images.pokemontcg.io/pop5/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop5/13_hires.png", + "name": "Pikachu (Delta Species)", + "nationalPokedexNumber": 25, + "set": "POP Series 5", + "setCode": "pop5" + }, + { + "id": "swsh1-65", + "imageUrl": "https://images.pokemontcg.io/swsh1/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/65_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "ex13-51", + "imageUrl": "https://images.pokemontcg.io/ex13/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/51_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex2-64", + "imageUrl": "https://images.pokemontcg.io/ex2/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/64_hires.png", + "name": "Ekans", + "nationalPokedexNumber": 23, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "bw4-39", + "imageUrl": "https://images.pokemontcg.io/bw4/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/39_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "ecard1-108", + "imageUrl": "https://images.pokemontcg.io/ecard1/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/108_hires.png", + "name": "Ekans", + "nationalPokedexNumber": 23, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm12-241", + "imageUrl": "https://images.pokemontcg.io/sm12/241.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/241_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": null, + "setCode": "sm12" + }, + { + "id": "ex13-104", + "imageUrl": "https://images.pokemontcg.io/ex13/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/104_hires.png", + "name": "Pikachu Star", + "nationalPokedexNumber": 25, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ecard1-11", + "imageUrl": "https://images.pokemontcg.io/ecard1/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/11_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm35-36", + "imageUrl": "https://images.pokemontcg.io/sm35/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/36_hires.png", + "name": "Ekans", + "nationalPokedexNumber": 23, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "pl2-31", + "imageUrl": "https://images.pokemontcg.io/pl2/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/31_hires.png", + "name": "Raichu GL", + "nationalPokedexNumber": 26, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "swshp-SWSH074", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH074.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH074_hires.png", + "name": "Special Delivery Pikachu", + "nationalPokedexNumber": 25, + "set": null, + "setCode": "swshp" + }, + { + "id": "base3-14", + "imageUrl": "https://images.pokemontcg.io/base3/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/14_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "xyp-XY84", + "imageUrl": "https://images.pokemontcg.io/xyp/XY84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY84_hires.png", + "name": "Pikachu-EX", + "nationalPokedexNumber": 25, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "xyp-XY95", + "imageUrl": "https://images.pokemontcg.io/xyp/XY95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY95_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "xyp-XY124", + "imageUrl": "https://images.pokemontcg.io/xyp/XY124.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY124_hires.png", + "name": "Pikachu-EX", + "nationalPokedexNumber": 25, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "ecard3-27", + "imageUrl": "https://images.pokemontcg.io/ecard3/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/27_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "dp5-45", + "imageUrl": "https://images.pokemontcg.io/dp5/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/45_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "pl2-112", + "imageUrl": "https://images.pokemontcg.io/pl2/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/112_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "pl2-113", + "imageUrl": "https://images.pokemontcg.io/pl2/113.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/113_hires.png", + "name": "Flying Pikachu", + "nationalPokedexNumber": 25, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "sm10-146", + "imageUrl": "https://images.pokemontcg.io/sm10/146.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/146_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": null, + "setCode": "sm10" + }, + { + "id": "xy8-48", + "imageUrl": "https://images.pokemontcg.io/xy8/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/48_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "xy1-47", + "imageUrl": "https://images.pokemontcg.io/xy1/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/47_hires.png", + "name": "Ekans", + "nationalPokedexNumber": 23, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "dp2-15", + "imageUrl": "https://images.pokemontcg.io/dp2/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/15_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "pop2-16", + "imageUrl": "https://images.pokemontcg.io/pop2/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop2/16_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "POP Series 2", + "setCode": "pop2" + }, + { + "id": "dp7-99", + "imageUrl": "https://images.pokemontcg.io/dp7/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/99_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "dp5-36", + "imageUrl": "https://images.pokemontcg.io/dp5/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/36_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "pop9-15", + "imageUrl": "https://images.pokemontcg.io/pop9/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop9/15_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "POP Series 9", + "setCode": "pop9" + }, + { + "id": "ex16-12", + "imageUrl": "https://images.pokemontcg.io/ex16/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/12_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "smp-SM157", + "imageUrl": "https://images.pokemontcg.io/smp/SM157.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM157_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": null, + "setCode": "smp" + }, + { + "id": "base3-46", + "imageUrl": "https://images.pokemontcg.io/base3/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/46_hires.png", + "name": "Ekans", + "nationalPokedexNumber": 23, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "ex4-43", + "imageUrl": "https://images.pokemontcg.io/ex4/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/43_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "base6-42", + "imageUrl": "https://images.pokemontcg.io/base6/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/42_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "gym2-77", + "imageUrl": "https://images.pokemontcg.io/gym2/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/77_hires.png", + "name": "Koga's Ekans", + "nationalPokedexNumber": 23, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "pl3-77", + "imageUrl": "https://images.pokemontcg.io/pl3/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/77_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm9-33", + "imageUrl": "https://images.pokemontcg.io/sm9/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/33_hires.png", + "name": "Pikachu & Zekrom-GX", + "nationalPokedexNumber": 25, + "set": null, + "setCode": "sm9" + }, + { + "id": "base3-29", + "imageUrl": "https://images.pokemontcg.io/base3/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/29_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "basep-1", + "imageUrl": "https://images.pokemontcg.io/basep/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/1_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-4", + "imageUrl": "https://images.pokemontcg.io/basep/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/4_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "xy6-20", + "imageUrl": "https://images.pokemontcg.io/xy6/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/20_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "basep-24", + "imageUrl": "https://images.pokemontcg.io/basep/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/24_hires.png", + "name": "___________'s Pikachu", + "nationalPokedexNumber": 25, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "xy3-27", + "imageUrl": "https://images.pokemontcg.io/xy3/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/27_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "xy3-28", + "imageUrl": "https://images.pokemontcg.io/xy3/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/28_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "xyp-XY57", + "imageUrl": "https://images.pokemontcg.io/xyp/XY57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY57_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "xy12-36", + "imageUrl": "https://images.pokemontcg.io/xy12/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/36_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy6-66", + "imageUrl": "https://images.pokemontcg.io/xy6/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/66_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "ex13-15", + "imageUrl": "https://images.pokemontcg.io/ex13/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/15_hires.png", + "name": "Raichu δ", + "nationalPokedexNumber": 26, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "basep-25", + "imageUrl": "https://images.pokemontcg.io/basep/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/25_hires.png", + "name": "Flying Pikachu", + "nationalPokedexNumber": 25, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "base6-86", + "imageUrl": "https://images.pokemontcg.io/base6/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/86_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "neo4-111", + "imageUrl": "https://images.pokemontcg.io/neo4/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/111_hires.png", + "name": "Shining Raichu", + "nationalPokedexNumber": 26, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "pop4-13", + "imageUrl": "https://images.pokemontcg.io/pop4/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop4/13_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "POP Series 4", + "setCode": "pop4" + }, + { + "id": "ecard1-35", + "imageUrl": "https://images.pokemontcg.io/ecard1/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/35_hires.png", + "name": "Arbok", + "nationalPokedexNumber": 24, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm35-37", + "imageUrl": "https://images.pokemontcg.io/sm35/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/37_hires.png", + "name": "Arbok", + "nationalPokedexNumber": 24, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "ecard1-45", + "imageUrl": "https://images.pokemontcg.io/ecard1/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/45_hires.png", + "name": "Fearow", + "nationalPokedexNumber": 22, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm10-55", + "imageUrl": "https://images.pokemontcg.io/sm10/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/55_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": null, + "setCode": "sm10" + }, + { + "id": "smp-SM04", + "imageUrl": "https://images.pokemontcg.io/smp/SM04.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM04_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": null, + "setCode": "smp" + }, + { + "id": "ex2-29", + "imageUrl": "https://images.pokemontcg.io/ex2/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/29_hires.png", + "name": "Arbok", + "nationalPokedexNumber": 24, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "g1-rc9", + "imageUrl": "https://images.pokemontcg.io/g1/RC9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/RC9_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "hgss3-33", + "imageUrl": "https://images.pokemontcg.io/hgss3/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/33_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ex2-72", + "imageUrl": "https://images.pokemontcg.io/ex2/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/72_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "dp4-33", + "imageUrl": "https://images.pokemontcg.io/dp4/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/33_hires.png", + "name": "Arbok", + "nationalPokedexNumber": 24, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "smp-SM213", + "imageUrl": "https://images.pokemontcg.io/smp/SM213.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM213_hires.png", + "name": "Raichu-GX", + "nationalPokedexNumber": 26, + "set": null, + "setCode": "smp" + }, + { + "id": "hgss1-78", + "imageUrl": "https://images.pokemontcg.io/hgss1/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/78_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "bw7-50", + "imageUrl": "https://images.pokemontcg.io/bw7/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/50_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "basep-26", + "imageUrl": "https://images.pokemontcg.io/basep/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/26_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-27", + "imageUrl": "https://images.pokemontcg.io/basep/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/27_hires.png", + "name": "Pikachu", + "nationalPokedexNumber": 25, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "sm12-137", + "imageUrl": "https://images.pokemontcg.io/sm12/137.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/137_hires.png", + "name": "Alolan Sandshrew", + "nationalPokedexNumber": 27, + "set": null, + "setCode": "sm12" + }, + { + "id": "ecard3-171", + "imageUrl": "https://images.pokemontcg.io/ecard3/171.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/171_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-83", + "imageUrl": "https://images.pokemontcg.io/ecard3/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/83_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex15-34", + "imageUrl": "https://images.pokemontcg.io/ex15/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/34_hires.png", + "name": "Nidorina δ", + "nationalPokedexNumber": 30, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex11-82", + "imageUrl": "https://images.pokemontcg.io/ex11/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/82_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "pl2-71", + "imageUrl": "https://images.pokemontcg.io/pl2/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/71_hires.png", + "name": "Nidoran♀", + "nationalPokedexNumber": 29, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "pl2-73", + "imageUrl": "https://images.pokemontcg.io/pl2/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/73_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "hgss4-69", + "imageUrl": "https://images.pokemontcg.io/hgss4/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/69_hires.png", + "name": "Nidoran♀", + "nationalPokedexNumber": 29, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex6-9", + "imageUrl": "https://images.pokemontcg.io/ex6/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/9_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "bw7-79", + "imageUrl": "https://images.pokemontcg.io/bw7/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/79_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "ex2-21", + "imageUrl": "https://images.pokemontcg.io/ex2/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/21_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex6-70", + "imageUrl": "https://images.pokemontcg.io/ex6/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/70_hires.png", + "name": "Nidoran♀", + "nationalPokedexNumber": 29, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base3-41", + "imageUrl": "https://images.pokemontcg.io/base3/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/41_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "hgss1-29", + "imageUrl": "https://images.pokemontcg.io/hgss1/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/29_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "sm10-83", + "imageUrl": "https://images.pokemontcg.io/sm10/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/83_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex7-74", + "imageUrl": "https://images.pokemontcg.io/ex7/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/74_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base6-82", + "imageUrl": "https://images.pokemontcg.io/base6/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/82_hires.png", + "name": "Nidoran♀", + "nationalPokedexNumber": 29, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex2-75", + "imageUrl": "https://images.pokemontcg.io/ex2/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/75_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "bw9-40", + "imageUrl": "https://images.pokemontcg.io/bw9/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/40_hires.png", + "name": "Nidoran♀", + "nationalPokedexNumber": 29, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "xy12-54", + "imageUrl": "https://images.pokemontcg.io/xy12/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/54_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy8-76", + "imageUrl": "https://images.pokemontcg.io/xy8/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/76_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "dp2-31", + "imageUrl": "https://images.pokemontcg.io/dp2/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/31_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-56", + "imageUrl": "https://images.pokemontcg.io/dp2/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/56_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-61", + "imageUrl": "https://images.pokemontcg.io/dp2/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/61_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-96", + "imageUrl": "https://images.pokemontcg.io/dp2/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/96_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "base6-32", + "imageUrl": "https://images.pokemontcg.io/base6/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/32_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "pl3-42", + "imageUrl": "https://images.pokemontcg.io/pl3/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/42_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "gym2-23", + "imageUrl": "https://images.pokemontcg.io/gym2/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/23_hires.png", + "name": "Giovanni's Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "base6-62", + "imageUrl": "https://images.pokemontcg.io/base6/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/62_hires.png", + "name": "Sandslash", + "nationalPokedexNumber": 28, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex7-18", + "imageUrl": "https://images.pokemontcg.io/ex7/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/18_hires.png", + "name": "Dark Sandslash", + "nationalPokedexNumber": 28, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "gym2-36", + "imageUrl": "https://images.pokemontcg.io/gym2/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/36_hires.png", + "name": "Brock's Sandslash", + "nationalPokedexNumber": 28, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm9-54", + "imageUrl": "https://images.pokemontcg.io/sm9/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/54_hires.png", + "name": "Nidoran ♀", + "nationalPokedexNumber": 29, + "set": null, + "setCode": "sm9" + }, + { + "id": "gym2-44", + "imageUrl": "https://images.pokemontcg.io/gym2/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/44_hires.png", + "name": "Giovanni's Nidorina", + "nationalPokedexNumber": 30, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm2-19a", + "imageUrl": "https://images.pokemontcg.io/sm2/19a.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/19a_hires.png", + "name": "Alolan Sandshrew", + "nationalPokedexNumber": 27, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "sm2-20", + "imageUrl": "https://images.pokemontcg.io/sm2/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/20_hires.png", + "name": "Alolan Sandslash", + "nationalPokedexNumber": 28, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "ex15-56", + "imageUrl": "https://images.pokemontcg.io/ex15/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/56_hires.png", + "name": "Nidoran♀ δ", + "nationalPokedexNumber": 29, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "dp2-91", + "imageUrl": "https://images.pokemontcg.io/dp2/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/91_hires.png", + "name": "Nidoran♀", + "nationalPokedexNumber": 29, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "bw9-41", + "imageUrl": "https://images.pokemontcg.io/bw9/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/41_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "pl3-124", + "imageUrl": "https://images.pokemontcg.io/pl3/124.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/124_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base4-12", + "imageUrl": "https://images.pokemontcg.io/base4/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/12_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-53", + "imageUrl": "https://images.pokemontcg.io/base4/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/53_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-82", + "imageUrl": "https://images.pokemontcg.io/base4/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/82_hires.png", + "name": "Nidoran ♀", + "nationalPokedexNumber": 29, + "set": null, + "setCode": "base4" + }, + { + "id": "base2-7", + "imageUrl": "https://images.pokemontcg.io/base2/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/7_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": null, + "setCode": "base2" + }, + { + "id": "hgss4-45", + "imageUrl": "https://images.pokemontcg.io/hgss4/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/45_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "hgss1-79", + "imageUrl": "https://images.pokemontcg.io/hgss1/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/79_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "base2-23", + "imageUrl": "https://images.pokemontcg.io/base2/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/23_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-40", + "imageUrl": "https://images.pokemontcg.io/base2/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/40_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": null, + "setCode": "base2" + }, + { + "id": "xy8-50", + "imageUrl": "https://images.pokemontcg.io/xy8/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/50_hires.png", + "name": "Raichu BREAK", + "nationalPokedexNumber": 26, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "ex6-40", + "imageUrl": "https://images.pokemontcg.io/ex6/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/40_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base2-57", + "imageUrl": "https://images.pokemontcg.io/base2/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/57_hires.png", + "name": "Nidoran ♀", + "nationalPokedexNumber": 29, + "set": null, + "setCode": "base2" + }, + { + "id": "bw9-42", + "imageUrl": "https://images.pokemontcg.io/bw9/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/42_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "gym2-75", + "imageUrl": "https://images.pokemontcg.io/gym2/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/75_hires.png", + "name": "Giovanni's Nidoran♀", + "nationalPokedexNumber": 29, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "base6-55", + "imageUrl": "https://images.pokemontcg.io/base6/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/55_hires.png", + "name": "Nidorina", + "nationalPokedexNumber": 30, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-91", + "imageUrl": "https://images.pokemontcg.io/base6/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/91_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "gym1-71", + "imageUrl": "https://images.pokemontcg.io/gym1/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/71_hires.png", + "name": "Brock's Sandshrew", + "nationalPokedexNumber": 27, + "set": null, + "setCode": "gym1" + }, + { + "id": "hgss1-10", + "imageUrl": "https://images.pokemontcg.io/hgss1/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/10_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "bw4-40", + "imageUrl": "https://images.pokemontcg.io/bw4/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/40_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "smp-SM72", + "imageUrl": "https://images.pokemontcg.io/smp/SM72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM72_hires.png", + "name": "Alolan Raichu", + "nationalPokedexNumber": 26, + "set": null, + "setCode": "smp" + }, + { + "id": "bw7-78", + "imageUrl": "https://images.pokemontcg.io/bw7/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/78_hires.png", + "name": "Sandshrew", + "nationalPokedexNumber": 27, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "xy8-49", + "imageUrl": "https://images.pokemontcg.io/xy8/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/49_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "smp-SM160", + "imageUrl": "https://images.pokemontcg.io/smp/SM160.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM160_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": null, + "setCode": "smp" + }, + { + "id": "hgss4-28", + "imageUrl": "https://images.pokemontcg.io/hgss4/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/28_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex4-13", + "imageUrl": "https://images.pokemontcg.io/ex4/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/13_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "sm3-41", + "imageUrl": "https://images.pokemontcg.io/sm3/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/41_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "smp-SM236", + "imageUrl": "https://images.pokemontcg.io/smp/SM236.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM236_hires.png", + "name": "Alolan Sandslash-GX", + "nationalPokedexNumber": 28, + "set": null, + "setCode": "smp" + }, + { + "id": "bwp-BW78", + "imageUrl": "https://images.pokemontcg.io/bwp/BW78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bwp/BW78_hires.png", + "name": "Raichu", + "nationalPokedexNumber": 26, + "set": "BW Black Star Promos", + "setCode": "bwp" + }, + { + "id": "sm115-20", + "imageUrl": "https://images.pokemontcg.io/sm115/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/20_hires.png", + "name": "Raichu-GX", + "nationalPokedexNumber": 26, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm35-29", + "imageUrl": "https://images.pokemontcg.io/sm35/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/29_hires.png", + "name": "Raichu-GX", + "nationalPokedexNumber": 26, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "sm5-28", + "imageUrl": "https://images.pokemontcg.io/sm5/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm5/28_hires.png", + "name": "Alolan Sandshrew", + "nationalPokedexNumber": 27, + "set": "Ultra Prism", + "setCode": "sm5" + }, + { + "id": "sm5-29", + "imageUrl": "https://images.pokemontcg.io/sm5/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm5/29_hires.png", + "name": "Alolan Sandslash", + "nationalPokedexNumber": 28, + "set": "Ultra Prism", + "setCode": "sm5" + }, + { + "id": "xy5-66", + "imageUrl": "https://images.pokemontcg.io/xy5/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/66_hires.png", + "name": "Nidoran♀", + "nationalPokedexNumber": 29, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "xy5-68", + "imageUrl": "https://images.pokemontcg.io/xy5/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/68_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "xy5-69", + "imageUrl": "https://images.pokemontcg.io/xy5/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/69_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "gym1-72", + "imageUrl": "https://images.pokemontcg.io/gym1/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/72_hires.png", + "name": "Brock's Sandshrew", + "nationalPokedexNumber": 27, + "set": null, + "setCode": "gym1" + }, + { + "id": "col1-1", + "imageUrl": "https://images.pokemontcg.io/col1/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/1_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "xy11-43", + "imageUrl": "https://images.pokemontcg.io/xy11/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/43_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "ex15-57", + "imageUrl": "https://images.pokemontcg.io/ex15/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/57_hires.png", + "name": "Nidoran♂ δ", + "nationalPokedexNumber": 32, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex6-8", + "imageUrl": "https://images.pokemontcg.io/ex6/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/8_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "swsh2-74", + "imageUrl": "https://images.pokemontcg.io/swsh2/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/74_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "bw9-43", + "imageUrl": "https://images.pokemontcg.io/bw9/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/43_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "xy11-44", + "imageUrl": "https://images.pokemontcg.io/xy11/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/44_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "base6-56", + "imageUrl": "https://images.pokemontcg.io/base6/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/56_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "dp3-34", + "imageUrl": "https://images.pokemontcg.io/dp3/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/34_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base6-83", + "imageUrl": "https://images.pokemontcg.io/base6/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/83_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "dp3-57", + "imageUrl": "https://images.pokemontcg.io/dp3/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/57_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ecard1-41", + "imageUrl": "https://images.pokemontcg.io/ecard1/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/41_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm9-57", + "imageUrl": "https://images.pokemontcg.io/sm9/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/57_hires.png", + "name": "Nidoran ♂", + "nationalPokedexNumber": 32, + "set": null, + "setCode": "sm9" + }, + { + "id": "ecard1-101", + "imageUrl": "https://images.pokemontcg.io/ecard1/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/101_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "pl2-72", + "imageUrl": "https://images.pokemontcg.io/pl2/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/72_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "pl2-74", + "imageUrl": "https://images.pokemontcg.io/pl2/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/74_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "sm10-133", + "imageUrl": "https://images.pokemontcg.io/sm10/133.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/133_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-132", + "imageUrl": "https://images.pokemontcg.io/sm10/132.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/132_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": null, + "setCode": "sm10" + }, + { + "id": "bw8-97", + "imageUrl": "https://images.pokemontcg.io/bw8/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/97_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "xy11-45", + "imageUrl": "https://images.pokemontcg.io/xy11/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/45_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "base2-17", + "imageUrl": "https://images.pokemontcg.io/base2/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/17_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-71", + "imageUrl": "https://images.pokemontcg.io/ex6/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/71_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "g1-51", + "imageUrl": "https://images.pokemontcg.io/g1/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/51_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "base6-31", + "imageUrl": "https://images.pokemontcg.io/base6/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/31_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "col1-54", + "imageUrl": "https://images.pokemontcg.io/col1/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/54_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "sm9-58", + "imageUrl": "https://images.pokemontcg.io/sm9/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/58_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": null, + "setCode": "sm9" + }, + { + "id": "hgss1-3", + "imageUrl": "https://images.pokemontcg.io/hgss1/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/3_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ecard2-96", + "imageUrl": "https://images.pokemontcg.io/ecard2/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/96_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "xy12-46", + "imageUrl": "https://images.pokemontcg.io/xy12/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/46_hires.png", + "name": "Nidoking BREAK", + "nationalPokedexNumber": 34, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-63", + "imageUrl": "https://images.pokemontcg.io/xy12/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/63_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy3-70", + "imageUrl": "https://images.pokemontcg.io/xy3/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/70_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "xy3-71", + "imageUrl": "https://images.pokemontcg.io/xy3/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/71_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "hgss4-70", + "imageUrl": "https://images.pokemontcg.io/hgss4/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/70_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "bw8-98", + "imageUrl": "https://images.pokemontcg.io/bw8/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/98_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "hgss4-46", + "imageUrl": "https://images.pokemontcg.io/hgss4/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/46_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "xy12-43", + "imageUrl": "https://images.pokemontcg.io/xy12/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/43_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-44", + "imageUrl": "https://images.pokemontcg.io/xy12/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/44_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "dp3-97", + "imageUrl": "https://images.pokemontcg.io/dp3/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/97_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "bw9-58", + "imageUrl": "https://images.pokemontcg.io/bw9/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/58_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "base4-5", + "imageUrl": "https://images.pokemontcg.io/base4/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/5_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": null, + "setCode": "base4" + }, + { + "id": "dp3-83", + "imageUrl": "https://images.pokemontcg.io/dp3/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/83_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base4-6", + "imageUrl": "https://images.pokemontcg.io/base4/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/6_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": null, + "setCode": "base4" + }, + { + "id": "sm9-59", + "imageUrl": "https://images.pokemontcg.io/sm9/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/59_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": null, + "setCode": "sm9" + }, + { + "id": "base2-1", + "imageUrl": "https://images.pokemontcg.io/base2/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/1_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-41", + "imageUrl": "https://images.pokemontcg.io/ex6/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/41_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy3-69", + "imageUrl": "https://images.pokemontcg.io/xy3/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/69_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "gym2-7", + "imageUrl": "https://images.pokemontcg.io/gym2/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/7_hires.png", + "name": "Giovanni's Nidoking", + "nationalPokedexNumber": 34, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-40", + "imageUrl": "https://images.pokemontcg.io/gym2/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/40_hires.png", + "name": "Erika's Clefairy", + "nationalPokedexNumber": 35, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "bw9-44", + "imageUrl": "https://images.pokemontcg.io/bw9/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/44_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "gym2-76", + "imageUrl": "https://images.pokemontcg.io/gym2/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/76_hires.png", + "name": "Giovanni's Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm12-144", + "imageUrl": "https://images.pokemontcg.io/sm12/144.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/144_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": null, + "setCode": "sm12" + }, + { + "id": "ex6-59", + "imageUrl": "https://images.pokemontcg.io/ex6/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/59_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-106", + "imageUrl": "https://images.pokemontcg.io/ex6/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/106_hires.png", + "name": "Clefable ex", + "nationalPokedexNumber": 36, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "gym2-45", + "imageUrl": "https://images.pokemontcg.io/gym2/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/45_hires.png", + "name": "Giovanni's Nidorino", + "nationalPokedexNumber": 33, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "hgss1-60", + "imageUrl": "https://images.pokemontcg.io/hgss1/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/60_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "neo1-30", + "imageUrl": "https://images.pokemontcg.io/neo1/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/30_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "ex10-36", + "imageUrl": "https://images.pokemontcg.io/ex10/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/36_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "base4-54", + "imageUrl": "https://images.pokemontcg.io/base4/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/54_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": null, + "setCode": "base4" + }, + { + "id": "hgss4-6", + "imageUrl": "https://images.pokemontcg.io/hgss4/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/6_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex10-53", + "imageUrl": "https://images.pokemontcg.io/ex10/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/53_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "sm115-38", + "imageUrl": "https://images.pokemontcg.io/sm115/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/38_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-39", + "imageUrl": "https://images.pokemontcg.io/sm115/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/39_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-40", + "imageUrl": "https://images.pokemontcg.io/sm115/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/40_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm2-89", + "imageUrl": "https://images.pokemontcg.io/sm2/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/89_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "gym1-3", + "imageUrl": "https://images.pokemontcg.io/gym1/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/3_hires.png", + "name": "Erika's Clefable", + "nationalPokedexNumber": 36, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-25", + "imageUrl": "https://images.pokemontcg.io/gym1/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/25_hires.png", + "name": "Erika's Clefairy", + "nationalPokedexNumber": 35, + "set": null, + "setCode": "gym1" + }, + { + "id": "ecard2-168", + "imageUrl": "https://images.pokemontcg.io/ecard2/168.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/168_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-24", + "imageUrl": "https://images.pokemontcg.io/ecard2/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/24_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-55", + "imageUrl": "https://images.pokemontcg.io/ecard2/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/55_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-150", + "imageUrl": "https://images.pokemontcg.io/ecard2/150.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/150_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base4-11", + "imageUrl": "https://images.pokemontcg.io/base4/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/11_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": null, + "setCode": "base4" + }, + { + "id": "base1-37", + "imageUrl": "https://images.pokemontcg.io/base1/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/37_hires.png", + "name": "Nidorino", + "nationalPokedexNumber": 33, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base1-55", + "imageUrl": "https://images.pokemontcg.io/base1/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/55_hires.png", + "name": "Nidoran♂", + "nationalPokedexNumber": 32, + "set": "Base", + "setCode": "base1" + }, + { + "id": "xy9-82", + "imageUrl": "https://images.pokemontcg.io/xy9/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/82_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy9-81", + "imageUrl": "https://images.pokemontcg.io/xy9/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/81_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "base4-83", + "imageUrl": "https://images.pokemontcg.io/base4/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/83_hires.png", + "name": "Nidoran ♂", + "nationalPokedexNumber": 32, + "set": null, + "setCode": "base4" + }, + { + "id": "ecard3-22", + "imageUrl": "https://images.pokemontcg.io/ecard3/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/22_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "swsh2-75", + "imageUrl": "https://images.pokemontcg.io/swsh2/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/75_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "dp1-22", + "imageUrl": "https://images.pokemontcg.io/dp1/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/22_hires.png", + "name": "Clefable", + "nationalPokedexNumber": 36, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "base1-5", + "imageUrl": "https://images.pokemontcg.io/base1/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/5_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Base", + "setCode": "base1" + }, + { + "id": "dp1-77", + "imageUrl": "https://images.pokemontcg.io/dp1/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/77_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "sm2-88", + "imageUrl": "https://images.pokemontcg.io/sm2/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/88_hires.png", + "name": "Clefairy", + "nationalPokedexNumber": 35, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "ex15-6", + "imageUrl": "https://images.pokemontcg.io/ex15/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/6_hires.png", + "name": "Nidoking δ", + "nationalPokedexNumber": 34, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-7", + "imageUrl": "https://images.pokemontcg.io/ex15/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/7_hires.png", + "name": "Nidoqueen δ", + "nationalPokedexNumber": 31, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "sm9-56", + "imageUrl": "https://images.pokemontcg.io/sm9/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/56_hires.png", + "name": "Nidoqueen", + "nationalPokedexNumber": 31, + "set": null, + "setCode": "sm9" + }, + { + "id": "ex15-35", + "imageUrl": "https://images.pokemontcg.io/ex15/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/35_hires.png", + "name": "Nidorino δ", + "nationalPokedexNumber": 33, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "xy12-45", + "imageUrl": "https://images.pokemontcg.io/xy12/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/45_hires.png", + "name": "Nidoking", + "nationalPokedexNumber": 34, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "gym1-73", + "imageUrl": "https://images.pokemontcg.io/gym1/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/73_hires.png", + "name": "Brock's Vulpix", + "nationalPokedexNumber": 37, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex16-69", + "imageUrl": "https://images.pokemontcg.io/ex16/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/69_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "swsh2-25", + "imageUrl": "https://images.pokemontcg.io/swsh2/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/25_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "ex15-8", + "imageUrl": "https://images.pokemontcg.io/ex15/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/8_hires.png", + "name": "Ninetales δ", + "nationalPokedexNumber": 38, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ecard3-117", + "imageUrl": "https://images.pokemontcg.io/ecard3/117.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/117_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex15-70", + "imageUrl": "https://images.pokemontcg.io/ex15/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/70_hires.png", + "name": "Vulpix δ", + "nationalPokedexNumber": 37, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "swsh1-22", + "imageUrl": "https://images.pokemontcg.io/swsh1/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/22_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "bw8-52", + "imageUrl": "https://images.pokemontcg.io/bw8/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/52_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "xy1-90", + "imageUrl": "https://images.pokemontcg.io/xy1/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/90_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "sm8-133", + "imageUrl": "https://images.pokemontcg.io/sm8/133.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/133_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "bw11-21", + "imageUrl": "https://images.pokemontcg.io/bw11/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/21_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "hgss2-68", + "imageUrl": "https://images.pokemontcg.io/hgss2/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/68_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "hgss2-70", + "imageUrl": "https://images.pokemontcg.io/hgss2/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/70_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "sma-SV53", + "imageUrl": "https://images.pokemontcg.io/sma/SV53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sma/SV53_hires.png", + "name": "Alolan Ninetales-GX", + "nationalPokedexNumber": 38, + "set": "Shiny Vault", + "setCode": "sma" + }, + { + "id": "neo3-59", + "imageUrl": "https://images.pokemontcg.io/neo3/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/59_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "base1-12", + "imageUrl": "https://images.pokemontcg.io/base1/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/12_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Base", + "setCode": "base1" + }, + { + "id": "smp-SM128", + "imageUrl": "https://images.pokemontcg.io/smp/SM128.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM128_hires.png", + "name": "Alolan Ninetales", + "nationalPokedexNumber": 38, + "set": null, + "setCode": "smp" + }, + { + "id": "xy1-89", + "imageUrl": "https://images.pokemontcg.io/xy1/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/89_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "xy4-31", + "imageUrl": "https://images.pokemontcg.io/xy4/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/31_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "swsh1-23", + "imageUrl": "https://images.pokemontcg.io/swsh1/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/23_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "ex7-82", + "imageUrl": "https://images.pokemontcg.io/ex7/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/82_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ecard1-21", + "imageUrl": "https://images.pokemontcg.io/ecard1/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/21_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "swsh5-89", + "imageUrl": "https://images.pokemontcg.io/swsh5/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/89_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": null, + "setCode": "swsh5" + }, + { + "id": "pl1-102", + "imageUrl": "https://images.pokemontcg.io/pl1/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/102_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "bw11-20", + "imageUrl": "https://images.pokemontcg.io/bw11/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/20_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "base4-77", + "imageUrl": "https://images.pokemontcg.io/base4/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/77_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": null, + "setCode": "base4" + }, + { + "id": "pl1-SH6", + "imageUrl": "https://images.pokemontcg.io/pl1/SH6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/SH6_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "ecard1-57", + "imageUrl": "https://images.pokemontcg.io/ecard1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/57_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "gym1-24", + "imageUrl": "https://images.pokemontcg.io/gym1/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/24_hires.png", + "name": "Brock's Zubat", + "nationalPokedexNumber": 41, + "set": null, + "setCode": "gym1" + }, + { + "id": "base4-99", + "imageUrl": "https://images.pokemontcg.io/base4/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/99_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": null, + "setCode": "base4" + }, + { + "id": "ex9-38", + "imageUrl": "https://images.pokemontcg.io/ex9/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/38_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "ecard1-136", + "imageUrl": "https://images.pokemontcg.io/ecard1/136.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/136_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "basep-7", + "imageUrl": "https://images.pokemontcg.io/basep/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/7_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "neo4-91", + "imageUrl": "https://images.pokemontcg.io/neo4/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/91_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "xy10-65", + "imageUrl": "https://images.pokemontcg.io/xy10/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/65_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy10-66", + "imageUrl": "https://images.pokemontcg.io/xy10/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/66_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy12-14", + "imageUrl": "https://images.pokemontcg.io/xy12/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/14_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm10-134", + "imageUrl": "https://images.pokemontcg.io/sm10/134.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/134_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-135", + "imageUrl": "https://images.pokemontcg.io/sm10/135.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/135_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": null, + "setCode": "sm10" + }, + { + "id": "xy1-88", + "imageUrl": "https://images.pokemontcg.io/xy1/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/88_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "xy1-87", + "imageUrl": "https://images.pokemontcg.io/xy1/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/87_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "ex5-22", + "imageUrl": "https://images.pokemontcg.io/ex5/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/22_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "gym1-74", + "imageUrl": "https://images.pokemontcg.io/gym1/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/74_hires.png", + "name": "Brock's Zubat", + "nationalPokedexNumber": 41, + "set": null, + "setCode": "gym1" + }, + { + "id": "dp2-32", + "imageUrl": "https://images.pokemontcg.io/dp2/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/32_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "bw6-18", + "imageUrl": "https://images.pokemontcg.io/bw6/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw6/18_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Dragons Exalted", + "setCode": "bw6" + }, + { + "id": "dp4-72", + "imageUrl": "https://images.pokemontcg.io/dp4/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/72_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "ex16-19", + "imageUrl": "https://images.pokemontcg.io/ex16/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/19_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "bwp-BW66", + "imageUrl": "https://images.pokemontcg.io/bwp/BW66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bwp/BW66_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "BW Black Star Promos", + "setCode": "bwp" + }, + { + "id": "dp2-107", + "imageUrl": "https://images.pokemontcg.io/dp2/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/107_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-108", + "imageUrl": "https://images.pokemontcg.io/dp2/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/108_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "base6-98", + "imageUrl": "https://images.pokemontcg.io/base6/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/98_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm9-15", + "imageUrl": "https://images.pokemontcg.io/sm9/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/15_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-16", + "imageUrl": "https://images.pokemontcg.io/sm9/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/16_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": null, + "setCode": "sm9" + }, + { + "id": "gym2-66", + "imageUrl": "https://images.pokemontcg.io/gym2/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/66_hires.png", + "name": "Blaine's Vulpix", + "nationalPokedexNumber": 37, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm2-21a", + "imageUrl": "https://images.pokemontcg.io/sm2/21a.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/21a_hires.png", + "name": "Alolan Vulpix", + "nationalPokedexNumber": 37, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "hgss2-20", + "imageUrl": "https://images.pokemontcg.io/hgss2/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/20_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "g1-13", + "imageUrl": "https://images.pokemontcg.io/g1/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/13_hires.png", + "name": "Ninetales-EX", + "nationalPokedexNumber": 38, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "sm8-53", + "imageUrl": "https://images.pokemontcg.io/sm8/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/53_hires.png", + "name": "Alolan Vulpix", + "nationalPokedexNumber": 37, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "g1-30", + "imageUrl": "https://images.pokemontcg.io/g1/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/30_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "neo4-44", + "imageUrl": "https://images.pokemontcg.io/neo4/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/44_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-50", + "imageUrl": "https://images.pokemontcg.io/neo4/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/50_hires.png", + "name": "Light Ninetales", + "nationalPokedexNumber": 38, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-54", + "imageUrl": "https://images.pokemontcg.io/neo4/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/54_hires.png", + "name": "Light Wigglytuff", + "nationalPokedexNumber": 40, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "hgss1-87", + "imageUrl": "https://images.pokemontcg.io/hgss1/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/87_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "col1-17", + "imageUrl": "https://images.pokemontcg.io/col1/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/17_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "dp4-32", + "imageUrl": "https://images.pokemontcg.io/dp4/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/32_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "pl3-133", + "imageUrl": "https://images.pokemontcg.io/pl3/133.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/133_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "hgss1-56", + "imageUrl": "https://images.pokemontcg.io/hgss1/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/56_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "base4-19", + "imageUrl": "https://images.pokemontcg.io/base4/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/19_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": null, + "setCode": "base4" + }, + { + "id": "sm2-21", + "imageUrl": "https://images.pokemontcg.io/sm2/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/21_hires.png", + "name": "Alolan Vulpix", + "nationalPokedexNumber": 37, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "ex4-41", + "imageUrl": "https://images.pokemontcg.io/ex4/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/41_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "hgss1-7", + "imageUrl": "https://images.pokemontcg.io/hgss1/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/7_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex8-83", + "imageUrl": "https://images.pokemontcg.io/ex8/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/83_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "base2-16", + "imageUrl": "https://images.pokemontcg.io/base2/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/16_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": null, + "setCode": "base2" + }, + { + "id": "ex9-72", + "imageUrl": "https://images.pokemontcg.io/ex9/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/72_hires.png", + "name": "Vulpix", + "nationalPokedexNumber": 37, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "ecard3-34", + "imageUrl": "https://images.pokemontcg.io/ecard3/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/34_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex14-53", + "imageUrl": "https://images.pokemontcg.io/ex14/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/53_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex6-52", + "imageUrl": "https://images.pokemontcg.io/ex6/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/52_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base2-54", + "imageUrl": "https://images.pokemontcg.io/base2/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/54_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-65", + "imageUrl": "https://images.pokemontcg.io/ex6/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/65_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "gym2-37", + "imageUrl": "https://images.pokemontcg.io/gym2/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/37_hires.png", + "name": "Brock's Vulpix", + "nationalPokedexNumber": 37, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex14-13", + "imageUrl": "https://images.pokemontcg.io/ex14/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/13_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ecard2-169", + "imageUrl": "https://images.pokemontcg.io/ecard2/169.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/169_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard3-118", + "imageUrl": "https://images.pokemontcg.io/ecard3/118.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/118_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "base2-32", + "imageUrl": "https://images.pokemontcg.io/base2/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/32_hires.png", + "name": "Wigglytuff", + "nationalPokedexNumber": 40, + "set": null, + "setCode": "base2" + }, + { + "id": "base6-17", + "imageUrl": "https://images.pokemontcg.io/base6/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/17_hires.png", + "name": "Ninetales", + "nationalPokedexNumber": 38, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base5-70", + "imageUrl": "https://images.pokemontcg.io/base5/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/70_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "hgss1-68", + "imageUrl": "https://images.pokemontcg.io/hgss1/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/68_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex5-63", + "imageUrl": "https://images.pokemontcg.io/ex5/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/63_hires.png", + "name": "Jigglypuff", + "nationalPokedexNumber": 39, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "ex5-83", + "imageUrl": "https://images.pokemontcg.io/ex5/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/83_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "hgss3-24", + "imageUrl": "https://images.pokemontcg.io/hgss3/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/24_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "base5-63", + "imageUrl": "https://images.pokemontcg.io/base5/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/63_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex6-72", + "imageUrl": "https://images.pokemontcg.io/ex6/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/72_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "dp2-92", + "imageUrl": "https://images.pokemontcg.io/dp2/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/92_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "base2-58", + "imageUrl": "https://images.pokemontcg.io/base2/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/58_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": null, + "setCode": "base2" + }, + { + "id": "xy4-32", + "imageUrl": "https://images.pokemontcg.io/xy4/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/32_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "ex5-68", + "imageUrl": "https://images.pokemontcg.io/ex5/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/68_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "swsh5-90", + "imageUrl": "https://images.pokemontcg.io/swsh5/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/90_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": null, + "setCode": "swsh5" + }, + { + "id": "ex13-42", + "imageUrl": "https://images.pokemontcg.io/ex13/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/42_hires.png", + "name": "Gloom δ", + "nationalPokedexNumber": 44, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ecard1-122", + "imageUrl": "https://images.pokemontcg.io/ecard1/122.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/122_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm10-6", + "imageUrl": "https://images.pokemontcg.io/sm10/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/6_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": null, + "setCode": "sm10" + }, + { + "id": "hgss3-27", + "imageUrl": "https://images.pokemontcg.io/hgss3/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/27_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "bw7-1", + "imageUrl": "https://images.pokemontcg.io/bw7/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/1_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "bw7-2", + "imageUrl": "https://images.pokemontcg.io/bw7/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/2_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "bw7-3", + "imageUrl": "https://images.pokemontcg.io/bw7/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/3_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "dp6-97", + "imageUrl": "https://images.pokemontcg.io/dp6/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/97_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp6-112", + "imageUrl": "https://images.pokemontcg.io/dp6/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/112_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "bw8-54", + "imageUrl": "https://images.pokemontcg.io/bw8/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/54_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "swsh3-3", + "imageUrl": "https://images.pokemontcg.io/swsh3/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/3_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "xy8-1", + "imageUrl": "https://images.pokemontcg.io/xy8/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/1_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "sm3-4", + "imageUrl": "https://images.pokemontcg.io/sm3/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/4_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "sm3-5", + "imageUrl": "https://images.pokemontcg.io/sm3/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/5_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "dp6-45", + "imageUrl": "https://images.pokemontcg.io/dp6/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/45_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp6-96", + "imageUrl": "https://images.pokemontcg.io/dp6/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/96_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "ex10-58", + "imageUrl": "https://images.pokemontcg.io/ex10/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/58_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "dp6-111", + "imageUrl": "https://images.pokemontcg.io/dp6/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/111_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp2-50", + "imageUrl": "https://images.pokemontcg.io/dp2/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/50_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "sm9-6", + "imageUrl": "https://images.pokemontcg.io/sm9/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/6_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": null, + "setCode": "sm9" + }, + { + "id": "gym2-70", + "imageUrl": "https://images.pokemontcg.io/gym2/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/70_hires.png", + "name": "Erika's Oddish", + "nationalPokedexNumber": 43, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-71", + "imageUrl": "https://images.pokemontcg.io/gym2/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/71_hires.png", + "name": "Erika's Paras", + "nationalPokedexNumber": 46, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "neo1-36", + "imageUrl": "https://images.pokemontcg.io/neo1/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/36_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "pl3-119", + "imageUrl": "https://images.pokemontcg.io/pl3/119.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/119_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base2-59", + "imageUrl": "https://images.pokemontcg.io/base2/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/59_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": null, + "setCode": "base2" + }, + { + "id": "gym1-47", + "imageUrl": "https://images.pokemontcg.io/gym1/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/47_hires.png", + "name": "Erika's Oddish", + "nationalPokedexNumber": 43, + "set": null, + "setCode": "gym1" + }, + { + "id": "neo3-47", + "imageUrl": "https://images.pokemontcg.io/neo3/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/47_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "g1-6", + "imageUrl": "https://images.pokemontcg.io/g1/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/6_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "g1-31", + "imageUrl": "https://images.pokemontcg.io/g1/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/31_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ex13-73", + "imageUrl": "https://images.pokemontcg.io/ex13/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/73_hires.png", + "name": "Oddish δ", + "nationalPokedexNumber": 43, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "sm10-5", + "imageUrl": "https://images.pokemontcg.io/sm10/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/5_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-8", + "imageUrl": "https://images.pokemontcg.io/sm10/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/8_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": null, + "setCode": "sm10" + }, + { + "id": "ecard1-78", + "imageUrl": "https://images.pokemontcg.io/ecard1/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/78_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "hgss3-60", + "imageUrl": "https://images.pokemontcg.io/hgss3/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/60_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ex11-43", + "imageUrl": "https://images.pokemontcg.io/ex11/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/43_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "sm1-55", + "imageUrl": "https://images.pokemontcg.io/sm1/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/55_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "ex10-64", + "imageUrl": "https://images.pokemontcg.io/ex10/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/64_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "sm10-7", + "imageUrl": "https://images.pokemontcg.io/sm10/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/7_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex8-31", + "imageUrl": "https://images.pokemontcg.io/ex8/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/31_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "hgss2-30", + "imageUrl": "https://images.pokemontcg.io/hgss2/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/30_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "base2-31", + "imageUrl": "https://images.pokemontcg.io/base2/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/31_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-37", + "imageUrl": "https://images.pokemontcg.io/base2/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/37_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-15", + "imageUrl": "https://images.pokemontcg.io/base2/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/15_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": null, + "setCode": "base2" + }, + { + "id": "gym1-39", + "imageUrl": "https://images.pokemontcg.io/gym1/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/39_hires.png", + "name": "Brock's Golbat", + "nationalPokedexNumber": 42, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym2-46", + "imageUrl": "https://images.pokemontcg.io/gym2/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/46_hires.png", + "name": "Koga's Golbat", + "nationalPokedexNumber": 42, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "base5-24", + "imageUrl": "https://images.pokemontcg.io/base5/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/24_hires.png", + "name": "Dark Golbat", + "nationalPokedexNumber": 42, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ecard3-60", + "imageUrl": "https://images.pokemontcg.io/ecard3/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/60_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex5-35", + "imageUrl": "https://images.pokemontcg.io/ex5/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/35_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "ecard1-69", + "imageUrl": "https://images.pokemontcg.io/ecard1/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/69_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex5-100", + "imageUrl": "https://images.pokemontcg.io/ex5/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/100_hires.png", + "name": "Vileplume ex", + "nationalPokedexNumber": 45, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "bw8-53", + "imageUrl": "https://images.pokemontcg.io/bw8/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/53_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "hgss1-76", + "imageUrl": "https://images.pokemontcg.io/hgss1/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/76_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex5-36", + "imageUrl": "https://images.pokemontcg.io/ex5/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/36_hires.png", + "name": "Golbat", + "nationalPokedexNumber": 42, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "ecard2-43", + "imageUrl": "https://images.pokemontcg.io/ecard2/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/43_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "neo1-68", + "imageUrl": "https://images.pokemontcg.io/neo1/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/68_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "ex13-17", + "imageUrl": "https://images.pokemontcg.io/ex13/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/17_hires.png", + "name": "Vileplume δ", + "nationalPokedexNumber": 45, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "sm115-4", + "imageUrl": "https://images.pokemontcg.io/sm115/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/4_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": null, + "setCode": "sm115" + }, + { + "id": "gym1-5", + "imageUrl": "https://images.pokemontcg.io/gym1/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/5_hires.png", + "name": "Erika's Vileplume", + "nationalPokedexNumber": 45, + "set": null, + "setCode": "gym1" + }, + { + "id": "xy7-3", + "imageUrl": "https://images.pokemontcg.io/xy7/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy7/3_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Ancient Origins", + "setCode": "xy7" + }, + { + "id": "xy7-2", + "imageUrl": "https://images.pokemontcg.io/xy7/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy7/2_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": "Ancient Origins", + "setCode": "xy7" + }, + { + "id": "gym1-78", + "imageUrl": "https://images.pokemontcg.io/gym1/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/78_hires.png", + "name": "Erika's Oddish", + "nationalPokedexNumber": 43, + "set": null, + "setCode": "gym1" + }, + { + "id": "si1-17", + "imageUrl": "https://images.pokemontcg.io/si1/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/17_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "ecard2-181", + "imageUrl": "https://images.pokemontcg.io/ecard2/181.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/181_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base5-7", + "imageUrl": "https://images.pokemontcg.io/base5/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/7_hires.png", + "name": "Dark Golbat", + "nationalPokedexNumber": 42, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-13", + "imageUrl": "https://images.pokemontcg.io/base5/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/13_hires.png", + "name": "Dark Vileplume", + "nationalPokedexNumber": 45, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-36", + "imageUrl": "https://images.pokemontcg.io/base5/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/36_hires.png", + "name": "Dark Gloom", + "nationalPokedexNumber": 44, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-30", + "imageUrl": "https://images.pokemontcg.io/base5/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/30_hires.png", + "name": "Dark Vileplume", + "nationalPokedexNumber": 45, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ecard2-99", + "imageUrl": "https://images.pokemontcg.io/ecard2/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/99_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "sm3-6", + "imageUrl": "https://images.pokemontcg.io/sm3/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/6_hires.png", + "name": "Vileplume", + "nationalPokedexNumber": 45, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "sm1-4", + "imageUrl": "https://images.pokemontcg.io/sm1/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/4_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "sm1-54", + "imageUrl": "https://images.pokemontcg.io/sm1/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/54_hires.png", + "name": "Zubat", + "nationalPokedexNumber": 41, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "ex7-34", + "imageUrl": "https://images.pokemontcg.io/ex7/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/34_hires.png", + "name": "Dark Golbat", + "nationalPokedexNumber": 42, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "sm12-4", + "imageUrl": "https://images.pokemontcg.io/sm12/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/4_hires.png", + "name": "Vileplume-GX", + "nationalPokedexNumber": 45, + "set": null, + "setCode": "sm12" + }, + { + "id": "sm12-2", + "imageUrl": "https://images.pokemontcg.io/sm12/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/2_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": null, + "setCode": "sm12" + }, + { + "id": "sm12-3", + "imageUrl": "https://images.pokemontcg.io/sm12/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/3_hires.png", + "name": "Gloom", + "nationalPokedexNumber": 44, + "set": null, + "setCode": "sm12" + }, + { + "id": "xy7-1", + "imageUrl": "https://images.pokemontcg.io/xy7/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy7/1_hires.png", + "name": "Oddish", + "nationalPokedexNumber": 43, + "set": "Ancient Origins", + "setCode": "xy7" + }, + { + "id": "base1-47", + "imageUrl": "https://images.pokemontcg.io/base1/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/47_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Base", + "setCode": "base1" + }, + { + "id": "swsh1-92", + "imageUrl": "https://images.pokemontcg.io/swsh1/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/92_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "ex6-22", + "imageUrl": "https://images.pokemontcg.io/ex6/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/22_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base2-13", + "imageUrl": "https://images.pokemontcg.io/base2/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/13_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": null, + "setCode": "base2" + }, + { + "id": "xy10-36", + "imageUrl": "https://images.pokemontcg.io/xy10/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/36_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "dp3-24", + "imageUrl": "https://images.pokemontcg.io/dp3/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/24_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "gym1-96", + "imageUrl": "https://images.pokemontcg.io/gym1/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/96_hires.png", + "name": "Sabrina's Venonat", + "nationalPokedexNumber": 48, + "set": null, + "setCode": "gym1" + }, + { + "id": "xy4-1", + "imageUrl": "https://images.pokemontcg.io/xy4/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/1_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "hgss4-11", + "imageUrl": "https://images.pokemontcg.io/hgss4/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/11_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm10-85", + "imageUrl": "https://images.pokemontcg.io/sm10/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/85_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-122", + "imageUrl": "https://images.pokemontcg.io/sm10/122.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/122_hires.png", + "name": "Alolan Dugtrio", + "nationalPokedexNumber": 51, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-121", + "imageUrl": "https://images.pokemontcg.io/sm10/121.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/121_hires.png", + "name": "Alolan Diglett", + "nationalPokedexNumber": 50, + "set": null, + "setCode": "sm10" + }, + { + "id": "xy8-2", + "imageUrl": "https://images.pokemontcg.io/xy8/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/2_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "ecard3-112", + "imageUrl": "https://images.pokemontcg.io/ecard3/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/112_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-50", + "imageUrl": "https://images.pokemontcg.io/ecard3/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/50_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "dp2-58", + "imageUrl": "https://images.pokemontcg.io/dp2/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/58_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "ex6-84", + "imageUrl": "https://images.pokemontcg.io/ex6/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/84_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm9-7", + "imageUrl": "https://images.pokemontcg.io/sm9/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/7_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": null, + "setCode": "sm9" + }, + { + "id": "dp3-85", + "imageUrl": "https://images.pokemontcg.io/dp3/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/85_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "xy12-55", + "imageUrl": "https://images.pokemontcg.io/xy12/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/55_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ex6-61", + "imageUrl": "https://images.pokemontcg.io/ex6/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/61_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "g1-7", + "imageUrl": "https://images.pokemontcg.io/g1/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/7_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "neo4-53", + "imageUrl": "https://images.pokemontcg.io/neo4/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/53_hires.png", + "name": "Light Venomoth", + "nationalPokedexNumber": 49, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-90", + "imageUrl": "https://images.pokemontcg.io/neo4/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/90_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "pl1-72", + "imageUrl": "https://images.pokemontcg.io/pl1/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/72_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "ex6-43", + "imageUrl": "https://images.pokemontcg.io/ex6/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/43_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm10-11", + "imageUrl": "https://images.pokemontcg.io/sm10/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/11_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-12", + "imageUrl": "https://images.pokemontcg.io/sm10/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/12_hires.png", + "name": "Venomoth-GX", + "nationalPokedexNumber": 49, + "set": null, + "setCode": "sm10" + }, + { + "id": "hgss4-81", + "imageUrl": "https://images.pokemontcg.io/hgss4/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/81_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm1-5", + "imageUrl": "https://images.pokemontcg.io/sm1/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/5_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "dp3-116", + "imageUrl": "https://images.pokemontcg.io/dp3/116.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/116_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "dp3-73", + "imageUrl": "https://images.pokemontcg.io/dp3/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/73_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex14-50", + "imageUrl": "https://images.pokemontcg.io/ex14/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/50_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "base4-55", + "imageUrl": "https://images.pokemontcg.io/base4/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/55_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": null, + "setCode": "base4" + }, + { + "id": "sm10-10", + "imageUrl": "https://images.pokemontcg.io/sm10/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/10_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": null, + "setCode": "sm10" + }, + { + "id": "hgss4-61", + "imageUrl": "https://images.pokemontcg.io/hgss4/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/61_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "base4-97", + "imageUrl": "https://images.pokemontcg.io/base4/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/97_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": null, + "setCode": "base4" + }, + { + "id": "base2-29", + "imageUrl": "https://images.pokemontcg.io/base2/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/29_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-41", + "imageUrl": "https://images.pokemontcg.io/base2/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/41_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-49", + "imageUrl": "https://images.pokemontcg.io/ex6/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/49_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base2-63", + "imageUrl": "https://images.pokemontcg.io/base2/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/63_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": null, + "setCode": "base2" + }, + { + "id": "gym2-22", + "imageUrl": "https://images.pokemontcg.io/gym2/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/22_hires.png", + "name": "Brock's Dugtrio", + "nationalPokedexNumber": 51, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-67", + "imageUrl": "https://images.pokemontcg.io/gym2/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/67_hires.png", + "name": "Brock's Diglett", + "nationalPokedexNumber": 50, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm10-9", + "imageUrl": "https://images.pokemontcg.io/sm10/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/9_hires.png", + "name": "Venonat", + "nationalPokedexNumber": 48, + "set": null, + "setCode": "sm10" + }, + { + "id": "gym1-34", + "imageUrl": "https://images.pokemontcg.io/gym1/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/34_hires.png", + "name": "Sabrina's Venomoth", + "nationalPokedexNumber": 49, + "set": null, + "setCode": "gym1" + }, + { + "id": "ecard3-111", + "imageUrl": "https://images.pokemontcg.io/ecard3/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/111_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm10-86", + "imageUrl": "https://images.pokemontcg.io/sm10/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/86_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": null, + "setCode": "sm10" + }, + { + "id": "hgss1-48", + "imageUrl": "https://images.pokemontcg.io/hgss1/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/48_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "pl3-38", + "imageUrl": "https://images.pokemontcg.io/pl3/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/38_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base4-31", + "imageUrl": "https://images.pokemontcg.io/base4/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/31_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": null, + "setCode": "base4" + }, + { + "id": "swsh6-76", + "imageUrl": "https://images.pokemontcg.io/swsh6/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/76_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-77", + "imageUrl": "https://images.pokemontcg.io/swsh6/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/77_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": null, + "setCode": "swsh6" + }, + { + "id": "hgss4-19", + "imageUrl": "https://images.pokemontcg.io/hgss4/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/19_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex14-5", + "imageUrl": "https://images.pokemontcg.io/ex14/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/5_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "sm1-87", + "imageUrl": "https://images.pokemontcg.io/sm1/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/87_hires.png", + "name": "Alolan Dugtrio", + "nationalPokedexNumber": 51, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "pl1-24", + "imageUrl": "https://images.pokemontcg.io/pl1/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/24_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "ru1-11", + "imageUrl": "https://images.pokemontcg.io/ru1/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ru1/11_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Pokémon Rumble", + "setCode": "ru1" + }, + { + "id": "sm8-122", + "imageUrl": "https://images.pokemontcg.io/sm8/122.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/122_hires.png", + "name": "Alolan Diglett", + "nationalPokedexNumber": 50, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "sm5-79", + "imageUrl": "https://images.pokemontcg.io/sm5/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm5/79_hires.png", + "name": "Alolan Dugtrio", + "nationalPokedexNumber": 51, + "set": "Ultra Prism", + "setCode": "sm5" + }, + { + "id": "sm5-78", + "imageUrl": "https://images.pokemontcg.io/sm5/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm5/78_hires.png", + "name": "Alolan Diglett", + "nationalPokedexNumber": 50, + "set": "Ultra Prism", + "setCode": "sm5" + }, + { + "id": "ecard2-27", + "imageUrl": "https://images.pokemontcg.io/ecard2/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/27_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base5-6", + "imageUrl": "https://images.pokemontcg.io/base5/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/6_hires.png", + "name": "Dark Dugtrio", + "nationalPokedexNumber": 51, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-23", + "imageUrl": "https://images.pokemontcg.io/base5/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/23_hires.png", + "name": "Dark Dugtrio", + "nationalPokedexNumber": 51, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-52", + "imageUrl": "https://images.pokemontcg.io/base5/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/52_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "sm1-86", + "imageUrl": "https://images.pokemontcg.io/sm1/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/86_hires.png", + "name": "Alolan Diglett", + "nationalPokedexNumber": 50, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "base4-23", + "imageUrl": "https://images.pokemontcg.io/base4/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/23_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": null, + "setCode": "base4" + }, + { + "id": "base1-19", + "imageUrl": "https://images.pokemontcg.io/base1/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/19_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Base", + "setCode": "base1" + }, + { + "id": "sm8-123", + "imageUrl": "https://images.pokemontcg.io/sm8/123.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/123_hires.png", + "name": "Alolan Dugtrio", + "nationalPokedexNumber": 51, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "base4-71", + "imageUrl": "https://images.pokemontcg.io/base4/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/71_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": null, + "setCode": "base4" + }, + { + "id": "ecard3-52", + "imageUrl": "https://images.pokemontcg.io/ecard3/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/52_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "swsh3-4", + "imageUrl": "https://images.pokemontcg.io/swsh3/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/4_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "swsh3-84", + "imageUrl": "https://images.pokemontcg.io/swsh3/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/84_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "swsh3-85", + "imageUrl": "https://images.pokemontcg.io/swsh3/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/85_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "xy12-56", + "imageUrl": "https://images.pokemontcg.io/xy12/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/56_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ecard1-10", + "imageUrl": "https://images.pokemontcg.io/ecard1/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/10_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-44", + "imageUrl": "https://images.pokemontcg.io/ecard1/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/44_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-106", + "imageUrl": "https://images.pokemontcg.io/ecard1/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/106_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "g1-38", + "imageUrl": "https://images.pokemontcg.io/g1/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/38_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "xy1-58", + "imageUrl": "https://images.pokemontcg.io/xy1/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/58_hires.png", + "name": "Diglett", + "nationalPokedexNumber": 50, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "xy1-59", + "imageUrl": "https://images.pokemontcg.io/xy1/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/59_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "g1-39", + "imageUrl": "https://images.pokemontcg.io/g1/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/39_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "swsh1-93", + "imageUrl": "https://images.pokemontcg.io/swsh1/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/93_hires.png", + "name": "Dugtrio", + "nationalPokedexNumber": 51, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "base4-85", + "imageUrl": "https://images.pokemontcg.io/base4/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/85_hires.png", + "name": "Paras", + "nationalPokedexNumber": 46, + "set": null, + "setCode": "base4" + }, + { + "id": "neo3-35", + "imageUrl": "https://images.pokemontcg.io/neo3/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/35_hires.png", + "name": "Parasect", + "nationalPokedexNumber": 47, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "xy4-2", + "imageUrl": "https://images.pokemontcg.io/xy4/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/2_hires.png", + "name": "Venomoth", + "nationalPokedexNumber": 49, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "sm10-193", + "imageUrl": "https://images.pokemontcg.io/sm10/193.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/193_hires.png", + "name": "Venomoth-GX", + "nationalPokedexNumber": 49, + "set": null, + "setCode": "sm10" + }, + { + "id": "det1-7", + "imageUrl": "https://images.pokemontcg.io/det1/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/det1/7_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Detective Pikachu", + "setCode": "det1" + }, + { + "id": "xy11-88", + "imageUrl": "https://images.pokemontcg.io/xy11/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/88_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "xy11-89", + "imageUrl": "https://images.pokemontcg.io/xy11/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/89_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "base5-42", + "imageUrl": "https://images.pokemontcg.io/base5/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/42_hires.png", + "name": "Dark Persian", + "nationalPokedexNumber": 53, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-65", + "imageUrl": "https://images.pokemontcg.io/base5/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/65_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex6-69", + "imageUrl": "https://images.pokemontcg.io/ex6/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/69_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "bw7-33", + "imageUrl": "https://images.pokemontcg.io/bw7/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/33_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "bw7-35", + "imageUrl": "https://images.pokemontcg.io/bw7/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/35_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "bw7-106", + "imageUrl": "https://images.pokemontcg.io/bw7/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/106_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "base4-80", + "imageUrl": "https://images.pokemontcg.io/base4/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/80_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": null, + "setCode": "base4" + }, + { + "id": "ex11-77", + "imageUrl": "https://images.pokemontcg.io/ex11/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/77_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "base2-55", + "imageUrl": "https://images.pokemontcg.io/base2/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/55_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": null, + "setCode": "base2" + }, + { + "id": "bw3-102", + "imageUrl": "https://images.pokemontcg.io/bw3/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw3/102_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Noble Victories", + "setCode": "bw3" + }, + { + "id": "xy10-74", + "imageUrl": "https://images.pokemontcg.io/xy10/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/74_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "base6-6", + "imageUrl": "https://images.pokemontcg.io/base6/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/6_hires.png", + "name": "Dark Persian", + "nationalPokedexNumber": 53, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex2-17", + "imageUrl": "https://images.pokemontcg.io/ex2/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/17_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "base6-43", + "imageUrl": "https://images.pokemontcg.io/base6/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/43_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "bw7-34", + "imageUrl": "https://images.pokemontcg.io/bw7/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/34_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "pl1-87", + "imageUrl": "https://images.pokemontcg.io/pl1/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/87_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "pop5-11", + "imageUrl": "https://images.pokemontcg.io/pop5/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop5/11_hires.png", + "name": "Meowth (Delta Species)", + "nationalPokedexNumber": 52, + "set": "POP Series 5", + "setCode": "pop5" + }, + { + "id": "base6-81", + "imageUrl": "https://images.pokemontcg.io/base6/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/81_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "swsh1-127", + "imageUrl": "https://images.pokemontcg.io/swsh1/127.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/127_hires.png", + "name": "Galarian Meowth", + "nationalPokedexNumber": 52, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "ex13-48", + "imageUrl": "https://images.pokemontcg.io/ex13/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/48_hires.png", + "name": "Persian δ", + "nationalPokedexNumber": 53, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex13-71", + "imageUrl": "https://images.pokemontcg.io/ex13/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/71_hires.png", + "name": "Meowth δ", + "nationalPokedexNumber": 52, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "sm11-218", + "imageUrl": "https://images.pokemontcg.io/sm11/218.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm11/218_hires.png", + "name": "Slowpoke & Psyduck-GX", + "nationalPokedexNumber": 54, + "set": null, + "setCode": "sm11" + }, + { + "id": "swsh2-126", + "imageUrl": "https://images.pokemontcg.io/swsh2/126.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/126_hires.png", + "name": "Galarian Meowth", + "nationalPokedexNumber": 52, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "sm9-71", + "imageUrl": "https://images.pokemontcg.io/sm9/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/71_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": null, + "setCode": "sm9" + }, + { + "id": "dp3-100", + "imageUrl": "https://images.pokemontcg.io/dp3/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/100_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex10-116", + "imageUrl": "https://images.pokemontcg.io/ex10/116.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/116_hires.png", + "name": "Rocket's Persian ex", + "nationalPokedexNumber": 53, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ecard1-121", + "imageUrl": "https://images.pokemontcg.io/ecard1/121.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/121_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "bw7-32", + "imageUrl": "https://images.pokemontcg.io/bw7/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/32_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "xy6-67", + "imageUrl": "https://images.pokemontcg.io/xy6/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/67_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "basep-18", + "imageUrl": "https://images.pokemontcg.io/basep/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/18_hires.png", + "name": "Team Rocket's Meowth", + "nationalPokedexNumber": 52, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "dp6-68", + "imageUrl": "https://images.pokemontcg.io/dp6/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/68_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "xy9-16", + "imageUrl": "https://images.pokemontcg.io/xy9/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/16_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy9-18", + "imageUrl": "https://images.pokemontcg.io/xy9/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/18_hires.png", + "name": "Golduck BREAK", + "nationalPokedexNumber": 55, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "sm10-147", + "imageUrl": "https://images.pokemontcg.io/sm10/147.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/147_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-148", + "imageUrl": "https://images.pokemontcg.io/sm10/148.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/148_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": null, + "setCode": "sm10" + }, + { + "id": "xy9-17", + "imageUrl": "https://images.pokemontcg.io/xy9/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/17_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "dp4-79", + "imageUrl": "https://images.pokemontcg.io/dp4/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/79_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "xy11-52", + "imageUrl": "https://images.pokemontcg.io/xy11/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/52_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "ex6-38", + "imageUrl": "https://images.pokemontcg.io/ex6/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/38_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "gym2-99", + "imageUrl": "https://images.pokemontcg.io/gym2/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/99_hires.png", + "name": "Sabrina's Psyduck", + "nationalPokedexNumber": 54, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "dp6-106", + "imageUrl": "https://images.pokemontcg.io/dp6/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/106_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "sm3-101", + "imageUrl": "https://images.pokemontcg.io/sm3/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/101_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "swsh45sv-SV086", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV086.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV086_hires.png", + "name": "Galarian Meowth", + "nationalPokedexNumber": 52, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "pl3-112", + "imageUrl": "https://images.pokemontcg.io/pl3/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/112_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base2-56", + "imageUrl": "https://images.pokemontcg.io/base2/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/56_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": null, + "setCode": "base2" + }, + { + "id": "swshp-SWSH004", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH004.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH004_hires.png", + "name": "Meowth V", + "nationalPokedexNumber": 52, + "set": null, + "setCode": "swshp" + }, + { + "id": "swshp-SWSH005", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH005.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH005_hires.png", + "name": "Meowth VMAX", + "nationalPokedexNumber": 52, + "set": null, + "setCode": "swshp" + }, + { + "id": "neo4-79", + "imageUrl": "https://images.pokemontcg.io/neo4/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/79_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex4-44", + "imageUrl": "https://images.pokemontcg.io/ex4/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/44_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "base6-88", + "imageUrl": "https://images.pokemontcg.io/base6/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/88_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm9-26", + "imageUrl": "https://images.pokemontcg.io/sm9/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/26_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-27", + "imageUrl": "https://images.pokemontcg.io/sm9/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/27_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": null, + "setCode": "sm9" + }, + { + "id": "pl3-114", + "imageUrl": "https://images.pokemontcg.io/pl3/114.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/114_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm1-29", + "imageUrl": "https://images.pokemontcg.io/sm1/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/29_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "sm4-50", + "imageUrl": "https://images.pokemontcg.io/sm4/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/50_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "basep-10", + "imageUrl": "https://images.pokemontcg.io/basep/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/10_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-17", + "imageUrl": "https://images.pokemontcg.io/basep/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/17_hires.png", + "name": "Dark Persian", + "nationalPokedexNumber": 53, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "gym2-63", + "imageUrl": "https://images.pokemontcg.io/gym2/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/63_hires.png", + "name": "Blaine's Mankey", + "nationalPokedexNumber": 56, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "hgss4-74", + "imageUrl": "https://images.pokemontcg.io/hgss4/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/74_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "bw4-81", + "imageUrl": "https://images.pokemontcg.io/bw4/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/81_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "neo4-47", + "imageUrl": "https://images.pokemontcg.io/neo4/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/47_hires.png", + "name": "Light Golduck", + "nationalPokedexNumber": 55, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex13-81", + "imageUrl": "https://images.pokemontcg.io/ex13/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/81_hires.png", + "name": "Psyduck δ", + "nationalPokedexNumber": 54, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex2-73", + "imageUrl": "https://images.pokemontcg.io/ex2/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/73_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "base3-53", + "imageUrl": "https://images.pokemontcg.io/base3/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/53_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "hgss4-22", + "imageUrl": "https://images.pokemontcg.io/hgss4/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/22_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm10-149", + "imageUrl": "https://images.pokemontcg.io/sm10/149.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/149_hires.png", + "name": "Persian-GX", + "nationalPokedexNumber": 53, + "set": null, + "setCode": "sm10" + }, + { + "id": "dp3-28", + "imageUrl": "https://images.pokemontcg.io/dp3/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/28_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "sm10-227", + "imageUrl": "https://images.pokemontcg.io/sm10/227.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/227_hires.png", + "name": "Persian-GX", + "nationalPokedexNumber": 53, + "set": null, + "setCode": "sm10" + }, + { + "id": "basep-20", + "imageUrl": "https://images.pokemontcg.io/basep/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/20_hires.png", + "name": "Psyduck", + "nationalPokedexNumber": 54, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "hgss2-53", + "imageUrl": "https://images.pokemontcg.io/hgss2/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/53_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "base2-42", + "imageUrl": "https://images.pokemontcg.io/base2/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/42_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": null, + "setCode": "base2" + }, + { + "id": "ecard3-42", + "imageUrl": "https://images.pokemontcg.io/ecard3/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/42_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "gym2-8", + "imageUrl": "https://images.pokemontcg.io/gym2/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/8_hires.png", + "name": "Giovanni's Persian", + "nationalPokedexNumber": 53, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-12", + "imageUrl": "https://images.pokemontcg.io/gym2/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/12_hires.png", + "name": "Misty's Golduck", + "nationalPokedexNumber": 55, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-30", + "imageUrl": "https://images.pokemontcg.io/gym2/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/30_hires.png", + "name": "Sabrina's Golduck", + "nationalPokedexNumber": 55, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-43", + "imageUrl": "https://images.pokemontcg.io/gym2/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/43_hires.png", + "name": "Giovanni's Meowth", + "nationalPokedexNumber": 52, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex11-50", + "imageUrl": "https://images.pokemontcg.io/ex11/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/50_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "bw9-59", + "imageUrl": "https://images.pokemontcg.io/bw9/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/59_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "ex7-46", + "imageUrl": "https://images.pokemontcg.io/ex7/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/46_hires.png", + "name": "Rocket's Meowth", + "nationalPokedexNumber": 52, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "gym2-90", + "imageUrl": "https://images.pokemontcg.io/gym2/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/90_hires.png", + "name": "Misty's Psyduck", + "nationalPokedexNumber": 54, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm12-129", + "imageUrl": "https://images.pokemontcg.io/sm12/129.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/129_hires.png", + "name": "Alolan Persian-GX", + "nationalPokedexNumber": 53, + "set": null, + "setCode": "sm12" + }, + { + "id": "base6-53", + "imageUrl": "https://images.pokemontcg.io/base6/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/53_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex6-44", + "imageUrl": "https://images.pokemontcg.io/ex6/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/44_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base5-37", + "imageUrl": "https://images.pokemontcg.io/base5/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/37_hires.png", + "name": "Dark Golduck", + "nationalPokedexNumber": 55, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "gym1-68", + "imageUrl": "https://images.pokemontcg.io/gym1/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/68_hires.png", + "name": "Brock's Mankey", + "nationalPokedexNumber": 56, + "set": null, + "setCode": "gym1" + }, + { + "id": "smp-SM43", + "imageUrl": "https://images.pokemontcg.io/smp/SM43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM43_hires.png", + "name": "Alolan Meowth", + "nationalPokedexNumber": 52, + "set": null, + "setCode": "smp" + }, + { + "id": "hgss1-27", + "imageUrl": "https://images.pokemontcg.io/hgss1/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/27_hires.png", + "name": "Persian", + "nationalPokedexNumber": 53, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "hgss1-75", + "imageUrl": "https://images.pokemontcg.io/hgss1/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/75_hires.png", + "name": "Meowth", + "nationalPokedexNumber": 52, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ecard2-50", + "imageUrl": "https://images.pokemontcg.io/ecard2/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/50_hires.png", + "name": "Golduck", + "nationalPokedexNumber": 55, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ex13-43", + "imageUrl": "https://images.pokemontcg.io/ex13/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/43_hires.png", + "name": "Golduck δ", + "nationalPokedexNumber": 55, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex13-70", + "imageUrl": "https://images.pokemontcg.io/ex13/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/70_hires.png", + "name": "Mankey δ", + "nationalPokedexNumber": 56, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "det1-6", + "imageUrl": "https://images.pokemontcg.io/det1/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/det1/6_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Detective Pikachu", + "setCode": "det1" + }, + { + "id": "base1-28", + "imageUrl": "https://images.pokemontcg.io/base1/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/28_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Base", + "setCode": "base1" + }, + { + "id": "xy11-53", + "imageUrl": "https://images.pokemontcg.io/xy11/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/53_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "ecard3-152", + "imageUrl": "https://images.pokemontcg.io/ecard3/152.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/152_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-3", + "imageUrl": "https://images.pokemontcg.io/ecard3/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/3_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "hgss2-22", + "imageUrl": "https://images.pokemontcg.io/hgss2/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/22_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "hgss2-37", + "imageUrl": "https://images.pokemontcg.io/hgss2/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/37_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "hgss2-58", + "imageUrl": "https://images.pokemontcg.io/hgss2/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/58_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex6-46", + "imageUrl": "https://images.pokemontcg.io/ex6/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/46_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm10-22", + "imageUrl": "https://images.pokemontcg.io/sm10/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/22_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex12-83", + "imageUrl": "https://images.pokemontcg.io/ex12/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/83_hires.png", + "name": "Arcanine ex", + "nationalPokedexNumber": 59, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "bw4-11", + "imageUrl": "https://images.pokemontcg.io/bw4/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/11_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "ex2-15", + "imageUrl": "https://images.pokemontcg.io/ex2/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/15_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "swsh5-67", + "imageUrl": "https://images.pokemontcg.io/swsh5/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/67_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": null, + "setCode": "swsh5" + }, + { + "id": "base6-45", + "imageUrl": "https://images.pokemontcg.io/base6/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/45_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "dp3-22", + "imageUrl": "https://images.pokemontcg.io/dp3/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/22_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "dp3-89", + "imageUrl": "https://images.pokemontcg.io/dp3/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/89_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex13-50", + "imageUrl": "https://images.pokemontcg.io/ex13/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/50_hires.png", + "name": "Primeape δ", + "nationalPokedexNumber": 57, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex2-65", + "imageUrl": "https://images.pokemontcg.io/ex2/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/65_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "pl2-1", + "imageUrl": "https://images.pokemontcg.io/pl2/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/1_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "bw9-60", + "imageUrl": "https://images.pokemontcg.io/bw9/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/60_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "pl2-63", + "imageUrl": "https://images.pokemontcg.io/pl2/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/63_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "dp6-114", + "imageUrl": "https://images.pokemontcg.io/dp6/114.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/114_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "xyp-XY180", + "imageUrl": "https://images.pokemontcg.io/xyp/XY180.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY180_hires.png", + "name": "Arcanine BREAK", + "nationalPokedexNumber": 59, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "ecard3-88", + "imageUrl": "https://images.pokemontcg.io/ecard3/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/88_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "dp6-115", + "imageUrl": "https://images.pokemontcg.io/dp6/115.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/115_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "hgss1-65", + "imageUrl": "https://images.pokemontcg.io/hgss1/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/65_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "base6-59", + "imageUrl": "https://images.pokemontcg.io/base6/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/59_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "neo4-68", + "imageUrl": "https://images.pokemontcg.io/neo4/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/68_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "sm1-21", + "imageUrl": "https://images.pokemontcg.io/sm1/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/21_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "pl3-108", + "imageUrl": "https://images.pokemontcg.io/pl3/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/108_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm1-31", + "imageUrl": "https://images.pokemontcg.io/sm1/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/31_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "xy3-16", + "imageUrl": "https://images.pokemontcg.io/xy3/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/16_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "xy12-18", + "imageUrl": "https://images.pokemontcg.io/xy12/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/18_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-24", + "imageUrl": "https://images.pokemontcg.io/xy12/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/24_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ecard3-62", + "imageUrl": "https://images.pokemontcg.io/ecard3/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/62_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "bw4-13", + "imageUrl": "https://images.pokemontcg.io/bw4/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/13_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "ex6-75", + "imageUrl": "https://images.pokemontcg.io/ex6/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/75_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "neo4-12", + "imageUrl": "https://images.pokemontcg.io/neo4/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/12_hires.png", + "name": "Light Arcanine", + "nationalPokedexNumber": 59, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex6-18", + "imageUrl": "https://images.pokemontcg.io/ex6/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/18_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "swsh2-28", + "imageUrl": "https://images.pokemontcg.io/swsh2/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/28_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "ecard1-89", + "imageUrl": "https://images.pokemontcg.io/ecard1/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/89_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy9-11", + "imageUrl": "https://images.pokemontcg.io/xy9/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/11_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "neo2-62", + "imageUrl": "https://images.pokemontcg.io/neo2/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/62_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": null, + "setCode": "neo2" + }, + { + "id": "dp4-27", + "imageUrl": "https://images.pokemontcg.io/dp4/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/27_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "base4-33", + "imageUrl": "https://images.pokemontcg.io/base4/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/33_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": null, + "setCode": "base4" + }, + { + "id": "sm1-22", + "imageUrl": "https://images.pokemontcg.io/sm1/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/22_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "ex10-67", + "imageUrl": "https://images.pokemontcg.io/ex10/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/67_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "basep-6", + "imageUrl": "https://images.pokemontcg.io/basep/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/6_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "base4-57", + "imageUrl": "https://images.pokemontcg.io/base4/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/57_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": null, + "setCode": "base4" + }, + { + "id": "base2-43", + "imageUrl": "https://images.pokemontcg.io/base2/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/43_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-28", + "imageUrl": "https://images.pokemontcg.io/ex6/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/28_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-64", + "imageUrl": "https://images.pokemontcg.io/ex6/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/64_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base5-43", + "imageUrl": "https://images.pokemontcg.io/base5/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/43_hires.png", + "name": "Dark Primeape", + "nationalPokedexNumber": 57, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex12-55", + "imageUrl": "https://images.pokemontcg.io/ex12/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/55_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "gym2-62", + "imageUrl": "https://images.pokemontcg.io/gym2/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/62_hires.png", + "name": "Blaine's Growlithe", + "nationalPokedexNumber": 58, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-89", + "imageUrl": "https://images.pokemontcg.io/gym2/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/89_hires.png", + "name": "Misty's Poliwag", + "nationalPokedexNumber": 60, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm10-21", + "imageUrl": "https://images.pokemontcg.io/sm10/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/21_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": null, + "setCode": "sm10" + }, + { + "id": "gym1-62", + "imageUrl": "https://images.pokemontcg.io/gym1/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/62_hires.png", + "name": "Blaine's Growlithe", + "nationalPokedexNumber": 58, + "set": null, + "setCode": "gym1" + }, + { + "id": "base6-36", + "imageUrl": "https://images.pokemontcg.io/base6/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/36_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "bw11-RC4", + "imageUrl": "https://images.pokemontcg.io/bw11/RC4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/RC4_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "hgss1-1", + "imageUrl": "https://images.pokemontcg.io/hgss1/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/1_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "pl3-15", + "imageUrl": "https://images.pokemontcg.io/pl3/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/15_hires.png", + "name": "Arcanine G", + "nationalPokedexNumber": 59, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "ecard2-29", + "imageUrl": "https://images.pokemontcg.io/ecard2/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/29_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base1-23", + "imageUrl": "https://images.pokemontcg.io/base1/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/23_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Base", + "setCode": "base1" + }, + { + "id": "pl3-50", + "imageUrl": "https://images.pokemontcg.io/pl3/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/50_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pl3-39", + "imageUrl": "https://images.pokemontcg.io/pl3/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/39_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "ex10-68", + "imageUrl": "https://images.pokemontcg.io/ex10/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/68_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "gym1-67", + "imageUrl": "https://images.pokemontcg.io/gym1/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/67_hires.png", + "name": "Brock's Mankey", + "nationalPokedexNumber": 56, + "set": null, + "setCode": "gym1" + }, + { + "id": "ecard2-2", + "imageUrl": "https://images.pokemontcg.io/ecard2/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/2_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-152", + "imageUrl": "https://images.pokemontcg.io/ecard2/152.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/152_hires.png", + "name": "Arcanine", + "nationalPokedexNumber": 59, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "gym1-87", + "imageUrl": "https://images.pokemontcg.io/gym1/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/87_hires.png", + "name": "Misty's Poliwag", + "nationalPokedexNumber": 60, + "set": null, + "setCode": "gym1" + }, + { + "id": "si1-18", + "imageUrl": "https://images.pokemontcg.io/si1/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/18_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "base5-61", + "imageUrl": "https://images.pokemontcg.io/base5/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/61_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ecard2-92", + "imageUrl": "https://images.pokemontcg.io/ecard2/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/92_hires.png", + "name": "Mankey", + "nationalPokedexNumber": 56, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "neo2-44", + "imageUrl": "https://images.pokemontcg.io/neo2/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/44_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": null, + "setCode": "neo2" + }, + { + "id": "base4-88", + "imageUrl": "https://images.pokemontcg.io/base4/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/88_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-42", + "imageUrl": "https://images.pokemontcg.io/base4/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/42_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": null, + "setCode": "base4" + }, + { + "id": "xy9-10", + "imageUrl": "https://images.pokemontcg.io/xy9/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/10_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "base1-38", + "imageUrl": "https://images.pokemontcg.io/base1/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/38_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": "Base", + "setCode": "base1" + }, + { + "id": "ecard2-51", + "imageUrl": "https://images.pokemontcg.io/ecard2/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/51_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-80", + "imageUrl": "https://images.pokemontcg.io/ecard2/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/80_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "swsh2-27", + "imageUrl": "https://images.pokemontcg.io/swsh2/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/27_hires.png", + "name": "Growlithe", + "nationalPokedexNumber": 58, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "xy12-23", + "imageUrl": "https://images.pokemontcg.io/xy12/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/23_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ecard3-87", + "imageUrl": "https://images.pokemontcg.io/ecard3/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/87_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm4-51", + "imageUrl": "https://images.pokemontcg.io/sm4/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/51_hires.png", + "name": "Primeape", + "nationalPokedexNumber": 57, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "sm1-30", + "imageUrl": "https://images.pokemontcg.io/sm1/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/30_hires.png", + "name": "Poliwag", + "nationalPokedexNumber": 60, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "pl2-103", + "imageUrl": "https://images.pokemontcg.io/pl2/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/103_hires.png", + "name": "Alakazam 4", + "nationalPokedexNumber": 65, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "ecard3-151", + "imageUrl": "https://images.pokemontcg.io/ecard3/151.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/151_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-2", + "imageUrl": "https://images.pokemontcg.io/ecard3/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/2_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-26", + "imageUrl": "https://images.pokemontcg.io/ecard3/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/26_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "gym2-72", + "imageUrl": "https://images.pokemontcg.io/gym2/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/72_hires.png", + "name": "Giovanni's Machop", + "nationalPokedexNumber": 66, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ecard3-69", + "imageUrl": "https://images.pokemontcg.io/ecard3/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/69_hires.png", + "name": "Kadabra", + "nationalPokedexNumber": 64, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-74", + "imageUrl": "https://images.pokemontcg.io/ecard3/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/74_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-46", + "imageUrl": "https://images.pokemontcg.io/ecard3/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/46_hires.png", + "name": "Abra", + "nationalPokedexNumber": 63, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "g1-40", + "imageUrl": "https://images.pokemontcg.io/g1/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/40_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "base5-1", + "imageUrl": "https://images.pokemontcg.io/base5/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/1_hires.png", + "name": "Dark Alakazam", + "nationalPokedexNumber": 65, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex6-11", + "imageUrl": "https://images.pokemontcg.io/ex6/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/11_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "dp2-69", + "imageUrl": "https://images.pokemontcg.io/dp2/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/69_hires.png", + "name": "Abra", + "nationalPokedexNumber": 63, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp6-35", + "imageUrl": "https://images.pokemontcg.io/dp6/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/35_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "ex5-64", + "imageUrl": "https://images.pokemontcg.io/ex5/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/64_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "ex14-99", + "imageUrl": "https://images.pokemontcg.io/ex14/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/99_hires.png", + "name": "Alakazam Star", + "nationalPokedexNumber": 65, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ecard1-93", + "imageUrl": "https://images.pokemontcg.io/ecard1/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/93_hires.png", + "name": "Abra", + "nationalPokedexNumber": 63, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "gym2-94", + "imageUrl": "https://images.pokemontcg.io/gym2/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/94_hires.png", + "name": "Sabrina's Abra", + "nationalPokedexNumber": 63, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "bw10-47", + "imageUrl": "https://images.pokemontcg.io/bw10/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/47_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "xy10-25", + "imageUrl": "https://images.pokemontcg.io/xy10/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/25_hires.png", + "name": "Alakazam-EX", + "nationalPokedexNumber": 65, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy10-117", + "imageUrl": "https://images.pokemontcg.io/xy10/117.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/117_hires.png", + "name": "Alakazam-EX", + "nationalPokedexNumber": 65, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "dp2-2", + "imageUrl": "https://images.pokemontcg.io/dp2/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/2_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "base6-1", + "imageUrl": "https://images.pokemontcg.io/base6/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/1_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex16-53", + "imageUrl": "https://images.pokemontcg.io/ex16/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/53_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "base6-49", + "imageUrl": "https://images.pokemontcg.io/base6/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/49_hires.png", + "name": "Kadabra", + "nationalPokedexNumber": 64, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "gym2-16", + "imageUrl": "https://images.pokemontcg.io/gym2/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/16_hires.png", + "name": "Sabrina's Alakazam", + "nationalPokedexNumber": 65, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "base6-79", + "imageUrl": "https://images.pokemontcg.io/base6/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/79_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "xy3-17", + "imageUrl": "https://images.pokemontcg.io/xy3/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/17_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "sm1-32", + "imageUrl": "https://images.pokemontcg.io/sm1/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/32_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "gym1-31", + "imageUrl": "https://images.pokemontcg.io/gym1/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/31_hires.png", + "name": "Misty's Poliwrath", + "nationalPokedexNumber": 62, + "set": null, + "setCode": "gym1" + }, + { + "id": "basep-19", + "imageUrl": "https://images.pokemontcg.io/basep/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/19_hires.png", + "name": "Sabrina's Abra", + "nationalPokedexNumber": 63, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "gym2-58", + "imageUrl": "https://images.pokemontcg.io/gym2/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/58_hires.png", + "name": "Sabrina's Kadabra", + "nationalPokedexNumber": 64, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "xy3-44", + "imageUrl": "https://images.pokemontcg.io/xy3/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/44_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "base6-67", + "imageUrl": "https://images.pokemontcg.io/base6/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/67_hires.png", + "name": "Abra", + "nationalPokedexNumber": 63, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "hgss4-67", + "imageUrl": "https://images.pokemontcg.io/hgss4/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/67_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ecard1-84", + "imageUrl": "https://images.pokemontcg.io/ecard1/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/84_hires.png", + "name": "Kadabra", + "nationalPokedexNumber": 64, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "dp7-64", + "imageUrl": "https://images.pokemontcg.io/dp7/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/64_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "neo4-73", + "imageUrl": "https://images.pokemontcg.io/neo4/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/73_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ecard1-60", + "imageUrl": "https://images.pokemontcg.io/ecard1/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/60_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base4-1", + "imageUrl": "https://images.pokemontcg.io/base4/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/1_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": null, + "setCode": "base4" + }, + { + "id": "hgss2-21", + "imageUrl": "https://images.pokemontcg.io/hgss2/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/21_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex12-57", + "imageUrl": "https://images.pokemontcg.io/ex12/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/57_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "swsh4-172", + "imageUrl": "https://images.pokemontcg.io/swsh4/172.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh4/172_hires.png", + "name": "Alakazam V", + "nationalPokedexNumber": 65, + "set": "Vivid Voltage", + "setCode": "swsh4" + }, + { + "id": "gym2-93", + "imageUrl": "https://images.pokemontcg.io/gym2/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/93_hires.png", + "name": "Sabrina's Abra", + "nationalPokedexNumber": 63, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "swsh35-24", + "imageUrl": "https://images.pokemontcg.io/swsh35/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh35/24_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Champion's Path", + "setCode": "swsh35" + }, + { + "id": "ex10-11", + "imageUrl": "https://images.pokemontcg.io/ex10/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/11_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "base1-43", + "imageUrl": "https://images.pokemontcg.io/base1/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/43_hires.png", + "name": "Abra", + "nationalPokedexNumber": 63, + "set": "Base", + "setCode": "base1" + }, + { + "id": "sm2-63", + "imageUrl": "https://images.pokemontcg.io/sm2/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/63_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "gym1-91", + "imageUrl": "https://images.pokemontcg.io/gym1/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/91_hires.png", + "name": "Sabrina's Abra", + "nationalPokedexNumber": 63, + "set": null, + "setCode": "gym1" + }, + { + "id": "base5-18", + "imageUrl": "https://images.pokemontcg.io/base5/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/18_hires.png", + "name": "Dark Alakazam", + "nationalPokedexNumber": 65, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-39", + "imageUrl": "https://images.pokemontcg.io/base5/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/39_hires.png", + "name": "Dark Kadabra", + "nationalPokedexNumber": 64, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-49", + "imageUrl": "https://images.pokemontcg.io/base5/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/49_hires.png", + "name": "Abra", + "nationalPokedexNumber": 63, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-59", + "imageUrl": "https://images.pokemontcg.io/base5/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/59_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "neo2-9", + "imageUrl": "https://images.pokemontcg.io/neo2/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/9_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": null, + "setCode": "neo2" + }, + { + "id": "neo2-28", + "imageUrl": "https://images.pokemontcg.io/neo2/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/28_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": null, + "setCode": "neo2" + }, + { + "id": "base1-52", + "imageUrl": "https://images.pokemontcg.io/base1/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/52_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base4-46", + "imageUrl": "https://images.pokemontcg.io/base4/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/46_hires.png", + "name": "Kadabra", + "nationalPokedexNumber": 64, + "set": null, + "setCode": "base4" + }, + { + "id": "base1-1", + "imageUrl": "https://images.pokemontcg.io/base1/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/1_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base1-13", + "imageUrl": "https://images.pokemontcg.io/base1/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/13_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base1-32", + "imageUrl": "https://images.pokemontcg.io/base1/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/32_hires.png", + "name": "Kadabra", + "nationalPokedexNumber": 64, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base4-78", + "imageUrl": "https://images.pokemontcg.io/base4/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/78_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": null, + "setCode": "base4" + }, + { + "id": "ecard3-174", + "imageUrl": "https://images.pokemontcg.io/ecard3/174.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/174_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "base4-15", + "imageUrl": "https://images.pokemontcg.io/base4/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/15_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-65", + "imageUrl": "https://images.pokemontcg.io/base4/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/65_hires.png", + "name": "Abra", + "nationalPokedexNumber": 63, + "set": null, + "setCode": "base4" + }, + { + "id": "dp1-86", + "imageUrl": "https://images.pokemontcg.io/dp1/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/86_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "sm2-62", + "imageUrl": "https://images.pokemontcg.io/sm2/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/62_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "xy12-25", + "imageUrl": "https://images.pokemontcg.io/xy12/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/25_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-57", + "imageUrl": "https://images.pokemontcg.io/xy12/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/57_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ecard1-1", + "imageUrl": "https://images.pokemontcg.io/ecard1/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/1_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-24", + "imageUrl": "https://images.pokemontcg.io/ecard1/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/24_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-33", + "imageUrl": "https://images.pokemontcg.io/ecard1/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/33_hires.png", + "name": "Alakazam", + "nationalPokedexNumber": 65, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-117", + "imageUrl": "https://images.pokemontcg.io/ecard1/117.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/117_hires.png", + "name": "Machop", + "nationalPokedexNumber": 66, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy10-26", + "imageUrl": "https://images.pokemontcg.io/xy10/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/26_hires.png", + "name": "M Alakazam-EX", + "nationalPokedexNumber": 65, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy10-118", + "imageUrl": "https://images.pokemontcg.io/xy10/118.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/118_hires.png", + "name": "M Alakazam-EX", + "nationalPokedexNumber": 65, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy10-125", + "imageUrl": "https://images.pokemontcg.io/xy10/125.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/125_hires.png", + "name": "Alakazam-EX", + "nationalPokedexNumber": 65, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "gym1-53", + "imageUrl": "https://images.pokemontcg.io/gym1/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/53_hires.png", + "name": "Misty's Poliwhirl", + "nationalPokedexNumber": 61, + "set": null, + "setCode": "gym1" + }, + { + "id": "pl2-38", + "imageUrl": "https://images.pokemontcg.io/pl2/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/38_hires.png", + "name": "Alakazam 4", + "nationalPokedexNumber": 65, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "sm10-38", + "imageUrl": "https://images.pokemontcg.io/sm10/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/38_hires.png", + "name": "Poliwhirl", + "nationalPokedexNumber": 61, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-39", + "imageUrl": "https://images.pokemontcg.io/sm10/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/39_hires.png", + "name": "Poliwrath", + "nationalPokedexNumber": 62, + "set": null, + "setCode": "sm10" + }, + { + "id": "swshp-SWSH083", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH083.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH083_hires.png", + "name": "Alakazam V", + "nationalPokedexNumber": 65, + "set": null, + "setCode": "swshp" + }, + { + "id": "swsh35-25", + "imageUrl": "https://images.pokemontcg.io/swsh35/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh35/25_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Champion's Path", + "setCode": "swsh35" + }, + { + "id": "dp1-53", + "imageUrl": "https://images.pokemontcg.io/dp1/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/53_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "g1-41", + "imageUrl": "https://images.pokemontcg.io/g1/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/41_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "base5-27", + "imageUrl": "https://images.pokemontcg.io/base5/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/27_hires.png", + "name": "Dark Machamp", + "nationalPokedexNumber": 68, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-40", + "imageUrl": "https://images.pokemontcg.io/base5/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/40_hires.png", + "name": "Dark Machoke", + "nationalPokedexNumber": 67, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "hgss4-95", + "imageUrl": "https://images.pokemontcg.io/hgss4/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/95_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex6-17", + "imageUrl": "https://images.pokemontcg.io/ex6/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/17_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "dp7-20", + "imageUrl": "https://images.pokemontcg.io/dp7/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/20_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "dp7-41", + "imageUrl": "https://images.pokemontcg.io/dp7/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/41_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "ex12-9", + "imageUrl": "https://images.pokemontcg.io/ex12/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/9_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-13", + "imageUrl": "https://images.pokemontcg.io/ex12/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/13_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "sm10-82", + "imageUrl": "https://images.pokemontcg.io/sm10/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/82_hires.png", + "name": "Marshadow & Machamp-GX", + "nationalPokedexNumber": 68, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex12-47", + "imageUrl": "https://images.pokemontcg.io/ex12/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/47_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-49", + "imageUrl": "https://images.pokemontcg.io/ex12/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/49_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "swsh5-1", + "imageUrl": "https://images.pokemontcg.io/swsh5/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/1_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": null, + "setCode": "swsh5" + }, + { + "id": "swsh5-2", + "imageUrl": "https://images.pokemontcg.io/swsh5/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/2_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": null, + "setCode": "swsh5" + }, + { + "id": "base6-15", + "imageUrl": "https://images.pokemontcg.io/base6/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/15_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-51", + "imageUrl": "https://images.pokemontcg.io/base6/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/51_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard1-51", + "imageUrl": "https://images.pokemontcg.io/ecard1/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/51_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base2-49", + "imageUrl": "https://images.pokemontcg.io/base2/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/49_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": null, + "setCode": "base2" + }, + { + "id": "sm10-13", + "imageUrl": "https://images.pokemontcg.io/sm10/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/13_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": null, + "setCode": "sm10" + }, + { + "id": "bw10-48", + "imageUrl": "https://images.pokemontcg.io/bw10/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/48_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "bw10-49", + "imageUrl": "https://images.pokemontcg.io/bw10/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/49_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "bw10-50", + "imageUrl": "https://images.pokemontcg.io/bw10/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/50_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "dp6-127", + "imageUrl": "https://images.pokemontcg.io/dp6/127.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/127_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "ecard3-165", + "imageUrl": "https://images.pokemontcg.io/ecard3/165.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/165_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-38", + "imageUrl": "https://images.pokemontcg.io/ecard3/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/38_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "dp6-85", + "imageUrl": "https://images.pokemontcg.io/dp6/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/85_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "sm3-64", + "imageUrl": "https://images.pokemontcg.io/sm3/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/64_hires.png", + "name": "Machamp-GX", + "nationalPokedexNumber": 68, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "dp6-44", + "imageUrl": "https://images.pokemontcg.io/dp6/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/44_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "sm3-154", + "imageUrl": "https://images.pokemontcg.io/sm3/154.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/154_hires.png", + "name": "Machamp-GX", + "nationalPokedexNumber": 68, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "sm7-3", + "imageUrl": "https://images.pokemontcg.io/sm7/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/3_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "dp7-98", + "imageUrl": "https://images.pokemontcg.io/dp7/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/98_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "xy12-59", + "imageUrl": "https://images.pokemontcg.io/xy12/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/59_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy3-2", + "imageUrl": "https://images.pokemontcg.io/xy3/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/2_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "xy3-45", + "imageUrl": "https://images.pokemontcg.io/xy3/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/45_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "sm2-1", + "imageUrl": "https://images.pokemontcg.io/sm2/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/1_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "xy12-58", + "imageUrl": "https://images.pokemontcg.io/xy12/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/58_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-60", + "imageUrl": "https://images.pokemontcg.io/xy12/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/60_hires.png", + "name": "Machamp BREAK", + "nationalPokedexNumber": 68, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "basep-43", + "imageUrl": "https://images.pokemontcg.io/basep/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/43_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "xy3-46", + "imageUrl": "https://images.pokemontcg.io/xy3/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/46_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "sm2-65", + "imageUrl": "https://images.pokemontcg.io/sm2/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/65_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "hgss4-40", + "imageUrl": "https://images.pokemontcg.io/hgss4/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/40_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "hgss4-53", + "imageUrl": "https://images.pokemontcg.io/hgss4/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/53_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "neo4-25", + "imageUrl": "https://images.pokemontcg.io/neo4/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/25_hires.png", + "name": "Light Machamp", + "nationalPokedexNumber": 68, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "xy7-90", + "imageUrl": "https://images.pokemontcg.io/xy7/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy7/90_hires.png", + "name": "Machamp-EX", + "nationalPokedexNumber": 68, + "set": "Ancient Origins", + "setCode": "xy7" + }, + { + "id": "ex6-51", + "imageUrl": "https://images.pokemontcg.io/ex6/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/51_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-53", + "imageUrl": "https://images.pokemontcg.io/ex6/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/53_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm10-14", + "imageUrl": "https://images.pokemontcg.io/sm10/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/14_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": null, + "setCode": "sm10" + }, + { + "id": "ecard1-85", + "imageUrl": "https://images.pokemontcg.io/ecard1/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/85_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "hgss4-57", + "imageUrl": "https://images.pokemontcg.io/hgss4/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/57_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm10-15", + "imageUrl": "https://images.pokemontcg.io/sm10/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/15_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": null, + "setCode": "sm10" + }, + { + "id": "base4-64", + "imageUrl": "https://images.pokemontcg.io/base4/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/64_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": null, + "setCode": "base4" + }, + { + "id": "hgss4-12", + "imageUrl": "https://images.pokemontcg.io/hgss4/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/12_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "base2-14", + "imageUrl": "https://images.pokemontcg.io/base2/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/14_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": null, + "setCode": "base2" + }, + { + "id": "sm2-64", + "imageUrl": "https://images.pokemontcg.io/sm2/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/64_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "base2-30", + "imageUrl": "https://images.pokemontcg.io/base2/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/30_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-48", + "imageUrl": "https://images.pokemontcg.io/base2/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/48_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": null, + "setCode": "base2" + }, + { + "id": "xy3-1", + "imageUrl": "https://images.pokemontcg.io/xy3/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/1_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "xy3-3", + "imageUrl": "https://images.pokemontcg.io/xy3/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/3_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "gym2-6", + "imageUrl": "https://images.pokemontcg.io/gym2/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/6_hires.png", + "name": "Giovanni's Machamp", + "nationalPokedexNumber": 68, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex16-11", + "imageUrl": "https://images.pokemontcg.io/ex16/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/11_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "ex16-33", + "imageUrl": "https://images.pokemontcg.io/ex16/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/33_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "gym2-38", + "imageUrl": "https://images.pokemontcg.io/gym2/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/38_hires.png", + "name": "Erika's Bellsprout", + "nationalPokedexNumber": 69, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex12-39", + "imageUrl": "https://images.pokemontcg.io/ex12/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/39_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ecard2-180", + "imageUrl": "https://images.pokemontcg.io/ecard2/180.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/180_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base5-10", + "imageUrl": "https://images.pokemontcg.io/base5/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/10_hires.png", + "name": "Dark Machamp", + "nationalPokedexNumber": 68, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base4-66", + "imageUrl": "https://images.pokemontcg.io/base4/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/66_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": null, + "setCode": "base4" + }, + { + "id": "gym1-75", + "imageUrl": "https://images.pokemontcg.io/gym1/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/75_hires.png", + "name": "Erika's Bellsprout", + "nationalPokedexNumber": 69, + "set": null, + "setCode": "gym1" + }, + { + "id": "neo4-49", + "imageUrl": "https://images.pokemontcg.io/neo4/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/49_hires.png", + "name": "Light Machoke", + "nationalPokedexNumber": 67, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex5-9", + "imageUrl": "https://images.pokemontcg.io/ex5/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/9_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "ex5-41", + "imageUrl": "https://images.pokemontcg.io/ex5/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/41_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "sm10-221", + "imageUrl": "https://images.pokemontcg.io/sm10/221.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/221_hires.png", + "name": "Marshadow & Machamp-GX", + "nationalPokedexNumber": 68, + "set": null, + "setCode": "sm10" + }, + { + "id": "hgss4-26", + "imageUrl": "https://images.pokemontcg.io/hgss4/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/26_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm2-2", + "imageUrl": "https://images.pokemontcg.io/sm2/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/2_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "swshp-SWSH053", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH053.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH053_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": null, + "setCode": "swshp" + }, + { + "id": "gym1-76", + "imageUrl": "https://images.pokemontcg.io/gym1/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/76_hires.png", + "name": "Erika's Bellsprout", + "nationalPokedexNumber": 69, + "set": null, + "setCode": "gym1" + }, + { + "id": "sm7-1", + "imageUrl": "https://images.pokemontcg.io/sm7/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/1_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "ecard2-68", + "imageUrl": "https://images.pokemontcg.io/ecard2/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/68_hires.png", + "name": "Bellsprout", + "nationalPokedexNumber": 69, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "sm7-2", + "imageUrl": "https://images.pokemontcg.io/sm7/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/2_hires.png", + "name": "Weepinbell", + "nationalPokedexNumber": 70, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "swsh35-26", + "imageUrl": "https://images.pokemontcg.io/swsh35/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh35/26_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Champion's Path", + "setCode": "swsh35" + }, + { + "id": "sm2-3", + "imageUrl": "https://images.pokemontcg.io/sm2/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/3_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "det1-13", + "imageUrl": "https://images.pokemontcg.io/det1/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/det1/13_hires.png", + "name": "Machamp", + "nationalPokedexNumber": 68, + "set": "Detective Pikachu", + "setCode": "det1" + }, + { + "id": "base1-34", + "imageUrl": "https://images.pokemontcg.io/base1/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/34_hires.png", + "name": "Machoke", + "nationalPokedexNumber": 67, + "set": "Base", + "setCode": "base1" + }, + { + "id": "ex3-30", + "imageUrl": "https://images.pokemontcg.io/ex3/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/30_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "pl4-65", + "imageUrl": "https://images.pokemontcg.io/pl4/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/65_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "sm10-88", + "imageUrl": "https://images.pokemontcg.io/sm10/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/88_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex12-53", + "imageUrl": "https://images.pokemontcg.io/ex12/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/53_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "base6-44", + "imageUrl": "https://images.pokemontcg.io/base6/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/44_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-77", + "imageUrl": "https://images.pokemontcg.io/base6/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/77_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm9-60", + "imageUrl": "https://images.pokemontcg.io/sm9/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/60_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": null, + "setCode": "sm9" + }, + { + "id": "ecard1-110", + "imageUrl": "https://images.pokemontcg.io/ecard1/110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/110_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy2-45", + "imageUrl": "https://images.pokemontcg.io/xy2/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/45_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "xy2-46", + "imageUrl": "https://images.pokemontcg.io/xy2/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/46_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "sm10-41", + "imageUrl": "https://images.pokemontcg.io/sm10/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/41_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": null, + "setCode": "sm10" + }, + { + "id": "dp6-75", + "imageUrl": "https://images.pokemontcg.io/dp6/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/75_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "base3-36", + "imageUrl": "https://images.pokemontcg.io/base3/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/36_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "base3-47", + "imageUrl": "https://images.pokemontcg.io/base3/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/47_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "dp6-125", + "imageUrl": "https://images.pokemontcg.io/dp6/125.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/125_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp2-84", + "imageUrl": "https://images.pokemontcg.io/dp2/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/84_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "base6-66", + "imageUrl": "https://images.pokemontcg.io/base6/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/66_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex3-55", + "imageUrl": "https://images.pokemontcg.io/ex3/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/55_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex3-56", + "imageUrl": "https://images.pokemontcg.io/ex3/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/56_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "xy2-47", + "imageUrl": "https://images.pokemontcg.io/xy2/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/47_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "sm4-34", + "imageUrl": "https://images.pokemontcg.io/sm4/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/34_hires.png", + "name": "Alolan Golem-GX", + "nationalPokedexNumber": 76, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "base3-44", + "imageUrl": "https://images.pokemontcg.io/base3/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/44_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "pl3-105", + "imageUrl": "https://images.pokemontcg.io/pl3/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/105_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm9-35", + "imageUrl": "https://images.pokemontcg.io/sm9/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/35_hires.png", + "name": "Alolan Geodude", + "nationalPokedexNumber": 74, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-61", + "imageUrl": "https://images.pokemontcg.io/sm9/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/61_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm4-113", + "imageUrl": "https://images.pokemontcg.io/sm4/113.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/113_hires.png", + "name": "Alolan Golem-GX", + "nationalPokedexNumber": 76, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "neo3-44", + "imageUrl": "https://images.pokemontcg.io/neo3/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/44_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "sm2-40", + "imageUrl": "https://images.pokemontcg.io/sm2/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/40_hires.png", + "name": "Alolan Geodude", + "nationalPokedexNumber": 74, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "sm2-42", + "imageUrl": "https://images.pokemontcg.io/sm2/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/42_hires.png", + "name": "Alolan Golem", + "nationalPokedexNumber": 76, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "ex5-51", + "imageUrl": "https://images.pokemontcg.io/ex5/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/51_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "g1-43", + "imageUrl": "https://images.pokemontcg.io/g1/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/43_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "g1-44", + "imageUrl": "https://images.pokemontcg.io/g1/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/44_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "g1-46", + "imageUrl": "https://images.pokemontcg.io/g1/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/46_hires.png", + "name": "Golem-EX", + "nationalPokedexNumber": 76, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "g1-45", + "imageUrl": "https://images.pokemontcg.io/g1/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/45_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "sm10-40", + "imageUrl": "https://images.pokemontcg.io/sm10/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/40_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": null, + "setCode": "sm10" + }, + { + "id": "base6-24", + "imageUrl": "https://images.pokemontcg.io/base6/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/24_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "hgss4-50", + "imageUrl": "https://images.pokemontcg.io/hgss4/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/50_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "dp3-29", + "imageUrl": "https://images.pokemontcg.io/dp3/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/29_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex3-5", + "imageUrl": "https://images.pokemontcg.io/ex3/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/5_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex3-29", + "imageUrl": "https://images.pokemontcg.io/ex3/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/29_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex3-91", + "imageUrl": "https://images.pokemontcg.io/ex3/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/91_hires.png", + "name": "Golem ex", + "nationalPokedexNumber": 76, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "hgss4-80", + "imageUrl": "https://images.pokemontcg.io/hgss4/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/80_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm2-41", + "imageUrl": "https://images.pokemontcg.io/sm2/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/41_hires.png", + "name": "Alolan Graveler", + "nationalPokedexNumber": 75, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "ex12-45", + "imageUrl": "https://images.pokemontcg.io/ex12/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/45_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-66", + "imageUrl": "https://images.pokemontcg.io/ex12/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/66_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "gym2-34", + "imageUrl": "https://images.pokemontcg.io/gym2/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/34_hires.png", + "name": "Brock's Graveler", + "nationalPokedexNumber": 75, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-68", + "imageUrl": "https://images.pokemontcg.io/gym2/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/68_hires.png", + "name": "Brock's Geodude", + "nationalPokedexNumber": 74, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex12-6", + "imageUrl": "https://images.pokemontcg.io/ex12/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/6_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-34", + "imageUrl": "https://images.pokemontcg.io/ex12/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/34_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "gym1-40", + "imageUrl": "https://images.pokemontcg.io/gym1/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/40_hires.png", + "name": "Brock's Graveler", + "nationalPokedexNumber": 75, + "set": null, + "setCode": "gym1" + }, + { + "id": "base6-96", + "imageUrl": "https://images.pokemontcg.io/base6/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/96_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm10-87", + "imageUrl": "https://images.pokemontcg.io/sm10/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/87_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-89", + "imageUrl": "https://images.pokemontcg.io/sm10/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/89_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex5-77", + "imageUrl": "https://images.pokemontcg.io/ex5/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/77_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "sm2-23", + "imageUrl": "https://images.pokemontcg.io/sm2/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/23_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "dp2-51", + "imageUrl": "https://images.pokemontcg.io/dp2/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/51_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "pl4-37", + "imageUrl": "https://images.pokemontcg.io/pl4/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/37_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "sm115-33", + "imageUrl": "https://images.pokemontcg.io/sm115/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/33_hires.png", + "name": "Geodude", + "nationalPokedexNumber": 74, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-35", + "imageUrl": "https://images.pokemontcg.io/sm115/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/35_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-34", + "imageUrl": "https://images.pokemontcg.io/sm115/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/34_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": null, + "setCode": "sm115" + }, + { + "id": "gym1-38", + "imageUrl": "https://images.pokemontcg.io/gym1/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/38_hires.png", + "name": "Brock's Geodude", + "nationalPokedexNumber": 74, + "set": null, + "setCode": "gym1" + }, + { + "id": "xy5-71", + "imageUrl": "https://images.pokemontcg.io/xy5/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/71_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "xy5-72", + "imageUrl": "https://images.pokemontcg.io/xy5/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/72_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "gym1-57", + "imageUrl": "https://images.pokemontcg.io/gym1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/57_hires.png", + "name": "Misty's Tentacool", + "nationalPokedexNumber": 72, + "set": null, + "setCode": "gym1" + }, + { + "id": "si1-10", + "imageUrl": "https://images.pokemontcg.io/si1/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/10_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "ecard2-176", + "imageUrl": "https://images.pokemontcg.io/ecard2/176.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/176_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "pl4-19", + "imageUrl": "https://images.pokemontcg.io/pl4/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/19_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "sm4-32", + "imageUrl": "https://images.pokemontcg.io/sm4/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/32_hires.png", + "name": "Alolan Geodude", + "nationalPokedexNumber": 74, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "sm4-33", + "imageUrl": "https://images.pokemontcg.io/sm4/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/33_hires.png", + "name": "Alolan Graveler", + "nationalPokedexNumber": 75, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "sm4-102", + "imageUrl": "https://images.pokemontcg.io/sm4/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/102_hires.png", + "name": "Alolan Golem-GX", + "nationalPokedexNumber": 76, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "base4-32", + "imageUrl": "https://images.pokemontcg.io/base4/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/32_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": null, + "setCode": "base4" + }, + { + "id": "sm9-34", + "imageUrl": "https://images.pokemontcg.io/sm9/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/34_hires.png", + "name": "Alolan Geodude", + "nationalPokedexNumber": 74, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-36", + "imageUrl": "https://images.pokemontcg.io/sm9/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/36_hires.png", + "name": "Alolan Graveler", + "nationalPokedexNumber": 75, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-37", + "imageUrl": "https://images.pokemontcg.io/sm9/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/37_hires.png", + "name": "Alolan Golem", + "nationalPokedexNumber": 76, + "set": null, + "setCode": "sm9" + }, + { + "id": "ecard2-42", + "imageUrl": "https://images.pokemontcg.io/ecard2/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/42_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-38", + "imageUrl": "https://images.pokemontcg.io/ecard2/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/38_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-113", + "imageUrl": "https://images.pokemontcg.io/ecard2/113.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/113_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard3-148", + "imageUrl": "https://images.pokemontcg.io/ecard3/148.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/148_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm2-24", + "imageUrl": "https://images.pokemontcg.io/sm2/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm2/24_hires.png", + "name": "Tentacruel", + "nationalPokedexNumber": 73, + "set": "Guardians Rising", + "setCode": "sm2" + }, + { + "id": "swsh5-3", + "imageUrl": "https://images.pokemontcg.io/swsh5/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/3_hires.png", + "name": "Victreebel", + "nationalPokedexNumber": 71, + "set": null, + "setCode": "swsh5" + }, + { + "id": "ecard1-14", + "imageUrl": "https://images.pokemontcg.io/ecard1/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/14_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-49", + "imageUrl": "https://images.pokemontcg.io/ecard1/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/49_hires.png", + "name": "Golem", + "nationalPokedexNumber": 76, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy5-70", + "imageUrl": "https://images.pokemontcg.io/xy5/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/70_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "ecard1-79", + "imageUrl": "https://images.pokemontcg.io/ecard1/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/79_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base3-37", + "imageUrl": "https://images.pokemontcg.io/base3/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/37_hires.png", + "name": "Graveler", + "nationalPokedexNumber": 75, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "base3-56", + "imageUrl": "https://images.pokemontcg.io/base3/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/56_hires.png", + "name": "Tentacool", + "nationalPokedexNumber": 72, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "gym1-10", + "imageUrl": "https://images.pokemontcg.io/gym1/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/10_hires.png", + "name": "Misty's Tentacruel", + "nationalPokedexNumber": 73, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-20", + "imageUrl": "https://images.pokemontcg.io/gym1/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/20_hires.png", + "name": "Brock's Golem", + "nationalPokedexNumber": 76, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-26", + "imageUrl": "https://images.pokemontcg.io/gym1/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/26_hires.png", + "name": "Erika's Victreebel", + "nationalPokedexNumber": 71, + "set": null, + "setCode": "gym1" + }, + { + "id": "base5-60", + "imageUrl": "https://images.pokemontcg.io/base5/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/60_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex16-54", + "imageUrl": "https://images.pokemontcg.io/ex16/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/54_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "ex11-52", + "imageUrl": "https://images.pokemontcg.io/ex11/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/52_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "hgss3-38", + "imageUrl": "https://images.pokemontcg.io/hgss3/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/38_hires.png", + "name": "Slowbro", + "nationalPokedexNumber": 80, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "dp1-94", + "imageUrl": "https://images.pokemontcg.io/dp1/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/94_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "gym2-64", + "imageUrl": "https://images.pokemontcg.io/gym2/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/64_hires.png", + "name": "Blaine's Ponyta", + "nationalPokedexNumber": 77, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "col1-70", + "imageUrl": "https://images.pokemontcg.io/col1/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/70_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "bw8-42", + "imageUrl": "https://images.pokemontcg.io/bw8/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/42_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "bw8-43", + "imageUrl": "https://images.pokemontcg.io/bw8/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/43_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "hgss4-68", + "imageUrl": "https://images.pokemontcg.io/hgss4/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/68_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "hgss4-72", + "imageUrl": "https://images.pokemontcg.io/hgss4/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/72_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "gym1-80", + "imageUrl": "https://images.pokemontcg.io/gym1/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/80_hires.png", + "name": "Lt. Surge's Magnemite", + "nationalPokedexNumber": 81, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex6-80", + "imageUrl": "https://images.pokemontcg.io/ex6/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/80_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "swsh6-167", + "imageUrl": "https://images.pokemontcg.io/swsh6/167.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/167_hires.png", + "name": "Galarian Rapidash V", + "nationalPokedexNumber": 78, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-168", + "imageUrl": "https://images.pokemontcg.io/swsh6/168.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/168_hires.png", + "name": "Galarian Rapidash V", + "nationalPokedexNumber": 78, + "set": null, + "setCode": "swsh6" + }, + { + "id": "xy2-14", + "imageUrl": "https://images.pokemontcg.io/xy2/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/14_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "swsh45sv-SV047", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV047.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV047_hires.png", + "name": "Galarian Ponyta", + "nationalPokedexNumber": 77, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "dp7-71", + "imageUrl": "https://images.pokemontcg.io/dp7/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/71_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "dp1-59", + "imageUrl": "https://images.pokemontcg.io/dp1/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/59_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "ex3-61", + "imageUrl": "https://images.pokemontcg.io/ex3/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/61_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ecard1-62", + "imageUrl": "https://images.pokemontcg.io/ecard1/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/62_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex7-66", + "imageUrl": "https://images.pokemontcg.io/ex7/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/66_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "swsh5-92", + "imageUrl": "https://images.pokemontcg.io/swsh5/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/92_hires.png", + "name": "Galarian Slowbro", + "nationalPokedexNumber": 80, + "set": null, + "setCode": "swsh5" + }, + { + "id": "swsh1-82", + "imageUrl": "https://images.pokemontcg.io/swsh1/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/82_hires.png", + "name": "Galarian Rapidash", + "nationalPokedexNumber": 78, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "gym1-95", + "imageUrl": "https://images.pokemontcg.io/gym1/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/95_hires.png", + "name": "Sabrina's Slowpoke", + "nationalPokedexNumber": 79, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex10-72", + "imageUrl": "https://images.pokemontcg.io/ex10/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/72_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ecard1-126", + "imageUrl": "https://images.pokemontcg.io/ecard1/126.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/126_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy9-19", + "imageUrl": "https://images.pokemontcg.io/xy9/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/19_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy9-20", + "imageUrl": "https://images.pokemontcg.io/xy9/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/20_hires.png", + "name": "Slowbro", + "nationalPokedexNumber": 80, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "ecard3-76", + "imageUrl": "https://images.pokemontcg.io/ecard3/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/76_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "xy8-52", + "imageUrl": "https://images.pokemontcg.io/xy8/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/52_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "dp7-22", + "imageUrl": "https://images.pokemontcg.io/dp7/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/22_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "swsh45sv-SV048", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV048.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV048_hires.png", + "name": "Galarian Rapidash", + "nationalPokedexNumber": 78, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "dp7-67", + "imageUrl": "https://images.pokemontcg.io/dp7/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/67_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "ex3-62", + "imageUrl": "https://images.pokemontcg.io/ex3/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/62_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "xy2-15", + "imageUrl": "https://images.pokemontcg.io/xy2/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/15_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "base6-8", + "imageUrl": "https://images.pokemontcg.io/base6/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/8_hires.png", + "name": "Dark Slowbro", + "nationalPokedexNumber": 80, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "gym2-33", + "imageUrl": "https://images.pokemontcg.io/gym2/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/33_hires.png", + "name": "Blaine's Rapidash", + "nationalPokedexNumber": 78, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "neo2-26", + "imageUrl": "https://images.pokemontcg.io/neo2/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/26_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": null, + "setCode": "neo2" + }, + { + "id": "sm9-17", + "imageUrl": "https://images.pokemontcg.io/sm9/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/17_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-18", + "imageUrl": "https://images.pokemontcg.io/sm9/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/18_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": null, + "setCode": "sm9" + }, + { + "id": "pl3-111", + "imageUrl": "https://images.pokemontcg.io/pl3/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/111_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "swsh3-99", + "imageUrl": "https://images.pokemontcg.io/swsh3/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/99_hires.png", + "name": "Galarian Slowbro V", + "nationalPokedexNumber": 80, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "base3-55", + "imageUrl": "https://images.pokemontcg.io/base3/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/55_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "neo1-73", + "imageUrl": "https://images.pokemontcg.io/neo1/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/73_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "gym1-50", + "imageUrl": "https://images.pokemontcg.io/gym1/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/50_hires.png", + "name": "Lt. Surge's Magnemite", + "nationalPokedexNumber": 81, + "set": null, + "setCode": "gym1" + }, + { + "id": "ecard2-52", + "imageUrl": "https://images.pokemontcg.io/ecard2/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/52_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "xy12-26", + "imageUrl": "https://images.pokemontcg.io/xy12/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/26_hires.png", + "name": "Slowbro-EX", + "nationalPokedexNumber": 80, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-37", + "imageUrl": "https://images.pokemontcg.io/xy12/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/37_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "base6-80", + "imageUrl": "https://images.pokemontcg.io/base6/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/80_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "g1-15", + "imageUrl": "https://images.pokemontcg.io/g1/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/15_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "dp1-87", + "imageUrl": "https://images.pokemontcg.io/dp1/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/87_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "g1-32", + "imageUrl": "https://images.pokemontcg.io/g1/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/32_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "pl2-47", + "imageUrl": "https://images.pokemontcg.io/pl2/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/47_hires.png", + "name": "Rapidash 4", + "nationalPokedexNumber": 78, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "neo4-51", + "imageUrl": "https://images.pokemontcg.io/neo4/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/51_hires.png", + "name": "Light Slowbro", + "nationalPokedexNumber": 80, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "dp7-66", + "imageUrl": "https://images.pokemontcg.io/dp7/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/66_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "bw5-24", + "imageUrl": "https://images.pokemontcg.io/bw5/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/24_hires.png", + "name": "Slowbro", + "nationalPokedexNumber": 80, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "hgss4-8", + "imageUrl": "https://images.pokemontcg.io/hgss4/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/8_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "xy12-19", + "imageUrl": "https://images.pokemontcg.io/xy12/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/19_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm10-42", + "imageUrl": "https://images.pokemontcg.io/sm10/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/42_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm5-81", + "imageUrl": "https://images.pokemontcg.io/sm5/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm5/81_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Ultra Prism", + "setCode": "sm5" + }, + { + "id": "ex11-74", + "imageUrl": "https://images.pokemontcg.io/ex11/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/74_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "bw5-23", + "imageUrl": "https://images.pokemontcg.io/bw5/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/23_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "dp4-54", + "imageUrl": "https://images.pokemontcg.io/dp4/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/54_hires.png", + "name": "Slowbro", + "nationalPokedexNumber": 80, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "hgss1-52", + "imageUrl": "https://images.pokemontcg.io/hgss1/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/52_hires.png", + "name": "Slowbro", + "nationalPokedexNumber": 80, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "hgss3-66", + "imageUrl": "https://images.pokemontcg.io/hgss3/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/66_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "pl4-28", + "imageUrl": "https://images.pokemontcg.io/pl4/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/28_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "dp4-82", + "imageUrl": "https://images.pokemontcg.io/dp4/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/82_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "ex3-63", + "imageUrl": "https://images.pokemontcg.io/ex3/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/63_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex4-45", + "imageUrl": "https://images.pokemontcg.io/ex4/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/45_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "ex6-13", + "imageUrl": "https://images.pokemontcg.io/ex6/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/13_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex11-78", + "imageUrl": "https://images.pokemontcg.io/ex11/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/78_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex6-76", + "imageUrl": "https://images.pokemontcg.io/ex6/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/76_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm12-24", + "imageUrl": "https://images.pokemontcg.io/sm12/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/24_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": null, + "setCode": "sm12" + }, + { + "id": "pl4-47", + "imageUrl": "https://images.pokemontcg.io/pl4/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/47_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "ex11-70", + "imageUrl": "https://images.pokemontcg.io/ex11/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/70_hires.png", + "name": "Holon's Magnemite", + "nationalPokedexNumber": 81, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex12-59", + "imageUrl": "https://images.pokemontcg.io/ex12/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/59_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "base5-12", + "imageUrl": "https://images.pokemontcg.io/base5/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/12_hires.png", + "name": "Dark Slowbro", + "nationalPokedexNumber": 80, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex6-14", + "imageUrl": "https://images.pokemontcg.io/ex6/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/14_hires.png", + "name": "Slowbro", + "nationalPokedexNumber": 80, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-68", + "imageUrl": "https://images.pokemontcg.io/ex6/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/68_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy11-17", + "imageUrl": "https://images.pokemontcg.io/xy11/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy11/17_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Steam Siege", + "setCode": "xy11" + }, + { + "id": "base2-44", + "imageUrl": "https://images.pokemontcg.io/base2/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/44_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": null, + "setCode": "base2" + }, + { + "id": "swsh6-54", + "imageUrl": "https://images.pokemontcg.io/swsh6/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/54_hires.png", + "name": "Galarian Slowpoke", + "nationalPokedexNumber": 79, + "set": null, + "setCode": "swsh6" + }, + { + "id": "base6-93", + "imageUrl": "https://images.pokemontcg.io/base6/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/93_hires.png", + "name": "Slowpoke", + "nationalPokedexNumber": 79, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-60", + "imageUrl": "https://images.pokemontcg.io/base6/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/60_hires.png", + "name": "Rapidash", + "nationalPokedexNumber": 78, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-87", + "imageUrl": "https://images.pokemontcg.io/base6/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/87_hires.png", + "name": "Ponyta", + "nationalPokedexNumber": 77, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm12-242", + "imageUrl": "https://images.pokemontcg.io/sm12/242.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/242_hires.png", + "name": "Magnemite", + "nationalPokedexNumber": 81, + "set": null, + "setCode": "sm12" + }, + { + "id": "gym1-63", + "imageUrl": "https://images.pokemontcg.io/gym1/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/63_hires.png", + "name": "Blaine's Ponyta", + "nationalPokedexNumber": 77, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex16-16", + "imageUrl": "https://images.pokemontcg.io/ex16/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/16_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "xy0-25", + "imageUrl": "https://images.pokemontcg.io/xy0/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy0/25_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "Kalos Starter Set", + "setCode": "xy0" + }, + { + "id": "hgss3-11", + "imageUrl": "https://images.pokemontcg.io/hgss3/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/11_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "dp1-54", + "imageUrl": "https://images.pokemontcg.io/dp1/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/54_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "ecard3-168", + "imageUrl": "https://images.pokemontcg.io/ecard3/168.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/168_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-19", + "imageUrl": "https://images.pokemontcg.io/ecard3/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/19_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex3-17", + "imageUrl": "https://images.pokemontcg.io/ex3/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/17_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "bw8-100", + "imageUrl": "https://images.pokemontcg.io/bw8/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/100_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "ex9-107", + "imageUrl": "https://images.pokemontcg.io/ex9/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/107_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "base5-28", + "imageUrl": "https://images.pokemontcg.io/base5/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/28_hires.png", + "name": "Dark Magneton", + "nationalPokedexNumber": 82, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex15-62", + "imageUrl": "https://images.pokemontcg.io/ex15/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/62_hires.png", + "name": "Seel δ", + "nationalPokedexNumber": 86, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex6-78", + "imageUrl": "https://images.pokemontcg.io/ex6/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/78_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex9-26", + "imageUrl": "https://images.pokemontcg.io/ex9/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/26_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "sm9-127", + "imageUrl": "https://images.pokemontcg.io/sm9/127.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/127_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": null, + "setCode": "sm9" + }, + { + "id": "dp7-38", + "imageUrl": "https://images.pokemontcg.io/dp7/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/38_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "neo3-10", + "imageUrl": "https://images.pokemontcg.io/neo3/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/10_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "ex12-22", + "imageUrl": "https://images.pokemontcg.io/ex12/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/22_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ecard2-73", + "imageUrl": "https://images.pokemontcg.io/ecard2/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/73_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base6-28", + "imageUrl": "https://images.pokemontcg.io/base6/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/28_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex7-39", + "imageUrl": "https://images.pokemontcg.io/ex7/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/39_hires.png", + "name": "Dark Magneton", + "nationalPokedexNumber": 82, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base6-71", + "imageUrl": "https://images.pokemontcg.io/base6/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/71_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "xy1-98", + "imageUrl": "https://images.pokemontcg.io/xy1/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/98_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "xy1-99", + "imageUrl": "https://images.pokemontcg.io/xy1/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/99_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "gym2-61", + "imageUrl": "https://images.pokemontcg.io/gym2/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/61_hires.png", + "name": "Blaine's Doduo", + "nationalPokedexNumber": 84, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "dp2-97", + "imageUrl": "https://images.pokemontcg.io/dp2/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/97_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "ex9-45", + "imageUrl": "https://images.pokemontcg.io/ex9/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/45_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "sm10-44", + "imageUrl": "https://images.pokemontcg.io/sm10/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/44_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": null, + "setCode": "sm10" + }, + { + "id": "bw8-44", + "imageUrl": "https://images.pokemontcg.io/bw8/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/44_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "ecard3-55", + "imageUrl": "https://images.pokemontcg.io/ecard3/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/55_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-95", + "imageUrl": "https://images.pokemontcg.io/ecard3/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/95_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm10-150", + "imageUrl": "https://images.pokemontcg.io/sm10/150.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/150_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": null, + "setCode": "sm10" + }, + { + "id": "bw8-99", + "imageUrl": "https://images.pokemontcg.io/bw8/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/99_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "xy8-53", + "imageUrl": "https://images.pokemontcg.io/xy8/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/53_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "xy8-115", + "imageUrl": "https://images.pokemontcg.io/xy8/115.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/115_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "dp2-46", + "imageUrl": "https://images.pokemontcg.io/dp2/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/46_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-80", + "imageUrl": "https://images.pokemontcg.io/dp2/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/80_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "swsh45sv-SV063", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV063.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV063_hires.png", + "name": "Galarian Farfetch'd", + "nationalPokedexNumber": 83, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "pl3-125", + "imageUrl": "https://images.pokemontcg.io/pl3/125.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/125_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base6-41", + "imageUrl": "https://images.pokemontcg.io/base6/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/41_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "xy10-15", + "imageUrl": "https://images.pokemontcg.io/xy10/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/15_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "base3-11", + "imageUrl": "https://images.pokemontcg.io/base3/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/11_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "xy12-38", + "imageUrl": "https://images.pokemontcg.io/xy12/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/38_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "neo3-43", + "imageUrl": "https://images.pokemontcg.io/neo3/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/43_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "bw8-45", + "imageUrl": "https://images.pokemontcg.io/bw8/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/45_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "xy12-68", + "imageUrl": "https://images.pokemontcg.io/xy12/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/68_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-112", + "imageUrl": "https://images.pokemontcg.io/xy12/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/112_hires.png", + "name": "Imakuni?'s Doduo", + "nationalPokedexNumber": 84, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "hgss4-43", + "imageUrl": "https://images.pokemontcg.io/hgss4/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/43_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "dp7-43", + "imageUrl": "https://images.pokemontcg.io/dp7/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/43_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "neo4-81", + "imageUrl": "https://images.pokemontcg.io/neo4/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/81_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "xy12-69", + "imageUrl": "https://images.pokemontcg.io/xy12/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/69_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "base3-26", + "imageUrl": "https://images.pokemontcg.io/base3/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/26_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "ex11-22", + "imageUrl": "https://images.pokemontcg.io/ex11/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/22_hires.png", + "name": "Holon's Magneton", + "nationalPokedexNumber": 82, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "pl3-102", + "imageUrl": "https://images.pokemontcg.io/pl3/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/102_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base4-40", + "imageUrl": "https://images.pokemontcg.io/base4/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/40_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": null, + "setCode": "base4" + }, + { + "id": "ex11-48", + "imageUrl": "https://images.pokemontcg.io/ex11/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/48_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "dp3-49", + "imageUrl": "https://images.pokemontcg.io/dp3/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/49_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base4-9", + "imageUrl": "https://images.pokemontcg.io/base4/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/9_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": null, + "setCode": "base4" + }, + { + "id": "ex3-35", + "imageUrl": "https://images.pokemontcg.io/ex3/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/35_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "base4-37", + "imageUrl": "https://images.pokemontcg.io/base4/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/37_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": null, + "setCode": "base4" + }, + { + "id": "hgss3-45", + "imageUrl": "https://images.pokemontcg.io/hgss3/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/45_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "base2-34", + "imageUrl": "https://images.pokemontcg.io/base2/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/34_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-23", + "imageUrl": "https://images.pokemontcg.io/ex6/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/23_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ecard3-94", + "imageUrl": "https://images.pokemontcg.io/ecard3/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/94_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex6-27", + "imageUrl": "https://images.pokemontcg.io/ex6/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/27_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-62", + "imageUrl": "https://images.pokemontcg.io/ex6/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/62_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "gym2-91", + "imageUrl": "https://images.pokemontcg.io/gym2/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/91_hires.png", + "name": "Misty's Seel", + "nationalPokedexNumber": 86, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex6-21", + "imageUrl": "https://images.pokemontcg.io/ex6/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/21_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "gym2-32", + "imageUrl": "https://images.pokemontcg.io/gym2/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/32_hires.png", + "name": "Blaine's Dodrio", + "nationalPokedexNumber": 85, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "base6-92", + "imageUrl": "https://images.pokemontcg.io/base6/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/92_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex5-33", + "imageUrl": "https://images.pokemontcg.io/ex5/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/33_hires.png", + "name": "Dodrio", + "nationalPokedexNumber": 85, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "hgss1-19", + "imageUrl": "https://images.pokemontcg.io/hgss1/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/19_hires.png", + "name": "Farfetch'd", + "nationalPokedexNumber": 83, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "dp7-42", + "imageUrl": "https://images.pokemontcg.io/dp7/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/42_hires.png", + "name": "Magneton", + "nationalPokedexNumber": 82, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "ex5-60", + "imageUrl": "https://images.pokemontcg.io/ex5/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/60_hires.png", + "name": "Doduo", + "nationalPokedexNumber": 84, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "hgss3-31", + "imageUrl": "https://images.pokemontcg.io/hgss3/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/31_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "hgss3-50", + "imageUrl": "https://images.pokemontcg.io/hgss3/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/50_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "dc1-8", + "imageUrl": "https://images.pokemontcg.io/dc1/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dc1/8_hires.png", + "name": "Team Aqua's Muk", + "nationalPokedexNumber": 89, + "set": "Double Crisis", + "setCode": "dc1" + }, + { + "id": "base5-41", + "imageUrl": "https://images.pokemontcg.io/base5/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/41_hires.png", + "name": "Dark Muk", + "nationalPokedexNumber": 89, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "neo4-45", + "imageUrl": "https://images.pokemontcg.io/neo4/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/45_hires.png", + "name": "Light Dewgong", + "nationalPokedexNumber": 87, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "sm9-62", + "imageUrl": "https://images.pokemontcg.io/sm9/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/62_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-83", + "imageUrl": "https://images.pokemontcg.io/sm9/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/83_hires.png", + "name": "Alolan Grimer", + "nationalPokedexNumber": 88, + "set": null, + "setCode": "sm9" + }, + { + "id": "ex12-11", + "imageUrl": "https://images.pokemontcg.io/ex12/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/11_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ecard1-42", + "imageUrl": "https://images.pokemontcg.io/ecard1/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/42_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base3-13", + "imageUrl": "https://images.pokemontcg.io/base3/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/13_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "base6-16", + "imageUrl": "https://images.pokemontcg.io/base6/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/16_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "swsh1-40", + "imageUrl": "https://images.pokemontcg.io/swsh1/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/40_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "swsh1-41", + "imageUrl": "https://images.pokemontcg.io/swsh1/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/41_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "ex15-63", + "imageUrl": "https://images.pokemontcg.io/ex15/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/63_hires.png", + "name": "Shellder δ", + "nationalPokedexNumber": 90, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "dp3-105", + "imageUrl": "https://images.pokemontcg.io/dp3/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/105_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ecard2-167", + "imageUrl": "https://images.pokemontcg.io/ecard2/167.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/167_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard1-129", + "imageUrl": "https://images.pokemontcg.io/ecard1/129.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/129_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy10-16", + "imageUrl": "https://images.pokemontcg.io/xy10/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/16_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy9-22", + "imageUrl": "https://images.pokemontcg.io/xy9/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/22_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy1-31", + "imageUrl": "https://images.pokemontcg.io/xy1/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/31_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "bw9-46", + "imageUrl": "https://images.pokemontcg.io/bw9/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/46_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "sm1-58", + "imageUrl": "https://images.pokemontcg.io/sm1/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/58_hires.png", + "name": "Alolan Muk", + "nationalPokedexNumber": 89, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "xy9-23", + "imageUrl": "https://images.pokemontcg.io/xy9/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/23_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "pl1-57", + "imageUrl": "https://images.pokemontcg.io/pl1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/57_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "dp2-45", + "imageUrl": "https://images.pokemontcg.io/dp2/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/45_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "sm3-84", + "imageUrl": "https://images.pokemontcg.io/sm3/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/84_hires.png", + "name": "Alolan Muk-GX", + "nationalPokedexNumber": 89, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "swsh3-100", + "imageUrl": "https://images.pokemontcg.io/swsh3/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/100_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "sm3-138", + "imageUrl": "https://images.pokemontcg.io/sm3/138.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/138_hires.png", + "name": "Alolan Muk-GX", + "nationalPokedexNumber": 89, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "sm3-157", + "imageUrl": "https://images.pokemontcg.io/sm3/157.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/157_hires.png", + "name": "Alolan Muk-GX", + "nationalPokedexNumber": 89, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "ex6-79", + "imageUrl": "https://images.pokemontcg.io/ex6/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/79_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base6-78", + "imageUrl": "https://images.pokemontcg.io/base6/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/78_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex7-16", + "imageUrl": "https://images.pokemontcg.io/ex7/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/16_hires.png", + "name": "Dark Muk", + "nationalPokedexNumber": 89, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "dp3-56", + "imageUrl": "https://images.pokemontcg.io/dp3/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/56_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "dc1-7", + "imageUrl": "https://images.pokemontcg.io/dc1/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dc1/7_hires.png", + "name": "Team Aqua's Grimer", + "nationalPokedexNumber": 88, + "set": "Double Crisis", + "setCode": "dc1" + }, + { + "id": "sm9-63", + "imageUrl": "https://images.pokemontcg.io/sm9/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/63_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-84", + "imageUrl": "https://images.pokemontcg.io/sm9/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/84_hires.png", + "name": "Alolan Muk", + "nationalPokedexNumber": 89, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm1-34", + "imageUrl": "https://images.pokemontcg.io/sm1/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/34_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "bw4-52", + "imageUrl": "https://images.pokemontcg.io/bw4/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/52_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "ex6-3", + "imageUrl": "https://images.pokemontcg.io/ex6/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/3_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm10-61", + "imageUrl": "https://images.pokemontcg.io/sm10/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/61_hires.png", + "name": "Muk & Alolan Muk-GX", + "nationalPokedexNumber": 89, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm1-33", + "imageUrl": "https://images.pokemontcg.io/sm1/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/33_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "sm1-57", + "imageUrl": "https://images.pokemontcg.io/sm1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/57_hires.png", + "name": "Alolan Grimer", + "nationalPokedexNumber": 88, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "ex3-96", + "imageUrl": "https://images.pokemontcg.io/ex3/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/96_hires.png", + "name": "Muk ex", + "nationalPokedexNumber": 89, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "sm10-196", + "imageUrl": "https://images.pokemontcg.io/sm10/196.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/196_hires.png", + "name": "Muk & Alolan Muk-GX", + "nationalPokedexNumber": 89, + "set": null, + "setCode": "sm10" + }, + { + "id": "base3-48", + "imageUrl": "https://images.pokemontcg.io/base3/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/48_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "dp3-88", + "imageUrl": "https://images.pokemontcg.io/dp3/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/88_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex3-57", + "imageUrl": "https://images.pokemontcg.io/ex3/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/57_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "base4-36", + "imageUrl": "https://images.pokemontcg.io/base4/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/36_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": null, + "setCode": "base4" + }, + { + "id": "ex6-20", + "imageUrl": "https://images.pokemontcg.io/ex6/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/20_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex12-54", + "imageUrl": "https://images.pokemontcg.io/ex12/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/54_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex7-56", + "imageUrl": "https://images.pokemontcg.io/ex7/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/56_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "gym2-26", + "imageUrl": "https://images.pokemontcg.io/gym2/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/26_hires.png", + "name": "Koga's Muk", + "nationalPokedexNumber": 89, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "bw9-45", + "imageUrl": "https://images.pokemontcg.io/bw9/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/45_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "gym2-78", + "imageUrl": "https://images.pokemontcg.io/gym2/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/78_hires.png", + "name": "Koga's Grimer", + "nationalPokedexNumber": 88, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ecard2-79", + "imageUrl": "https://images.pokemontcg.io/ecard2/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/79_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "sm12-131", + "imageUrl": "https://images.pokemontcg.io/sm12/131.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/131_hires.png", + "name": "Alolan Muk", + "nationalPokedexNumber": 89, + "set": null, + "setCode": "sm12" + }, + { + "id": "sm10-45", + "imageUrl": "https://images.pokemontcg.io/sm10/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/45_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": null, + "setCode": "sm10" + }, + { + "id": "base5-57", + "imageUrl": "https://images.pokemontcg.io/base5/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/57_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base6-40", + "imageUrl": "https://images.pokemontcg.io/base6/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/40_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "bw4-53", + "imageUrl": "https://images.pokemontcg.io/bw4/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/53_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "dp3-47", + "imageUrl": "https://images.pokemontcg.io/dp3/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/47_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "pl3-24", + "imageUrl": "https://images.pokemontcg.io/pl3/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/24_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pl1-75", + "imageUrl": "https://images.pokemontcg.io/pl1/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/75_hires.png", + "name": "Grimer", + "nationalPokedexNumber": 88, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "sm3-83", + "imageUrl": "https://images.pokemontcg.io/sm3/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/83_hires.png", + "name": "Alolan Grimer", + "nationalPokedexNumber": 88, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "gym1-88", + "imageUrl": "https://images.pokemontcg.io/gym1/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/88_hires.png", + "name": "Misty's Seel", + "nationalPokedexNumber": 86, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-89", + "imageUrl": "https://images.pokemontcg.io/gym1/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/89_hires.png", + "name": "Misty's Shellder", + "nationalPokedexNumber": 90, + "set": null, + "setCode": "gym1" + }, + { + "id": "base1-25", + "imageUrl": "https://images.pokemontcg.io/base1/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/25_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base1-41", + "imageUrl": "https://images.pokemontcg.io/base1/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/41_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base4-61", + "imageUrl": "https://images.pokemontcg.io/base4/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/61_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": null, + "setCode": "base4" + }, + { + "id": "ecard2-23", + "imageUrl": "https://images.pokemontcg.io/ecard2/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/23_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard3-156", + "imageUrl": "https://images.pokemontcg.io/ecard3/156.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/156_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-7", + "imageUrl": "https://images.pokemontcg.io/ecard3/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/7_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "g1-19", + "imageUrl": "https://images.pokemontcg.io/g1/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/19_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ex15-14", + "imageUrl": "https://images.pokemontcg.io/ex15/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/14_hires.png", + "name": "Cloyster δ", + "nationalPokedexNumber": 91, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-15", + "imageUrl": "https://images.pokemontcg.io/ex15/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/15_hires.png", + "name": "Dewgong δ", + "nationalPokedexNumber": 87, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "xy12-28", + "imageUrl": "https://images.pokemontcg.io/xy12/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/28_hires.png", + "name": "Seel", + "nationalPokedexNumber": 86, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-29", + "imageUrl": "https://images.pokemontcg.io/xy12/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/29_hires.png", + "name": "Dewgong", + "nationalPokedexNumber": 87, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm12-130", + "imageUrl": "https://images.pokemontcg.io/sm12/130.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/130_hires.png", + "name": "Alolan Grimer", + "nationalPokedexNumber": 88, + "set": null, + "setCode": "sm12" + }, + { + "id": "ecard1-8", + "imageUrl": "https://images.pokemontcg.io/ecard1/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/8_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "swsh3-101", + "imageUrl": "https://images.pokemontcg.io/swsh3/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/101_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "xy9-24", + "imageUrl": "https://images.pokemontcg.io/xy9/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/24_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy1-32", + "imageUrl": "https://images.pokemontcg.io/xy1/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/32_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "base3-32", + "imageUrl": "https://images.pokemontcg.io/base3/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/32_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "g1-20", + "imageUrl": "https://images.pokemontcg.io/g1/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/20_hires.png", + "name": "Cloyster", + "nationalPokedexNumber": 91, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "base3-28", + "imageUrl": "https://images.pokemontcg.io/base3/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/28_hires.png", + "name": "Muk", + "nationalPokedexNumber": 89, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "base3-54", + "imageUrl": "https://images.pokemontcg.io/base3/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/54_hires.png", + "name": "Shellder", + "nationalPokedexNumber": 90, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "gym2-54", + "imageUrl": "https://images.pokemontcg.io/gym2/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/54_hires.png", + "name": "Misty's Dewgong", + "nationalPokedexNumber": 87, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym1-29", + "imageUrl": "https://images.pokemontcg.io/gym1/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/29_hires.png", + "name": "Misty's Cloyster", + "nationalPokedexNumber": 91, + "set": null, + "setCode": "gym1" + }, + { + "id": "sm10-197", + "imageUrl": "https://images.pokemontcg.io/sm10/197.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/197_hires.png", + "name": "Muk & Alolan Muk-GX", + "nationalPokedexNumber": 89, + "set": null, + "setCode": "sm10" + }, + { + "id": "base1-49", + "imageUrl": "https://images.pokemontcg.io/base1/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/49_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Base", + "setCode": "base1" + }, + { + "id": "dp1-92", + "imageUrl": "https://images.pokemontcg.io/dp1/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/92_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "ecard3-57", + "imageUrl": "https://images.pokemontcg.io/ecard3/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/57_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-63", + "imageUrl": "https://images.pokemontcg.io/ecard3/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/63_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "swsh1-83", + "imageUrl": "https://images.pokemontcg.io/swsh1/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/83_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "ecard2-98", + "imageUrl": "https://images.pokemontcg.io/ecard2/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/98_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "hgss2-57", + "imageUrl": "https://images.pokemontcg.io/hgss2/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/57_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "hgss2-56", + "imageUrl": "https://images.pokemontcg.io/hgss2/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/56_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex6-34", + "imageUrl": "https://images.pokemontcg.io/ex6/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/34_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "pl4-42", + "imageUrl": "https://images.pokemontcg.io/pl4/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/42_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "ex6-108", + "imageUrl": "https://images.pokemontcg.io/ex6/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/108_hires.png", + "name": "Gengar ex", + "nationalPokedexNumber": 94, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex12-5", + "imageUrl": "https://images.pokemontcg.io/ex12/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/5_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "sm10-67", + "imageUrl": "https://images.pokemontcg.io/sm10/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/67_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex12-35", + "imageUrl": "https://images.pokemontcg.io/ex12/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/35_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-52", + "imageUrl": "https://images.pokemontcg.io/ex12/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/52_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "base1-50", + "imageUrl": "https://images.pokemontcg.io/base1/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/50_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base6-11", + "imageUrl": "https://images.pokemontcg.io/base6/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/11_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex7-54", + "imageUrl": "https://images.pokemontcg.io/ex7/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/54_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "pl4-41", + "imageUrl": "https://images.pokemontcg.io/pl4/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/41_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "swsh5-68", + "imageUrl": "https://images.pokemontcg.io/swsh5/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/68_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": null, + "setCode": "swsh5" + }, + { + "id": "base6-73", + "imageUrl": "https://images.pokemontcg.io/base6/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/73_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard1-48", + "imageUrl": "https://images.pokemontcg.io/ecard1/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/48_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm12-105", + "imageUrl": "https://images.pokemontcg.io/sm12/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/105_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": null, + "setCode": "sm12" + }, + { + "id": "ecard1-80", + "imageUrl": "https://images.pokemontcg.io/ecard1/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/80_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-109", + "imageUrl": "https://images.pokemontcg.io/ecard1/109.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/109_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xyp-XY132", + "imageUrl": "https://images.pokemontcg.io/xyp/XY132.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY132_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "dp7-62", + "imageUrl": "https://images.pokemontcg.io/dp7/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/62_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "xy8-58", + "imageUrl": "https://images.pokemontcg.io/xy8/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/58_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "ex6-63", + "imageUrl": "https://images.pokemontcg.io/ex6/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/63_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "dp4-65", + "imageUrl": "https://images.pokemontcg.io/dp4/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/65_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "ex2-71", + "imageUrl": "https://images.pokemontcg.io/ex2/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/71_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "xy4-114", + "imageUrl": "https://images.pokemontcg.io/xy4/114.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/114_hires.png", + "name": "Gengar-EX", + "nationalPokedexNumber": 94, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "sm7-71", + "imageUrl": "https://images.pokemontcg.io/sm7/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/71_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "gym2-55", + "imageUrl": "https://images.pokemontcg.io/gym2/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/55_hires.png", + "name": "Sabrina's Haunter", + "nationalPokedexNumber": 93, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm4-36", + "imageUrl": "https://images.pokemontcg.io/sm4/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/36_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "base3-6", + "imageUrl": "https://images.pokemontcg.io/base3/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/6_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "base3-21", + "imageUrl": "https://images.pokemontcg.io/base3/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/21_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "gym2-96", + "imageUrl": "https://images.pokemontcg.io/gym2/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/96_hires.png", + "name": "Sabrina's Gastly", + "nationalPokedexNumber": 92, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "base3-33", + "imageUrl": "https://images.pokemontcg.io/base3/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/33_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "sm9-53", + "imageUrl": "https://images.pokemontcg.io/sm9/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/53_hires.png", + "name": "Gengar & Mimikyu-GX", + "nationalPokedexNumber": 94, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm4-37", + "imageUrl": "https://images.pokemontcg.io/sm4/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/37_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "gym1-14", + "imageUrl": "https://images.pokemontcg.io/gym1/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/14_hires.png", + "name": "Sabrina's Gengar", + "nationalPokedexNumber": 94, + "set": null, + "setCode": "gym1" + }, + { + "id": "pl2-40", + "imageUrl": "https://images.pokemontcg.io/pl2/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/40_hires.png", + "name": "Gengar GL", + "nationalPokedexNumber": 94, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "gym1-93", + "imageUrl": "https://images.pokemontcg.io/gym1/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/93_hires.png", + "name": "Sabrina's Gastly", + "nationalPokedexNumber": 92, + "set": null, + "setCode": "gym1" + }, + { + "id": "xy3-35", + "imageUrl": "https://images.pokemontcg.io/xy3/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/35_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "xy12-47", + "imageUrl": "https://images.pokemontcg.io/xy12/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/47_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-49", + "imageUrl": "https://images.pokemontcg.io/xy12/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/49_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-61", + "imageUrl": "https://images.pokemontcg.io/xy12/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/61_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "base6-46", + "imageUrl": "https://images.pokemontcg.io/base6/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/46_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "neo4-6", + "imageUrl": "https://images.pokemontcg.io/neo4/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/6_hires.png", + "name": "Dark Gengar", + "nationalPokedexNumber": 94, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "dp1-50", + "imageUrl": "https://images.pokemontcg.io/dp1/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/50_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "dp1-82", + "imageUrl": "https://images.pokemontcg.io/dp1/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/82_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "sm9-186", + "imageUrl": "https://images.pokemontcg.io/sm9/186.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/186_hires.png", + "name": "Gengar & Mimikyu-GX", + "nationalPokedexNumber": 94, + "set": null, + "setCode": "sm9" + }, + { + "id": "hgss4-94", + "imageUrl": "https://images.pokemontcg.io/hgss4/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/94_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "g1-34", + "imageUrl": "https://images.pokemontcg.io/g1/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/34_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ex6-32", + "imageUrl": "https://images.pokemontcg.io/ex6/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/32_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy4-35", + "imageUrl": "https://images.pokemontcg.io/xy4/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/35_hires.png", + "name": "M Gengar-EX", + "nationalPokedexNumber": 94, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "hgss4-63", + "imageUrl": "https://images.pokemontcg.io/hgss4/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/63_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "xy12-48", + "imageUrl": "https://images.pokemontcg.io/xy12/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/48_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm10-68", + "imageUrl": "https://images.pokemontcg.io/sm10/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/68_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": null, + "setCode": "sm10" + }, + { + "id": "neo4-65", + "imageUrl": "https://images.pokemontcg.io/neo4/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/65_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "hgss4-35", + "imageUrl": "https://images.pokemontcg.io/hgss4/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/35_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "pl4-36", + "imageUrl": "https://images.pokemontcg.io/pl4/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/36_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "ex7-69", + "imageUrl": "https://images.pokemontcg.io/ex7/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/69_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base4-75", + "imageUrl": "https://images.pokemontcg.io/base4/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/75_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": null, + "setCode": "base4" + }, + { + "id": "hgss1-62", + "imageUrl": "https://images.pokemontcg.io/hgss1/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/62_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex6-42", + "imageUrl": "https://images.pokemontcg.io/ex6/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/42_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "gym2-29", + "imageUrl": "https://images.pokemontcg.io/gym2/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/29_hires.png", + "name": "Sabrina's Gengar", + "nationalPokedexNumber": 94, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm8-109", + "imageUrl": "https://images.pokemontcg.io/sm8/109.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/109_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "base6-84", + "imageUrl": "https://images.pokemontcg.io/base6/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/84_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard3-159", + "imageUrl": "https://images.pokemontcg.io/ecard3/159.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/159_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-10", + "imageUrl": "https://images.pokemontcg.io/ecard3/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/10_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "swsh6-55", + "imageUrl": "https://images.pokemontcg.io/swsh6/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/55_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-57", + "imageUrl": "https://images.pokemontcg.io/swsh6/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/57_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-56", + "imageUrl": "https://images.pokemontcg.io/swsh6/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/56_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": null, + "setCode": "swsh6" + }, + { + "id": "sm10-69", + "imageUrl": "https://images.pokemontcg.io/sm10/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/69_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-70", + "imageUrl": "https://images.pokemontcg.io/sm10/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/70_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-71", + "imageUrl": "https://images.pokemontcg.io/sm10/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/71_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": null, + "setCode": "sm10" + }, + { + "id": "gym1-69", + "imageUrl": "https://images.pokemontcg.io/gym1/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/69_hires.png", + "name": "Brock's Onix", + "nationalPokedexNumber": 95, + "set": null, + "setCode": "gym1" + }, + { + "id": "base6-76", + "imageUrl": "https://images.pokemontcg.io/base6/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/76_hires.png", + "name": "Gastly", + "nationalPokedexNumber": 92, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "dp7-18", + "imageUrl": "https://images.pokemontcg.io/dp7/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/18_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "dp7-69", + "imageUrl": "https://images.pokemontcg.io/dp7/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/69_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "dp7-40", + "imageUrl": "https://images.pokemontcg.io/dp7/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/40_hires.png", + "name": "Haunter", + "nationalPokedexNumber": 93, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "neo1-69", + "imageUrl": "https://images.pokemontcg.io/neo1/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/69_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "pl4-16", + "imageUrl": "https://images.pokemontcg.io/pl4/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/16_hires.png", + "name": "Gengar", + "nationalPokedexNumber": 94, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "xy9-50", + "imageUrl": "https://images.pokemontcg.io/xy9/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/50_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "neo4-36", + "imageUrl": "https://images.pokemontcg.io/neo4/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/36_hires.png", + "name": "Dark Haunter", + "nationalPokedexNumber": 93, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "sm1-59", + "imageUrl": "https://images.pokemontcg.io/sm1/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/59_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "sm115-36", + "imageUrl": "https://images.pokemontcg.io/sm115/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/36_hires.png", + "name": "Onix-GX", + "nationalPokedexNumber": 95, + "set": null, + "setCode": "sm115" + }, + { + "id": "xy4-121", + "imageUrl": "https://images.pokemontcg.io/xy4/121.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/121_hires.png", + "name": "M Gengar-EX", + "nationalPokedexNumber": 94, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "ex10-65", + "imageUrl": "https://images.pokemontcg.io/ex10/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/65_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "gym1-21", + "imageUrl": "https://images.pokemontcg.io/gym1/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/21_hires.png", + "name": "Brock's Onix", + "nationalPokedexNumber": 95, + "set": null, + "setCode": "gym1" + }, + { + "id": "si1-3", + "imageUrl": "https://images.pokemontcg.io/si1/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/3_hires.png", + "name": "Onix", + "nationalPokedexNumber": 95, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "gym1-92", + "imageUrl": "https://images.pokemontcg.io/gym1/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/92_hires.png", + "name": "Sabrina's Drowzee", + "nationalPokedexNumber": 96, + "set": null, + "setCode": "gym1" + }, + { + "id": "base5-54", + "imageUrl": "https://images.pokemontcg.io/base5/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/54_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex11-71", + "imageUrl": "https://images.pokemontcg.io/ex11/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/71_hires.png", + "name": "Holon's Voltorb", + "nationalPokedexNumber": 100, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex11-21", + "imageUrl": "https://images.pokemontcg.io/ex11/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/21_hires.png", + "name": "Holon's Electrode", + "nationalPokedexNumber": 101, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "base5-9", + "imageUrl": "https://images.pokemontcg.io/base5/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/9_hires.png", + "name": "Dark Hypno", + "nationalPokedexNumber": 97, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "swsh2-56", + "imageUrl": "https://images.pokemontcg.io/swsh2/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/56_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "base5-34", + "imageUrl": "https://images.pokemontcg.io/base5/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/34_hires.png", + "name": "Dark Electrode", + "nationalPokedexNumber": 101, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "hgss4-93", + "imageUrl": "https://images.pokemontcg.io/hgss4/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/93_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex6-26", + "imageUrl": "https://images.pokemontcg.io/ex6/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/26_hires.png", + "name": "Kingler", + "nationalPokedexNumber": 99, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sma-SV13", + "imageUrl": "https://images.pokemontcg.io/sma/SV13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sma/SV13_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Shiny Vault", + "setCode": "sma" + }, + { + "id": "base3-51", + "imageUrl": "https://images.pokemontcg.io/base3/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/51_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "base2-18", + "imageUrl": "https://images.pokemontcg.io/base2/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/18_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": null, + "setCode": "base2" + }, + { + "id": "ex9-71", + "imageUrl": "https://images.pokemontcg.io/ex9/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/71_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "xy6-21", + "imageUrl": "https://images.pokemontcg.io/xy6/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/21_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "dp7-36", + "imageUrl": "https://images.pokemontcg.io/dp7/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/36_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "xy6-22", + "imageUrl": "https://images.pokemontcg.io/xy6/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/22_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "dp7-SH3", + "imageUrl": "https://images.pokemontcg.io/dp7/SH3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/SH3_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "xy4-13", + "imageUrl": "https://images.pokemontcg.io/xy4/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/13_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "swsh4-45", + "imageUrl": "https://images.pokemontcg.io/swsh4/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh4/45_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Vivid Voltage", + "setCode": "swsh4" + }, + { + "id": "ecard1-115", + "imageUrl": "https://images.pokemontcg.io/ecard1/115.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/115_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "bw7-52", + "imageUrl": "https://images.pokemontcg.io/bw7/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/52_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "sm10-46", + "imageUrl": "https://images.pokemontcg.io/sm10/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/46_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": null, + "setCode": "sm10" + }, + { + "id": "bw9-32", + "imageUrl": "https://images.pokemontcg.io/bw9/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/32_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "xy9-51", + "imageUrl": "https://images.pokemontcg.io/xy9/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/51_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "base1-67", + "imageUrl": "https://images.pokemontcg.io/base1/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/67_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Base", + "setCode": "base1" + }, + { + "id": "dp4-75", + "imageUrl": "https://images.pokemontcg.io/dp4/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/75_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "ex5-80", + "imageUrl": "https://images.pokemontcg.io/ex5/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/80_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "swsh6-222", + "imageUrl": "https://images.pokemontcg.io/swsh6/222.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/222_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": null, + "setCode": "swsh6" + }, + { + "id": "ex6-66", + "imageUrl": "https://images.pokemontcg.io/ex6/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/66_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "dp7-37", + "imageUrl": "https://images.pokemontcg.io/dp7/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/37_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "dp7-80", + "imageUrl": "https://images.pokemontcg.io/dp7/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/80_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "sm7-48", + "imageUrl": "https://images.pokemontcg.io/sm7/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/48_hires.png", + "name": "Electrode-GX", + "nationalPokedexNumber": 101, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "xy4-14", + "imageUrl": "https://images.pokemontcg.io/xy4/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/14_hires.png", + "name": "Kingler", + "nationalPokedexNumber": 99, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "base6-25", + "imageUrl": "https://images.pokemontcg.io/base6/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/25_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm7-155", + "imageUrl": "https://images.pokemontcg.io/sm7/155.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/155_hires.png", + "name": "Electrode-GX", + "nationalPokedexNumber": 101, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "dp3-117", + "imageUrl": "https://images.pokemontcg.io/dp3/117.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/117_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base3-8", + "imageUrl": "https://images.pokemontcg.io/base3/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/8_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "sm9-38", + "imageUrl": "https://images.pokemontcg.io/sm9/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/38_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-39", + "imageUrl": "https://images.pokemontcg.io/sm9/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/39_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": null, + "setCode": "sm9" + }, + { + "id": "ex14-54", + "imageUrl": "https://images.pokemontcg.io/ex14/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/54_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "ex7-80", + "imageUrl": "https://images.pokemontcg.io/ex7/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/80_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ex14-22", + "imageUrl": "https://images.pokemontcg.io/ex14/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/22_hires.png", + "name": "Kingler δ", + "nationalPokedexNumber": 99, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "xy3-36", + "imageUrl": "https://images.pokemontcg.io/xy3/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/36_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "ex6-85", + "imageUrl": "https://images.pokemontcg.io/ex6/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/85_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ecard1-15", + "imageUrl": "https://images.pokemontcg.io/ecard1/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/15_hires.png", + "name": "Kingler", + "nationalPokedexNumber": 99, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy12-39", + "imageUrl": "https://images.pokemontcg.io/xy12/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/39_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm10-47", + "imageUrl": "https://images.pokemontcg.io/sm10/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/47_hires.png", + "name": "Kingler", + "nationalPokedexNumber": 99, + "set": null, + "setCode": "sm10" + }, + { + "id": "dp4-19", + "imageUrl": "https://images.pokemontcg.io/dp4/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/19_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "dp4-20", + "imageUrl": "https://images.pokemontcg.io/dp4/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/20_hires.png", + "name": "Kingler", + "nationalPokedexNumber": 99, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "bw9-33", + "imageUrl": "https://images.pokemontcg.io/bw9/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/33_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "sm1-60", + "imageUrl": "https://images.pokemontcg.io/sm1/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/60_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "dp3-26", + "imageUrl": "https://images.pokemontcg.io/dp3/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/26_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "bw7-51", + "imageUrl": "https://images.pokemontcg.io/bw7/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/51_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "hgss4-83", + "imageUrl": "https://images.pokemontcg.io/hgss4/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/83_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "base2-2", + "imageUrl": "https://images.pokemontcg.io/base2/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/2_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": null, + "setCode": "base2" + }, + { + "id": "hgss1-23", + "imageUrl": "https://images.pokemontcg.io/hgss1/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/23_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex9-27", + "imageUrl": "https://images.pokemontcg.io/ex9/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/27_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "ex6-25", + "imageUrl": "https://images.pokemontcg.io/ex6/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/25_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-107", + "imageUrl": "https://images.pokemontcg.io/ex6/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/107_hires.png", + "name": "Electrode ex", + "nationalPokedexNumber": 101, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base5-69", + "imageUrl": "https://images.pokemontcg.io/base5/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/69_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "gym2-56", + "imageUrl": "https://images.pokemontcg.io/gym2/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/56_hires.png", + "name": "Sabrina's Hypno", + "nationalPokedexNumber": 97, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-86", + "imageUrl": "https://images.pokemontcg.io/gym2/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/86_hires.png", + "name": "Lt. Surge's Voltorb", + "nationalPokedexNumber": 100, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex12-32", + "imageUrl": "https://images.pokemontcg.io/ex12/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/32_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-68", + "imageUrl": "https://images.pokemontcg.io/ex12/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/68_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex7-4", + "imageUrl": "https://images.pokemontcg.io/ex7/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/4_hires.png", + "name": "Dark Electrode", + "nationalPokedexNumber": 101, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base6-22", + "imageUrl": "https://images.pokemontcg.io/base6/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/22_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard3-113", + "imageUrl": "https://images.pokemontcg.io/ecard3/113.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/113_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "base5-26", + "imageUrl": "https://images.pokemontcg.io/base5/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/26_hires.png", + "name": "Dark Hypno", + "nationalPokedexNumber": 97, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base6-97", + "imageUrl": "https://images.pokemontcg.io/base6/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/97_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard3-36", + "imageUrl": "https://images.pokemontcg.io/ecard3/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/36_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "dp7-81", + "imageUrl": "https://images.pokemontcg.io/dp7/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/81_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "ex5-5", + "imageUrl": "https://images.pokemontcg.io/ex5/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/5_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "hgss4-34", + "imageUrl": "https://images.pokemontcg.io/hgss4/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/34_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex7-6", + "imageUrl": "https://images.pokemontcg.io/ex7/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/6_hires.png", + "name": "Dark Hypno", + "nationalPokedexNumber": 97, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "bwp-BW76", + "imageUrl": "https://images.pokemontcg.io/bwp/BW76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bwp/BW76_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "BW Black Star Promos", + "setCode": "bwp" + }, + { + "id": "sm115-21", + "imageUrl": "https://images.pokemontcg.io/sm115/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/21_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-22", + "imageUrl": "https://images.pokemontcg.io/sm115/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/22_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm7-47", + "imageUrl": "https://images.pokemontcg.io/sm7/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/47_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "gym1-84", + "imageUrl": "https://images.pokemontcg.io/gym1/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/84_hires.png", + "name": "Lt. Surge's Voltorb", + "nationalPokedexNumber": 100, + "set": null, + "setCode": "gym1" + }, + { + "id": "ecard2-162", + "imageUrl": "https://images.pokemontcg.io/ecard2/162.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/162_hires.png", + "name": "Hypno", + "nationalPokedexNumber": 97, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-64", + "imageUrl": "https://images.pokemontcg.io/ecard2/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/64_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-74", + "imageUrl": "https://images.pokemontcg.io/ecard2/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/74_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base4-98", + "imageUrl": "https://images.pokemontcg.io/base4/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/98_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": null, + "setCode": "base4" + }, + { + "id": "sm7-172", + "imageUrl": "https://images.pokemontcg.io/sm7/172.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/172_hires.png", + "name": "Electrode-GX", + "nationalPokedexNumber": 101, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "sm35-30", + "imageUrl": "https://images.pokemontcg.io/sm35/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/30_hires.png", + "name": "Voltorb", + "nationalPokedexNumber": 100, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "sm35-31", + "imageUrl": "https://images.pokemontcg.io/sm35/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/31_hires.png", + "name": "Electrode", + "nationalPokedexNumber": 101, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "swsh1-42", + "imageUrl": "https://images.pokemontcg.io/swsh1/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/42_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "base4-73", + "imageUrl": "https://images.pokemontcg.io/base4/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/73_hires.png", + "name": "Drowzee", + "nationalPokedexNumber": 96, + "set": null, + "setCode": "base4" + }, + { + "id": "swsh1-43", + "imageUrl": "https://images.pokemontcg.io/swsh1/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/43_hires.png", + "name": "Krabby", + "nationalPokedexNumber": 98, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "dp6-90", + "imageUrl": "https://images.pokemontcg.io/dp6/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/90_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "hgss4-44", + "imageUrl": "https://images.pokemontcg.io/hgss4/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/44_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "xy6-2", + "imageUrl": "https://images.pokemontcg.io/xy6/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/2_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "col1-58", + "imageUrl": "https://images.pokemontcg.io/col1/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/58_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "ex4-40", + "imageUrl": "https://images.pokemontcg.io/ex4/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/40_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "ex6-5", + "imageUrl": "https://images.pokemontcg.io/ex6/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/5_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-7", + "imageUrl": "https://images.pokemontcg.io/ex6/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/7_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "bw6-60", + "imageUrl": "https://images.pokemontcg.io/bw6/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw6/60_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Dragons Exalted", + "setCode": "bw6" + }, + { + "id": "sm9-64", + "imageUrl": "https://images.pokemontcg.io/sm9/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/64_hires.png", + "name": "Alolan Marowak", + "nationalPokedexNumber": 105, + "set": null, + "setCode": "sm9" + }, + { + "id": "base2-35", + "imageUrl": "https://images.pokemontcg.io/base2/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/35_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-39", + "imageUrl": "https://images.pokemontcg.io/base2/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/39_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": null, + "setCode": "base2" + }, + { + "id": "hgss1-63", + "imageUrl": "https://images.pokemontcg.io/hgss1/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/63_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ecard2-77", + "imageUrl": "https://images.pokemontcg.io/ecard2/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/77_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard1-81", + "imageUrl": "https://images.pokemontcg.io/ecard1/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/81_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex11-60", + "imageUrl": "https://images.pokemontcg.io/ex11/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/60_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "swsh5-70", + "imageUrl": "https://images.pokemontcg.io/swsh5/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/70_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": null, + "setCode": "swsh5" + }, + { + "id": "sm11-105", + "imageUrl": "https://images.pokemontcg.io/sm11/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm11/105_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": null, + "setCode": "sm11" + }, + { + "id": "ex13-65", + "imageUrl": "https://images.pokemontcg.io/ex13/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/65_hires.png", + "name": "Exeggcute δ", + "nationalPokedexNumber": 102, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex10-25", + "imageUrl": "https://images.pokemontcg.io/ex10/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/25_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "dp6-54", + "imageUrl": "https://images.pokemontcg.io/dp6/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/54_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp6-63", + "imageUrl": "https://images.pokemontcg.io/dp6/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/63_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp6-100", + "imageUrl": "https://images.pokemontcg.io/dp6/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/100_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "bw9-4", + "imageUrl": "https://images.pokemontcg.io/bw9/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/4_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "xy8-77", + "imageUrl": "https://images.pokemontcg.io/xy8/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/77_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "dp2-24", + "imageUrl": "https://images.pokemontcg.io/dp2/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/24_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp6-93", + "imageUrl": "https://images.pokemontcg.io/dp6/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/93_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp2-82", + "imageUrl": "https://images.pokemontcg.io/dp2/82.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/82_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "bw10-102", + "imageUrl": "https://images.pokemontcg.io/bw10/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/102_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "base3-22", + "imageUrl": "https://images.pokemontcg.io/base3/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/22_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "base6-13", + "imageUrl": "https://images.pokemontcg.io/base6/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/13_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-75", + "imageUrl": "https://images.pokemontcg.io/base6/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/75_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm9-8", + "imageUrl": "https://images.pokemontcg.io/sm9/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/8_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": null, + "setCode": "sm9" + }, + { + "id": "base3-7", + "imageUrl": "https://images.pokemontcg.io/base3/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/7_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "sm4-74", + "imageUrl": "https://images.pokemontcg.io/sm4/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/74_hires.png", + "name": "Alolan Exeggutor-GX", + "nationalPokedexNumber": 103, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "sm4-107", + "imageUrl": "https://images.pokemontcg.io/sm4/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/107_hires.png", + "name": "Alolan Exeggutor-GX", + "nationalPokedexNumber": 103, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "sm4-118", + "imageUrl": "https://images.pokemontcg.io/sm4/118.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/118_hires.png", + "name": "Alolan Exeggutor-GX", + "nationalPokedexNumber": 103, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "sm9-115", + "imageUrl": "https://images.pokemontcg.io/sm9/115.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/115_hires.png", + "name": "Alolan Exeggutor", + "nationalPokedexNumber": 103, + "set": null, + "setCode": "sm9" + }, + { + "id": "gym1-43", + "imageUrl": "https://images.pokemontcg.io/gym1/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/43_hires.png", + "name": "Erika's Exeggcute", + "nationalPokedexNumber": 102, + "set": null, + "setCode": "gym1" + }, + { + "id": "sm6-2", + "imageUrl": "https://images.pokemontcg.io/sm6/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm6/2_hires.png", + "name": "Alolan Exeggutor", + "nationalPokedexNumber": 103, + "set": "Forbidden Light", + "setCode": "sm6" + }, + { + "id": "sm6-2a", + "imageUrl": "https://images.pokemontcg.io/sm6/2a.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm6/2a_hires.png", + "name": "Alolan Exeggutor", + "nationalPokedexNumber": 103, + "set": "Forbidden Light", + "setCode": "sm6" + }, + { + "id": "xy3-47", + "imageUrl": "https://images.pokemontcg.io/xy3/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/47_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "base6-23", + "imageUrl": "https://images.pokemontcg.io/base6/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/23_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex6-33", + "imageUrl": "https://images.pokemontcg.io/ex6/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/33_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy6-1", + "imageUrl": "https://images.pokemontcg.io/xy6/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/1_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "ex13-41", + "imageUrl": "https://images.pokemontcg.io/ex13/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/41_hires.png", + "name": "Exeggutor δ", + "nationalPokedexNumber": 103, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "neo4-64", + "imageUrl": "https://images.pokemontcg.io/neo4/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/64_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ecard1-103", + "imageUrl": "https://images.pokemontcg.io/ecard1/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/103_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "g1-47", + "imageUrl": "https://images.pokemontcg.io/g1/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/47_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ex6-60", + "imageUrl": "https://images.pokemontcg.io/ex6/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/60_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm10-90", + "imageUrl": "https://images.pokemontcg.io/sm10/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/90_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-91", + "imageUrl": "https://images.pokemontcg.io/sm10/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/91_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex7-51", + "imageUrl": "https://images.pokemontcg.io/ex7/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/51_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base4-74", + "imageUrl": "https://images.pokemontcg.io/base4/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/74_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": null, + "setCode": "base4" + }, + { + "id": "sm6-1", + "imageUrl": "https://images.pokemontcg.io/sm6/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm6/1_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Forbidden Light", + "setCode": "sm6" + }, + { + "id": "xy10-37", + "imageUrl": "https://images.pokemontcg.io/xy10/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/37_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "hsp-HGSS25", + "imageUrl": "https://images.pokemontcg.io/hsp/HGSS25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hsp/HGSS25_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "HGSS Black Star Promos", + "setCode": "hsp" + }, + { + "id": "base4-70", + "imageUrl": "https://images.pokemontcg.io/base4/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/70_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": null, + "setCode": "base4" + }, + { + "id": "hgss4-60", + "imageUrl": "https://images.pokemontcg.io/hgss4/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/60_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex11-10", + "imageUrl": "https://images.pokemontcg.io/ex11/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/10_hires.png", + "name": "Marowak δ", + "nationalPokedexNumber": 105, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "base2-50", + "imageUrl": "https://images.pokemontcg.io/base2/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/50_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": null, + "setCode": "base2" + }, + { + "id": "sm5-95", + "imageUrl": "https://images.pokemontcg.io/sm5/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm5/95_hires.png", + "name": "Alolan Exeggutor", + "nationalPokedexNumber": 103, + "set": "Ultra Prism", + "setCode": "sm5" + }, + { + "id": "bw9-5", + "imageUrl": "https://images.pokemontcg.io/bw9/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/5_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "ecard2-72", + "imageUrl": "https://images.pokemontcg.io/ecard2/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/72_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base2-52", + "imageUrl": "https://images.pokemontcg.io/base2/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/52_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": null, + "setCode": "base2" + }, + { + "id": "ecard2-54", + "imageUrl": "https://images.pokemontcg.io/ecard2/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/54_hires.png", + "name": "Marowak", + "nationalPokedexNumber": 105, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "hgss3-52", + "imageUrl": "https://images.pokemontcg.io/hgss3/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/52_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "hgss1-18", + "imageUrl": "https://images.pokemontcg.io/hgss1/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/18_hires.png", + "name": "Exeggutor", + "nationalPokedexNumber": 103, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "xy8-79", + "imageUrl": "https://images.pokemontcg.io/xy8/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/79_hires.png", + "name": "Marowak BREAK", + "nationalPokedexNumber": 105, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "neo4-33", + "imageUrl": "https://images.pokemontcg.io/neo4/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/33_hires.png", + "name": "Dark Exeggutor", + "nationalPokedexNumber": 103, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-42", + "imageUrl": "https://images.pokemontcg.io/neo4/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/42_hires.png", + "name": "Hitmonlee", + "nationalPokedexNumber": 106, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "swsh4-4", + "imageUrl": "https://images.pokemontcg.io/swsh4/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh4/4_hires.png", + "name": "Exeggcute", + "nationalPokedexNumber": 102, + "set": "Vivid Voltage", + "setCode": "swsh4" + }, + { + "id": "ex7-7", + "imageUrl": "https://images.pokemontcg.io/ex7/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/7_hires.png", + "name": "Dark Marowak", + "nationalPokedexNumber": 105, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "sm6-57", + "imageUrl": "https://images.pokemontcg.io/sm6/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm6/57_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": "Forbidden Light", + "setCode": "sm6" + }, + { + "id": "sm115-37", + "imageUrl": "https://images.pokemontcg.io/sm115/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/37_hires.png", + "name": "Cubone", + "nationalPokedexNumber": 104, + "set": null, + "setCode": "sm115" + }, + { + "id": "gym1-44", + "imageUrl": "https://images.pokemontcg.io/gym1/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/44_hires.png", + "name": "Erika's Exeggutor", + "nationalPokedexNumber": 103, + "set": null, + "setCode": "gym1" + }, + { + "id": "base1-51", + "imageUrl": "https://images.pokemontcg.io/base1/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/51_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Base", + "setCode": "base1" + }, + { + "id": "det1-16", + "imageUrl": "https://images.pokemontcg.io/det1/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/det1/16_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "Detective Pikachu", + "setCode": "det1" + }, + { + "id": "ex11-72", + "imageUrl": "https://images.pokemontcg.io/ex11/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/72_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "hgss3-51", + "imageUrl": "https://images.pokemontcg.io/hgss3/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/51_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ex11-33", + "imageUrl": "https://images.pokemontcg.io/ex11/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/33_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex15-19", + "imageUrl": "https://images.pokemontcg.io/ex15/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/19_hires.png", + "name": "Lickitung δ", + "nationalPokedexNumber": 108, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "g1-48", + "imageUrl": "https://images.pokemontcg.io/g1/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/48_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ex4-38", + "imageUrl": "https://images.pokemontcg.io/ex4/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/38_hires.png", + "name": "Team Magma's Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "xy5-74", + "imageUrl": "https://images.pokemontcg.io/xy5/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/74_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "ex9-62", + "imageUrl": "https://images.pokemontcg.io/ex9/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/62_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "ex1-24", + "imageUrl": "https://images.pokemontcg.io/ex1/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/24_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "ex1-54", + "imageUrl": "https://images.pokemontcg.io/ex1/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/54_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "ex5-70", + "imageUrl": "https://images.pokemontcg.io/ex5/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/70_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "sm12-76", + "imageUrl": "https://images.pokemontcg.io/sm12/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/76_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": null, + "setCode": "sm12" + }, + { + "id": "xy10-27", + "imageUrl": "https://images.pokemontcg.io/xy10/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/27_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "ex7-98", + "imageUrl": "https://images.pokemontcg.io/ex7/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/98_hires.png", + "name": "Rocket's Hitmonchan ex", + "nationalPokedexNumber": 107, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ecard1-32", + "imageUrl": "https://images.pokemontcg.io/ecard1/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/32_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-70", + "imageUrl": "https://images.pokemontcg.io/ecard1/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/70_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy1-60", + "imageUrl": "https://images.pokemontcg.io/xy1/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/60_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "swsh5-113", + "imageUrl": "https://images.pokemontcg.io/swsh5/113.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/113_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": null, + "setCode": "swsh5" + }, + { + "id": "dp3-91", + "imageUrl": "https://images.pokemontcg.io/dp3/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/91_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex10-24", + "imageUrl": "https://images.pokemontcg.io/ex10/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/24_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "pl2-68", + "imageUrl": "https://images.pokemontcg.io/pl2/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/68_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "ex8-62", + "imageUrl": "https://images.pokemontcg.io/ex8/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/62_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "dp4-31", + "imageUrl": "https://images.pokemontcg.io/dp4/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/31_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "dp5-39", + "imageUrl": "https://images.pokemontcg.io/dp5/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/39_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "xyp-XY163", + "imageUrl": "https://images.pokemontcg.io/xyp/XY163.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY163_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "bw8-58", + "imageUrl": "https://images.pokemontcg.io/bw8/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/58_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "pl2-87", + "imageUrl": "https://images.pokemontcg.io/pl2/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/87_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "pl1-129", + "imageUrl": "https://images.pokemontcg.io/pl1/129.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/129_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "dp6-99", + "imageUrl": "https://images.pokemontcg.io/dp6/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/99_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "bw8-57", + "imageUrl": "https://images.pokemontcg.io/bw8/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/57_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "swsh45sv-SV076", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV076.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV076_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "swsh45sv-SV077", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV077.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV077_hires.png", + "name": "Galarian Weezing", + "nationalPokedexNumber": 110, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "swsh45-41", + "imageUrl": "https://images.pokemontcg.io/swsh45/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45/41_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": null, + "setCode": "swsh45" + }, + { + "id": "swsh45-42", + "imageUrl": "https://images.pokemontcg.io/swsh45/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45/42_hires.png", + "name": "Galarian Weezing", + "nationalPokedexNumber": 110, + "set": null, + "setCode": "swsh45" + }, + { + "id": "col1-38", + "imageUrl": "https://images.pokemontcg.io/col1/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/38_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "col1-57", + "imageUrl": "https://images.pokemontcg.io/col1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/57_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "xy3-48", + "imageUrl": "https://images.pokemontcg.io/xy3/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/48_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "pl3-122", + "imageUrl": "https://images.pokemontcg.io/pl3/122.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/122_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm9-74", + "imageUrl": "https://images.pokemontcg.io/sm9/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/74_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": null, + "setCode": "sm9" + }, + { + "id": "xy12-50", + "imageUrl": "https://images.pokemontcg.io/xy12/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/50_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy3-78", + "imageUrl": "https://images.pokemontcg.io/xy3/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/78_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "bw8-56", + "imageUrl": "https://images.pokemontcg.io/bw8/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/56_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "neo4-69", + "imageUrl": "https://images.pokemontcg.io/neo4/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/69_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex6-37", + "imageUrl": "https://images.pokemontcg.io/ex6/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/37_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "hgss4-66", + "imageUrl": "https://images.pokemontcg.io/hgss4/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/66_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "ex1-98", + "imageUrl": "https://images.pokemontcg.io/ex1/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/98_hires.png", + "name": "Hitmonchan ex", + "nationalPokedexNumber": 107, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "xy12-62", + "imageUrl": "https://images.pokemontcg.io/xy12/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/62_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "base3-45", + "imageUrl": "https://images.pokemontcg.io/base3/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/45_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "pl1-80", + "imageUrl": "https://images.pokemontcg.io/pl1/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/80_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "hgss1-34", + "imageUrl": "https://images.pokemontcg.io/hgss1/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/34_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "dp4-74", + "imageUrl": "https://images.pokemontcg.io/dp4/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/74_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "hgss1-70", + "imageUrl": "https://images.pokemontcg.io/hgss1/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/70_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex4-67", + "imageUrl": "https://images.pokemontcg.io/ex4/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/67_hires.png", + "name": "Team Magma's Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "ex8-51", + "imageUrl": "https://images.pokemontcg.io/ex8/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/51_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "base5-14", + "imageUrl": "https://images.pokemontcg.io/base5/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/14_hires.png", + "name": "Dark Weezing", + "nationalPokedexNumber": 110, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base2-61", + "imageUrl": "https://images.pokemontcg.io/base2/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/61_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": null, + "setCode": "base2" + }, + { + "id": "base5-58", + "imageUrl": "https://images.pokemontcg.io/base5/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/58_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "gym2-48", + "imageUrl": "https://images.pokemontcg.io/gym2/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/48_hires.png", + "name": "Koga's Koffing", + "nationalPokedexNumber": 109, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "gym2-79", + "imageUrl": "https://images.pokemontcg.io/gym2/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/79_hires.png", + "name": "Koga's Koffing", + "nationalPokedexNumber": 109, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm12-77", + "imageUrl": "https://images.pokemontcg.io/sm12/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/77_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": null, + "setCode": "sm12" + }, + { + "id": "base2-38", + "imageUrl": "https://images.pokemontcg.io/base2/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/38_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": null, + "setCode": "base2" + }, + { + "id": "base6-90", + "imageUrl": "https://images.pokemontcg.io/base6/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/90_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm12-243", + "imageUrl": "https://images.pokemontcg.io/sm12/243.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/243_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": null, + "setCode": "sm12" + }, + { + "id": "ecard3-91", + "imageUrl": "https://images.pokemontcg.io/ecard3/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/91_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard1-114", + "imageUrl": "https://images.pokemontcg.io/ecard1/114.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/114_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "sm10-74", + "imageUrl": "https://images.pokemontcg.io/sm10/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/74_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": null, + "setCode": "sm10" + }, + { + "id": "sm10-92", + "imageUrl": "https://images.pokemontcg.io/sm10/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/92_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": null, + "setCode": "sm10" + }, + { + "id": "col1-60", + "imageUrl": "https://images.pokemontcg.io/col1/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/60_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "base5-31", + "imageUrl": "https://images.pokemontcg.io/base5/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/31_hires.png", + "name": "Dark Weezing", + "nationalPokedexNumber": 110, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "sm115-28", + "imageUrl": "https://images.pokemontcg.io/sm115/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/28_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": null, + "setCode": "sm115" + }, + { + "id": "swsh6-94", + "imageUrl": "https://images.pokemontcg.io/swsh6/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/94_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": null, + "setCode": "swsh6" + }, + { + "id": "sm115-29", + "imageUrl": "https://images.pokemontcg.io/sm115/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/29_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": null, + "setCode": "sm115" + }, + { + "id": "swsh6-95", + "imageUrl": "https://images.pokemontcg.io/swsh6/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/95_hires.png", + "name": "Weezing", + "nationalPokedexNumber": 110, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-96", + "imageUrl": "https://images.pokemontcg.io/swsh6/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/96_hires.png", + "name": "Galarian Weezing", + "nationalPokedexNumber": 110, + "set": null, + "setCode": "swsh6" + }, + { + "id": "gym1-11", + "imageUrl": "https://images.pokemontcg.io/gym1/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/11_hires.png", + "name": "Rocket's Hitmonchan", + "nationalPokedexNumber": 107, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-70", + "imageUrl": "https://images.pokemontcg.io/gym1/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/70_hires.png", + "name": "Brock's Rhyhorn", + "nationalPokedexNumber": 111, + "set": null, + "setCode": "gym1" + }, + { + "id": "si1-16", + "imageUrl": "https://images.pokemontcg.io/si1/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/16_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "base4-90", + "imageUrl": "https://images.pokemontcg.io/base4/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/90_hires.png", + "name": "Rhyhorn", + "nationalPokedexNumber": 111, + "set": null, + "setCode": "base4" + }, + { + "id": "ex4-68", + "imageUrl": "https://images.pokemontcg.io/ex4/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/68_hires.png", + "name": "Team Magma's Rhyhorn", + "nationalPokedexNumber": 111, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "ex7-42", + "imageUrl": "https://images.pokemontcg.io/ex7/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/42_hires.png", + "name": "Dark Weezing", + "nationalPokedexNumber": 110, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ex7-61", + "imageUrl": "https://images.pokemontcg.io/ex7/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/61_hires.png", + "name": "Koffing", + "nationalPokedexNumber": 109, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base4-8", + "imageUrl": "https://images.pokemontcg.io/base4/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/8_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": null, + "setCode": "base4" + }, + { + "id": "sm11-161", + "imageUrl": "https://images.pokemontcg.io/sm11/161.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm11/161_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": null, + "setCode": "sm11" + }, + { + "id": "ecard2-81", + "imageUrl": "https://images.pokemontcg.io/ecard2/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/81_hires.png", + "name": "Hitmonchan", + "nationalPokedexNumber": 107, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-90", + "imageUrl": "https://images.pokemontcg.io/ecard2/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/90_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base4-48", + "imageUrl": "https://images.pokemontcg.io/base4/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/48_hires.png", + "name": "Lickitung", + "nationalPokedexNumber": 108, + "set": null, + "setCode": "base4" + }, + { + "id": "ecard3-177", + "imageUrl": "https://images.pokemontcg.io/ecard3/177.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/177_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm11-163", + "imageUrl": "https://images.pokemontcg.io/sm11/163.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm11/163_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "sm11" + }, + { + "id": "swshp-SWSH038", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH038.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH038_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "swshp" + }, + { + "id": "g1-8", + "imageUrl": "https://images.pokemontcg.io/g1/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/8_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "ex3-33", + "imageUrl": "https://images.pokemontcg.io/ex3/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/33_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex3-58", + "imageUrl": "https://images.pokemontcg.io/ex3/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/58_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "gym1-86", + "imageUrl": "https://images.pokemontcg.io/gym1/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/86_hires.png", + "name": "Misty's Horsea", + "nationalPokedexNumber": 116, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex6-19", + "imageUrl": "https://images.pokemontcg.io/ex6/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/19_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy5-4", + "imageUrl": "https://images.pokemontcg.io/xy5/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/4_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "base2-5", + "imageUrl": "https://images.pokemontcg.io/base2/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/5_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "base2" + }, + { + "id": "ex9-19", + "imageUrl": "https://images.pokemontcg.io/ex9/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex9/19_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Emerald", + "setCode": "ex9" + }, + { + "id": "base2-21", + "imageUrl": "https://images.pokemontcg.io/base2/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/21_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "base2" + }, + { + "id": "sm9-128", + "imageUrl": "https://images.pokemontcg.io/sm9/128.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/128_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "sm9" + }, + { + "id": "base2-45", + "imageUrl": "https://images.pokemontcg.io/base2/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/45_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": null, + "setCode": "base2" + }, + { + "id": "dp4-87", + "imageUrl": "https://images.pokemontcg.io/dp4/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/87_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "dp7-78", + "imageUrl": "https://images.pokemontcg.io/dp7/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/78_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "ex12-44", + "imageUrl": "https://images.pokemontcg.io/ex12/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/44_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ecard2-84", + "imageUrl": "https://images.pokemontcg.io/ecard2/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/84_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-88", + "imageUrl": "https://images.pokemontcg.io/ecard2/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/88_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ex1-96", + "imageUrl": "https://images.pokemontcg.io/ex1/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/96_hires.png", + "name": "Chansey ex", + "nationalPokedexNumber": 113, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "base3-49", + "imageUrl": "https://images.pokemontcg.io/base3/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/49_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "swsh5-31", + "imageUrl": "https://images.pokemontcg.io/swsh5/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh5/31_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": null, + "setCode": "swsh5" + }, + { + "id": "swsh45-20", + "imageUrl": "https://images.pokemontcg.io/swsh45/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45/20_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": null, + "setCode": "swsh45" + }, + { + "id": "ex10-20", + "imageUrl": "https://images.pokemontcg.io/ex10/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/20_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "bw7-5", + "imageUrl": "https://images.pokemontcg.io/bw7/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/5_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "sm3-7", + "imageUrl": "https://images.pokemontcg.io/sm3/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/7_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "dp5-38", + "imageUrl": "https://images.pokemontcg.io/dp5/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/38_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "gym1-36", + "imageUrl": "https://images.pokemontcg.io/gym1/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/36_hires.png", + "name": "Blaine's Kangaskhan", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "gym1" + }, + { + "id": "sm3-29", + "imageUrl": "https://images.pokemontcg.io/sm3/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/29_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "dp2-76", + "imageUrl": "https://images.pokemontcg.io/dp2/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/76_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "ex15-50", + "imageUrl": "https://images.pokemontcg.io/ex15/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/50_hires.png", + "name": "Horsea δ", + "nationalPokedexNumber": 116, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "bw5-81", + "imageUrl": "https://images.pokemontcg.io/bw5/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/81_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "dp6-102", + "imageUrl": "https://images.pokemontcg.io/dp6/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/102_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "ex4-11", + "imageUrl": "https://images.pokemontcg.io/ex4/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/11_hires.png", + "name": "Team Magma's Rhydon", + "nationalPokedexNumber": 112, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "xy2-79", + "imageUrl": "https://images.pokemontcg.io/xy2/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/79_hires.png", + "name": "M Kangaskhan-EX", + "nationalPokedexNumber": 115, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "xy2-103", + "imageUrl": "https://images.pokemontcg.io/xy2/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/103_hires.png", + "name": "Kangaskhan-EX", + "nationalPokedexNumber": 115, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "sm8-1", + "imageUrl": "https://images.pokemontcg.io/sm8/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/1_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "gym2-81", + "imageUrl": "https://images.pokemontcg.io/gym2/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/81_hires.png", + "name": "Koga's Tangela", + "nationalPokedexNumber": 114, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "hgss1-58", + "imageUrl": "https://images.pokemontcg.io/hgss1/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/58_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "dp1-60", + "imageUrl": "https://images.pokemontcg.io/dp1/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/60_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "hgss4-36", + "imageUrl": "https://images.pokemontcg.io/hgss4/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/36_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm10-16", + "imageUrl": "https://images.pokemontcg.io/sm10/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/16_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": null, + "setCode": "sm10" + }, + { + "id": "pl1-69", + "imageUrl": "https://images.pokemontcg.io/pl1/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/69_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "bw5-80", + "imageUrl": "https://images.pokemontcg.io/bw5/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/80_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "sm1-99", + "imageUrl": "https://images.pokemontcg.io/sm1/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/99_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "pl4-76", + "imageUrl": "https://images.pokemontcg.io/pl4/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/76_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "ex4-22", + "imageUrl": "https://images.pokemontcg.io/ex4/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex4/22_hires.png", + "name": "Team Magma's Rhydon", + "nationalPokedexNumber": 112, + "set": "Team Magma vs Team Aqua", + "setCode": "ex4" + }, + { + "id": "hgss2-49", + "imageUrl": "https://images.pokemontcg.io/hgss2/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/49_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex6-6", + "imageUrl": "https://images.pokemontcg.io/ex6/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/6_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "bw10-71", + "imageUrl": "https://images.pokemontcg.io/bw10/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/71_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "ex6-30", + "imageUrl": "https://images.pokemontcg.io/ex6/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/30_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm12-5", + "imageUrl": "https://images.pokemontcg.io/sm12/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/5_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": null, + "setCode": "sm12" + }, + { + "id": "bw9-18", + "imageUrl": "https://images.pokemontcg.io/bw9/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/18_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "ex7-58", + "imageUrl": "https://images.pokemontcg.io/ex7/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/58_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "gym2-87", + "imageUrl": "https://images.pokemontcg.io/gym2/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/87_hires.png", + "name": "Misty's Horsea", + "nationalPokedexNumber": 116, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "bw11-1", + "imageUrl": "https://images.pokemontcg.io/bw11/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/1_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "col1-72", + "imageUrl": "https://images.pokemontcg.io/col1/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/72_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "ex5-46", + "imageUrl": "https://images.pokemontcg.io/ex5/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/46_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "base6-35", + "imageUrl": "https://images.pokemontcg.io/base6/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/35_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "pl3-80", + "imageUrl": "https://images.pokemontcg.io/pl3/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/80_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "neo1-62", + "imageUrl": "https://images.pokemontcg.io/neo1/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/62_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo4-31", + "imageUrl": "https://images.pokemontcg.io/neo4/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/31_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex13-66", + "imageUrl": "https://images.pokemontcg.io/ex13/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/66_hires.png", + "name": "Horsea δ", + "nationalPokedexNumber": 116, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "smp-SM188", + "imageUrl": "https://images.pokemontcg.io/smp/SM188.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM188_hires.png", + "name": "Kangaskhan-GX", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "smp" + }, + { + "id": "sm75-16", + "imageUrl": "https://images.pokemontcg.io/sm75/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/16_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "sm115-46", + "imageUrl": "https://images.pokemontcg.io/sm115/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/46_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-47", + "imageUrl": "https://images.pokemontcg.io/sm115/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/47_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": null, + "setCode": "sm115" + }, + { + "id": "xy4-80", + "imageUrl": "https://images.pokemontcg.io/xy4/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/80_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "gym1-79", + "imageUrl": "https://images.pokemontcg.io/gym1/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/79_hires.png", + "name": "Erika's Tangela", + "nationalPokedexNumber": 114, + "set": null, + "setCode": "gym1" + }, + { + "id": "sm75-15", + "imageUrl": "https://images.pokemontcg.io/sm75/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/15_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "ecard2-69", + "imageUrl": "https://images.pokemontcg.io/ecard2/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/69_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-85", + "imageUrl": "https://images.pokemontcg.io/ecard2/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/85_hires.png", + "name": "Horsea", + "nationalPokedexNumber": 116, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-112", + "imageUrl": "https://images.pokemontcg.io/ecard2/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/112_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "sm75-55", + "imageUrl": "https://images.pokemontcg.io/sm75/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/55_hires.png", + "name": "Kangaskhan", + "nationalPokedexNumber": 115, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "pl4-77", + "imageUrl": "https://images.pokemontcg.io/pl4/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/77_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "base4-59", + "imageUrl": "https://images.pokemontcg.io/base4/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/59_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": null, + "setCode": "base4" + }, + { + "id": "base4-96", + "imageUrl": "https://images.pokemontcg.io/base4/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/96_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": null, + "setCode": "base4" + }, + { + "id": "base1-66", + "imageUrl": "https://images.pokemontcg.io/base1/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/66_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base4-3", + "imageUrl": "https://images.pokemontcg.io/base4/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/3_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": null, + "setCode": "base4" + }, + { + "id": "swsh1-98", + "imageUrl": "https://images.pokemontcg.io/swsh1/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/98_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "sm8-152", + "imageUrl": "https://images.pokemontcg.io/sm8/152.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/152_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "xy12-8", + "imageUrl": "https://images.pokemontcg.io/xy12/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/8_hires.png", + "name": "Tangela", + "nationalPokedexNumber": 114, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-70", + "imageUrl": "https://images.pokemontcg.io/xy12/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/70_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy5-75", + "imageUrl": "https://images.pokemontcg.io/xy5/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/75_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "ecard3-29", + "imageUrl": "https://images.pokemontcg.io/ecard3/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/29_hires.png", + "name": "Rhydon", + "nationalPokedexNumber": 112, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "base1-3", + "imageUrl": "https://images.pokemontcg.io/base1/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/3_hires.png", + "name": "Chansey", + "nationalPokedexNumber": 113, + "set": "Base", + "setCode": "base1" + }, + { + "id": "ex8-48", + "imageUrl": "https://images.pokemontcg.io/ex8/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/48_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "ex8-61", + "imageUrl": "https://images.pokemontcg.io/ex8/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/61_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "dp1-62", + "imageUrl": "https://images.pokemontcg.io/dp1/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/62_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "ex11-85", + "imageUrl": "https://images.pokemontcg.io/ex11/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/85_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "dp1-84", + "imageUrl": "https://images.pokemontcg.io/dp1/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/84_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "ecard3-178", + "imageUrl": "https://images.pokemontcg.io/ecard3/178.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/178_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex11-15", + "imageUrl": "https://images.pokemontcg.io/ex11/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/15_hires.png", + "name": "Starmie δ", + "nationalPokedexNumber": 121, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ecard3-104", + "imageUrl": "https://images.pokemontcg.io/ecard3/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/104_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "xy1-33", + "imageUrl": "https://images.pokemontcg.io/xy1/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/33_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "ex3-40", + "imageUrl": "https://images.pokemontcg.io/ex3/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/40_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex3-39", + "imageUrl": "https://images.pokemontcg.io/ex3/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/39_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "base4-60", + "imageUrl": "https://images.pokemontcg.io/base4/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/60_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": null, + "setCode": "base4" + }, + { + "id": "ex11-30", + "imageUrl": "https://images.pokemontcg.io/ex11/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/30_hires.png", + "name": "Starmie δ", + "nationalPokedexNumber": 121, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex1-55", + "imageUrl": "https://images.pokemontcg.io/ex1/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/55_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "base2-53", + "imageUrl": "https://images.pokemontcg.io/base2/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/53_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": null, + "setCode": "base2" + }, + { + "id": "ecard2-78", + "imageUrl": "https://images.pokemontcg.io/ecard2/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/78_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "hgss1-53", + "imageUrl": "https://images.pokemontcg.io/hgss1/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/53_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "dp6-71", + "imageUrl": "https://images.pokemontcg.io/dp6/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/71_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "ex11-84", + "imageUrl": "https://images.pokemontcg.io/ex11/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/84_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "neo3-25", + "imageUrl": "https://images.pokemontcg.io/neo3/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/25_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "sm10-49", + "imageUrl": "https://images.pokemontcg.io/sm10/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/49_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": null, + "setCode": "sm10" + }, + { + "id": "dp6-122", + "imageUrl": "https://images.pokemontcg.io/dp6/122.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/122_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "xy8-28", + "imageUrl": "https://images.pokemontcg.io/xy8/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/28_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "xy8-29", + "imageUrl": "https://images.pokemontcg.io/xy8/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/29_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "xy8-30", + "imageUrl": "https://images.pokemontcg.io/xy8/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/30_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "neo3-56", + "imageUrl": "https://images.pokemontcg.io/neo3/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/56_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "gym2-92", + "imageUrl": "https://images.pokemontcg.io/gym2/92.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/92_hires.png", + "name": "Misty's Staryu", + "nationalPokedexNumber": 120, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "dp6-70", + "imageUrl": "https://images.pokemontcg.io/dp6/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/70_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "hgss1-84", + "imageUrl": "https://images.pokemontcg.io/hgss1/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/84_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "sm4-15", + "imageUrl": "https://images.pokemontcg.io/sm4/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/15_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "xy8-27", + "imageUrl": "https://images.pokemontcg.io/xy8/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/27_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "pl3-43", + "imageUrl": "https://images.pokemontcg.io/pl3/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/43_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pl3-107", + "imageUrl": "https://images.pokemontcg.io/pl3/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/107_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "xy12-30", + "imageUrl": "https://images.pokemontcg.io/xy12/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/30_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm4-16", + "imageUrl": "https://images.pokemontcg.io/sm4/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/16_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "neo1-48", + "imageUrl": "https://images.pokemontcg.io/neo1/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/48_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "gym1-30", + "imageUrl": "https://images.pokemontcg.io/gym1/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/30_hires.png", + "name": "Misty's Goldeen", + "nationalPokedexNumber": 118, + "set": null, + "setCode": "gym1" + }, + { + "id": "ex5-75", + "imageUrl": "https://images.pokemontcg.io/ex5/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/75_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "pl2-50", + "imageUrl": "https://images.pokemontcg.io/pl2/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/50_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "xy12-31", + "imageUrl": "https://images.pokemontcg.io/xy12/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/31_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "neo3-45", + "imageUrl": "https://images.pokemontcg.io/neo3/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/45_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "hgss2-40", + "imageUrl": "https://images.pokemontcg.io/hgss2/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/40_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "base4-94", + "imageUrl": "https://images.pokemontcg.io/base4/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/94_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": null, + "setCode": "base4" + }, + { + "id": "pl2-83", + "imageUrl": "https://images.pokemontcg.io/pl2/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/83_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "ecard1-111", + "imageUrl": "https://images.pokemontcg.io/ecard1/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/111_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex1-21", + "imageUrl": "https://images.pokemontcg.io/ex1/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/21_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "sm10-48", + "imageUrl": "https://images.pokemontcg.io/sm10/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/48_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex8-77", + "imageUrl": "https://images.pokemontcg.io/ex8/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/77_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "ex8-24", + "imageUrl": "https://images.pokemontcg.io/ex8/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/24_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "sm9-65", + "imageUrl": "https://images.pokemontcg.io/sm9/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/65_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": null, + "setCode": "sm9" + }, + { + "id": "ecard3-30", + "imageUrl": "https://images.pokemontcg.io/ecard3/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/30_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex7-48", + "imageUrl": "https://images.pokemontcg.io/ex7/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/48_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "base4-95", + "imageUrl": "https://images.pokemontcg.io/base4/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/95_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": null, + "setCode": "base4" + }, + { + "id": "base1-65", + "imageUrl": "https://images.pokemontcg.io/base1/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/65_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Base", + "setCode": "base1" + }, + { + "id": "base6-63", + "imageUrl": "https://images.pokemontcg.io/base6/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/63_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base2-46", + "imageUrl": "https://images.pokemontcg.io/base2/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/46_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": null, + "setCode": "base2" + }, + { + "id": "base4-76", + "imageUrl": "https://images.pokemontcg.io/base4/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/76_hires.png", + "name": "Goldeen", + "nationalPokedexNumber": 118, + "set": null, + "setCode": "base4" + }, + { + "id": "ex5-49", + "imageUrl": "https://images.pokemontcg.io/ex5/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/49_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "sm115-13", + "imageUrl": "https://images.pokemontcg.io/sm115/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/13_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": null, + "setCode": "sm115" + }, + { + "id": "ex13-52", + "imageUrl": "https://images.pokemontcg.io/ex13/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/52_hires.png", + "name": "Seadra δ", + "nationalPokedexNumber": 117, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "sm115-14", + "imageUrl": "https://images.pokemontcg.io/sm115/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/14_hires.png", + "name": "Starmie-GX", + "nationalPokedexNumber": 121, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm3-30", + "imageUrl": "https://images.pokemontcg.io/sm3/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/30_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "ru1-5", + "imageUrl": "https://images.pokemontcg.io/ru1/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ru1/5_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Pokémon Rumble", + "setCode": "ru1" + }, + { + "id": "xy5-31", + "imageUrl": "https://images.pokemontcg.io/xy5/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/31_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "gym1-9", + "imageUrl": "https://images.pokemontcg.io/gym1/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/9_hires.png", + "name": "Misty's Seadra", + "nationalPokedexNumber": 117, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-55", + "imageUrl": "https://images.pokemontcg.io/gym1/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/55_hires.png", + "name": "Misty's Seaking", + "nationalPokedexNumber": 119, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-85", + "imageUrl": "https://images.pokemontcg.io/gym1/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/85_hires.png", + "name": "Misty's Goldeen", + "nationalPokedexNumber": 118, + "set": null, + "setCode": "gym1" + }, + { + "id": "gym1-90", + "imageUrl": "https://images.pokemontcg.io/gym1/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/90_hires.png", + "name": "Misty's Staryu", + "nationalPokedexNumber": 120, + "set": null, + "setCode": "gym1" + }, + { + "id": "sm75-17", + "imageUrl": "https://images.pokemontcg.io/sm75/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/17_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "ecard2-58", + "imageUrl": "https://images.pokemontcg.io/ecard2/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/58_hires.png", + "name": "Seadra", + "nationalPokedexNumber": 117, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base1-64", + "imageUrl": "https://images.pokemontcg.io/base1/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/64_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Base", + "setCode": "base1" + }, + { + "id": "sm9-28", + "imageUrl": "https://images.pokemontcg.io/sm9/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/28_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": null, + "setCode": "sm9" + }, + { + "id": "ecard2-59", + "imageUrl": "https://images.pokemontcg.io/ecard2/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/59_hires.png", + "name": "Seaking", + "nationalPokedexNumber": 119, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "xy5-32", + "imageUrl": "https://images.pokemontcg.io/xy5/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/32_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "xy5-73", + "imageUrl": "https://images.pokemontcg.io/xy5/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/73_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "ecard3-44", + "imageUrl": "https://images.pokemontcg.io/ecard3/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/44_hires.png", + "name": "Starmie", + "nationalPokedexNumber": 121, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-103", + "imageUrl": "https://images.pokemontcg.io/ecard3/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/103_hires.png", + "name": "Staryu", + "nationalPokedexNumber": 120, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "xy12-32", + "imageUrl": "https://images.pokemontcg.io/xy12/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/32_hires.png", + "name": "Starmie BREAK", + "nationalPokedexNumber": 121, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ex15-22", + "imageUrl": "https://images.pokemontcg.io/ex15/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/22_hires.png", + "name": "Seadra δ", + "nationalPokedexNumber": 117, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-31", + "imageUrl": "https://images.pokemontcg.io/ex15/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/31_hires.png", + "name": "Horsea δ", + "nationalPokedexNumber": 116, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-37", + "imageUrl": "https://images.pokemontcg.io/ex15/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/37_hires.png", + "name": "Seadra δ", + "nationalPokedexNumber": 117, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "hgss4-42", + "imageUrl": "https://images.pokemontcg.io/hgss4/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/42_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "hgss3-36", + "imageUrl": "https://images.pokemontcg.io/hgss3/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/36_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "col1-62", + "imageUrl": "https://images.pokemontcg.io/col1/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/62_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "swsh2-29", + "imageUrl": "https://images.pokemontcg.io/swsh2/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/29_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "xy1-91", + "imageUrl": "https://images.pokemontcg.io/xy1/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/91_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "g1-16", + "imageUrl": "https://images.pokemontcg.io/g1/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/16_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "hgss2-52", + "imageUrl": "https://images.pokemontcg.io/hgss2/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/52_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "xy5-101", + "imageUrl": "https://images.pokemontcg.io/xy5/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy5/101_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "Primal Clash", + "setCode": "xy5" + }, + { + "id": "bw6-20", + "imageUrl": "https://images.pokemontcg.io/bw6/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw6/20_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Dragons Exalted", + "setCode": "bw6" + }, + { + "id": "sma-SV1", + "imageUrl": "https://images.pokemontcg.io/sma/SV1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sma/SV1_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Shiny Vault", + "setCode": "sma" + }, + { + "id": "ex12-21", + "imageUrl": "https://images.pokemontcg.io/ex12/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/21_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "dp3-93", + "imageUrl": "https://images.pokemontcg.io/dp3/93.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/93_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex1-97", + "imageUrl": "https://images.pokemontcg.io/ex1/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/97_hires.png", + "name": "Electabuzz ex", + "nationalPokedexNumber": 125, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "ex1-100", + "imageUrl": "https://images.pokemontcg.io/ex1/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/100_hires.png", + "name": "Magmar ex", + "nationalPokedexNumber": 126, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "ecard1-83", + "imageUrl": "https://images.pokemontcg.io/ecard1/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/83_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "base2-26", + "imageUrl": "https://images.pokemontcg.io/base2/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/26_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": null, + "setCode": "base2" + }, + { + "id": "ex15-17", + "imageUrl": "https://images.pokemontcg.io/ex15/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/17_hires.png", + "name": "Jynx δ", + "nationalPokedexNumber": 124, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ecard1-86", + "imageUrl": "https://images.pokemontcg.io/ecard1/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/86_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex10-28", + "imageUrl": "https://images.pokemontcg.io/ex10/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/28_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "bw7-7", + "imageUrl": "https://images.pokemontcg.io/bw7/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/7_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "basep-45", + "imageUrl": "https://images.pokemontcg.io/basep/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/45_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "bw7-53", + "imageUrl": "https://images.pokemontcg.io/bw7/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/53_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "dp5-46", + "imageUrl": "https://images.pokemontcg.io/dp5/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/46_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "bw9-47", + "imageUrl": "https://images.pokemontcg.io/bw9/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/47_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "dp2-30", + "imageUrl": "https://images.pokemontcg.io/dp2/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/30_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "xy10-67", + "imageUrl": "https://images.pokemontcg.io/xy10/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/67_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "gym1-94", + "imageUrl": "https://images.pokemontcg.io/gym1/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/94_hires.png", + "name": "Sabrina's Mr. Mime", + "nationalPokedexNumber": 122, + "set": null, + "setCode": "gym1" + }, + { + "id": "dp2-54", + "imageUrl": "https://images.pokemontcg.io/dp2/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/54_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "pl3-37", + "imageUrl": "https://images.pokemontcg.io/pl3/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/37_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "dp7-49", + "imageUrl": "https://images.pokemontcg.io/dp7/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/49_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "sm7-4", + "imageUrl": "https://images.pokemontcg.io/sm7/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/4_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "neo1-33", + "imageUrl": "https://images.pokemontcg.io/neo1/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/33_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo4-55", + "imageUrl": "https://images.pokemontcg.io/neo4/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/55_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex6-29", + "imageUrl": "https://images.pokemontcg.io/ex6/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/29_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex7-44", + "imageUrl": "https://images.pokemontcg.io/ex7/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/44_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "xy3-37", + "imageUrl": "https://images.pokemontcg.io/xy3/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/37_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "gym1-13", + "imageUrl": "https://images.pokemontcg.io/gym1/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/13_hires.png", + "name": "Rocket's Scyther", + "nationalPokedexNumber": 123, + "set": null, + "setCode": "gym1" + }, + { + "id": "sm9-68", + "imageUrl": "https://images.pokemontcg.io/sm9/68.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/68_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": null, + "setCode": "sm9" + }, + { + "id": "gym1-27", + "imageUrl": "https://images.pokemontcg.io/gym1/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/27_hires.png", + "name": "Lt. Surge's Electabuzz", + "nationalPokedexNumber": 125, + "set": null, + "setCode": "gym1" + }, + { + "id": "basep-2", + "imageUrl": "https://images.pokemontcg.io/basep/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/2_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "pl2-28", + "imageUrl": "https://images.pokemontcg.io/pl2/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/28_hires.png", + "name": "Mr. Mime 4", + "nationalPokedexNumber": 122, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "ex1-102", + "imageUrl": "https://images.pokemontcg.io/ex1/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/102_hires.png", + "name": "Scyther ex", + "nationalPokedexNumber": 123, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "hgss1-69", + "imageUrl": "https://images.pokemontcg.io/hgss1/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/69_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "sm8-3", + "imageUrl": "https://images.pokemontcg.io/sm8/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/3_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "xy3-10", + "imageUrl": "https://images.pokemontcg.io/xy3/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/10_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "bw5-4", + "imageUrl": "https://images.pokemontcg.io/bw5/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/4_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "g1-36", + "imageUrl": "https://images.pokemontcg.io/g1/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/36_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "swsh2-4", + "imageUrl": "https://images.pokemontcg.io/swsh2/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/4_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "swsh2-58", + "imageUrl": "https://images.pokemontcg.io/swsh2/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/58_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "ex2-35", + "imageUrl": "https://images.pokemontcg.io/ex2/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/35_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "hgss3-65", + "imageUrl": "https://images.pokemontcg.io/hgss3/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/65_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "base6-26", + "imageUrl": "https://images.pokemontcg.io/base6/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/26_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "xy9-42", + "imageUrl": "https://images.pokemontcg.io/xy9/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/42_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "base4-24", + "imageUrl": "https://images.pokemontcg.io/base4/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/24_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": null, + "setCode": "base4" + }, + { + "id": "xy8-97", + "imageUrl": "https://images.pokemontcg.io/xy8/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/97_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "sm8-71", + "imageUrl": "https://images.pokemontcg.io/sm8/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/71_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "neo1-40", + "imageUrl": "https://images.pokemontcg.io/neo1/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/40_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "base3-39", + "imageUrl": "https://images.pokemontcg.io/base3/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/39_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "basep-46", + "imageUrl": "https://images.pokemontcg.io/basep/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/46_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-44", + "imageUrl": "https://images.pokemontcg.io/basep/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/44_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "hgss4-33", + "imageUrl": "https://images.pokemontcg.io/hgss4/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/33_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm35-38", + "imageUrl": "https://images.pokemontcg.io/sm35/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/38_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "base2-22", + "imageUrl": "https://images.pokemontcg.io/base2/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/22_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": null, + "setCode": "base2" + }, + { + "id": "sm5-18", + "imageUrl": "https://images.pokemontcg.io/sm5/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm5/18_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Ultra Prism", + "setCode": "sm5" + }, + { + "id": "base2-10", + "imageUrl": "https://images.pokemontcg.io/base2/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/10_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-110", + "imageUrl": "https://images.pokemontcg.io/ex6/110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/110_hires.png", + "name": "Mr. Mime ex", + "nationalPokedexNumber": 122, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-111", + "imageUrl": "https://images.pokemontcg.io/ex6/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/111_hires.png", + "name": "Mr. Mime ex", + "nationalPokedexNumber": 122, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "pl1-128", + "imageUrl": "https://images.pokemontcg.io/pl1/128.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/128_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "pl1-130", + "imageUrl": "https://images.pokemontcg.io/pl1/130.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/130_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "ecard2-95", + "imageUrl": "https://images.pokemontcg.io/ecard2/95.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/95_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base2-6", + "imageUrl": "https://images.pokemontcg.io/base2/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/6_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": null, + "setCode": "base2" + }, + { + "id": "gym1-59", + "imageUrl": "https://images.pokemontcg.io/gym1/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/59_hires.png", + "name": "Sabrina's Jynx", + "nationalPokedexNumber": 124, + "set": null, + "setCode": "gym1" + }, + { + "id": "ecard2-57", + "imageUrl": "https://images.pokemontcg.io/ecard2/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/57_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ecard2-106", + "imageUrl": "https://images.pokemontcg.io/ecard2/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/106_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "base1-20", + "imageUrl": "https://images.pokemontcg.io/base1/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/20_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Base", + "setCode": "base1" + }, + { + "id": "dp3-30", + "imageUrl": "https://images.pokemontcg.io/dp3/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/30_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "dp3-87", + "imageUrl": "https://images.pokemontcg.io/dp3/87.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/87_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base4-27", + "imageUrl": "https://images.pokemontcg.io/base4/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/27_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": null, + "setCode": "base4" + }, + { + "id": "ex10-46", + "imageUrl": "https://images.pokemontcg.io/ex10/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/46_hires.png", + "name": "Scyther", + "nationalPokedexNumber": 123, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "col1-29", + "imageUrl": "https://images.pokemontcg.io/col1/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/29_hires.png", + "name": "Mr. Mime", + "nationalPokedexNumber": 122, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "pl3-65", + "imageUrl": "https://images.pokemontcg.io/pl3/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/65_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm3-42", + "imageUrl": "https://images.pokemontcg.io/sm3/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/42_hires.png", + "name": "Electabuzz", + "nationalPokedexNumber": 125, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "sm115-30", + "imageUrl": "https://images.pokemontcg.io/sm115/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/30_hires.png", + "name": "Jynx", + "nationalPokedexNumber": 124, + "set": null, + "setCode": "sm115" + }, + { + "id": "sm115-10", + "imageUrl": "https://images.pokemontcg.io/sm115/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/10_hires.png", + "name": "Magmar", + "nationalPokedexNumber": 126, + "set": null, + "setCode": "sm115" + }, + { + "id": "xyp-XY143", + "imageUrl": "https://images.pokemontcg.io/xyp/XY143.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY143_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "ex3-32", + "imageUrl": "https://images.pokemontcg.io/ex3/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/32_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "swsh2-39", + "imageUrl": "https://images.pokemontcg.io/swsh2/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/39_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "swsh2-40", + "imageUrl": "https://images.pokemontcg.io/swsh2/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh2/40_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Rebel Clash", + "setCode": "swsh2" + }, + { + "id": "swsh1-49", + "imageUrl": "https://images.pokemontcg.io/swsh1/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/49_hires.png", + "name": "Lapras V", + "nationalPokedexNumber": 131, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "swsh1-189", + "imageUrl": "https://images.pokemontcg.io/swsh1/189.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/189_hires.png", + "name": "Lapras V", + "nationalPokedexNumber": 131, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "hgss2-41", + "imageUrl": "https://images.pokemontcg.io/hgss2/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss2/41_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "HS—Unleashed", + "setCode": "hgss2" + }, + { + "id": "ex15-9", + "imageUrl": "https://images.pokemontcg.io/ex15/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/9_hires.png", + "name": "Pinsir δ", + "nationalPokedexNumber": 127, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex3-60", + "imageUrl": "https://images.pokemontcg.io/ex3/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/60_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "bw6-23", + "imageUrl": "https://images.pokemontcg.io/bw6/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw6/23_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Dragons Exalted", + "setCode": "bw6" + }, + { + "id": "bw6-24", + "imageUrl": "https://images.pokemontcg.io/bw6/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw6/24_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Dragons Exalted", + "setCode": "bw6" + }, + { + "id": "sm9-31", + "imageUrl": "https://images.pokemontcg.io/sm9/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/31_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": null, + "setCode": "sm9" + }, + { + "id": "bw11-30", + "imageUrl": "https://images.pokemontcg.io/bw11/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/30_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "ex6-67", + "imageUrl": "https://images.pokemontcg.io/ex6/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/67_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm9-129", + "imageUrl": "https://images.pokemontcg.io/sm9/129.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/129_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-160", + "imageUrl": "https://images.pokemontcg.io/sm9/160.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/160_hires.png", + "name": "Magikarp & Wailord-GX", + "nationalPokedexNumber": 129, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-161", + "imageUrl": "https://images.pokemontcg.io/sm9/161.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/161_hires.png", + "name": "Magikarp & Wailord-GX", + "nationalPokedexNumber": 129, + "set": null, + "setCode": "sm9" + }, + { + "id": "ex5-13", + "imageUrl": "https://images.pokemontcg.io/ex5/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/13_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "ex1-99", + "imageUrl": "https://images.pokemontcg.io/ex1/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/99_hires.png", + "name": "Lapras ex", + "nationalPokedexNumber": 131, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "swsh45sv-SV111", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV111_hires.png", + "name": "Lapras VMAX", + "nationalPokedexNumber": 131, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "ex7-36", + "imageUrl": "https://images.pokemontcg.io/ex7/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/36_hires.png", + "name": "Dark Gyarados", + "nationalPokedexNumber": 130, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ex7-65", + "imageUrl": "https://images.pokemontcg.io/ex7/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/65_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "swsh1-50", + "imageUrl": "https://images.pokemontcg.io/swsh1/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh1/50_hires.png", + "name": "Lapras VMAX", + "nationalPokedexNumber": 131, + "set": "Sword & Shield", + "setCode": "swsh1" + }, + { + "id": "ex13-8", + "imageUrl": "https://images.pokemontcg.io/ex13/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/8_hires.png", + "name": "Gyarados δ", + "nationalPokedexNumber": 130, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "dp3-59", + "imageUrl": "https://images.pokemontcg.io/dp3/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/59_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "ex13-102", + "imageUrl": "https://images.pokemontcg.io/ex13/102.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/102_hires.png", + "name": "Gyarados Star δ", + "nationalPokedexNumber": 130, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ecard1-118", + "imageUrl": "https://images.pokemontcg.io/ecard1/118.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/118_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "hgss3-32", + "imageUrl": "https://images.pokemontcg.io/hgss3/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/32_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "dp6-74", + "imageUrl": "https://images.pokemontcg.io/dp6/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/74_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "xy9-26", + "imageUrl": "https://images.pokemontcg.io/xy9/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/26_hires.png", + "name": "Gyarados-EX", + "nationalPokedexNumber": 130, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy9-115", + "imageUrl": "https://images.pokemontcg.io/xy9/115.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/115_hires.png", + "name": "M Gyarados-EX", + "nationalPokedexNumber": 130, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy8-3", + "imageUrl": "https://images.pokemontcg.io/xy8/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/3_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "xy1-35", + "imageUrl": "https://images.pokemontcg.io/xy1/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy1/35_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "XY", + "setCode": "xy1" + }, + { + "id": "dp2-26", + "imageUrl": "https://images.pokemontcg.io/dp2/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/26_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp7-65", + "imageUrl": "https://images.pokemontcg.io/dp7/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/65_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "dp7-19", + "imageUrl": "https://images.pokemontcg.io/dp7/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp7/19_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Stormfront", + "setCode": "dp7" + }, + { + "id": "pl1-79", + "imageUrl": "https://images.pokemontcg.io/pl1/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/79_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "dp2-89", + "imageUrl": "https://images.pokemontcg.io/dp2/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/89_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "swsh3-134", + "imageUrl": "https://images.pokemontcg.io/swsh3/134.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/134_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "ecard1-133", + "imageUrl": "https://images.pokemontcg.io/ecard1/133.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/133_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "swsh45sv-SV110", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV110_hires.png", + "name": "Lapras V", + "nationalPokedexNumber": 131, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "pl3-110", + "imageUrl": "https://images.pokemontcg.io/pl3/110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/110_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base6-52", + "imageUrl": "https://images.pokemontcg.io/base6/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/52_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "gym2-13", + "imageUrl": "https://images.pokemontcg.io/gym2/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/13_hires.png", + "name": "Misty's Gyarados", + "nationalPokedexNumber": 130, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm9-9", + "imageUrl": "https://images.pokemontcg.io/sm9/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/9_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": null, + "setCode": "sm9" + }, + { + "id": "pl3-75", + "imageUrl": "https://images.pokemontcg.io/pl3/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/75_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "sm8-4", + "imageUrl": "https://images.pokemontcg.io/sm8/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/4_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "base3-25", + "imageUrl": "https://images.pokemontcg.io/base3/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/25_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "sm4-112", + "imageUrl": "https://images.pokemontcg.io/sm4/112.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm4/112_hires.png", + "name": "Gyarados-GX", + "nationalPokedexNumber": 130, + "set": "Crimson Invasion", + "setCode": "sm4" + }, + { + "id": "base2-25", + "imageUrl": "https://images.pokemontcg.io/base2/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/25_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": null, + "setCode": "base2" + }, + { + "id": "g1-22", + "imageUrl": "https://images.pokemontcg.io/g1/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/22_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "sm75-21", + "imageUrl": "https://images.pokemontcg.io/sm75/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/21_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "gym1-64", + "imageUrl": "https://images.pokemontcg.io/gym1/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym1/64_hires.png", + "name": "Blaine's Tauros", + "nationalPokedexNumber": 128, + "set": null, + "setCode": "gym1" + }, + { + "id": "hgss1-72", + "imageUrl": "https://images.pokemontcg.io/hgss1/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/72_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "xy12-33", + "imageUrl": "https://images.pokemontcg.io/xy12/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/33_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy12-34", + "imageUrl": "https://images.pokemontcg.io/xy12/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/34_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "neo3-66", + "imageUrl": "https://images.pokemontcg.io/neo3/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo3/66_hires.png", + "name": "Shining Magikarp", + "nationalPokedexNumber": 129, + "set": "Neo Revelation", + "setCode": "neo3" + }, + { + "id": "bw11-31", + "imageUrl": "https://images.pokemontcg.io/bw11/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/31_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "bw4-26", + "imageUrl": "https://images.pokemontcg.io/bw4/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/26_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "g1-9", + "imageUrl": "https://images.pokemontcg.io/g1/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/9_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "sm9-183", + "imageUrl": "https://images.pokemontcg.io/sm9/183.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/183_hires.png", + "name": "Magikarp & Wailord-GX", + "nationalPokedexNumber": 129, + "set": null, + "setCode": "sm9" + }, + { + "id": "base6-12", + "imageUrl": "https://images.pokemontcg.io/base6/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/12_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "dp4-21", + "imageUrl": "https://images.pokemontcg.io/dp4/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/21_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "ex8-64", + "imageUrl": "https://images.pokemontcg.io/ex8/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/64_hires.png", + "name": "Magikarp", + "nationalPokedexNumber": 129, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "pop2-5", + "imageUrl": "https://images.pokemontcg.io/pop2/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop2/5_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "POP Series 2", + "setCode": "pop2" + }, + { + "id": "sm1-35", + "imageUrl": "https://images.pokemontcg.io/sm1/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/35_hires.png", + "name": "Lapras-GX", + "nationalPokedexNumber": 131, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "xy9-28", + "imageUrl": "https://images.pokemontcg.io/xy9/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/28_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "hgss1-123", + "imageUrl": "https://images.pokemontcg.io/hgss1/123.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/123_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "sm1-100", + "imageUrl": "https://images.pokemontcg.io/sm1/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/100_hires.png", + "name": "Tauros-GX", + "nationalPokedexNumber": 128, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "swsh6-29", + "imageUrl": "https://images.pokemontcg.io/swsh6/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/29_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": null, + "setCode": "swsh6" + }, + { + "id": "ex8-8", + "imageUrl": "https://images.pokemontcg.io/ex8/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex8/8_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Deoxys", + "setCode": "ex8" + }, + { + "id": "bw10-17", + "imageUrl": "https://images.pokemontcg.io/bw10/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/17_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "hsp-HGSS14", + "imageUrl": "https://images.pokemontcg.io/hsp/HGSS14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hsp/HGSS14_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "HGSS Black Star Promos", + "setCode": "hsp" + }, + { + "id": "pl1-98", + "imageUrl": "https://images.pokemontcg.io/pl1/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl1/98_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "Platinum", + "setCode": "pl1" + }, + { + "id": "ex6-16", + "imageUrl": "https://images.pokemontcg.io/ex6/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/16_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex14-12", + "imageUrl": "https://images.pokemontcg.io/ex14/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex14/12_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": "Crystal Guardians", + "setCode": "ex14" + }, + { + "id": "base2-47", + "imageUrl": "https://images.pokemontcg.io/base2/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/47_hires.png", + "name": "Tauros", + "nationalPokedexNumber": 128, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-109", + "imageUrl": "https://images.pokemontcg.io/ex6/109.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/109_hires.png", + "name": "Gyarados ex", + "nationalPokedexNumber": 130, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex13-69", + "imageUrl": "https://images.pokemontcg.io/ex13/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/69_hires.png", + "name": "Magikarp δ", + "nationalPokedexNumber": 129, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "gym2-24", + "imageUrl": "https://images.pokemontcg.io/gym2/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/24_hires.png", + "name": "Giovanni's Pinsir", + "nationalPokedexNumber": 127, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "ex12-8", + "imageUrl": "https://images.pokemontcg.io/ex12/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/8_hires.png", + "name": "Lapras", + "nationalPokedexNumber": 131, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-24", + "imageUrl": "https://images.pokemontcg.io/ex12/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/24_hires.png", + "name": "Pinsir", + "nationalPokedexNumber": 127, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "col1-7", + "imageUrl": "https://images.pokemontcg.io/col1/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/7_hires.png", + "name": "Gyarados", + "nationalPokedexNumber": 130, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "bw5-12", + "imageUrl": "https://images.pokemontcg.io/bw5/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/12_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "bw5-37", + "imageUrl": "https://images.pokemontcg.io/bw5/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/37_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "det1-17", + "imageUrl": "https://images.pokemontcg.io/det1/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/det1/17_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Detective Pikachu", + "setCode": "det1" + }, + { + "id": "dp5-62", + "imageUrl": "https://images.pokemontcg.io/dp5/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/62_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "ecard3-13", + "imageUrl": "https://images.pokemontcg.io/ecard3/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/13_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "col1-44", + "imageUrl": "https://images.pokemontcg.io/col1/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/44_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "hgss3-41", + "imageUrl": "https://images.pokemontcg.io/hgss3/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/41_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "col1-56", + "imageUrl": "https://images.pokemontcg.io/col1/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/56_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "hgss3-48", + "imageUrl": "https://images.pokemontcg.io/hgss3/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/48_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ex11-37", + "imageUrl": "https://images.pokemontcg.io/ex11/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/37_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex11-62", + "imageUrl": "https://images.pokemontcg.io/ex11/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/62_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex11-108", + "imageUrl": "https://images.pokemontcg.io/ex11/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/108_hires.png", + "name": "Flareon ex", + "nationalPokedexNumber": 136, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "base5-55", + "imageUrl": "https://images.pokemontcg.io/base5/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/55_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex11-5", + "imageUrl": "https://images.pokemontcg.io/ex11/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/5_hires.png", + "name": "Flareon δ", + "nationalPokedexNumber": 136, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "base2-3", + "imageUrl": "https://images.pokemontcg.io/base2/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/3_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": null, + "setCode": "base2" + }, + { + "id": "sma-SV41", + "imageUrl": "https://images.pokemontcg.io/sma/SV41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sma/SV41_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Shiny Vault", + "setCode": "sma" + }, + { + "id": "bw7-108", + "imageUrl": "https://images.pokemontcg.io/bw7/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/108_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "ex11-69", + "imageUrl": "https://images.pokemontcg.io/ex11/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/69_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "sm12-25", + "imageUrl": "https://images.pokemontcg.io/sm12/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm12/25_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": null, + "setCode": "sm12" + }, + { + "id": "swshp-SWSH065", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH065.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH065_hires.png", + "name": "Eevee V", + "nationalPokedexNumber": 133, + "set": null, + "setCode": "swshp" + }, + { + "id": "swshp-SWSH095", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH095.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH095_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": null, + "setCode": "swshp" + }, + { + "id": "bw5-83", + "imageUrl": "https://images.pokemontcg.io/bw5/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/83_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "ex2-5", + "imageUrl": "https://images.pokemontcg.io/ex2/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/5_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex2-6", + "imageUrl": "https://images.pokemontcg.io/ex2/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/6_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "base6-9", + "imageUrl": "https://images.pokemontcg.io/base6/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/9_hires.png", + "name": "Dark Vaporeon", + "nationalPokedexNumber": 134, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex16-100", + "imageUrl": "https://images.pokemontcg.io/ex16/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/100_hires.png", + "name": "Flareon Star", + "nationalPokedexNumber": 136, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "swshp-SWSH072", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH072.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH072_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": null, + "setCode": "swshp" + }, + { + "id": "swsh4-47", + "imageUrl": "https://images.pokemontcg.io/swsh4/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh4/47_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "Vivid Voltage", + "setCode": "swsh4" + }, + { + "id": "pl2-19", + "imageUrl": "https://images.pokemontcg.io/pl2/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/19_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "bw9-20", + "imageUrl": "https://images.pokemontcg.io/bw9/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/20_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "hgss3-26", + "imageUrl": "https://images.pokemontcg.io/hgss3/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/26_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ex10-55", + "imageUrl": "https://images.pokemontcg.io/ex10/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/55_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "bw9-89", + "imageUrl": "https://images.pokemontcg.io/bw9/89.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/89_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "pl2-59", + "imageUrl": "https://images.pokemontcg.io/pl2/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/59_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "ex16-101", + "imageUrl": "https://images.pokemontcg.io/ex16/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/101_hires.png", + "name": "Jolteon Star", + "nationalPokedexNumber": 135, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "ecard3-8", + "imageUrl": "https://images.pokemontcg.io/ecard3/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/8_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "sm115-23", + "imageUrl": "https://images.pokemontcg.io/sm115/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/23_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": null, + "setCode": "sm115" + }, + { + "id": "dp5-19", + "imageUrl": "https://images.pokemontcg.io/dp5/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/19_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "swshp-SWSH094", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH094.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH094_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": null, + "setCode": "swshp" + }, + { + "id": "ecard3-54", + "imageUrl": "https://images.pokemontcg.io/ecard3/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/54_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "dp5-63", + "imageUrl": "https://images.pokemontcg.io/dp5/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/63_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "base2-20", + "imageUrl": "https://images.pokemontcg.io/base2/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/20_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": null, + "setCode": "base2" + }, + { + "id": "dp6-27", + "imageUrl": "https://images.pokemontcg.io/dp6/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/27_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp5-23", + "imageUrl": "https://images.pokemontcg.io/dp5/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/23_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "pop3-2", + "imageUrl": "https://images.pokemontcg.io/pop3/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop3/2_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "POP Series 3", + "setCode": "pop3" + }, + { + "id": "pop3-3", + "imageUrl": "https://images.pokemontcg.io/pop3/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop3/3_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "POP Series 3", + "setCode": "pop3" + }, + { + "id": "g1-24", + "imageUrl": "https://images.pokemontcg.io/g1/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/24_hires.png", + "name": "Vaporeon-EX", + "nationalPokedexNumber": 134, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "base2-51", + "imageUrl": "https://images.pokemontcg.io/base2/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/51_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": null, + "setCode": "base2" + }, + { + "id": "swsh45sv-SV118", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV118.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV118_hires.png", + "name": "Ditto V", + "nationalPokedexNumber": 132, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "swsh45sv-SV119", + "imageUrl": "https://images.pokemontcg.io/swsh45sv/SV119.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45sv/SV119_hires.png", + "name": "Ditto VMAX", + "nationalPokedexNumber": 132, + "set": null, + "setCode": "swsh45sv" + }, + { + "id": "base6-14", + "imageUrl": "https://images.pokemontcg.io/base6/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/14_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex10-19", + "imageUrl": "https://images.pokemontcg.io/ex10/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/19_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "swsh45-50", + "imageUrl": "https://images.pokemontcg.io/swsh45/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45/50_hires.png", + "name": "Ditto V", + "nationalPokedexNumber": 132, + "set": null, + "setCode": "swsh45" + }, + { + "id": "swsh45-51", + "imageUrl": "https://images.pokemontcg.io/swsh45/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45/51_hires.png", + "name": "Ditto VMAX", + "nationalPokedexNumber": 132, + "set": null, + "setCode": "swsh45" + }, + { + "id": "swsh45-52", + "imageUrl": "https://images.pokemontcg.io/swsh45/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh45/52_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": null, + "setCode": "swsh45" + }, + { + "id": "bwp-BW94", + "imageUrl": "https://images.pokemontcg.io/bwp/BW94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bwp/BW94_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "BW Black Star Promos", + "setCode": "bwp" + }, + { + "id": "base6-74", + "imageUrl": "https://images.pokemontcg.io/base6/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/74_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base3-3", + "imageUrl": "https://images.pokemontcg.io/base3/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/3_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "col1-52", + "imageUrl": "https://images.pokemontcg.io/col1/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/52_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "pl2-34", + "imageUrl": "https://images.pokemontcg.io/pl2/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/34_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "sm9-120", + "imageUrl": "https://images.pokemontcg.io/sm9/120.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/120_hires.png", + "name": "Eevee & Snorlax-GX", + "nationalPokedexNumber": 133, + "set": null, + "setCode": "sm9" + }, + { + "id": "gym2-51", + "imageUrl": "https://images.pokemontcg.io/gym2/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/51_hires.png", + "name": "Lt. Surge's Eevee", + "nationalPokedexNumber": 133, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "pl2-60", + "imageUrl": "https://images.pokemontcg.io/pl2/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/60_hires.png", + "name": "Flareon 4", + "nationalPokedexNumber": 136, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "dp5-34", + "imageUrl": "https://images.pokemontcg.io/dp5/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/34_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "sm9-171", + "imageUrl": "https://images.pokemontcg.io/sm9/171.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/171_hires.png", + "name": "Eevee & Snorlax-GX", + "nationalPokedexNumber": 133, + "set": null, + "setCode": "sm9" + }, + { + "id": "g1-28a", + "imageUrl": "https://images.pokemontcg.io/g1/28a.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/28a_hires.png", + "name": "Jolteon-EX", + "nationalPokedexNumber": 135, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "sm9-191", + "imageUrl": "https://images.pokemontcg.io/sm9/191.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/191_hires.png", + "name": "Eevee & Snorlax-GX", + "nationalPokedexNumber": 133, + "set": null, + "setCode": "sm9" + }, + { + "id": "ex11-63", + "imageUrl": "https://images.pokemontcg.io/ex11/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/63_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "pop3-12", + "imageUrl": "https://images.pokemontcg.io/pop3/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop3/12_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "POP Series 3", + "setCode": "pop3" + }, + { + "id": "ex2-25", + "imageUrl": "https://images.pokemontcg.io/ex2/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/25_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "hgss3-28", + "imageUrl": "https://images.pokemontcg.io/hgss3/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss3/28_hires.png", + "name": "Jolteon", + "nationalPokedexNumber": 135, + "set": "HS—Undaunted", + "setCode": "hgss3" + }, + { + "id": "ex2-63", + "imageUrl": "https://images.pokemontcg.io/ex2/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/63_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "pop3-6", + "imageUrl": "https://images.pokemontcg.io/pop3/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop3/6_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "POP Series 3", + "setCode": "pop3" + }, + { + "id": "ex11-35", + "imageUrl": "https://images.pokemontcg.io/ex11/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/35_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex11-36", + "imageUrl": "https://images.pokemontcg.io/ex11/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/36_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex11-39", + "imageUrl": "https://images.pokemontcg.io/ex11/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/39_hires.png", + "name": "Ditto", + "nationalPokedexNumber": 132, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "bw9-90", + "imageUrl": "https://images.pokemontcg.io/bw9/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/90_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "bw5-25", + "imageUrl": "https://images.pokemontcg.io/bw5/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/25_hires.png", + "name": "Vaporeon", + "nationalPokedexNumber": 134, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "bw5-84", + "imageUrl": "https://images.pokemontcg.io/bw5/84.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/84_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "neo4-48", + "imageUrl": "https://images.pokemontcg.io/neo4/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/48_hires.png", + "name": "Light Jolteon", + "nationalPokedexNumber": 135, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "sm1-101a", + "imageUrl": "https://images.pokemontcg.io/sm1/101a.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/101a_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "basep-11", + "imageUrl": "https://images.pokemontcg.io/basep/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/11_hires.png", + "name": "Eevee", + "nationalPokedexNumber": 133, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "ex16-56", + "imageUrl": "https://images.pokemontcg.io/ex16/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/56_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "dp5-26", + "imageUrl": "https://images.pokemontcg.io/dp5/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/26_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "ecard3-163", + "imageUrl": "https://images.pokemontcg.io/ecard3/163.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/163_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "dp5-69", + "imageUrl": "https://images.pokemontcg.io/dp5/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/69_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "hgss4-73", + "imageUrl": "https://images.pokemontcg.io/hgss4/73.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/73_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "base5-48", + "imageUrl": "https://images.pokemontcg.io/base5/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/48_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "pl4-23", + "imageUrl": "https://images.pokemontcg.io/pl4/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/23_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "ex6-47", + "imageUrl": "https://images.pokemontcg.io/ex6/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/47_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "sm9-76", + "imageUrl": "https://images.pokemontcg.io/sm9/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/76_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": null, + "setCode": "sm9" + }, + { + "id": "neo4-37", + "imageUrl": "https://images.pokemontcg.io/neo4/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/37_hires.png", + "name": "Dark Omanyte", + "nationalPokedexNumber": 138, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex12-7", + "imageUrl": "https://images.pokemontcg.io/ex12/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/7_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "sm10-154", + "imageUrl": "https://images.pokemontcg.io/sm10/154.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/154_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": null, + "setCode": "sm10" + }, + { + "id": "ex12-23", + "imageUrl": "https://images.pokemontcg.io/ex12/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/23_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex12-60", + "imageUrl": "https://images.pokemontcg.io/ex12/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/60_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "base6-27", + "imageUrl": "https://images.pokemontcg.io/base6/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/27_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex2-39", + "imageUrl": "https://images.pokemontcg.io/ex2/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/39_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex2-97", + "imageUrl": "https://images.pokemontcg.io/ex2/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/97_hires.png", + "name": "Kabutops ex", + "nationalPokedexNumber": 141, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "base6-48", + "imageUrl": "https://images.pokemontcg.io/base6/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/48_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex13-74", + "imageUrl": "https://images.pokemontcg.io/ex13/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/74_hires.png", + "name": "Omanyte δ", + "nationalPokedexNumber": 138, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "basep-15", + "imageUrl": "https://images.pokemontcg.io/basep/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/15_hires.png", + "name": "Cool Porygon", + "nationalPokedexNumber": 137, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "bw10-72", + "imageUrl": "https://images.pokemontcg.io/bw10/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw10/72_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Plasma Blast", + "setCode": "bw10" + }, + { + "id": "xy10-18", + "imageUrl": "https://images.pokemontcg.io/xy10/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/18_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy10-19", + "imageUrl": "https://images.pokemontcg.io/xy10/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/19_hires.png", + "name": "Omastar BREAK", + "nationalPokedexNumber": 139, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "dp5-6", + "imageUrl": "https://images.pokemontcg.io/dp5/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/6_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "dp5-67", + "imageUrl": "https://images.pokemontcg.io/dp5/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/67_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "ex2-19", + "imageUrl": "https://images.pokemontcg.io/ex2/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/19_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ecard3-23", + "imageUrl": "https://images.pokemontcg.io/ecard3/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/23_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex2-70", + "imageUrl": "https://images.pokemontcg.io/ex2/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/70_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex16-51", + "imageUrl": "https://images.pokemontcg.io/ex16/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/51_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "ex10-69", + "imageUrl": "https://images.pokemontcg.io/ex10/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/69_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "base6-57", + "imageUrl": "https://images.pokemontcg.io/base6/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/57_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base3-9", + "imageUrl": "https://images.pokemontcg.io/base3/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/9_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "sm9-75", + "imageUrl": "https://images.pokemontcg.io/sm9/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/75_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": null, + "setCode": "sm9" + }, + { + "id": "base3-24", + "imageUrl": "https://images.pokemontcg.io/base3/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/24_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "ex12-36", + "imageUrl": "https://images.pokemontcg.io/ex12/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/36_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "sm9-77", + "imageUrl": "https://images.pokemontcg.io/sm9/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/77_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": null, + "setCode": "sm9" + }, + { + "id": "sm9-78", + "imageUrl": "https://images.pokemontcg.io/sm9/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/78_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": null, + "setCode": "sm9" + }, + { + "id": "neo4-19", + "imageUrl": "https://images.pokemontcg.io/neo4/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/19_hires.png", + "name": "Dark Omastar", + "nationalPokedexNumber": 139, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-78", + "imageUrl": "https://images.pokemontcg.io/neo4/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/78_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-108", + "imageUrl": "https://images.pokemontcg.io/neo4/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/108_hires.png", + "name": "Shining Kabutops", + "nationalPokedexNumber": 141, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "xy12-71", + "imageUrl": "https://images.pokemontcg.io/xy12/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/71_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "sm10-155", + "imageUrl": "https://images.pokemontcg.io/sm10/155.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/155_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": null, + "setCode": "sm10" + }, + { + "id": "dp4-81", + "imageUrl": "https://images.pokemontcg.io/dp4/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp4/81_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Great Encounters", + "setCode": "dp4" + }, + { + "id": "ecard3-14", + "imageUrl": "https://images.pokemontcg.io/ecard3/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/14_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "base2-19", + "imageUrl": "https://images.pokemontcg.io/base2/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/19_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": null, + "setCode": "base2" + }, + { + "id": "ex13-13", + "imageUrl": "https://images.pokemontcg.io/ex13/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/13_hires.png", + "name": "Omastar δ", + "nationalPokedexNumber": 139, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "bw9-12", + "imageUrl": "https://images.pokemontcg.io/bw9/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/12_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "ecard3-37", + "imageUrl": "https://images.pokemontcg.io/ecard3/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/37_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-41", + "imageUrl": "https://images.pokemontcg.io/ecard3/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/41_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex16-10", + "imageUrl": "https://images.pokemontcg.io/ex16/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/10_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "ex16-20", + "imageUrl": "https://images.pokemontcg.io/ex16/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex16/20_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Power Keepers", + "setCode": "ex16" + }, + { + "id": "gym2-98", + "imageUrl": "https://images.pokemontcg.io/gym2/98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/98_hires.png", + "name": "Sabrina's Porygon", + "nationalPokedexNumber": 137, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "xy10-38", + "imageUrl": "https://images.pokemontcg.io/xy10/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/38_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "base6-58", + "imageUrl": "https://images.pokemontcg.io/base6/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/58_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ex10-5", + "imageUrl": "https://images.pokemontcg.io/ex10/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/5_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "base6-10", + "imageUrl": "https://images.pokemontcg.io/base6/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/10_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "neo4-46", + "imageUrl": "https://images.pokemontcg.io/neo4/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/46_hires.png", + "name": "Light Flareon", + "nationalPokedexNumber": 136, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex13-9", + "imageUrl": "https://images.pokemontcg.io/ex13/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/9_hires.png", + "name": "Kabutops δ", + "nationalPokedexNumber": 141, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex13-67", + "imageUrl": "https://images.pokemontcg.io/ex13/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/67_hires.png", + "name": "Kabuto δ", + "nationalPokedexNumber": 140, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "smp-SM171", + "imageUrl": "https://images.pokemontcg.io/smp/SM171.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM171_hires.png", + "name": "Flareon-GX", + "nationalPokedexNumber": 136, + "set": null, + "setCode": "smp" + }, + { + "id": "base5-35", + "imageUrl": "https://images.pokemontcg.io/base5/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/35_hires.png", + "name": "Dark Flareon", + "nationalPokedexNumber": 136, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "sm3-103", + "imageUrl": "https://images.pokemontcg.io/sm3/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm3/103_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Burning Shadows", + "setCode": "sm3" + }, + { + "id": "swshp-SWSH041", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH041.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH041_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": null, + "setCode": "swshp" + }, + { + "id": "neo2-6", + "imageUrl": "https://images.pokemontcg.io/neo2/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/6_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": null, + "setCode": "neo2" + }, + { + "id": "ecard2-103", + "imageUrl": "https://images.pokemontcg.io/ecard2/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/103_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "pl4-4", + "imageUrl": "https://images.pokemontcg.io/pl4/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/4_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "neo2-25", + "imageUrl": "https://images.pokemontcg.io/neo2/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/25_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": null, + "setCode": "neo2" + }, + { + "id": "pl4-67", + "imageUrl": "https://images.pokemontcg.io/pl4/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/67_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "pl4-70", + "imageUrl": "https://images.pokemontcg.io/pl4/70.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/70_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "neo2-43", + "imageUrl": "https://images.pokemontcg.io/neo2/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/43_hires.png", + "name": "Omastar", + "nationalPokedexNumber": 139, + "set": null, + "setCode": "neo2" + }, + { + "id": "neo2-56", + "imageUrl": "https://images.pokemontcg.io/neo2/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/56_hires.png", + "name": "Kabuto", + "nationalPokedexNumber": 140, + "set": null, + "setCode": "neo2" + }, + { + "id": "neo2-60", + "imageUrl": "https://images.pokemontcg.io/neo2/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/60_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": null, + "setCode": "neo2" + }, + { + "id": "base1-39", + "imageUrl": "https://images.pokemontcg.io/base1/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base1/39_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Base", + "setCode": "base1" + }, + { + "id": "bwp-BW88", + "imageUrl": "https://images.pokemontcg.io/bwp/BW88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bwp/BW88_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "BW Black Star Promos", + "setCode": "bwp" + }, + { + "id": "xy7-13", + "imageUrl": "https://images.pokemontcg.io/xy7/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy7/13_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Ancient Origins", + "setCode": "xy7" + }, + { + "id": "ecard3-157", + "imageUrl": "https://images.pokemontcg.io/ecard3/157.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/157_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ecard3-150", + "imageUrl": "https://images.pokemontcg.io/ecard3/150.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/150_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "swsh6-116", + "imageUrl": "https://images.pokemontcg.io/swsh6/116.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/116_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": null, + "setCode": "swsh6" + }, + { + "id": "xy7-64", + "imageUrl": "https://images.pokemontcg.io/xy7/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy7/64_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "Ancient Origins", + "setCode": "xy7" + }, + { + "id": "smp-SM186", + "imageUrl": "https://images.pokemontcg.io/smp/SM186.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM186_hires.png", + "name": "Flareon", + "nationalPokedexNumber": 136, + "set": null, + "setCode": "smp" + }, + { + "id": "hsp-HGSS22", + "imageUrl": "https://images.pokemontcg.io/hsp/HGSS22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hsp/HGSS22_hires.png", + "name": "Porygon", + "nationalPokedexNumber": 137, + "set": "HGSS Black Star Promos", + "setCode": "hsp" + }, + { + "id": "xy10-17", + "imageUrl": "https://images.pokemontcg.io/xy10/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/17_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy10-39", + "imageUrl": "https://images.pokemontcg.io/xy10/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/39_hires.png", + "name": "Kabutops", + "nationalPokedexNumber": 141, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "base3-52", + "imageUrl": "https://images.pokemontcg.io/base3/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/52_hires.png", + "name": "Omanyte", + "nationalPokedexNumber": 138, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "g1-rc6", + "imageUrl": "https://images.pokemontcg.io/g1/RC6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/RC6_hires.png", + "name": "Flareon-EX", + "nationalPokedexNumber": 136, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "g1-rc28", + "imageUrl": "https://images.pokemontcg.io/g1/RC28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/RC28_hires.png", + "name": "Flareon-EX", + "nationalPokedexNumber": 136, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "xy0-26", + "imageUrl": "https://images.pokemontcg.io/xy0/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy0/26_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Kalos Starter Set", + "setCode": "xy0" + }, + { + "id": "xy6-23", + "imageUrl": "https://images.pokemontcg.io/xy6/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/23_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "ecard3-21", + "imageUrl": "https://images.pokemontcg.io/ecard3/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/21_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "ex15-10", + "imageUrl": "https://images.pokemontcg.io/ex15/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/10_hires.png", + "name": "Snorlax δ", + "nationalPokedexNumber": 143, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex6-15", + "imageUrl": "https://images.pokemontcg.io/ex6/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/15_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "np-32", + "imageUrl": "https://images.pokemontcg.io/np/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/np/32_hires.png", + "name": "Articuno ex", + "nationalPokedexNumber": 144, + "set": "Nintendo Black Star Promos", + "setCode": "np" + }, + { + "id": "np-33", + "imageUrl": "https://images.pokemontcg.io/np/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/np/33_hires.png", + "name": "Zapdos ex", + "nationalPokedexNumber": 145, + "set": "Nintendo Black Star Promos", + "setCode": "np" + }, + { + "id": "ex6-115", + "imageUrl": "https://images.pokemontcg.io/ex6/115.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/115_hires.png", + "name": "Moltres ex", + "nationalPokedexNumber": 146, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "ex6-116", + "imageUrl": "https://images.pokemontcg.io/ex6/116.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/116_hires.png", + "name": "Zapdos ex", + "nationalPokedexNumber": 145, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "xy6-16", + "imageUrl": "https://images.pokemontcg.io/xy6/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/16_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "ex12-1", + "imageUrl": "https://images.pokemontcg.io/ex12/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/1_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "swshp-SWSH068", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH068.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH068_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": null, + "setCode": "swshp" + }, + { + "id": "base6-2", + "imageUrl": "https://images.pokemontcg.io/base6/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/2_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "base6-30", + "imageUrl": "https://images.pokemontcg.io/base6/30.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/30_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "swsh6-169", + "imageUrl": "https://images.pokemontcg.io/swsh6/169.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/169_hires.png", + "name": "Galarian Articuno V", + "nationalPokedexNumber": 144, + "set": null, + "setCode": "swsh6" + }, + { + "id": "ex7-96", + "imageUrl": "https://images.pokemontcg.io/ex7/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/96_hires.png", + "name": "Rocket's Articuno ex", + "nationalPokedexNumber": 144, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ex2-94", + "imageUrl": "https://images.pokemontcg.io/ex2/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/94_hires.png", + "name": "Aerodactyl ex", + "nationalPokedexNumber": 142, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex7-100", + "imageUrl": "https://images.pokemontcg.io/ex7/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/100_hires.png", + "name": "Rocket's Moltres ex", + "nationalPokedexNumber": 146, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ex7-104", + "imageUrl": "https://images.pokemontcg.io/ex7/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/104_hires.png", + "name": "Rocket's Snorlax ex", + "nationalPokedexNumber": 143, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "ex7-106", + "imageUrl": "https://images.pokemontcg.io/ex7/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/106_hires.png", + "name": "Rocket's Zapdos ex", + "nationalPokedexNumber": 145, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "bw11-32", + "imageUrl": "https://images.pokemontcg.io/bw11/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/32_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "swsh6-170", + "imageUrl": "https://images.pokemontcg.io/swsh6/170.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/170_hires.png", + "name": "Galarian Articuno V", + "nationalPokedexNumber": 144, + "set": null, + "setCode": "swsh6" + }, + { + "id": "bw11-46", + "imageUrl": "https://images.pokemontcg.io/bw11/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/46_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "pl2-33", + "imageUrl": "https://images.pokemontcg.io/pl2/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/33_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "pl2-81", + "imageUrl": "https://images.pokemontcg.io/pl2/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/81_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "basep-21", + "imageUrl": "https://images.pokemontcg.io/basep/21.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/21_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-49", + "imageUrl": "https://images.pokemontcg.io/basep/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/49_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "ecard3-1", + "imageUrl": "https://images.pokemontcg.io/ecard3/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/1_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "bw7-109", + "imageUrl": "https://images.pokemontcg.io/bw7/109.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw7/109_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Boundaries Crossed", + "setCode": "bw7" + }, + { + "id": "xyp-XY97", + "imageUrl": "https://images.pokemontcg.io/xyp/XY97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY97_hires.png", + "name": "Aerodactyl-EX", + "nationalPokedexNumber": 142, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "xyp-XY98", + "imageUrl": "https://images.pokemontcg.io/xyp/XY98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY98_hires.png", + "name": "M Aerodactyl-EX", + "nationalPokedexNumber": 142, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "dp5-1", + "imageUrl": "https://images.pokemontcg.io/dp5/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/1_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "dp5-10", + "imageUrl": "https://images.pokemontcg.io/dp5/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/10_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "dp5-14", + "imageUrl": "https://images.pokemontcg.io/dp5/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/14_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "xy10-76", + "imageUrl": "https://images.pokemontcg.io/xy10/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/76_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "xy6-17", + "imageUrl": "https://images.pokemontcg.io/xy6/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/17_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "pl2-111", + "imageUrl": "https://images.pokemontcg.io/pl2/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/111_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "sm10-158", + "imageUrl": "https://images.pokemontcg.io/sm10/158.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/158_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": null, + "setCode": "sm10" + }, + { + "id": "xy8-118", + "imageUrl": "https://images.pokemontcg.io/xy8/118.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/118_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "bw8-132", + "imageUrl": "https://images.pokemontcg.io/bw8/132.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/132_hires.png", + "name": "Articuno-EX", + "nationalPokedexNumber": 144, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "dp5-15", + "imageUrl": "https://images.pokemontcg.io/dp5/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/15_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "swsh6-224", + "imageUrl": "https://images.pokemontcg.io/swsh6/224.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/224_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": null, + "setCode": "swsh6" + }, + { + "id": "base3-17", + "imageUrl": "https://images.pokemontcg.io/base3/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/17_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "bw8-14", + "imageUrl": "https://images.pokemontcg.io/bw8/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/14_hires.png", + "name": "Moltres-EX", + "nationalPokedexNumber": 146, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "bw5-53", + "imageUrl": "https://images.pokemontcg.io/bw5/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw5/53_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": "Dark Explorers", + "setCode": "bw5" + }, + { + "id": "xy2-80", + "imageUrl": "https://images.pokemontcg.io/xy2/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/80_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "pl3-48", + "imageUrl": "https://images.pokemontcg.io/pl3/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/48_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "gym2-15", + "imageUrl": "https://images.pokemontcg.io/gym2/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/gym2/15_hires.png", + "name": "Rocket's Zapdos", + "nationalPokedexNumber": 145, + "set": "Gym Challenge", + "setCode": "gym2" + }, + { + "id": "sm7-154", + "imageUrl": "https://images.pokemontcg.io/sm7/154.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm7/154_hires.png", + "name": "Articuno-GX", + "nationalPokedexNumber": 144, + "set": "Celestial Storm", + "setCode": "sm7" + }, + { + "id": "base6-64", + "imageUrl": "https://images.pokemontcg.io/base6/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/64_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "col1-33", + "imageUrl": "https://images.pokemontcg.io/col1/33.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/33_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "base3-1", + "imageUrl": "https://images.pokemontcg.io/base3/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/1_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "sm9-19", + "imageUrl": "https://images.pokemontcg.io/sm9/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/19_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": null, + "setCode": "sm9" + }, + { + "id": "base3-15", + "imageUrl": "https://images.pokemontcg.io/base3/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/15_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "sm9-40", + "imageUrl": "https://images.pokemontcg.io/sm9/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/40_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": null, + "setCode": "sm9" + }, + { + "id": "pl2-55", + "imageUrl": "https://images.pokemontcg.io/pl2/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl2/55_hires.png", + "name": "Aerodactyl GL", + "nationalPokedexNumber": 142, + "set": "Rising Rivals", + "setCode": "pl2" + }, + { + "id": "bw8-25", + "imageUrl": "https://images.pokemontcg.io/bw8/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/25_hires.png", + "name": "Articuno-EX", + "nationalPokedexNumber": 144, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "sm9-130", + "imageUrl": "https://images.pokemontcg.io/sm9/130.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/130_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": null, + "setCode": "sm9" + }, + { + "id": "xy12-42", + "imageUrl": "https://images.pokemontcg.io/xy12/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/42_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "g1-58", + "imageUrl": "https://images.pokemontcg.io/g1/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/58_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "bw8-48", + "imageUrl": "https://images.pokemontcg.io/bw8/48.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/48_hires.png", + "name": "Zapdos-EX", + "nationalPokedexNumber": 145, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "bw11-22", + "imageUrl": "https://images.pokemontcg.io/bw11/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/22_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "bw4-27", + "imageUrl": "https://images.pokemontcg.io/bw4/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/27_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "dp1-37", + "imageUrl": "https://images.pokemontcg.io/dp1/37.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp1/37_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Diamond & Pearl", + "setCode": "dp1" + }, + { + "id": "pl3-16", + "imageUrl": "https://images.pokemontcg.io/pl3/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/16_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "bw8-101", + "imageUrl": "https://images.pokemontcg.io/bw8/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw8/101_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": "Plasma Storm", + "setCode": "bw8" + }, + { + "id": "base3-2", + "imageUrl": "https://images.pokemontcg.io/base3/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base3/2_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Fossil", + "setCode": "base3" + }, + { + "id": "swsh6-173", + "imageUrl": "https://images.pokemontcg.io/swsh6/173.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/173_hires.png", + "name": "Galarian Zapdos V", + "nationalPokedexNumber": 145, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-174", + "imageUrl": "https://images.pokemontcg.io/swsh6/174.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/174_hires.png", + "name": "Galarian Zapdos V", + "nationalPokedexNumber": 145, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-176", + "imageUrl": "https://images.pokemontcg.io/swsh6/176.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/176_hires.png", + "name": "Galarian Moltres V", + "nationalPokedexNumber": 146, + "set": null, + "setCode": "swsh6" + }, + { + "id": "swsh6-177", + "imageUrl": "https://images.pokemontcg.io/swsh6/177.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/177_hires.png", + "name": "Galarian Moltres V", + "nationalPokedexNumber": 146, + "set": null, + "setCode": "swsh6" + }, + { + "id": "pl3-148", + "imageUrl": "https://images.pokemontcg.io/pl3/148.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/148_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "base4-20", + "imageUrl": "https://images.pokemontcg.io/base4/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/20_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": null, + "setCode": "base4" + }, + { + "id": "basep-22", + "imageUrl": "https://images.pokemontcg.io/basep/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/22_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-23", + "imageUrl": "https://images.pokemontcg.io/basep/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/23_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "base2-11", + "imageUrl": "https://images.pokemontcg.io/base2/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/11_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": null, + "setCode": "base2" + }, + { + "id": "base2-27", + "imageUrl": "https://images.pokemontcg.io/base2/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base2/27_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": null, + "setCode": "base2" + }, + { + "id": "ex6-114", + "imageUrl": "https://images.pokemontcg.io/ex6/114.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex6/114_hires.png", + "name": "Articuno ex", + "nationalPokedexNumber": 144, + "set": "FireRed & LeafGreen", + "setCode": "ex6" + }, + { + "id": "base6-19", + "imageUrl": "https://images.pokemontcg.io/base6/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/19_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard3-153", + "imageUrl": "https://images.pokemontcg.io/ecard3/153.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard3/153_hires.png", + "name": "Articuno", + "nationalPokedexNumber": 144, + "set": "Skyridge", + "setCode": "ecard3" + }, + { + "id": "smp-SM05", + "imageUrl": "https://images.pokemontcg.io/smp/SM05.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM05_hires.png", + "name": "Snorlax-GX", + "nationalPokedexNumber": 143, + "set": null, + "setCode": "smp" + }, + { + "id": "swsh6-58", + "imageUrl": "https://images.pokemontcg.io/swsh6/58.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh6/58_hires.png", + "name": "Galarian Articuno V", + "nationalPokedexNumber": 144, + "set": null, + "setCode": "swsh6" + }, + { + "id": "bw4-14", + "imageUrl": "https://images.pokemontcg.io/bw4/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/14_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "swshp-SWSH032", + "imageUrl": "https://images.pokemontcg.io/swshp/SWSH032.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swshp/SWSH032_hires.png", + "name": "Snorlax", + "nationalPokedexNumber": 143, + "set": null, + "setCode": "swshp" + }, + { + "id": "pl3-150", + "imageUrl": "https://images.pokemontcg.io/pl3/150.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/150_hires.png", + "name": "Zapdos", + "nationalPokedexNumber": 145, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pl3-149", + "imageUrl": "https://images.pokemontcg.io/pl3/149.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/149_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pl3-36", + "imageUrl": "https://images.pokemontcg.io/pl3/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/36_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "pl4-13", + "imageUrl": "https://images.pokemontcg.io/pl4/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl4/13_hires.png", + "name": "Aerodactyl", + "nationalPokedexNumber": 142, + "set": "Arceus", + "setCode": "pl4" + }, + { + "id": "smp-SM143", + "imageUrl": "https://images.pokemontcg.io/smp/SM143.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM143_hires.png", + "name": "Moltres", + "nationalPokedexNumber": 146, + "set": null, + "setCode": "smp" + }, + { + "id": "ex11-66", + "imageUrl": "https://images.pokemontcg.io/ex11/66.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/66_hires.png", + "name": "Dratini δ", + "nationalPokedexNumber": 147, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "dv1-5", + "imageUrl": "https://images.pokemontcg.io/dv1/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dv1/5_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Dragon Vault", + "setCode": "dv1" + }, + { + "id": "ex11-3", + "imageUrl": "https://images.pokemontcg.io/ex11/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/3_hires.png", + "name": "Dragonite δ", + "nationalPokedexNumber": 149, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex11-41", + "imageUrl": "https://images.pokemontcg.io/ex11/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/41_hires.png", + "name": "Dragonair δ", + "nationalPokedexNumber": 148, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "ex15-91", + "imageUrl": "https://images.pokemontcg.io/ex15/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/91_hires.png", + "name": "Dragonite ex δ", + "nationalPokedexNumber": 149, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "dv1-1", + "imageUrl": "https://images.pokemontcg.io/dv1/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dv1/1_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Dragon Vault", + "setCode": "dv1" + }, + { + "id": "base5-5", + "imageUrl": "https://images.pokemontcg.io/base5/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/5_hires.png", + "name": "Dark Dragonite", + "nationalPokedexNumber": 149, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "base5-22", + "imageUrl": "https://images.pokemontcg.io/base5/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/22_hires.png", + "name": "Dark Dragonite", + "nationalPokedexNumber": 149, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex15-46", + "imageUrl": "https://images.pokemontcg.io/ex15/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/46_hires.png", + "name": "Dratini δ", + "nationalPokedexNumber": 147, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "base5-53", + "imageUrl": "https://images.pokemontcg.io/base5/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base5/53_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Team Rocket", + "setCode": "base5" + }, + { + "id": "ex15-101", + "imageUrl": "https://images.pokemontcg.io/ex15/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/101_hires.png", + "name": "Mew Star δ", + "nationalPokedexNumber": 151, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "dv1-3", + "imageUrl": "https://images.pokemontcg.io/dv1/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dv1/3_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": "Dragon Vault", + "setCode": "dv1" + }, + { + "id": "ex3-14", + "imageUrl": "https://images.pokemontcg.io/ex3/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/14_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "ex11-12", + "imageUrl": "https://images.pokemontcg.io/ex11/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/12_hires.png", + "name": "Mewtwo δ", + "nationalPokedexNumber": 150, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "bw6-120", + "imageUrl": "https://images.pokemontcg.io/bw6/120.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw6/120_hires.png", + "name": "Mew-EX", + "nationalPokedexNumber": 151, + "set": "Dragons Exalted", + "setCode": "bw6" + }, + { + "id": "sm9-118", + "imageUrl": "https://images.pokemontcg.io/sm9/118.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/118_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": null, + "setCode": "sm9" + }, + { + "id": "pop4-4", + "imageUrl": "https://images.pokemontcg.io/pop4/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop4/4_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "POP Series 4", + "setCode": "pop4" + }, + { + "id": "dp6-11", + "imageUrl": "https://images.pokemontcg.io/dp6/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/11_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "xy6-49", + "imageUrl": "https://images.pokemontcg.io/xy6/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/49_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "ex12-10", + "imageUrl": "https://images.pokemontcg.io/ex12/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/10_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ecard1-55", + "imageUrl": "https://images.pokemontcg.io/ecard1/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/55_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex12-88", + "imageUrl": "https://images.pokemontcg.io/ex12/88.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/88_hires.png", + "name": "Mew ex", + "nationalPokedexNumber": 151, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ex1-101", + "imageUrl": "https://images.pokemontcg.io/ex1/101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex1/101_hires.png", + "name": "Mewtwo ex", + "nationalPokedexNumber": 150, + "set": "Ruby & Sapphire", + "setCode": "ex1" + }, + { + "id": "bwp-BW45", + "imageUrl": "https://images.pokemontcg.io/bwp/BW45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bwp/BW45_hires.png", + "name": "Mewtwo-EX", + "nationalPokedexNumber": 150, + "set": "BW Black Star Promos", + "setCode": "bwp" + }, + { + "id": "dp3-15", + "imageUrl": "https://images.pokemontcg.io/dp3/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/15_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "base6-72", + "imageUrl": "https://images.pokemontcg.io/base6/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/72_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "ecard1-43", + "imageUrl": "https://images.pokemontcg.io/ecard1/43.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/43_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "bw11-53", + "imageUrl": "https://images.pokemontcg.io/bw11/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/53_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "bw11-54", + "imageUrl": "https://images.pokemontcg.io/bw11/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/54_hires.png", + "name": "Mewtwo-EX", + "nationalPokedexNumber": 150, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "sm11-222", + "imageUrl": "https://images.pokemontcg.io/sm11/222.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm11/222_hires.png", + "name": "Mewtwo & Mew-GX", + "nationalPokedexNumber": 150, + "set": null, + "setCode": "sm11" + }, + { + "id": "ex13-100", + "imageUrl": "https://images.pokemontcg.io/ex13/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/100_hires.png", + "name": "Mew ex", + "nationalPokedexNumber": 151, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ex13-103", + "imageUrl": "https://images.pokemontcg.io/ex13/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/103_hires.png", + "name": "Mewtwo Star", + "nationalPokedexNumber": 150, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "bw11-RC24", + "imageUrl": "https://images.pokemontcg.io/bw11/RC24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw11/RC24_hires.png", + "name": "Mew-EX", + "nationalPokedexNumber": 151, + "set": "Legendary Treasures", + "setCode": "bw11" + }, + { + "id": "ecard1-107", + "imageUrl": "https://images.pokemontcg.io/ecard1/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/107_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "basep-3", + "imageUrl": "https://images.pokemontcg.io/basep/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/3_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-14", + "imageUrl": "https://images.pokemontcg.io/basep/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/14_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "xyp-XY100", + "imageUrl": "https://images.pokemontcg.io/xyp/XY100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY100_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "dp6-144", + "imageUrl": "https://images.pokemontcg.io/dp6/144.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/144_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "sm10-75", + "imageUrl": "https://images.pokemontcg.io/sm10/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/75_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": null, + "setCode": "sm10" + }, + { + "id": "xyp-XY126", + "imageUrl": "https://images.pokemontcg.io/xyp/XY126.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY126_hires.png", + "name": "Mew-EX", + "nationalPokedexNumber": 151, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "dp6-2", + "imageUrl": "https://images.pokemontcg.io/dp6/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/2_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "xy8-158", + "imageUrl": "https://images.pokemontcg.io/xy8/158.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/158_hires.png", + "name": "Mewtwo-EX", + "nationalPokedexNumber": 150, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "xy8-164", + "imageUrl": "https://images.pokemontcg.io/xy8/164.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/164_hires.png", + "name": "Mewtwo-EX", + "nationalPokedexNumber": 150, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "dp6-91", + "imageUrl": "https://images.pokemontcg.io/dp6/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/91_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "dp5-9", + "imageUrl": "https://images.pokemontcg.io/dp5/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp5/9_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "Majestic Dawn", + "setCode": "dp5" + }, + { + "id": "dp6-52", + "imageUrl": "https://images.pokemontcg.io/dp6/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp6/52_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": "Legends Awakened", + "setCode": "dp6" + }, + { + "id": "hgss4-97", + "imageUrl": "https://images.pokemontcg.io/hgss4/97.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/97_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "xy8-62", + "imageUrl": "https://images.pokemontcg.io/xy8/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/62_hires.png", + "name": "Mewtwo-EX", + "nationalPokedexNumber": 150, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "pl3-56", + "imageUrl": "https://images.pokemontcg.io/pl3/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pl3/56_hires.png", + "name": "Dragonite FB", + "nationalPokedexNumber": 149, + "set": "Supreme Victors", + "setCode": "pl3" + }, + { + "id": "swsh3-69", + "imageUrl": "https://images.pokemontcg.io/swsh3/69.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/69_hires.png", + "name": "Mew V", + "nationalPokedexNumber": 151, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "basep-5", + "imageUrl": "https://images.pokemontcg.io/basep/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/5_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "sm75-36", + "imageUrl": "https://images.pokemontcg.io/sm75/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/36_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "basep-8", + "imageUrl": "https://images.pokemontcg.io/basep/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/8_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-12", + "imageUrl": "https://images.pokemontcg.io/basep/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/12_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "xy12-52", + "imageUrl": "https://images.pokemontcg.io/xy12/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/52_hires.png", + "name": "Mewtwo-EX", + "nationalPokedexNumber": 150, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "xy3-74", + "imageUrl": "https://images.pokemontcg.io/xy3/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy3/74_hires.png", + "name": "Dragonite-EX", + "nationalPokedexNumber": 149, + "set": "Furious Fists", + "setCode": "xy3" + }, + { + "id": "bw4-54", + "imageUrl": "https://images.pokemontcg.io/bw4/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw4/54_hires.png", + "name": "Mewtwo-EX", + "nationalPokedexNumber": 150, + "set": "Next Destinies", + "setCode": "bw4" + }, + { + "id": "ex13-24", + "imageUrl": "https://images.pokemontcg.io/ex13/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/24_hires.png", + "name": "Mewtwo δ", + "nationalPokedexNumber": 150, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "ecard1-19", + "imageUrl": "https://images.pokemontcg.io/ecard1/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/19_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "neo4-14", + "imageUrl": "https://images.pokemontcg.io/neo4/14.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/14_hires.png", + "name": "Light Dragonite", + "nationalPokedexNumber": 149, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-22", + "imageUrl": "https://images.pokemontcg.io/neo4/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/22_hires.png", + "name": "Light Dragonair", + "nationalPokedexNumber": 148, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "xy6-50", + "imageUrl": "https://images.pokemontcg.io/xy6/50.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/50_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "xy6-51", + "imageUrl": "https://images.pokemontcg.io/xy6/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/51_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "xy6-52", + "imageUrl": "https://images.pokemontcg.io/xy6/52.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy6/52_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Roaring Skies", + "setCode": "xy6" + }, + { + "id": "neo4-63", + "imageUrl": "https://images.pokemontcg.io/neo4/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/63_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-109", + "imageUrl": "https://images.pokemontcg.io/neo4/109.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/109_hires.png", + "name": "Shining Mewtwo", + "nationalPokedexNumber": 150, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "bw6-46", + "imageUrl": "https://images.pokemontcg.io/bw6/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw6/46_hires.png", + "name": "Mew-EX", + "nationalPokedexNumber": 151, + "set": "Dragons Exalted", + "setCode": "bw6" + }, + { + "id": "ex15-28", + "imageUrl": "https://images.pokemontcg.io/ex15/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/28_hires.png", + "name": "Dragonair δ", + "nationalPokedexNumber": 148, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "sm35-72", + "imageUrl": "https://images.pokemontcg.io/sm35/72.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/72_hires.png", + "name": "Mewtwo-GX", + "nationalPokedexNumber": 150, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "base6-5", + "imageUrl": "https://images.pokemontcg.io/base6/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base6/5_hires.png", + "name": "Dark Dragonite", + "nationalPokedexNumber": 149, + "set": "Legendary Collection", + "setCode": "base6" + }, + { + "id": "sm10-76", + "imageUrl": "https://images.pokemontcg.io/sm10/76.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm10/76_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": null, + "setCode": "sm10" + }, + { + "id": "dpp-DP28", + "imageUrl": "https://images.pokemontcg.io/dpp/DP28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dpp/DP28_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "DP Black Star Promos", + "setCode": "dpp" + }, + { + "id": "xyp-XY110", + "imageUrl": "https://images.pokemontcg.io/xyp/XY110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY110_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "bw9-83", + "imageUrl": "https://images.pokemontcg.io/bw9/83.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bw9/83_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Plasma Freeze", + "setCode": "bw9" + }, + { + "id": "ex11-65", + "imageUrl": "https://images.pokemontcg.io/ex11/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex11/65_hires.png", + "name": "Dratini δ", + "nationalPokedexNumber": 147, + "set": "Delta Species", + "setCode": "ex11" + }, + { + "id": "sm1-94", + "imageUrl": "https://images.pokemontcg.io/sm1/94.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/94_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "sm1-96", + "imageUrl": "https://images.pokemontcg.io/sm1/96.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm1/96_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "Sun & Moon", + "setCode": "sm1" + }, + { + "id": "dv1-2", + "imageUrl": "https://images.pokemontcg.io/dv1/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dv1/2_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Dragon Vault", + "setCode": "dv1" + }, + { + "id": "dv1-4", + "imageUrl": "https://images.pokemontcg.io/dv1/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dv1/4_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": "Dragon Vault", + "setCode": "dv1" + }, + { + "id": "ex3-26", + "imageUrl": "https://images.pokemontcg.io/ex3/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/26_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "base4-10", + "imageUrl": "https://images.pokemontcg.io/base4/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/10_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": null, + "setCode": "base4" + }, + { + "id": "basep-9", + "imageUrl": "https://images.pokemontcg.io/basep/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/9_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "basep-47", + "imageUrl": "https://images.pokemontcg.io/basep/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/basep/47_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Wizards Black Star Promos", + "setCode": "basep" + }, + { + "id": "base4-22", + "imageUrl": "https://images.pokemontcg.io/base4/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/base4/22_hires.png", + "name": "Dragonair", + "nationalPokedexNumber": 148, + "set": null, + "setCode": "base4" + }, + { + "id": "ex3-90", + "imageUrl": "https://images.pokemontcg.io/ex3/90.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex3/90_hires.png", + "name": "Dragonite ex", + "nationalPokedexNumber": 149, + "set": "Dragon", + "setCode": "ex3" + }, + { + "id": "hgss4-18", + "imageUrl": "https://images.pokemontcg.io/hgss4/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/18_hires.png", + "name": "Dragonite", + "nationalPokedexNumber": 149, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "sm9-116", + "imageUrl": "https://images.pokemontcg.io/sm9/116.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm9/116_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": null, + "setCode": "sm9" + }, + { + "id": "hgss4-62", + "imageUrl": "https://images.pokemontcg.io/hgss4/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss4/62_hires.png", + "name": "Dratini", + "nationalPokedexNumber": 147, + "set": "HS—Triumphant", + "setCode": "hgss4" + }, + { + "id": "xyp-XY101", + "imageUrl": "https://images.pokemontcg.io/xyp/XY101.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY101_hires.png", + "name": "Mewtwo", + "nationalPokedexNumber": 150, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "col1-55", + "imageUrl": "https://images.pokemontcg.io/col1/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/55_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "ex15-26", + "imageUrl": "https://images.pokemontcg.io/ex15/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/26_hires.png", + "name": "Bayleef δ", + "nationalPokedexNumber": 153, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-4", + "imageUrl": "https://images.pokemontcg.io/ex15/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/4_hires.png", + "name": "Meganium δ", + "nationalPokedexNumber": 154, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-44", + "imageUrl": "https://images.pokemontcg.io/ex15/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/44_hires.png", + "name": "Chikorita δ", + "nationalPokedexNumber": 152, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "dp2-41", + "imageUrl": "https://images.pokemontcg.io/dp2/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/41_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-77", + "imageUrl": "https://images.pokemontcg.io/dp2/77.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/77_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-79", + "imageUrl": "https://images.pokemontcg.io/dp2/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/79_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "neo4-61", + "imageUrl": "https://images.pokemontcg.io/neo4/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/61_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo1-28", + "imageUrl": "https://images.pokemontcg.io/neo1/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/28_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "hgss1-61", + "imageUrl": "https://images.pokemontcg.io/hgss1/61.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/61_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ecard1-100", + "imageUrl": "https://images.pokemontcg.io/ecard1/100.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/100_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex2-59", + "imageUrl": "https://images.pokemontcg.io/ex2/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/59_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "ex10-9", + "imageUrl": "https://images.pokemontcg.io/ex10/9.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/9_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ecard1-99", + "imageUrl": "https://images.pokemontcg.io/ecard1/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/99_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex10-35", + "imageUrl": "https://images.pokemontcg.io/ex10/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/35_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ex10-45", + "imageUrl": "https://images.pokemontcg.io/ex10/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/45_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ecard1-104", + "imageUrl": "https://images.pokemontcg.io/ecard1/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/104_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex10-51", + "imageUrl": "https://images.pokemontcg.io/ex10/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/51_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ecard1-105", + "imageUrl": "https://images.pokemontcg.io/ecard1/105.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/105_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy9-3", + "imageUrl": "https://images.pokemontcg.io/xy9/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/3_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy8-18", + "imageUrl": "https://images.pokemontcg.io/xy8/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/18_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "xy8-19", + "imageUrl": "https://images.pokemontcg.io/xy8/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/19_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "dp2-13", + "imageUrl": "https://images.pokemontcg.io/dp2/13.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/13_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "ex15-45", + "imageUrl": "https://images.pokemontcg.io/ex15/45.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/45_hires.png", + "name": "Cyndaquil δ", + "nationalPokedexNumber": 155, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex10-54", + "imageUrl": "https://images.pokemontcg.io/ex10/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/54_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "dp2-60", + "imageUrl": "https://images.pokemontcg.io/dp2/60.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/60_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "col1-27", + "imageUrl": "https://images.pokemontcg.io/col1/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/27_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "col1-40", + "imageUrl": "https://images.pokemontcg.io/col1/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/40_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "sm8-6", + "imageUrl": "https://images.pokemontcg.io/sm8/6.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/6_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "sm8-8", + "imageUrl": "https://images.pokemontcg.io/sm8/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/8_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "neo1-29", + "imageUrl": "https://images.pokemontcg.io/neo1/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/29_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo1-47", + "imageUrl": "https://images.pokemontcg.io/neo1/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/47_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo1-56", + "imageUrl": "https://images.pokemontcg.io/neo1/56.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/56_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo1-57", + "imageUrl": "https://images.pokemontcg.io/neo1/57.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/57_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "sm8-7", + "imageUrl": "https://images.pokemontcg.io/sm8/7.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/7_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "hgss1-26", + "imageUrl": "https://images.pokemontcg.io/hgss1/26.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/26_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "sm8-39", + "imageUrl": "https://images.pokemontcg.io/sm8/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/39_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "neo4-39", + "imageUrl": "https://images.pokemontcg.io/neo4/39.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/39_hires.png", + "name": "Dark Quilava", + "nationalPokedexNumber": 156, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "ex2-51", + "imageUrl": "https://images.pokemontcg.io/ex2/51.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/51_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "col1-49", + "imageUrl": "https://images.pokemontcg.io/col1/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/49_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "neo1-10", + "imageUrl": "https://images.pokemontcg.io/neo1/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/10_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "hgss1-35", + "imageUrl": "https://images.pokemontcg.io/hgss1/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/35_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex13-111", + "imageUrl": "https://images.pokemontcg.io/ex13/111.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex13/111_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Holon Phantoms", + "setCode": "ex13" + }, + { + "id": "neo1-11", + "imageUrl": "https://images.pokemontcg.io/neo1/11.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/11_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "ex5-59", + "imageUrl": "https://images.pokemontcg.io/ex5/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/59_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "neo1-46", + "imageUrl": "https://images.pokemontcg.io/neo1/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/46_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "hgss1-49", + "imageUrl": "https://images.pokemontcg.io/hgss1/49.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/49_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "hgss1-59", + "imageUrl": "https://images.pokemontcg.io/hgss1/59.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/59_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "hgss1-109", + "imageUrl": "https://images.pokemontcg.io/hgss1/109.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/109_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "neo1-53", + "imageUrl": "https://images.pokemontcg.io/neo1/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/53_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo1-54", + "imageUrl": "https://images.pokemontcg.io/neo1/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/54_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "ex5-55", + "imageUrl": "https://images.pokemontcg.io/ex5/55.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/55_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "xy9-2", + "imageUrl": "https://images.pokemontcg.io/xy9/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/2_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "xy9-1", + "imageUrl": "https://images.pokemontcg.io/xy9/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy9/1_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "BREAKpoint", + "setCode": "xy9" + }, + { + "id": "col1-53", + "imageUrl": "https://images.pokemontcg.io/col1/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/53_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "smp-SM215", + "imageUrl": "https://images.pokemontcg.io/smp/SM215.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM215_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": null, + "setCode": "smp" + }, + { + "id": "np-40", + "imageUrl": "https://images.pokemontcg.io/np/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/np/40_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Nintendo Black Star Promos", + "setCode": "np" + }, + { + "id": "ex10-106", + "imageUrl": "https://images.pokemontcg.io/ex10/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/106_hires.png", + "name": "Meganium ex", + "nationalPokedexNumber": 154, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "sm115-32", + "imageUrl": "https://images.pokemontcg.io/sm115/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm115/32_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": null, + "setCode": "sm115" + }, + { + "id": "bwp-BW98", + "imageUrl": "https://images.pokemontcg.io/bwp/BW98.png", + "imageUrlHiRes": "https://images.pokemontcg.io/bwp/BW98_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "BW Black Star Promos", + "setCode": "bwp" + }, + { + "id": "ru1-10", + "imageUrl": "https://images.pokemontcg.io/ru1/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ru1/10_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Pokémon Rumble", + "setCode": "ru1" + }, + { + "id": "si1-1", + "imageUrl": "https://images.pokemontcg.io/si1/1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/si1/1_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Southern Islands", + "setCode": "si1" + }, + { + "id": "sm35-40", + "imageUrl": "https://images.pokemontcg.io/sm35/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/40_hires.png", + "name": "Shining Mew", + "nationalPokedexNumber": 151, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "sm8-5", + "imageUrl": "https://images.pokemontcg.io/sm8/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/5_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "sm8-40", + "imageUrl": "https://images.pokemontcg.io/sm8/40.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/40_hires.png", + "name": "Cyndaquil", + "nationalPokedexNumber": 155, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "sm8-41", + "imageUrl": "https://images.pokemontcg.io/sm8/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/41_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "xyp-XY192", + "imageUrl": "https://images.pokemontcg.io/xyp/XY192.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xyp/XY192_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "XY Black Star Promos", + "setCode": "xyp" + }, + { + "id": "ex15-36", + "imageUrl": "https://images.pokemontcg.io/ex15/36.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/36_hires.png", + "name": "Quilava δ", + "nationalPokedexNumber": 156, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "xy12-53", + "imageUrl": "https://images.pokemontcg.io/xy12/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy12/53_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Evolutions", + "setCode": "xy12" + }, + { + "id": "ecard1-18", + "imageUrl": "https://images.pokemontcg.io/ecard1/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/18_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-53", + "imageUrl": "https://images.pokemontcg.io/ecard1/53.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/53_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-54", + "imageUrl": "https://images.pokemontcg.io/ecard1/54.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/54_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-71", + "imageUrl": "https://images.pokemontcg.io/ecard1/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/71_hires.png", + "name": "Bayleef", + "nationalPokedexNumber": 153, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-91", + "imageUrl": "https://images.pokemontcg.io/ecard1/91.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/91_hires.png", + "name": "Quilava", + "nationalPokedexNumber": 156, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "hsp-HGSS08", + "imageUrl": "https://images.pokemontcg.io/hsp/HGSS08.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hsp/HGSS08_hires.png", + "name": "Meganium", + "nationalPokedexNumber": 154, + "set": "HGSS Black Star Promos", + "setCode": "hsp" + }, + { + "id": "xy10-29", + "imageUrl": "https://images.pokemontcg.io/xy10/29.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy10/29_hires.png", + "name": "Mew", + "nationalPokedexNumber": 151, + "set": "Fates Collide", + "setCode": "xy10" + }, + { + "id": "g1-rc1", + "imageUrl": "https://images.pokemontcg.io/g1/RC1.png", + "imageUrlHiRes": "https://images.pokemontcg.io/g1/RC1_hires.png", + "name": "Chikorita", + "nationalPokedexNumber": 152, + "set": "Generations", + "setCode": "g1" + }, + { + "id": "pop5-3", + "imageUrl": "https://images.pokemontcg.io/pop5/3.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop5/3_hires.png", + "name": "Mew (Delta Species)", + "nationalPokedexNumber": 151, + "set": "POP Series 5", + "setCode": "pop5" + }, + { + "id": "col1-41", + "imageUrl": "https://images.pokemontcg.io/col1/41.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/41_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "col1-74", + "imageUrl": "https://images.pokemontcg.io/col1/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/74_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "ex15-67", + "imageUrl": "https://images.pokemontcg.io/ex15/67.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/67_hires.png", + "name": "Totodile δ", + "nationalPokedexNumber": 158, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-2", + "imageUrl": "https://images.pokemontcg.io/ex15/2.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/2_hires.png", + "name": "Feraligatr δ", + "nationalPokedexNumber": 160, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "neo1-17", + "imageUrl": "https://images.pokemontcg.io/neo1/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/17_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "ex12-62", + "imageUrl": "https://images.pokemontcg.io/ex12/62.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex12/62_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "Legend Maker", + "setCode": "ex12" + }, + { + "id": "ecard2-107", + "imageUrl": "https://images.pokemontcg.io/ecard2/107.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard2/107_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "Aquapolis", + "setCode": "ecard2" + }, + { + "id": "ex2-99", + "imageUrl": "https://images.pokemontcg.io/ex2/99.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex2/99_hires.png", + "name": "Typhlosion ex", + "nationalPokedexNumber": 157, + "set": "Sandstorm", + "setCode": "ex2" + }, + { + "id": "xy4-15", + "imageUrl": "https://images.pokemontcg.io/xy4/15.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/15_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "xy4-16", + "imageUrl": "https://images.pokemontcg.io/xy4/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/16_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Phantom Forces", + "setCode": "xy4" + }, + { + "id": "ex10-4", + "imageUrl": "https://images.pokemontcg.io/ex10/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/4_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "neo2-63", + "imageUrl": "https://images.pokemontcg.io/neo2/63.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo2/63_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": null, + "setCode": "neo2" + }, + { + "id": "ecard1-134", + "imageUrl": "https://images.pokemontcg.io/ecard1/134.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/134_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ex10-38", + "imageUrl": "https://images.pokemontcg.io/ex10/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/38_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ex10-78", + "imageUrl": "https://images.pokemontcg.io/ex10/78.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/78_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "dp2-8", + "imageUrl": "https://images.pokemontcg.io/dp2/8.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/8_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-16", + "imageUrl": "https://images.pokemontcg.io/dp2/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/16_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-44", + "imageUrl": "https://images.pokemontcg.io/dp2/44.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/44_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "dp2-106", + "imageUrl": "https://images.pokemontcg.io/dp2/106.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp2/106_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Mysterious Treasures", + "setCode": "dp2" + }, + { + "id": "ecard1-135", + "imageUrl": "https://images.pokemontcg.io/ecard1/135.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/135_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "xy8-20", + "imageUrl": "https://images.pokemontcg.io/xy8/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy8/20_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "BREAKthrough", + "setCode": "xy8" + }, + { + "id": "col1-25", + "imageUrl": "https://images.pokemontcg.io/col1/25.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/25_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "neo1-31", + "imageUrl": "https://images.pokemontcg.io/neo1/31.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/31_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo1-32", + "imageUrl": "https://images.pokemontcg.io/neo1/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/32_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "sm75-24", + "imageUrl": "https://images.pokemontcg.io/sm75/24.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/24_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "hgss1-38", + "imageUrl": "https://images.pokemontcg.io/hgss1/38.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/38_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "neo4-5", + "imageUrl": "https://images.pokemontcg.io/neo4/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/5_hires.png", + "name": "Dark Feraligatr", + "nationalPokedexNumber": 160, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "neo4-10", + "imageUrl": "https://images.pokemontcg.io/neo4/10.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/10_hires.png", + "name": "Dark Typhlosion", + "nationalPokedexNumber": 157, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "xy2-81", + "imageUrl": "https://images.pokemontcg.io/xy2/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy2/81_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "Flashfire", + "setCode": "xy2" + }, + { + "id": "sm8-42", + "imageUrl": "https://images.pokemontcg.io/sm8/42.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm8/42_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Lost Thunder", + "setCode": "sm8" + }, + { + "id": "sm35-20", + "imageUrl": "https://images.pokemontcg.io/sm35/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/20_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "ecard1-46", + "imageUrl": "https://images.pokemontcg.io/ecard1/46.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/46_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "pop7-16", + "imageUrl": "https://images.pokemontcg.io/pop7/16.png", + "imageUrlHiRes": "https://images.pokemontcg.io/pop7/16_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "POP Series 7", + "setCode": "pop7" + }, + { + "id": "neo1-81", + "imageUrl": "https://images.pokemontcg.io/neo1/81.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/81_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "dp3-104", + "imageUrl": "https://images.pokemontcg.io/dp3/104.png", + "imageUrlHiRes": "https://images.pokemontcg.io/dp3/104_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "Secret Wonders", + "setCode": "dp3" + }, + { + "id": "neo1-5", + "imageUrl": "https://images.pokemontcg.io/neo1/5.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/5_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "neo1-80", + "imageUrl": "https://images.pokemontcg.io/neo1/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/80_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "hgss1-32", + "imageUrl": "https://images.pokemontcg.io/hgss1/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/32_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex7-75", + "imageUrl": "https://images.pokemontcg.io/ex7/75.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex7/75_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "Team Rocket Returns", + "setCode": "ex7" + }, + { + "id": "neo1-4", + "imageUrl": "https://images.pokemontcg.io/neo1/4.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/4_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "col1-35", + "imageUrl": "https://images.pokemontcg.io/col1/35.png", + "imageUrlHiRes": "https://images.pokemontcg.io/col1/35_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Call of Legends", + "setCode": "col1" + }, + { + "id": "neo4-32", + "imageUrl": "https://images.pokemontcg.io/neo4/32.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/32_hires.png", + "name": "Dark Croconaw", + "nationalPokedexNumber": 159, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "hgss1-108", + "imageUrl": "https://images.pokemontcg.io/hgss1/108.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/108_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "neo1-18", + "imageUrl": "https://images.pokemontcg.io/neo1/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/18_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "hgss1-20", + "imageUrl": "https://images.pokemontcg.io/hgss1/20.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/20_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "hgss1-80", + "imageUrl": "https://images.pokemontcg.io/hgss1/80.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/80_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "hgss1-86", + "imageUrl": "https://images.pokemontcg.io/hgss1/86.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/86_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "hgss1-110", + "imageUrl": "https://images.pokemontcg.io/hgss1/110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hgss1/110_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "HeartGold & SoulSilver", + "setCode": "hgss1" + }, + { + "id": "ex5-79", + "imageUrl": "https://images.pokemontcg.io/ex5/79.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex5/79_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Hidden Legends", + "setCode": "ex5" + }, + { + "id": "neo1-71", + "imageUrl": "https://images.pokemontcg.io/neo1/71.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo1/71_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "Neo Genesis", + "setCode": "neo1" + }, + { + "id": "smp-SM185", + "imageUrl": "https://images.pokemontcg.io/smp/SM185.png", + "imageUrlHiRes": "https://images.pokemontcg.io/smp/SM185_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": null, + "setCode": "smp" + }, + { + "id": "np-34", + "imageUrl": "https://images.pokemontcg.io/np/34.png", + "imageUrlHiRes": "https://images.pokemontcg.io/np/34_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Nintendo Black Star Promos", + "setCode": "np" + }, + { + "id": "ex10-103", + "imageUrl": "https://images.pokemontcg.io/ex10/103.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/103_hires.png", + "name": "Feraligatr ex", + "nationalPokedexNumber": 160, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "neo4-85", + "imageUrl": "https://images.pokemontcg.io/neo4/85.png", + "imageUrlHiRes": "https://images.pokemontcg.io/neo4/85_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Neo Destiny", + "setCode": "neo4" + }, + { + "id": "sm35-19", + "imageUrl": "https://images.pokemontcg.io/sm35/19.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/19_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "sm75-22", + "imageUrl": "https://images.pokemontcg.io/sm75/22.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/22_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "sm75-23", + "imageUrl": "https://images.pokemontcg.io/sm75/23.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm75/23_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Dragon Majesty", + "setCode": "sm75" + }, + { + "id": "sm35-18", + "imageUrl": "https://images.pokemontcg.io/sm35/18.png", + "imageUrlHiRes": "https://images.pokemontcg.io/sm35/18_hires.png", + "name": "Totodile", + "nationalPokedexNumber": 158, + "set": "Shining Legends", + "setCode": "sm35" + }, + { + "id": "ex15-12", + "imageUrl": "https://images.pokemontcg.io/ex15/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/12_hires.png", + "name": "Typhlosion δ", + "nationalPokedexNumber": 157, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex15-27", + "imageUrl": "https://images.pokemontcg.io/ex15/27.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex15/27_hires.png", + "name": "Croconaw δ", + "nationalPokedexNumber": 159, + "set": "Dragon Frontiers", + "setCode": "ex15" + }, + { + "id": "ex10-17", + "imageUrl": "https://images.pokemontcg.io/ex10/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/17_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ex10-110", + "imageUrl": "https://images.pokemontcg.io/ex10/110.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ex10/110_hires.png", + "name": "Typhlosion ex", + "nationalPokedexNumber": 157, + "set": "Unseen Forces", + "setCode": "ex10" + }, + { + "id": "ecard1-12", + "imageUrl": "https://images.pokemontcg.io/ecard1/12.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/12_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-28", + "imageUrl": "https://images.pokemontcg.io/ecard1/28.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/28_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-47", + "imageUrl": "https://images.pokemontcg.io/ecard1/47.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/47_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-64", + "imageUrl": "https://images.pokemontcg.io/ecard1/64.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/64_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-65", + "imageUrl": "https://images.pokemontcg.io/ecard1/65.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/65_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "ecard1-74", + "imageUrl": "https://images.pokemontcg.io/ecard1/74.png", + "imageUrlHiRes": "https://images.pokemontcg.io/ecard1/74_hires.png", + "name": "Croconaw", + "nationalPokedexNumber": 159, + "set": "Expedition Base Set", + "setCode": "ecard1" + }, + { + "id": "swsh3-135", + "imageUrl": "https://images.pokemontcg.io/swsh3/135.png", + "imageUrlHiRes": "https://images.pokemontcg.io/swsh3/135_hires.png", + "name": "Sentret", + "nationalPokedexNumber": 161, + "set": "Darkness Ablaze", + "setCode": "swsh3" + }, + { + "id": "hsp-HGSS07", + "imageUrl": "https://images.pokemontcg.io/hsp/HGSS07.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hsp/HGSS07_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "HGSS Black Star Promos", + "setCode": "hsp" + }, + { + "id": "hsp-HGSS09", + "imageUrl": "https://images.pokemontcg.io/hsp/HGSS09.png", + "imageUrlHiRes": "https://images.pokemontcg.io/hsp/HGSS09_hires.png", + "name": "Typhlosion", + "nationalPokedexNumber": 157, + "set": "HGSS Black Star Promos", + "setCode": "hsp" + }, + { + "id": "xy4-17", + "imageUrl": "https://images.pokemontcg.io/xy4/17.png", + "imageUrlHiRes": "https://images.pokemontcg.io/xy4/17_hires.png", + "name": "Feraligatr", + "nationalPokedexNumber": 160, + "set": "Phantom Forces", + "setCode": "xy4" + } + ] +} \ No newline at end of file diff --git a/assets/data/gen3_items.js b/assets/data/gen3_items.js old mode 100755 new mode 100644 diff --git a/assets/data/gen3_locations.js b/assets/data/gen3_locations.js old mode 100755 new mode 100644 diff --git a/assets/data/gen4_items.js b/assets/data/gen4_items.js old mode 100755 new mode 100644 diff --git a/assets/data/gen4_locations.js b/assets/data/gen4_locations.js old mode 100755 new mode 100644 diff --git a/assets/data/gen5_items.js b/assets/data/gen5_items.js old mode 100755 new mode 100644 diff --git a/assets/data/gen5_locations.js b/assets/data/gen5_locations.js old mode 100755 new mode 100644 diff --git a/assets/data/items.json b/assets/data/items.json old mode 100755 new mode 100644 diff --git a/assets/data/moves.js b/assets/data/moves.js old mode 100755 new mode 100644 index 79dea4b..43360ee --- a/assets/data/moves.js +++ b/assets/data/moves.js @@ -174,7 +174,7 @@ var movedex = [ "jname": "\u304b\u305c\u304a\u3053\u3057", "power": 40, "pp": 35, - "type": "Fighting" + "type": "Flying" }, { "accuracy": 100, @@ -185,7 +185,7 @@ var movedex = [ "jname": "\u3064\u3070\u3055\u3067\u3046\u3064", "power": 60, "pp": 35, - "type": "Fighting" + "type": "Flying" }, { "accuracy": 100, @@ -207,7 +207,7 @@ var movedex = [ "jname": "\u305d\u3089\u3092\u3068\u3076", "power": 90, "pp": 15, - "type": "Fighting" + "type": "Flying" }, { "accuracy": 85, @@ -440,6 +440,17 @@ var movedex = [ "pp": 35, "type": "Poison" }, + { + "accuracy": 100, + "category": "\u7269\u7406", + "cname": "\u6bd2\u9488", + "ename": "PoisonSting", + "id": 40, + "jname": "\u3069\u304f\u3070\u308a", + "power": 15, + "pp": 35, + "type": "Poison" + }, { "accuracy": 100, "category": "\u7269\u7406", @@ -853,6 +864,17 @@ var movedex = [ "pp": 35, "type": "Poison" }, + { + "accuracy": 75, + "category": "\u53d8\u5316", + "cname": "\u6bd2\u7c89\u672b", + "ename": "PoisonPowder", + "id": 77, + "jname": "\u3069\u304f\u306e\u3053\u306a", + "power": null, + "pp": 35, + "type": "Poison" + }, { "accuracy": 75, "category": "\u53d8\u5316", @@ -930,6 +952,17 @@ var movedex = [ "pp": 30, "type": "Electric" }, + { + "accuracy": 100, + "category": "\u7279\u6b8a", + "cname": "\u7535\u51fb", + "ename": "ThunderShock", + "id": 84, + "jname": "\u3067\u3093\u304d\u30b7\u30e7\u30c3\u30af", + "power": 40, + "pp": 30, + "type": "Electric" + }, { "accuracy": 100, "category": "\u7279\u6b8a", diff --git a/assets/data/pokedex.js b/assets/data/pokedex.js old mode 100755 new mode 100644 index 6ad16ec..b15cd0c --- a/assets/data/pokedex.js +++ b/assets/data/pokedex.js @@ -26,7 +26,32 @@ var pokedex = [ "Sp. Defense": 65, "Speed": 45 }, - "color": "green" + "includedInGens": [ + 8 + ] + }, + { + "id": 1, + "name": { + "english": "Bulbasaur", + "japanese": "フシギダネ", + "chinese": "妙蛙种子" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 45, + "Attack": 49, + "Defense": 49, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] }, { "id": 2, @@ -47,7 +72,32 @@ var pokedex = [ "Sp. Defense": 80, "Speed": 60 }, - "color": "green" + "includedInGens": [ + 8 + ] + }, + { + "id": 2, + "name": { + "english": "Ivysaur", + "japanese": "フシギソウ", + "chinese": "妙蛙草" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 60, + "Attack": 62, + "Defense": 63, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] }, { "id": 3, @@ -68,7 +118,106 @@ var pokedex = [ "Sp. Defense": 100, "Speed": 80 }, - "color": "green" + "includedInGens": [ + 8 + ] + }, + { + "id": 3, + "name": { + "english": "Venusaur", + "japanese": "フシギバナ", + "chinese": "妙蛙花" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 123, + "Sp. Attack": 122, + "Sp. Defense": 120, + "Speed": 80 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 3, + "name": { + "english": "Venusaur", + "japanese": "フシギバナ", + "chinese": "妙蛙花" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 80, + "Attack": 82, + "Defense": 83, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 80 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } + }, + { + "id": 3, + "name": { + "english": "Venusaur", + "japanese": "フシギバナ", + "chinese": "妙蛙花" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 80, + "Attack": 82, + "Defense": 83, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 4, + "name": { + "english": "Charmander", + "japanese": "ヒトカゲ", + "chinese": "小火龙" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 39, + "Attack": 52, + "Defense": 43, + "Sp. Attack": 60, + "Sp. Defense": 50, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] }, { "id": 4, @@ -88,7 +237,31 @@ var pokedex = [ "Sp. Defense": 50, "Speed": 65 }, - "color": "red" + "includedInGens": [ + 8 + ] + }, + { + "id": 5, + "name": { + "english": "Charmeleon", + "japanese": "リザード", + "chinese": "火恐龙" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 58, + "Attack": 64, + "Defense": 58, + "Sp. Attack": 80, + "Sp. Defense": 65, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] }, { "id": 5, @@ -108,7 +281,110 @@ var pokedex = [ "Sp. Defense": 65, "Speed": 80 }, - "color": "red" + "includedInGens": [ + 8 + ] + }, + { + "id": 6, + "name": { + "english": "Charizard", + "japanese": "リザードン", + "chinese": "喷火龙" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 78, + "Attack": 84, + "Defense": 78, + "Sp. Attack": 109, + "Sp. Defense": 85, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 6, + "name": { + "english": "Charizard", + "japanese": "リザードン", + "chinese": "喷火龙" + }, + "type": [ + "Fire", + "Dragon" + ], + "base": { + "HP": 78, + "Attack": 130, + "Defense": 111, + "Sp. Attack": 130, + "Sp. Defense": 85, + "Speed": 100 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega-x" + } + }, + { + "id": 6, + "name": { + "english": "Charizard", + "japanese": "リザードン", + "chinese": "喷火龙" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 78, + "Attack": 104, + "Defense": 78, + "Sp. Attack": 159, + "Sp. Defense": 115, + "Speed": 100 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega-y" + } + }, + { + "id": 6, + "name": { + "english": "Charizard", + "japanese": "リザードン", + "chinese": "喷火龙" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 78, + "Attack": 84, + "Defense": 78, + "Sp. Attack": 109, + "Sp. Defense": 85, + "Speed": 100 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { "id": 6, @@ -129,7 +405,31 @@ var pokedex = [ "Sp. Defense": 85, "Speed": 100 }, - "color": "red" + "includedInGens": [ + 8 + ] + }, + { + "id": 7, + "name": { + "english": "Squirtle", + "japanese": "ゼニガメ", + "chinese": "杰尼龟" + }, + "type": [ + "Water" + ], + "base": { + "HP": 44, + "Attack": 48, + "Defense": 65, + "Sp. Attack": 50, + "Sp. Defense": 64, + "Speed": 43 + }, + "includedInGens": [ + 8 + ] }, { "id": 7, @@ -149,7 +449,9 @@ var pokedex = [ "Sp. Defense": 64, "Speed": 43 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { "id": 8, @@ -169,27 +471,125 @@ var pokedex = [ "Sp. Defense": 80, "Speed": 58 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 9, + "id": 8, "name": { - "english": "Blastoise", - "japanese": "カメックス", - "chinese": "水箭龟" + "english": "Wartortle", + "japanese": "カメール", + "chinese": "卡咪龟" }, "type": [ "Water" ], "base": { - "HP": 79, - "Attack": 83, + "HP": 59, + "Attack": 63, + "Defense": 80, + "Sp. Attack": 65, + "Sp. Defense": 80, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 9, + "name": { + "english": "Blastoise", + "japanese": "カメックス", + "chinese": "水箭龟" + }, + "type": [ + "Water" + ], + "base": { + "HP": 79, + "Attack": 83, + "Defense": 100, + "Sp. Attack": 85, + "Sp. Defense": 105, + "Speed": 78 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 9, + "name": { + "english": "Blastoise", + "japanese": "カメックス", + "chinese": "水箭龟" + }, + "type": [ + "Water" + ], + "base": { + "HP": 79, + "Attack": 103, + "Defense": 120, + "Sp. Attack": 135, + "Sp. Defense": 115, + "Speed": 78 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 9, + "name": { + "english": "Blastoise", + "japanese": "カメックス", + "chinese": "水箭龟" + }, + "type": [ + "Water" + ], + "base": { + "HP": 79, + "Attack": 83, + "Defense": 100, + "Sp. Attack": 85, + "Sp. Defense": 105, + "Speed": 78 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } + }, + { + "id": 9, + "name": { + "english": "Blastoise", + "japanese": "カメックス", + "chinese": "水箭龟" + }, + "type": [ + "Water" + ], + "base": { + "HP": 79, + "Attack": 83, "Defense": 100, "Sp. Attack": 85, "Sp. Defense": 105, "Speed": 78 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { "id": 10, @@ -208,8 +608,26 @@ var pokedex = [ "Sp. Attack": 20, "Sp. Defense": 20, "Speed": 45 + } + }, + { + "id": 10, + "name": { + "english": "Caterpie", + "japanese": "キャタピー", + "chinese": "绿毛虫" }, - "color": "green" + "type": [ + "Bug" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 35, + "Sp. Attack": 20, + "Sp. Defense": 20, + "Speed": 45 + } }, { "id": 11, @@ -228,8 +646,26 @@ var pokedex = [ "Sp. Attack": 25, "Sp. Defense": 25, "Speed": 30 + } + }, + { + "id": 11, + "name": { + "english": "Metapod", + "japanese": "トランセル", + "chinese": "铁甲蛹" }, - "color": "green" + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 20, + "Defense": 55, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 30 + } }, { "id": 12, @@ -249,8 +685,50 @@ var pokedex = [ "Sp. Attack": 90, "Sp. Defense": 80, "Speed": 70 + } + }, + { + "id": 12, + "name": { + "english": "Butterfree", + "japanese": "バタフリー", + "chinese": "巴大蝶" }, - "color": "white" + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 45, + "Defense": 50, + "Sp. Attack": 90, + "Sp. Defense": 80, + "Speed": 70 + }, + "form": { + "key": "gmax" + } + }, + { + "id": 12, + "name": { + "english": "Butterfree", + "japanese": "バタフリー", + "chinese": "巴大蝶" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 45, + "Defense": 50, + "Sp. Attack": 90, + "Sp. Defense": 80, + "Speed": 70 + } }, { "id": 13, @@ -270,8 +748,27 @@ var pokedex = [ "Sp. Attack": 20, "Sp. Defense": 20, "Speed": 50 + } + }, + { + "id": 13, + "name": { + "english": "Weedle", + "japanese": "ビードル", + "chinese": "独角虫" }, - "color": "brown" + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 40, + "Attack": 35, + "Defense": 30, + "Sp. Attack": 20, + "Sp. Defense": 20, + "Speed": 50 + } }, { "id": 14, @@ -291,8 +788,27 @@ var pokedex = [ "Sp. Attack": 25, "Sp. Defense": 25, "Speed": 35 + } + }, + { + "id": 14, + "name": { + "english": "Kakuna", + "japanese": "コクーン", + "chinese": "铁壳蛹" }, - "color": "yellow" + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 45, + "Attack": 25, + "Defense": 50, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 35 + } }, { "id": 15, @@ -312,8 +828,50 @@ var pokedex = [ "Sp. Attack": 45, "Sp. Defense": 80, "Speed": 75 + } + }, + { + "id": 15, + "name": { + "english": "Beedrill", + "japanese": "スピアー", + "chinese": "大针蜂" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 65, + "Attack": 150, + "Defense": 40, + "Sp. Attack": 15, + "Sp. Defense": 80, + "Speed": 145 + }, + "form": { + "key": "mega" + } + }, + { + "id": 15, + "name": { + "english": "Beedrill", + "japanese": "スピアー", + "chinese": "大针蜂" }, - "color": "yellow" + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 65, + "Attack": 90, + "Defense": 40, + "Sp. Attack": 45, + "Sp. Defense": 80, + "Speed": 75 + } }, { "id": 16, @@ -333,8 +891,27 @@ var pokedex = [ "Sp. Attack": 35, "Sp. Defense": 35, "Speed": 56 + } + }, + { + "id": 16, + "name": { + "english": "Pidgey", + "japanese": "ポッポ", + "chinese": "波波" }, - "color": "brown" + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 56 + } }, { "id": 17, @@ -354,14 +931,76 @@ var pokedex = [ "Sp. Attack": 50, "Sp. Defense": 50, "Speed": 71 - }, - "color": "brown" + } }, { - "id": 18, + "id": 17, "name": { - "english": "Pidgeot", - "japanese": "ピジョット", + "english": "Pidgeotto", + "japanese": "ピジョン", + "chinese": "比比鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 63, + "Attack": 60, + "Defense": 55, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 71 + } + }, + { + "id": 18, + "name": { + "english": "Pidgeot", + "japanese": "ピジョット", + "chinese": "大比鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 83, + "Attack": 80, + "Defense": 75, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 101 + } + }, + { + "id": 18, + "name": { + "english": "Pidgeot", + "japanese": "ピジョット", + "chinese": "大比鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 83, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 135, + "Sp. Defense": 80, + "Speed": 121 + }, + "form": { + "key": "mega" + } + }, + { + "id": 18, + "name": { + "english": "Pidgeot", + "japanese": "ピジョット", "chinese": "大比鸟" }, "type": [ @@ -375,8 +1014,26 @@ var pokedex = [ "Sp. Attack": 70, "Sp. Defense": 70, "Speed": 101 + } + }, + { + "id": 19, + "name": { + "english": "Rattata", + "japanese": "コラッタ", + "chinese": "小拉达" }, - "color": "brown" + "type": [ + "Normal" + ], + "base": { + "HP": 30, + "Attack": 56, + "Defense": 35, + "Sp. Attack": 25, + "Sp. Defense": 35, + "Speed": 72 + } }, { "id": 19, @@ -386,6 +1043,7 @@ var pokedex = [ "chinese": "小拉达" }, "type": [ + "Dark", "Normal" ], "base": { @@ -396,7 +1054,28 @@ var pokedex = [ "Sp. Defense": 35, "Speed": 72 }, - "color": "black" + "form": { + "key": "alola" + } + }, + { + "id": 19, + "name": { + "english": "Rattata", + "japanese": "コラッタ", + "chinese": "小拉达" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 30, + "Attack": 56, + "Defense": 35, + "Sp. Attack": 25, + "Sp. Defense": 35, + "Speed": 72 + } }, { "id": 20, @@ -415,8 +1094,72 @@ var pokedex = [ "Sp. Attack": 50, "Sp. Defense": 70, "Speed": 97 + } + }, + { + "id": 20, + "name": { + "english": "Raticate", + "japanese": "ラッタ", + "chinese": "拉达" + }, + "type": [ + "Dark", + "Normal" + ], + "base": { + "HP": 75, + "Attack": 71, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 80, + "Speed": 77 + }, + "form": { + "key": "alola" + } + }, + { + "id": 20, + "name": { + "english": "Raticate", + "japanese": "ラッタ", + "chinese": "拉达" + }, + "type": [ + "Dark", + "Normal" + ], + "base": { + "HP": 75, + "Attack": 71, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 80, + "Speed": 77 + }, + "form": { + "key": "alola-totem" + } + }, + { + "id": 20, + "name": { + "english": "Raticate", + "japanese": "ラッタ", + "chinese": "拉达" }, - "color": "black" + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 81, + "Defense": 60, + "Sp. Attack": 50, + "Sp. Defense": 70, + "Speed": 97 + } }, { "id": 21, @@ -436,8 +1179,27 @@ var pokedex = [ "Sp. Attack": 31, "Sp. Defense": 31, "Speed": 70 + } + }, + { + "id": 21, + "name": { + "english": "Spearow", + "japanese": "オニスズメ", + "chinese": "烈雀" }, - "color": "brown" + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 60, + "Defense": 30, + "Sp. Attack": 31, + "Sp. Defense": 31, + "Speed": 70 + } }, { "id": 22, @@ -457,8 +1219,27 @@ var pokedex = [ "Sp. Attack": 61, "Sp. Defense": 61, "Speed": 100 + } + }, + { + "id": 22, + "name": { + "english": "Fearow", + "japanese": "オニドリル", + "chinese": "大嘴雀" }, - "color": "brown" + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 90, + "Defense": 65, + "Sp. Attack": 61, + "Sp. Defense": 61, + "Speed": 100 + } }, { "id": 23, @@ -477,8 +1258,26 @@ var pokedex = [ "Sp. Attack": 40, "Sp. Defense": 54, "Speed": 55 + } + }, + { + "id": 23, + "name": { + "english": "Ekans", + "japanese": "アーボ", + "chinese": "阿柏蛇" }, - "color": "purple" + "type": [ + "Poison" + ], + "base": { + "HP": 35, + "Attack": 60, + "Defense": 44, + "Sp. Attack": 40, + "Sp. Defense": 54, + "Speed": 55 + } }, { "id": 24, @@ -497,8 +1296,26 @@ var pokedex = [ "Sp. Attack": 65, "Sp. Defense": 79, "Speed": 80 + } + }, + { + "id": 24, + "name": { + "english": "Arbok", + "japanese": "アーボック", + "chinese": "阿柏怪" }, - "color": "purple" + "type": [ + "Poison" + ], + "base": { + "HP": 60, + "Attack": 95, + "Defense": 69, + "Sp. Attack": 65, + "Sp. Defense": 79, + "Speed": 80 + } }, { "id": 25, @@ -518,5296 +1335,5718 @@ var pokedex = [ "Sp. Defense": 50, "Speed": 90 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 26, + "id": 25, "name": { - "english": "Raichu", - "japanese": "ライチュウ", - "chinese": "雷丘" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ "Electric" ], "base": { - "HP": 60, - "Attack": 90, - "Defense": 55, - "Sp. Attack": 90, - "Sp. Defense": 80, - "Speed": 110 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "cosplay" + } }, { - "id": 27, + "id": 25, "name": { - "english": "Sandshrew", - "japanese": "サンド", - "chinese": "穿山鼠" - }, - "type": [ - "Ground" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" + }, + "type": [ + "Electric" ], "base": { - "HP": 50, - "Attack": 75, - "Defense": 85, - "Sp. Attack": 20, - "Sp. Defense": 30, - "Speed": 40 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "rock-star" + } }, { - "id": 28, + "id": 25, "name": { - "english": "Sandslash", - "japanese": "サンドパン", - "chinese": "穿山王" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Ground" + "Electric" ], "base": { - "HP": 75, - "Attack": 100, - "Defense": 110, - "Sp. Attack": 45, - "Sp. Defense": 55, - "Speed": 65 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "belle" + } }, { - "id": 29, + "id": 25, "name": { - "english": "Nidoran♀", - "japanese": "ニドラン♀", - "chinese": "尼多兰" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison" + "Electric" ], "base": { - "HP": 55, - "Attack": 47, - "Defense": 52, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 41 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "pop-star" + } }, { - "id": 30, + "id": 25, "name": { - "english": "Nidorina", - "japanese": "ニドリーナ", - "chinese": "尼多娜" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison" + "Electric" ], "base": { - "HP": 70, - "Attack": 62, - "Defense": 67, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 56 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "phd" + } }, { - "id": 31, + "id": 25, "name": { - "english": "Nidoqueen", - "japanese": "ニドクイン", - "chinese": "尼多后" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison", - "Ground" + "Electric" ], "base": { - "HP": 90, - "Attack": 92, - "Defense": 87, - "Sp. Attack": 75, - "Sp. Defense": 85, - "Speed": 76 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "libre" + } }, { - "id": 32, + "id": 25, "name": { - "english": "Nidoran♂", - "japanese": "ニドラン♂", - "chinese": "尼多朗" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison" + "Electric" ], "base": { - "HP": 46, - "Attack": 57, + "HP": 35, + "Attack": 55, "Defense": 40, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 50 + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "original" + } }, { - "id": 33, + "id": 25, "name": { - "english": "Nidorino", - "japanese": "ニドリーノ", - "chinese": "尼多力诺" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison" + "Electric" ], "base": { - "HP": 61, - "Attack": 72, - "Defense": 57, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 65 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "hoenn" + } }, { - "id": 34, + "id": 25, "name": { - "english": "Nidoking", - "japanese": "ニドキング", - "chinese": "尼多王" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison", - "Ground" + "Electric" ], "base": { - "HP": 81, - "Attack": 102, - "Defense": 77, - "Sp. Attack": 85, - "Sp. Defense": 75, - "Speed": 85 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "sinnoh" + } }, { - "id": 35, + "id": 25, "name": { - "english": "Clefairy", - "japanese": "ピッピ", - "chinese": "皮皮" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Fairy" + "Electric" ], "base": { - "HP": 70, - "Attack": 45, - "Defense": 48, - "Sp. Attack": 60, - "Sp. Defense": 65, - "Speed": 35 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "unova" + } }, { - "id": 36, + "id": 25, "name": { - "english": "Clefable", - "japanese": "ピクシー", - "chinese": "皮可西" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Fairy" + "Electric" ], "base": { - "HP": 95, - "Attack": 70, - "Defense": 73, - "Sp. Attack": 95, - "Sp. Defense": 90, - "Speed": 60 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "kalos" + } }, { - "id": 37, + "id": 25, "name": { - "english": "Vulpix", - "japanese": "ロコン", - "chinese": "六尾" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Fire" + "Electric" ], "base": { - "HP": 38, - "Attack": 41, + "HP": 35, + "Attack": 55, "Defense": 40, "Sp. Attack": 50, - "Sp. Defense": 65, - "Speed": 65 + "Sp. Defense": 50, + "Speed": 90 }, - "color": "brown" - }, + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } + }, { - "id": 38, + "id": 25, "name": { - "english": "Ninetales", - "japanese": "キュウコン", - "chinese": "九尾" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Fire" + "Electric" ], "base": { - "HP": 73, - "Attack": 76, - "Defense": 75, - "Sp. Attack": 81, - "Sp. Defense": 100, - "Speed": 100 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "partner" + } }, { - "id": 39, + "id": 25, "name": { - "english": "Jigglypuff", - "japanese": "プリン", - "chinese": "胖丁" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Normal", - "Fairy" + "Electric" ], "base": { - "HP": 115, - "Attack": 45, - "Defense": 20, - "Sp. Attack": 45, - "Sp. Defense": 25, - "Speed": 20 + "HP": 45, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 75, + "Sp. Defense": 60, + "Speed": 120 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "starter" + } }, { - "id": 40, + "id": 25, "name": { - "english": "Wigglytuff", - "japanese": "プクリン", - "chinese": "胖可丁" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Normal", - "Fairy" + "Electric" ], "base": { - "HP": 140, - "Attack": 70, - "Defense": 45, - "Sp. Attack": 85, + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, "Sp. Defense": 50, - "Speed": 45 + "Speed": 90 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 41, + "id": 25, "name": { - "english": "Zubat", - "japanese": "ズバット", - "chinese": "超音蝠" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison", - "Flying" + "Electric" ], "base": { - "HP": 40, - "Attack": 45, - "Defense": 35, - "Sp. Attack": 30, - "Sp. Defense": 40, - "Speed": 55 + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "world" + } }, { - "id": 42, + "id": 25, "name": { - "english": "Golbat", - "japanese": "ゴルバット", - "chinese": "大嘴蝠" + "english": "Pikachu", + "japanese": "ピカチュウ", + "chinese": "皮卡丘" }, "type": [ - "Poison", - "Flying" + "Electric" ], "base": { - "HP": 75, - "Attack": 80, - "Defense": 70, - "Sp. Attack": 65, - "Sp. Defense": 75, + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 50, "Speed": 90 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 43, + "id": 26, "name": { - "english": "Oddish", - "japanese": "ナゾノクサ", - "chinese": "走路草" + "english": "Raichu", + "japanese": "ライチュウ", + "chinese": "雷丘" }, "type": [ - "Grass", - "Poison" + "Electric" ], "base": { - "HP": 45, - "Attack": 50, + "HP": 60, + "Attack": 90, "Defense": 55, - "Sp. Attack": 75, - "Sp. Defense": 65, - "Speed": 30 + "Sp. Attack": 90, + "Sp. Defense": 80, + "Speed": 110 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 44, + "id": 26, "name": { - "english": "Gloom", - "japanese": "クサイハナ", - "chinese": "臭臭花" + "english": "Raichu", + "japanese": "ライチュウ", + "chinese": "雷丘" }, "type": [ - "Grass", - "Poison" + "Electric", + "Psychic" ], "base": { "HP": 60, - "Attack": 65, - "Defense": 70, - "Sp. Attack": 85, - "Sp. Defense": 75, - "Speed": 40 + "Attack": 85, + "Defense": 50, + "Sp. Attack": 95, + "Sp. Defense": 85, + "Speed": 110 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 45, + "id": 26, "name": { - "english": "Vileplume", - "japanese": "ラフレシア", - "chinese": "霸王花" + "english": "Raichu", + "japanese": "ライチュウ", + "chinese": "雷丘" }, "type": [ - "Grass", - "Poison" + "Electric" ], "base": { - "HP": 75, - "Attack": 80, - "Defense": 85, - "Sp. Attack": 110, - "Sp. Defense": 90, - "Speed": 50 + "HP": 60, + "Attack": 90, + "Defense": 55, + "Sp. Attack": 90, + "Sp. Defense": 80, + "Speed": 110 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 46, + "id": 27, "name": { - "english": "Paras", - "japanese": "パラス", - "chinese": "派拉斯" + "english": "Sandshrew", + "japanese": "サンド", + "chinese": "穿山鼠" }, "type": [ - "Bug", - "Grass" + "Ground" ], "base": { - "HP": 35, - "Attack": 70, - "Defense": 55, - "Sp. Attack": 45, - "Sp. Defense": 55, - "Speed": 25 + "HP": 50, + "Attack": 75, + "Defense": 85, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 40 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 47, + "id": 27, "name": { - "english": "Parasect", - "japanese": "パラセクト", - "chinese": "派拉斯特" + "english": "Sandshrew", + "japanese": "サンド", + "chinese": "穿山鼠" }, "type": [ - "Bug", - "Grass" + "Ice", + "Steel" ], "base": { - "HP": 60, - "Attack": 95, - "Defense": 80, - "Sp. Attack": 60, - "Sp. Defense": 80, - "Speed": 30 + "HP": 50, + "Attack": 75, + "Defense": 90, + "Sp. Attack": 10, + "Sp. Defense": 35, + "Speed": 40 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 48, + "id": 27, "name": { - "english": "Venonat", - "japanese": "コンパン", - "chinese": "毛球" + "english": "Sandshrew", + "japanese": "サンド", + "chinese": "穿山鼠" }, "type": [ - "Bug", - "Poison" + "Ground" ], "base": { - "HP": 60, - "Attack": 55, - "Defense": 50, - "Sp. Attack": 40, - "Sp. Defense": 55, - "Speed": 45 - }, - "color": "purple" + "HP": 50, + "Attack": 75, + "Defense": 85, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] }, { - "id": 49, + "id": 28, "name": { - "english": "Venomoth", - "japanese": "モルフォン", - "chinese": "摩鲁蛾" + "english": "Sandslash", + "japanese": "サンドパン", + "chinese": "穿山王" }, "type": [ - "Bug", - "Poison" + "Ground" ], "base": { - "HP": 70, - "Attack": 65, - "Defense": 60, - "Sp. Attack": 90, - "Sp. Defense": 75, - "Speed": 90 + "HP": 75, + "Attack": 100, + "Defense": 110, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 65 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 50, + "id": 28, "name": { - "english": "Diglett", - "japanese": "ディグダ", - "chinese": "地鼠" + "english": "Sandslash", + "japanese": "サンドパン", + "chinese": "穿山王" }, "type": [ - "Ground" + "Ice", + "Steel" ], "base": { - "HP": 10, - "Attack": 55, - "Defense": 25, - "Sp. Attack": 35, - "Sp. Defense": 45, - "Speed": 95 + "HP": 75, + "Attack": 100, + "Defense": 120, + "Sp. Attack": 25, + "Sp. Defense": 65, + "Speed": 65 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 51, + "id": 28, "name": { - "english": "Dugtrio", - "japanese": "ダグトリオ", - "chinese": "三地鼠" + "english": "Sandslash", + "japanese": "サンドパン", + "chinese": "穿山王" }, "type": [ "Ground" ], "base": { - "HP": 35, + "HP": 75, "Attack": 100, - "Defense": 50, - "Sp. Attack": 50, - "Sp. Defense": 70, - "Speed": 120 + "Defense": 110, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 65 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 52, + "id": 29, "name": { - "english": "Meowth", - "japanese": "ニャース", - "chinese": "喵喵" + "english": "Nidoran♀", + "japanese": "ニドラン♀", + "chinese": "尼多兰" }, "type": [ - "Normal" + "Poison" ], "base": { - "HP": 40, - "Attack": 45, - "Defense": 35, + "HP": 55, + "Attack": 47, + "Defense": 52, "Sp. Attack": 40, "Sp. Defense": 40, - "Speed": 90 + "Speed": 41 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 53, + "id": 29, "name": { - "english": "Persian", - "japanese": "ペルシアン", - "chinese": "猫老大" + "english": "Nidoran♀", + "japanese": "ニドラン♀", + "chinese": "尼多兰" }, "type": [ - "Normal" + "Poison" ], "base": { - "HP": 65, - "Attack": 70, - "Defense": 60, - "Sp. Attack": 65, - "Sp. Defense": 65, - "Speed": 115 + "HP": 55, + "Attack": 47, + "Defense": 52, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 41 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 54, + "id": 30, "name": { - "english": "Psyduck", - "japanese": "コダック", - "chinese": "可达鸭" + "english": "Nidorina", + "japanese": "ニドリーナ", + "chinese": "尼多娜" }, "type": [ - "Water" + "Poison" ], "base": { - "HP": 50, - "Attack": 52, - "Defense": 48, - "Sp. Attack": 65, - "Sp. Defense": 50, - "Speed": 55 + "HP": 70, + "Attack": 62, + "Defense": 67, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 56 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 55, + "id": 30, "name": { - "english": "Golduck", - "japanese": "ゴルダック", - "chinese": "哥达鸭" + "english": "Nidorina", + "japanese": "ニドリーナ", + "chinese": "尼多娜" }, "type": [ - "Water" + "Poison" ], "base": { - "HP": 80, - "Attack": 82, - "Defense": 78, - "Sp. Attack": 95, - "Sp. Defense": 80, - "Speed": 85 + "HP": 70, + "Attack": 62, + "Defense": 67, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 56 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 56, + "id": 31, "name": { - "english": "Mankey", - "japanese": "マンキー", - "chinese": "猴怪" + "english": "Nidoqueen", + "japanese": "ニドクイン", + "chinese": "尼多后" }, "type": [ - "Fighting" + "Poison", + "Ground" ], "base": { - "HP": 40, - "Attack": 80, - "Defense": 35, - "Sp. Attack": 35, - "Sp. Defense": 45, - "Speed": 70 + "HP": 90, + "Attack": 92, + "Defense": 87, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 76 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 57, + "id": 31, "name": { - "english": "Primeape", - "japanese": "オコリザル", - "chinese": "火暴猴" + "english": "Nidoqueen", + "japanese": "ニドクイン", + "chinese": "尼多后" }, "type": [ - "Fighting" + "Poison", + "Ground" ], "base": { - "HP": 65, - "Attack": 105, - "Defense": 60, - "Sp. Attack": 60, - "Sp. Defense": 70, - "Speed": 95 + "HP": 90, + "Attack": 92, + "Defense": 87, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 76 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 58, + "id": 32, "name": { - "english": "Growlithe", - "japanese": "ガーディ", - "chinese": "卡蒂狗" + "english": "Nidoran♂", + "japanese": "ニドラン♂", + "chinese": "尼多朗" }, "type": [ - "Fire" + "Poison" ], "base": { - "HP": 55, - "Attack": 70, - "Defense": 45, - "Sp. Attack": 70, - "Sp. Defense": 50, - "Speed": 60 + "HP": 46, + "Attack": 57, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 50 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 59, + "id": 32, "name": { - "english": "Arcanine", - "japanese": "ウインディ", - "chinese": "风速狗" + "english": "Nidoran♂", + "japanese": "ニドラン♂", + "chinese": "尼多朗" }, "type": [ - "Fire" + "Poison" ], "base": { - "HP": 90, - "Attack": 110, - "Defense": 80, - "Sp. Attack": 100, - "Sp. Defense": 80, - "Speed": 95 + "HP": 46, + "Attack": 57, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 50 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 60, + "id": 33, "name": { - "english": "Poliwag", - "japanese": "ニョロモ", - "chinese": "蚊香蝌蚪" + "english": "Nidorino", + "japanese": "ニドリーノ", + "chinese": "尼多力诺" }, "type": [ - "Water" + "Poison" ], "base": { - "HP": 40, - "Attack": 50, - "Defense": 40, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 90 + "HP": 61, + "Attack": 72, + "Defense": 57, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 65 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 61, + "id": 33, "name": { - "english": "Poliwhirl", - "japanese": "ニョロゾ", - "chinese": "蚊香君" + "english": "Nidorino", + "japanese": "ニドリーノ", + "chinese": "尼多力诺" }, "type": [ - "Water" + "Poison" ], "base": { - "HP": 65, - "Attack": 65, - "Defense": 65, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 90 + "HP": 61, + "Attack": 72, + "Defense": 57, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 65 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 62, + "id": 34, "name": { - "english": "Poliwrath", - "japanese": "ニョロボン", - "chinese": "蚊香泳士" + "english": "Nidoking", + "japanese": "ニドキング", + "chinese": "尼多王" }, "type": [ - "Water", - "Fighting" + "Poison", + "Ground" ], "base": { - "HP": 90, - "Attack": 95, - "Defense": 95, - "Sp. Attack": 70, - "Sp. Defense": 90, - "Speed": 70 + "HP": 81, + "Attack": 102, + "Defense": 77, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 85 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 63, + "id": 34, "name": { - "english": "Abra", - "japanese": "ケーシィ", - "chinese": "凯西" + "english": "Nidoking", + "japanese": "ニドキング", + "chinese": "尼多王" }, "type": [ - "Psychic" + "Poison", + "Ground" ], "base": { - "HP": 25, - "Attack": 20, - "Defense": 15, - "Sp. Attack": 105, - "Sp. Defense": 55, - "Speed": 90 + "HP": 81, + "Attack": 102, + "Defense": 77, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 85 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 64, + "id": 35, "name": { - "english": "Kadabra", - "japanese": "ユンゲラー", - "chinese": "勇基拉" + "english": "Clefairy", + "japanese": "ピッピ", + "chinese": "皮皮" }, "type": [ - "Psychic" + "Fairy" ], "base": { - "HP": 40, - "Attack": 35, - "Defense": 30, - "Sp. Attack": 120, - "Sp. Defense": 70, - "Speed": 105 + "HP": 70, + "Attack": 45, + "Defense": 48, + "Sp. Attack": 60, + "Sp. Defense": 65, + "Speed": 35 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 65, + "id": 35, "name": { - "english": "Alakazam", - "japanese": "フーディン", - "chinese": "胡地" + "english": "Clefairy", + "japanese": "ピッピ", + "chinese": "皮皮" }, "type": [ - "Psychic" + "Fairy" ], "base": { - "HP": 55, - "Attack": 50, - "Defense": 45, - "Sp. Attack": 135, - "Sp. Defense": 95, - "Speed": 120 + "HP": 70, + "Attack": 45, + "Defense": 48, + "Sp. Attack": 60, + "Sp. Defense": 65, + "Speed": 35 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 66, + "id": 36, "name": { - "english": "Machop", - "japanese": "ワンリキー", - "chinese": "腕力" + "english": "Clefable", + "japanese": "ピクシー", + "chinese": "皮可西" }, "type": [ - "Fighting" + "Fairy" ], "base": { - "HP": 70, - "Attack": 80, - "Defense": 50, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 35 + "HP": 95, + "Attack": 70, + "Defense": 73, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 60 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 67, + "id": 36, "name": { - "english": "Machoke", - "japanese": "ゴーリキー", - "chinese": "豪力" + "english": "Clefable", + "japanese": "ピクシー", + "chinese": "皮可西" }, "type": [ - "Fighting" + "Fairy" ], "base": { - "HP": 80, - "Attack": 100, - "Defense": 70, - "Sp. Attack": 50, - "Sp. Defense": 60, - "Speed": 45 + "HP": 95, + "Attack": 70, + "Defense": 73, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 60 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 68, + "id": 37, "name": { - "english": "Machamp", - "japanese": "カイリキー", - "chinese": "怪力" + "english": "Vulpix", + "japanese": "ロコン", + "chinese": "六尾" }, "type": [ - "Fighting" + "Fire" ], "base": { - "HP": 90, - "Attack": 130, - "Defense": 80, - "Sp. Attack": 65, - "Sp. Defense": 85, - "Speed": 55 + "HP": 38, + "Attack": 41, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 65, + "Speed": 65 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 69, + "id": 37, "name": { - "english": "Bellsprout", - "japanese": "マダツボミ", - "chinese": "喇叭芽" + "english": "Vulpix", + "japanese": "ロコン", + "chinese": "六尾" }, "type": [ - "Grass", - "Poison" + "Ice" ], "base": { - "HP": 50, - "Attack": 75, - "Defense": 35, - "Sp. Attack": 70, - "Sp. Defense": 30, - "Speed": 40 + "HP": 38, + "Attack": 41, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 65, + "Speed": 65 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 70, + "id": 37, "name": { - "english": "Weepinbell", - "japanese": "ウツドン", - "chinese": "口呆花" + "english": "Vulpix", + "japanese": "ロコン", + "chinese": "六尾" }, "type": [ - "Grass", - "Poison" + "Fire" ], "base": { - "HP": 65, - "Attack": 90, - "Defense": 50, - "Sp. Attack": 85, - "Sp. Defense": 45, - "Speed": 55 + "HP": 38, + "Attack": 41, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 65, + "Speed": 65 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 71, + "id": 38, "name": { - "english": "Victreebel", - "japanese": "ウツボット", - "chinese": "大食花" + "english": "Ninetales", + "japanese": "キュウコン", + "chinese": "九尾" }, "type": [ - "Grass", - "Poison" + "Fire" ], "base": { - "HP": 80, - "Attack": 105, - "Defense": 65, - "Sp. Attack": 100, - "Sp. Defense": 70, - "Speed": 70 + "HP": 73, + "Attack": 76, + "Defense": 75, + "Sp. Attack": 81, + "Sp. Defense": 100, + "Speed": 100 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 72, + "id": 38, "name": { - "english": "Tentacool", - "japanese": "メノクラゲ", - "chinese": "玛瑙水母" + "english": "Ninetales", + "japanese": "キュウコン", + "chinese": "九尾" }, "type": [ - "Water", - "Poison" + "Ice", + "Fairy" ], "base": { - "HP": 40, - "Attack": 40, - "Defense": 35, - "Sp. Attack": 50, + "HP": 73, + "Attack": 67, + "Defense": 75, + "Sp. Attack": 81, "Sp. Defense": 100, - "Speed": 70 + "Speed": 109 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 73, + "id": 38, "name": { - "english": "Tentacruel", - "japanese": "ドククラゲ", - "chinese": "毒刺水母" + "english": "Ninetales", + "japanese": "キュウコン", + "chinese": "九尾" }, "type": [ - "Water", - "Poison" + "Fire" ], "base": { - "HP": 80, - "Attack": 70, - "Defense": 65, - "Sp. Attack": 80, - "Sp. Defense": 120, + "HP": 73, + "Attack": 76, + "Defense": 75, + "Sp. Attack": 81, + "Sp. Defense": 100, "Speed": 100 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 74, + "id": 39, "name": { - "english": "Geodude", - "japanese": "イシツブテ", - "chinese": "小拳石" + "english": "Jigglypuff", + "japanese": "プリン", + "chinese": "胖丁" }, "type": [ - "Rock", - "Ground" + "Normal", + "Fairy" ], "base": { - "HP": 40, - "Attack": 80, - "Defense": 100, - "Sp. Attack": 30, - "Sp. Defense": 30, + "HP": 115, + "Attack": 45, + "Defense": 20, + "Sp. Attack": 45, + "Sp. Defense": 25, "Speed": 20 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 75, + "id": 39, "name": { - "english": "Graveler", - "japanese": "ゴローン", - "chinese": "隆隆石" + "english": "Jigglypuff", + "japanese": "プリン", + "chinese": "胖丁" }, "type": [ - "Rock", - "Ground" + "Normal", + "Fairy" ], "base": { - "HP": 55, - "Attack": 95, - "Defense": 115, + "HP": 115, + "Attack": 45, + "Defense": 20, "Sp. Attack": 45, - "Sp. Defense": 45, - "Speed": 35 + "Sp. Defense": 25, + "Speed": 20 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 76, + "id": 40, "name": { - "english": "Golem", - "japanese": "ゴローニャ", - "chinese": "隆隆岩" + "english": "Wigglytuff", + "japanese": "プクリン", + "chinese": "胖可丁" }, "type": [ - "Rock", - "Ground" + "Normal", + "Fairy" ], "base": { - "HP": 80, - "Attack": 120, - "Defense": 130, - "Sp. Attack": 55, - "Sp. Defense": 65, + "HP": 140, + "Attack": 70, + "Defense": 45, + "Sp. Attack": 85, + "Sp. Defense": 50, "Speed": 45 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 77, + "id": 40, "name": { - "english": "Ponyta", - "japanese": "ポニータ", - "chinese": "小火马" + "english": "Wigglytuff", + "japanese": "プクリン", + "chinese": "胖可丁" }, "type": [ - "Fire" + "Normal", + "Fairy" ], "base": { - "HP": 50, - "Attack": 85, - "Defense": 55, - "Sp. Attack": 65, - "Sp. Defense": 65, - "Speed": 90 + "HP": 140, + "Attack": 70, + "Defense": 45, + "Sp. Attack": 85, + "Sp. Defense": 50, + "Speed": 45 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 78, + "id": 41, "name": { - "english": "Rapidash", - "japanese": "ギャロップ", - "chinese": "烈焰马" + "english": "Zubat", + "japanese": "ズバット", + "chinese": "超音蝠" }, "type": [ - "Fire" + "Poison", + "Flying" ], "base": { - "HP": 65, - "Attack": 100, - "Defense": 70, - "Sp. Attack": 80, - "Sp. Defense": 80, - "Speed": 105 + "HP": 40, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 30, + "Sp. Defense": 40, + "Speed": 55 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 79, + "id": 41, "name": { - "english": "Slowpoke", - "japanese": "ヤドン", - "chinese": "呆呆兽" + "english": "Zubat", + "japanese": "ズバット", + "chinese": "超音蝠" }, "type": [ - "Water", - "Psychic" + "Poison", + "Flying" ], "base": { - "HP": 90, - "Attack": 65, - "Defense": 65, - "Sp. Attack": 40, + "HP": 40, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 30, "Sp. Defense": 40, - "Speed": 15 + "Speed": 55 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 80, + "id": 42, "name": { - "english": "Slowbro", - "japanese": "ヤドラン", - "chinese": "呆壳兽" + "english": "Golbat", + "japanese": "ゴルバット", + "chinese": "大嘴蝠" }, "type": [ - "Water", - "Psychic" + "Poison", + "Flying" ], "base": { - "HP": 95, - "Attack": 75, - "Defense": 110, - "Sp. Attack": 100, - "Sp. Defense": 80, - "Speed": 30 + "HP": 75, + "Attack": 80, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 90 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 81, + "id": 42, "name": { - "english": "Magnemite", - "japanese": "コイル", - "chinese": "小磁怪" + "english": "Golbat", + "japanese": "ゴルバット", + "chinese": "大嘴蝠" }, "type": [ - "Electric", - "Steel" + "Poison", + "Flying" ], "base": { - "HP": 25, - "Attack": 35, + "HP": 75, + "Attack": 80, "Defense": 70, - "Sp. Attack": 95, - "Sp. Defense": 55, - "Speed": 45 + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 90 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 82, + "id": 43, "name": { - "english": "Magneton", - "japanese": "レアコイル", - "chinese": "三合一磁怪" + "english": "Oddish", + "japanese": "ナゾノクサ", + "chinese": "走路草" }, "type": [ - "Electric", - "Steel" + "Grass", + "Poison" ], "base": { - "HP": 50, - "Attack": 60, - "Defense": 95, - "Sp. Attack": 120, - "Sp. Defense": 70, - "Speed": 70 + "HP": 45, + "Attack": 50, + "Defense": 55, + "Sp. Attack": 75, + "Sp. Defense": 65, + "Speed": 30 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 83, + "id": 43, "name": { - "english": "Farfetch'd", - "japanese": "カモネギ", - "chinese": "大葱鸭" + "english": "Oddish", + "japanese": "ナゾノクサ", + "chinese": "走路草" }, "type": [ - "Normal", - "Flying" + "Grass", + "Poison" ], "base": { - "HP": 52, - "Attack": 90, + "HP": 45, + "Attack": 50, "Defense": 55, - "Sp. Attack": 58, - "Sp. Defense": 62, - "Speed": 60 + "Sp. Attack": 75, + "Sp. Defense": 65, + "Speed": 30 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 84, + "id": 44, "name": { - "english": "Doduo", - "japanese": "ドードー", - "chinese": "嘟嘟" + "english": "Gloom", + "japanese": "クサイハナ", + "chinese": "臭臭花" }, "type": [ - "Normal", - "Flying" + "Grass", + "Poison" ], "base": { - "HP": 35, - "Attack": 85, - "Defense": 45, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 75 + "HP": 60, + "Attack": 65, + "Defense": 70, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 40 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 85, + "id": 44, "name": { - "english": "Dodrio", - "japanese": "ドードリオ", - "chinese": "嘟嘟利" + "english": "Gloom", + "japanese": "クサイハナ", + "chinese": "臭臭花" }, "type": [ - "Normal", - "Flying" + "Grass", + "Poison" ], "base": { "HP": 60, - "Attack": 110, + "Attack": 65, "Defense": 70, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 110 + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 40 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 86, + "id": 45, "name": { - "english": "Seel", - "japanese": "パウワウ", - "chinese": "小海狮" + "english": "Vileplume", + "japanese": "ラフレシア", + "chinese": "霸王花" }, "type": [ - "Water" + "Grass", + "Poison" ], "base": { - "HP": 65, - "Attack": 45, - "Defense": 55, - "Sp. Attack": 45, - "Sp. Defense": 70, - "Speed": 45 + "HP": 75, + "Attack": 80, + "Defense": 85, + "Sp. Attack": 110, + "Sp. Defense": 90, + "Speed": 50 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 87, + "id": 45, "name": { - "english": "Dewgong", - "japanese": "ジュゴン", - "chinese": "白海狮" + "english": "Vileplume", + "japanese": "ラフレシア", + "chinese": "霸王花" }, "type": [ - "Water", - "Ice" + "Grass", + "Poison" ], "base": { - "HP": 90, - "Attack": 70, - "Defense": 80, - "Sp. Attack": 70, - "Sp. Defense": 95, - "Speed": 70 + "HP": 75, + "Attack": 80, + "Defense": 85, + "Sp. Attack": 110, + "Sp. Defense": 90, + "Speed": 50 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 88, + "id": 46, "name": { - "english": "Grimer", - "japanese": "ベトベター", - "chinese": "臭泥" + "english": "Paras", + "japanese": "パラス", + "chinese": "派拉斯" }, "type": [ - "Poison" + "Bug", + "Grass" ], "base": { - "HP": 80, - "Attack": 80, - "Defense": 50, - "Sp. Attack": 40, - "Sp. Defense": 50, + "HP": 35, + "Attack": 70, + "Defense": 55, + "Sp. Attack": 45, + "Sp. Defense": 55, "Speed": 25 - }, - "color": "green" + } }, { - "id": 89, + "id": 46, "name": { - "english": "Muk", - "japanese": "ベトベトン", - "chinese": "臭臭泥" + "english": "Paras", + "japanese": "パラス", + "chinese": "派拉斯" }, "type": [ - "Poison" + "Bug", + "Grass" ], "base": { - "HP": 105, - "Attack": 105, - "Defense": 75, - "Sp. Attack": 65, - "Sp. Defense": 100, - "Speed": 50 - }, - "color": "green" + "HP": 35, + "Attack": 70, + "Defense": 55, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 25 + } }, { - "id": 90, + "id": 47, "name": { - "english": "Shellder", - "japanese": "シェルダー", - "chinese": "大舌贝" + "english": "Parasect", + "japanese": "パラセクト", + "chinese": "派拉斯特" }, "type": [ - "Water" + "Bug", + "Grass" ], "base": { - "HP": 30, - "Attack": 65, - "Defense": 100, - "Sp. Attack": 45, - "Sp. Defense": 25, - "Speed": 40 - }, - "color": "purple" + "HP": 60, + "Attack": 95, + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 80, + "Speed": 30 + } }, { - "id": 91, + "id": 47, "name": { - "english": "Cloyster", - "japanese": "パルシェン", - "chinese": "刺甲贝" + "english": "Parasect", + "japanese": "パラセクト", + "chinese": "派拉斯特" }, "type": [ - "Water", - "Ice" + "Bug", + "Grass" ], "base": { - "HP": 50, + "HP": 60, "Attack": 95, - "Defense": 180, - "Sp. Attack": 85, - "Sp. Defense": 45, - "Speed": 70 - }, - "color": "purple" + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 80, + "Speed": 30 + } }, { - "id": 92, + "id": 48, "name": { - "english": "Gastly", - "japanese": "ゴース", - "chinese": "鬼斯" + "english": "Venonat", + "japanese": "コンパン", + "chinese": "毛球" }, "type": [ - "Ghost", + "Bug", "Poison" ], "base": { - "HP": 30, - "Attack": 35, - "Defense": 30, - "Sp. Attack": 100, - "Sp. Defense": 35, - "Speed": 80 - }, - "color": "purple" + "HP": 60, + "Attack": 55, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 55, + "Speed": 45 + } }, { - "id": 93, + "id": 48, "name": { - "english": "Haunter", - "japanese": "ゴースト", - "chinese": "鬼斯通" + "english": "Venonat", + "japanese": "コンパン", + "chinese": "毛球" }, "type": [ - "Ghost", + "Bug", "Poison" ], "base": { - "HP": 45, - "Attack": 50, - "Defense": 45, - "Sp. Attack": 115, - "Sp. Defense": 55, - "Speed": 95 - }, - "color": "purple" + "HP": 60, + "Attack": 55, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 55, + "Speed": 45 + } }, { - "id": 94, + "id": 49, "name": { - "english": "Gengar", - "japanese": "ゲンガー", - "chinese": "耿鬼" + "english": "Venomoth", + "japanese": "モルフォン", + "chinese": "摩鲁蛾" }, "type": [ - "Ghost", + "Bug", "Poison" ], "base": { - "HP": 60, + "HP": 70, "Attack": 65, "Defense": 60, - "Sp. Attack": 130, + "Sp. Attack": 90, "Sp. Defense": 75, - "Speed": 110 - }, - "color": "purple" + "Speed": 90 + } }, { - "id": 95, + "id": 49, "name": { - "english": "Onix", - "japanese": "イワーク", - "chinese": "大岩蛇" + "english": "Venomoth", + "japanese": "モルフォン", + "chinese": "摩鲁蛾" }, "type": [ - "Rock", - "Ground" + "Bug", + "Poison" ], "base": { - "HP": 35, - "Attack": 45, - "Defense": 160, - "Sp. Attack": 30, - "Sp. Defense": 45, - "Speed": 70 - }, - "color": "gray" + "HP": 70, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 90, + "Sp. Defense": 75, + "Speed": 90 + } }, { - "id": 96, + "id": 50, "name": { - "english": "Drowzee", - "japanese": "スリープ", - "chinese": "催眠貘" + "english": "Diglett", + "japanese": "ディグダ", + "chinese": "地鼠" }, "type": [ - "Psychic" + "Ground" ], "base": { - "HP": 60, - "Attack": 48, - "Defense": 45, - "Sp. Attack": 43, - "Sp. Defense": 90, - "Speed": 42 + "HP": 10, + "Attack": 55, + "Defense": 25, + "Sp. Attack": 35, + "Sp. Defense": 45, + "Speed": 95 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 97, + "id": 50, "name": { - "english": "Hypno", - "japanese": "スリーパー", - "chinese": "引梦貘人" + "english": "Diglett", + "japanese": "ディグダ", + "chinese": "地鼠" }, "type": [ - "Psychic" + "Ground", + "Steel" ], "base": { - "HP": 85, - "Attack": 73, - "Defense": 70, - "Sp. Attack": 73, - "Sp. Defense": 115, - "Speed": 67 + "HP": 10, + "Attack": 55, + "Defense": 30, + "Sp. Attack": 35, + "Sp. Defense": 45, + "Speed": 90 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 98, + "id": 50, "name": { - "english": "Krabby", - "japanese": "クラブ", - "chinese": "大钳蟹" + "english": "Diglett", + "japanese": "ディグダ", + "chinese": "地鼠" }, "type": [ - "Water" + "Ground" ], "base": { - "HP": 30, - "Attack": 105, - "Defense": 90, - "Sp. Attack": 25, - "Sp. Defense": 25, - "Speed": 50 + "HP": 10, + "Attack": 55, + "Defense": 25, + "Sp. Attack": 35, + "Sp. Defense": 45, + "Speed": 95 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 99, + "id": 51, "name": { - "english": "Kingler", - "japanese": "キングラー", - "chinese": "巨钳蟹" + "english": "Dugtrio", + "japanese": "ダグトリオ", + "chinese": "三地鼠" }, "type": [ - "Water" + "Ground" ], "base": { - "HP": 55, - "Attack": 130, - "Defense": 115, + "HP": 35, + "Attack": 100, + "Defense": 50, "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 75 + "Sp. Defense": 70, + "Speed": 120 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 100, + "id": 51, "name": { - "english": "Voltorb", - "japanese": "ビリリダマ", - "chinese": "霹雳电球" + "english": "Dugtrio", + "japanese": "ダグトリオ", + "chinese": "三地鼠" }, "type": [ - "Electric" + "Ground", + "Steel" ], "base": { - "HP": 40, - "Attack": 30, - "Defense": 50, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 100 + "HP": 35, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 50, + "Sp. Defense": 70, + "Speed": 110 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 101, + "id": 51, "name": { - "english": "Electrode", - "japanese": "マルマイン", - "chinese": "顽皮雷弹" + "english": "Dugtrio", + "japanese": "ダグトリオ", + "chinese": "三地鼠" }, "type": [ - "Electric" + "Ground" ], "base": { - "HP": 60, - "Attack": 50, - "Defense": 70, - "Sp. Attack": 80, - "Sp. Defense": 80, - "Speed": 150 + "HP": 35, + "Attack": 100, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 70, + "Speed": 120 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 102, + "id": 52, "name": { - "english": "Exeggcute", - "japanese": "タマタマ", - "chinese": "蛋蛋" + "english": "Meowth", + "japanese": "ニャース", + "chinese": "喵喵" }, "type": [ - "Grass", - "Psychic" + "Normal" ], "base": { - "HP": 60, - "Attack": 40, - "Defense": 80, - "Sp. Attack": 60, - "Sp. Defense": 45, - "Speed": 40 + "HP": 40, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 90 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 103, + "id": 52, "name": { - "english": "Exeggutor", - "japanese": "ナッシー", - "chinese": "椰蛋树" + "english": "Meowth", + "japanese": "ニャース", + "chinese": "喵喵" }, "type": [ - "Grass", - "Psychic" + "Dark" ], "base": { - "HP": 95, - "Attack": 95, - "Defense": 85, - "Sp. Attack": 125, - "Sp. Defense": 75, - "Speed": 55 + "HP": 40, + "Attack": 35, + "Defense": 35, + "Sp. Attack": 50, + "Sp. Defense": 40, + "Speed": 90 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 104, + "id": 52, "name": { - "english": "Cubone", - "japanese": "カラカラ", - "chinese": "卡拉卡拉" + "english": "Meowth", + "japanese": "ニャース", + "chinese": "喵喵" }, "type": [ - "Ground" + "Steel" ], "base": { "HP": 50, - "Attack": 50, - "Defense": 95, + "Attack": 65, + "Defense": 55, "Sp. Attack": 40, - "Sp. Defense": 50, - "Speed": 35 + "Sp. Defense": 40, + "Speed": 40 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 105, + "id": 52, "name": { - "english": "Marowak", - "japanese": "ガラガラ", - "chinese": "嘎啦嘎啦" + "english": "Meowth", + "japanese": "ニャース", + "chinese": "喵喵" }, "type": [ - "Ground" + "Normal" ], "base": { - "HP": 60, - "Attack": 80, - "Defense": 110, - "Sp. Attack": 50, - "Sp. Defense": 80, - "Speed": 45 - }, - "color": "brown" - }, - { - "id": 106, - "name": { - "english": "Hitmonlee", - "japanese": "サワムラー", - "chinese": "飞腿郎" + "HP": 40, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 90 }, - "type": [ - "Fighting" + "includedInGens": [ + 8 ], - "base": { - "HP": 50, - "Attack": 120, - "Defense": 53, - "Sp. Attack": 35, - "Sp. Defense": 110, - "Speed": 87 - }, - "color": "brown" + "form": { + "key": "gmax" + } }, { - "id": 107, + "id": 52, "name": { - "english": "Hitmonchan", - "japanese": "エビワラー", - "chinese": "快拳郎" + "english": "Meowth", + "japanese": "ニャース", + "chinese": "喵喵" }, "type": [ - "Fighting" + "Normal" ], "base": { - "HP": 50, - "Attack": 105, - "Defense": 79, - "Sp. Attack": 35, - "Sp. Defense": 110, - "Speed": 76 + "HP": 40, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 90 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 108, + "id": 53, "name": { - "english": "Lickitung", - "japanese": "ベロリンガ", - "chinese": "大舌头" + "english": "Persian", + "japanese": "ペルシアン", + "chinese": "猫老大" }, "type": [ "Normal" ], "base": { - "HP": 90, - "Attack": 55, - "Defense": 75, - "Sp. Attack": 60, - "Sp. Defense": 75, - "Speed": 30 + "HP": 65, + "Attack": 70, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 115 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 109, + "id": 53, "name": { - "english": "Koffing", - "japanese": "ドガース", - "chinese": "瓦斯弹" + "english": "Persian", + "japanese": "ペルシアン", + "chinese": "猫老大" }, "type": [ - "Poison" + "Dark" ], "base": { - "HP": 40, - "Attack": 65, - "Defense": 95, - "Sp. Attack": 60, - "Sp. Defense": 45, - "Speed": 35 + "HP": 65, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 75, + "Sp. Defense": 65, + "Speed": 115 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 110, + "id": 53, "name": { - "english": "Weezing", - "japanese": "マタドガス", - "chinese": "双弹瓦斯" + "english": "Persian", + "japanese": "ペルシアン", + "chinese": "猫老大" }, "type": [ - "Poison" + "Normal" ], "base": { "HP": 65, - "Attack": 90, - "Defense": 120, - "Sp. Attack": 85, - "Sp. Defense": 70, - "Speed": 60 + "Attack": 70, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 115 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 111, + "id": 54, "name": { - "english": "Rhyhorn", - "japanese": "サイホーン", - "chinese": "独角犀牛" + "english": "Psyduck", + "japanese": "コダック", + "chinese": "可达鸭" }, "type": [ - "Ground", - "Rock" + "Water" ], "base": { - "HP": 80, - "Attack": 85, - "Defense": 95, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 25 + "HP": 50, + "Attack": 52, + "Defense": 48, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 55 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 112, + "id": 54, "name": { - "english": "Rhydon", - "japanese": "サイドン", - "chinese": "钻角犀兽" + "english": "Psyduck", + "japanese": "コダック", + "chinese": "可达鸭" }, "type": [ - "Ground", - "Rock" + "Water" ], "base": { - "HP": 105, - "Attack": 130, - "Defense": 120, - "Sp. Attack": 45, - "Sp. Defense": 45, - "Speed": 40 + "HP": 50, + "Attack": 52, + "Defense": 48, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 55 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 113, + "id": 55, "name": { - "english": "Chansey", - "japanese": "ラッキー", - "chinese": "吉利蛋" + "english": "Golduck", + "japanese": "ゴルダック", + "chinese": "哥达鸭" }, "type": [ - "Normal" + "Water" ], "base": { - "HP": 250, - "Attack": 5, - "Defense": 5, - "Sp. Attack": 35, - "Sp. Defense": 105, - "Speed": 50 + "HP": 80, + "Attack": 82, + "Defense": 78, + "Sp. Attack": 95, + "Sp. Defense": 80, + "Speed": 85 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 114, + "id": 55, "name": { - "english": "Tangela", - "japanese": "モンジャラ", - "chinese": "蔓藤怪" + "english": "Golduck", + "japanese": "ゴルダック", + "chinese": "哥达鸭" }, "type": [ - "Grass" + "Water" ], "base": { - "HP": 65, - "Attack": 55, - "Defense": 115, - "Sp. Attack": 100, - "Sp. Defense": 40, - "Speed": 60 + "HP": 80, + "Attack": 82, + "Defense": 78, + "Sp. Attack": 95, + "Sp. Defense": 80, + "Speed": 85 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 115, + "id": 56, "name": { - "english": "Kangaskhan", - "japanese": "ガルーラ", - "chinese": "袋兽" + "english": "Mankey", + "japanese": "マンキー", + "chinese": "猴怪" }, "type": [ - "Normal" + "Fighting" ], "base": { - "HP": 105, - "Attack": 95, - "Defense": 80, - "Sp. Attack": 40, - "Sp. Defense": 80, - "Speed": 90 - }, - "color": "brown" + "HP": 40, + "Attack": 80, + "Defense": 35, + "Sp. Attack": 35, + "Sp. Defense": 45, + "Speed": 70 + } }, { - "id": 116, + "id": 56, "name": { - "english": "Horsea", - "japanese": "タッツー", - "chinese": "墨海马" + "english": "Mankey", + "japanese": "マンキー", + "chinese": "猴怪" }, "type": [ - "Water" + "Fighting" ], "base": { - "HP": 30, - "Attack": 40, - "Defense": 70, - "Sp. Attack": 70, - "Sp. Defense": 25, - "Speed": 60 - }, - "color": "blue" + "HP": 40, + "Attack": 80, + "Defense": 35, + "Sp. Attack": 35, + "Sp. Defense": 45, + "Speed": 70 + } }, { - "id": 117, + "id": 57, "name": { - "english": "Seadra", - "japanese": "シードラ", - "chinese": "海刺龙" + "english": "Primeape", + "japanese": "オコリザル", + "chinese": "火暴猴" }, "type": [ - "Water" + "Fighting" ], "base": { - "HP": 55, - "Attack": 65, - "Defense": 95, - "Sp. Attack": 95, - "Sp. Defense": 45, - "Speed": 85 - }, - "color": "blue" + "HP": 65, + "Attack": 105, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 95 + } }, { - "id": 118, + "id": 57, "name": { - "english": "Goldeen", - "japanese": "トサキント", - "chinese": "角金鱼" + "english": "Primeape", + "japanese": "オコリザル", + "chinese": "火暴猴" }, "type": [ - "Water" + "Fighting" ], "base": { - "HP": 45, - "Attack": 67, + "HP": 65, + "Attack": 105, "Defense": 60, - "Sp. Attack": 35, - "Sp. Defense": 50, - "Speed": 63 - }, - "color": "red" + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 95 + } }, { - "id": 119, + "id": 58, "name": { - "english": "Seaking", - "japanese": "アズマオウ", - "chinese": "金鱼王" + "english": "Growlithe", + "japanese": "ガーディ", + "chinese": "卡蒂狗" }, "type": [ - "Water" + "Fire" ], "base": { - "HP": 80, - "Attack": 92, - "Defense": 65, - "Sp. Attack": 65, - "Sp. Defense": 80, - "Speed": 68 + "HP": 55, + "Attack": 70, + "Defense": 45, + "Sp. Attack": 70, + "Sp. Defense": 50, + "Speed": 60 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 120, + "id": 58, "name": { - "english": "Staryu", - "japanese": "ヒトデマン", - "chinese": "海星星" + "english": "Growlithe", + "japanese": "ガーディ", + "chinese": "卡蒂狗" }, "type": [ - "Water" + "Fire", + "Rock" ], "base": { - "HP": 30, - "Attack": 45, - "Defense": 55, - "Sp. Attack": 70, - "Sp. Defense": 55, - "Speed": 85 + "HP": 60, + "Attack": 75, + "Defense": 45, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 55 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } }, { - "id": 121, + "id": 58, "name": { - "english": "Starmie", - "japanese": "スターミー", - "chinese": "宝石海星" + "english": "Growlithe", + "japanese": "ガーディ", + "chinese": "卡蒂狗" }, "type": [ - "Water", - "Psychic" + "Fire", + "Rock" ], "base": { "HP": 60, "Attack": 75, - "Defense": 85, - "Sp. Attack": 100, - "Sp. Defense": 85, - "Speed": 115 + "Defense": 45, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 55 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 122, + "id": 58, "name": { - "english": "Mr.Mime", - "japanese": "バリヤード", - "chinese": "魔墙人偶" + "english": "Growlithe", + "japanese": "ガーディ", + "chinese": "卡蒂狗" }, "type": [ - "Psychic", - "Fairy" + "Fire" ], "base": { - "HP": 40, - "Attack": 45, - "Defense": 65, - "Sp. Attack": 100, - "Sp. Defense": 120, - "Speed": 90 + "HP": 55, + "Attack": 70, + "Defense": 45, + "Sp. Attack": 70, + "Sp. Defense": 50, + "Speed": 60 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 123, + "id": 59, "name": { - "english": "Scyther", - "japanese": "ストライク", - "chinese": "飞天螳螂" + "english": "Arcanine", + "japanese": "ウインディ", + "chinese": "风速狗" }, "type": [ - "Bug", - "Flying" + "Fire" ], "base": { - "HP": 70, + "HP": 90, "Attack": 110, "Defense": 80, - "Sp. Attack": 55, + "Sp. Attack": 100, "Sp. Defense": 80, - "Speed": 105 + "Speed": 95 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 124, + "id": 59, "name": { - "english": "Jynx", - "japanese": "ルージュラ", - "chinese": "迷唇姐" + "english": "Arcanine", + "japanese": "ウインディ", + "chinese": "风速狗" }, "type": [ - "Ice", - "Psychic" + "Fire", + "Rock" ], "base": { - "HP": 65, - "Attack": 50, - "Defense": 35, - "Sp. Attack": 115, - "Sp. Defense": 95, - "Speed": 95 + "HP": 95, + "Attack": 115, + "Defense": 80, + "Sp. Attack": 95, + "Sp. Defense": 80, + "Speed": 90 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } }, { - "id": 125, + "id": 59, "name": { - "english": "Electabuzz", - "japanese": "エレブー", - "chinese": "电击兽" + "english": "Arcanine", + "japanese": "ウインディ", + "chinese": "风速狗" }, "type": [ - "Electric" + "Fire", + "Rock" ], "base": { - "HP": 65, - "Attack": 83, - "Defense": 57, + "HP": 95, + "Attack": 115, + "Defense": 80, "Sp. Attack": 95, - "Sp. Defense": 85, - "Speed": 105 + "Sp. Defense": 80, + "Speed": 90 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 126, + "id": 59, "name": { - "english": "Magmar", - "japanese": "ブーバー", - "chinese": "鸭嘴火兽" + "english": "Arcanine", + "japanese": "ウインディ", + "chinese": "风速狗" }, "type": [ "Fire" ], "base": { - "HP": 65, - "Attack": 95, - "Defense": 57, + "HP": 90, + "Attack": 110, + "Defense": 80, "Sp. Attack": 100, - "Sp. Defense": 85, - "Speed": 93 + "Sp. Defense": 80, + "Speed": 95 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 127, + "id": 60, "name": { - "english": "Pinsir", - "japanese": "カイロス", - "chinese": "凯罗斯" + "english": "Poliwag", + "japanese": "ニョロモ", + "chinese": "蚊香蝌蚪" }, "type": [ - "Bug" + "Water" ], "base": { - "HP": 65, - "Attack": 125, - "Defense": 100, - "Sp. Attack": 55, - "Sp. Defense": 70, - "Speed": 85 + "HP": 40, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 90 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 128, + "id": 60, "name": { - "english": "Tauros", - "japanese": "ケンタロス", - "chinese": "肯泰罗" + "english": "Poliwag", + "japanese": "ニョロモ", + "chinese": "蚊香蝌蚪" }, "type": [ - "Normal" + "Water" ], "base": { - "HP": 75, - "Attack": 100, - "Defense": 95, + "HP": 40, + "Attack": 50, + "Defense": 40, "Sp. Attack": 40, - "Sp. Defense": 70, - "Speed": 110 + "Sp. Defense": 40, + "Speed": 90 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 129, + "id": 61, "name": { - "english": "Magikarp", - "japanese": "コイキング", - "chinese": "鲤鱼王" + "english": "Poliwhirl", + "japanese": "ニョロゾ", + "chinese": "蚊香君" }, "type": [ "Water" ], "base": { - "HP": 20, - "Attack": 10, - "Defense": 55, - "Sp. Attack": 15, - "Sp. Defense": 20, - "Speed": 80 + "HP": 65, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 130, + "id": 61, "name": { - "english": "Gyarados", - "japanese": "ギャラドス", - "chinese": "暴鲤龙" + "english": "Poliwhirl", + "japanese": "ニョロゾ", + "chinese": "蚊香君" }, "type": [ - "Water", - "Flying" + "Water" ], "base": { - "HP": 95, - "Attack": 125, - "Defense": 79, - "Sp. Attack": 60, - "Sp. Defense": 100, - "Speed": 81 + "HP": 65, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 131, + "id": 62, "name": { - "english": "Lapras", - "japanese": "ラプラス", - "chinese": "拉普拉斯" + "english": "Poliwrath", + "japanese": "ニョロボン", + "chinese": "蚊香泳士" }, "type": [ "Water", - "Ice" + "Fighting" ], "base": { - "HP": 130, - "Attack": 85, - "Defense": 80, - "Sp. Attack": 85, - "Sp. Defense": 95, - "Speed": 60 + "HP": 90, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 70, + "Sp. Defense": 90, + "Speed": 70 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 132, + "id": 62, "name": { - "english": "Ditto", - "japanese": "メタモン", - "chinese": "百变怪" + "english": "Poliwrath", + "japanese": "ニョロボン", + "chinese": "蚊香泳士" }, "type": [ - "Normal" + "Water", + "Fighting" ], "base": { - "HP": 48, - "Attack": 48, - "Defense": 48, - "Sp. Attack": 48, - "Sp. Defense": 48, - "Speed": 48 + "HP": 90, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 70, + "Sp. Defense": 90, + "Speed": 70 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 133, + "id": 63, "name": { - "english": "Eevee", - "japanese": "イーブイ", - "chinese": "伊布" + "english": "Abra", + "japanese": "ケーシィ", + "chinese": "凯西" }, "type": [ - "Normal" + "Psychic" ], "base": { - "HP": 55, - "Attack": 55, - "Defense": 50, - "Sp. Attack": 45, - "Sp. Defense": 65, - "Speed": 55 + "HP": 25, + "Attack": 20, + "Defense": 15, + "Sp. Attack": 105, + "Sp. Defense": 55, + "Speed": 90 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 134, + "id": 63, "name": { - "english": "Vaporeon", - "japanese": "シャワーズ", - "chinese": "水伊布" + "english": "Abra", + "japanese": "ケーシィ", + "chinese": "凯西" }, "type": [ - "Water" + "Psychic" ], "base": { - "HP": 130, - "Attack": 65, - "Defense": 60, - "Sp. Attack": 110, - "Sp. Defense": 95, - "Speed": 65 + "HP": 25, + "Attack": 20, + "Defense": 15, + "Sp. Attack": 105, + "Sp. Defense": 55, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 135, + "id": 64, "name": { - "english": "Jolteon", - "japanese": "サンダース", - "chinese": "雷伊布" + "english": "Kadabra", + "japanese": "ユンゲラー", + "chinese": "勇基拉" }, "type": [ - "Electric" + "Psychic" ], "base": { - "HP": 65, - "Attack": 65, - "Defense": 60, - "Sp. Attack": 110, - "Sp. Defense": 95, - "Speed": 130 + "HP": 40, + "Attack": 35, + "Defense": 30, + "Sp. Attack": 120, + "Sp. Defense": 70, + "Speed": 105 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 136, + "id": 64, "name": { - "english": "Flareon", - "japanese": "ブースター", - "chinese": "火伊布" + "english": "Kadabra", + "japanese": "ユンゲラー", + "chinese": "勇基拉" }, "type": [ - "Fire" + "Psychic" ], "base": { - "HP": 65, - "Attack": 130, - "Defense": 60, - "Sp. Attack": 95, - "Sp. Defense": 110, - "Speed": 65 + "HP": 40, + "Attack": 35, + "Defense": 30, + "Sp. Attack": 120, + "Sp. Defense": 70, + "Speed": 105 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 137, + "id": 65, "name": { - "english": "Porygon", - "japanese": "ポリゴン", - "chinese": "多边兽" + "english": "Alakazam", + "japanese": "フーディン", + "chinese": "胡地" }, "type": [ - "Normal" + "Psychic" ], "base": { - "HP": 65, - "Attack": 60, - "Defense": 70, - "Sp. Attack": 85, - "Sp. Defense": 75, - "Speed": 40 + "HP": 55, + "Attack": 50, + "Defense": 45, + "Sp. Attack": 135, + "Sp. Defense": 95, + "Speed": 120 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 138, + "id": 65, "name": { - "english": "Omanyte", - "japanese": "オムナイト", - "chinese": "菊石兽" + "english": "Alakazam", + "japanese": "フーディン", + "chinese": "胡地" }, "type": [ - "Rock", - "Water" + "Psychic" ], "base": { - "HP": 35, - "Attack": 40, - "Defense": 100, - "Sp. Attack": 90, - "Sp. Defense": 55, - "Speed": 35 + "HP": 55, + "Attack": 50, + "Defense": 65, + "Sp. Attack": 175, + "Sp. Defense": 105, + "Speed": 150 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 139, + "id": 65, "name": { - "english": "Omastar", - "japanese": "オムスター", - "chinese": "多刺菊石兽" + "english": "Alakazam", + "japanese": "フーディン", + "chinese": "胡地" }, "type": [ - "Rock", - "Water" + "Psychic" ], "base": { - "HP": 70, - "Attack": 60, - "Defense": 125, - "Sp. Attack": 115, - "Sp. Defense": 70, - "Speed": 55 + "HP": 55, + "Attack": 50, + "Defense": 45, + "Sp. Attack": 135, + "Sp. Defense": 95, + "Speed": 120 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 140, + "id": 66, "name": { - "english": "Kabuto", - "japanese": "カブト", - "chinese": "化石盔" + "english": "Machop", + "japanese": "ワンリキー", + "chinese": "腕力" }, "type": [ - "Rock", - "Water" + "Fighting" ], "base": { - "HP": 30, + "HP": 70, "Attack": 80, - "Defense": 90, - "Sp. Attack": 55, - "Sp. Defense": 45, - "Speed": 55 + "Defense": 50, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 35 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 141, + "id": 66, "name": { - "english": "Kabutops", - "japanese": "カブトプス", - "chinese": "镰刀盔" + "english": "Machop", + "japanese": "ワンリキー", + "chinese": "腕力" }, "type": [ - "Rock", - "Water" + "Fighting" ], "base": { - "HP": 60, - "Attack": 115, - "Defense": 105, - "Sp. Attack": 65, - "Sp. Defense": 70, - "Speed": 80 + "HP": 70, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 35 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 142, + "id": 67, "name": { - "english": "Aerodactyl", - "japanese": "プテラ", - "chinese": "化石翼龙" + "english": "Machoke", + "japanese": "ゴーリキー", + "chinese": "豪力" }, "type": [ - "Rock", - "Flying" + "Fighting" ], "base": { "HP": 80, - "Attack": 105, - "Defense": 65, - "Sp. Attack": 60, - "Sp. Defense": 75, - "Speed": 130 + "Attack": 100, + "Defense": 70, + "Sp. Attack": 50, + "Sp. Defense": 60, + "Speed": 45 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 143, + "id": 67, "name": { - "english": "Snorlax", - "japanese": "カビゴン", - "chinese": "卡比兽" + "english": "Machoke", + "japanese": "ゴーリキー", + "chinese": "豪力" }, "type": [ - "Normal" + "Fighting" ], "base": { - "HP": 160, - "Attack": 110, - "Defense": 65, - "Sp. Attack": 65, - "Sp. Defense": 110, - "Speed": 30 + "HP": 80, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 50, + "Sp. Defense": 60, + "Speed": 45 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 144, + "id": 68, "name": { - "english": "Articuno", - "japanese": "フリーザー", - "chinese": "急冻鸟" + "english": "Machamp", + "japanese": "カイリキー", + "chinese": "怪力" }, "type": [ - "Ice", - "Flying" + "Fighting" ], "base": { "HP": 90, - "Attack": 85, - "Defense": 100, - "Sp. Attack": 95, - "Sp. Defense": 125, - "Speed": 85 + "Attack": 130, + "Defense": 80, + "Sp. Attack": 65, + "Sp. Defense": 85, + "Speed": 55 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 145, + "id": 68, "name": { - "english": "Zapdos", - "japanese": "サンダー", - "chinese": "闪电鸟" + "english": "Machamp", + "japanese": "カイリキー", + "chinese": "怪力" }, "type": [ - "Electric", - "Flying" + "Fighting" ], "base": { "HP": 90, - "Attack": 90, - "Defense": 85, - "Sp. Attack": 125, - "Sp. Defense": 90, - "Speed": 100 + "Attack": 130, + "Defense": 80, + "Sp. Attack": 65, + "Sp. Defense": 85, + "Speed": 55 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 146, + "id": 68, "name": { - "english": "Moltres", - "japanese": "ファイヤー", - "chinese": "火焰鸟" + "english": "Machamp", + "japanese": "カイリキー", + "chinese": "怪力" }, "type": [ - "Fire", - "Flying" + "Fighting" ], "base": { "HP": 90, - "Attack": 100, - "Defense": 90, - "Sp. Attack": 125, + "Attack": 130, + "Defense": 80, + "Sp. Attack": 65, "Sp. Defense": 85, - "Speed": 90 + "Speed": 55 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 147, + "id": 69, "name": { - "english": "Dratini", - "japanese": "ミニリュウ", - "chinese": "迷你龙" + "english": "Bellsprout", + "japanese": "マダツボミ", + "chinese": "喇叭芽" }, "type": [ - "Dragon" + "Grass", + "Poison" ], "base": { - "HP": 41, - "Attack": 64, - "Defense": 45, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 50 - }, - "color": "blue" + "HP": 50, + "Attack": 75, + "Defense": 35, + "Sp. Attack": 70, + "Sp. Defense": 30, + "Speed": 40 + } }, { - "id": 148, + "id": 69, "name": { - "english": "Dragonair", - "japanese": "ハクリュー", - "chinese": "哈克龙" + "english": "Bellsprout", + "japanese": "マダツボミ", + "chinese": "喇叭芽" }, "type": [ - "Dragon" + "Grass", + "Poison" ], "base": { - "HP": 61, - "Attack": 84, - "Defense": 65, + "HP": 50, + "Attack": 75, + "Defense": 35, "Sp. Attack": 70, - "Sp. Defense": 70, - "Speed": 70 - }, - "color": "blue" + "Sp. Defense": 30, + "Speed": 40 + } }, { - "id": 149, + "id": 70, "name": { - "english": "Dragonite", - "japanese": "カイリュー", - "chinese": "快龙" + "english": "Weepinbell", + "japanese": "ウツドン", + "chinese": "口呆花" }, "type": [ - "Dragon", - "Flying" + "Grass", + "Poison" ], "base": { - "HP": 91, - "Attack": 134, - "Defense": 95, - "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 80 - }, - "color": "brown" + "HP": 65, + "Attack": 90, + "Defense": 50, + "Sp. Attack": 85, + "Sp. Defense": 45, + "Speed": 55 + } }, { - "id": 150, + "id": 70, "name": { - "english": "Mewtwo", - "japanese": "ミュウツー", - "chinese": "超梦" + "english": "Weepinbell", + "japanese": "ウツドン", + "chinese": "口呆花" }, "type": [ - "Psychic" + "Grass", + "Poison" ], "base": { - "HP": 106, - "Attack": 110, - "Defense": 90, - "Sp. Attack": 154, - "Sp. Defense": 90, - "Speed": 130 - }, - "color": "purple" + "HP": 65, + "Attack": 90, + "Defense": 50, + "Sp. Attack": 85, + "Sp. Defense": 45, + "Speed": 55 + } }, { - "id": 151, + "id": 71, "name": { - "english": "Mew", - "japanese": "ミュウ", - "chinese": "梦幻" + "english": "Victreebel", + "japanese": "ウツボット", + "chinese": "大食花" }, "type": [ - "Psychic" + "Grass", + "Poison" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 100, + "HP": 80, + "Attack": 105, + "Defense": 65, "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 100 - }, - "color": "pink" + "Sp. Defense": 70, + "Speed": 70 + } }, { - "id": 152, + "id": 71, "name": { - "english": "Chikorita", - "japanese": "チコリータ", - "chinese": "菊草叶" + "english": "Victreebel", + "japanese": "ウツボット", + "chinese": "大食花" }, "type": [ - "Grass" + "Grass", + "Poison" ], "base": { - "HP": 45, - "Attack": 49, + "HP": 80, + "Attack": 105, "Defense": 65, - "Sp. Attack": 49, - "Sp. Defense": 65, - "Speed": 45 - }, - "color": "green" + "Sp. Attack": 100, + "Sp. Defense": 70, + "Speed": 70 + } }, { - "id": 153, + "id": 72, "name": { - "english": "Bayleef", - "japanese": "ベイリーフ", - "chinese": "月桂叶" + "english": "Tentacool", + "japanese": "メノクラゲ", + "chinese": "玛瑙水母" }, "type": [ - "Grass" + "Water", + "Poison" ], "base": { - "HP": 60, - "Attack": 62, - "Defense": 80, - "Sp. Attack": 63, - "Sp. Defense": 80, - "Speed": 60 + "HP": 40, + "Attack": 40, + "Defense": 35, + "Sp. Attack": 50, + "Sp. Defense": 100, + "Speed": 70 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 154, + "id": 72, "name": { - "english": "Meganium", - "japanese": "メガニウム", - "chinese": "大竺葵" + "english": "Tentacool", + "japanese": "メノクラゲ", + "chinese": "玛瑙水母" }, "type": [ - "Grass" + "Water", + "Poison" ], "base": { - "HP": 80, - "Attack": 82, - "Defense": 100, - "Sp. Attack": 83, + "HP": 40, + "Attack": 40, + "Defense": 35, + "Sp. Attack": 50, "Sp. Defense": 100, - "Speed": 80 + "Speed": 70 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 155, + "id": 73, "name": { - "english": "Cyndaquil", - "japanese": "ヒノアラシ", - "chinese": "火球鼠" + "english": "Tentacruel", + "japanese": "ドククラゲ", + "chinese": "毒刺水母" }, "type": [ - "Fire" + "Water", + "Poison" ], "base": { - "HP": 39, - "Attack": 52, - "Defense": 43, - "Sp. Attack": 60, - "Sp. Defense": 50, - "Speed": 65 + "HP": 80, + "Attack": 70, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 120, + "Speed": 100 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 156, + "id": 73, "name": { - "english": "Quilava", - "japanese": "マグマラシ", - "chinese": "火岩鼠" + "english": "Tentacruel", + "japanese": "ドククラゲ", + "chinese": "毒刺水母" }, "type": [ - "Fire" + "Water", + "Poison" ], "base": { - "HP": 58, - "Attack": 64, - "Defense": 58, + "HP": 80, + "Attack": 70, + "Defense": 65, "Sp. Attack": 80, - "Sp. Defense": 65, - "Speed": 80 + "Sp. Defense": 120, + "Speed": 100 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 157, + "id": 74, "name": { - "english": "Typhlosion", - "japanese": "バクフーン", - "chinese": "火暴兽" + "english": "Geodude", + "japanese": "イシツブテ", + "chinese": "小拳石" }, "type": [ - "Fire" + "Rock", + "Ground" ], "base": { - "HP": 78, - "Attack": 84, - "Defense": 78, - "Sp. Attack": 109, - "Sp. Defense": 85, - "Speed": 100 - }, - "color": "yellow" + "HP": 40, + "Attack": 80, + "Defense": 100, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 20 + } }, { - "id": 158, + "id": 74, "name": { - "english": "Totodile", - "japanese": "ワニノコ", - "chinese": "小锯鳄" + "english": "Geodude", + "japanese": "イシツブテ", + "chinese": "小拳石" }, "type": [ - "Water" + "Rock", + "Electric" ], "base": { - "HP": 50, - "Attack": 65, - "Defense": 64, - "Sp. Attack": 44, - "Sp. Defense": 48, - "Speed": 43 + "HP": 40, + "Attack": 80, + "Defense": 100, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 20 }, - "color": "blue" + "form": { + "key": "alola" + } }, { - "id": 159, + "id": 74, "name": { - "english": "Croconaw", - "japanese": "アリゲイツ", - "chinese": "蓝鳄" + "english": "Geodude", + "japanese": "イシツブテ", + "chinese": "小拳石" }, "type": [ - "Water" + "Rock", + "Ground" ], "base": { - "HP": 65, + "HP": 40, "Attack": 80, - "Defense": 80, - "Sp. Attack": 59, - "Sp. Defense": 63, - "Speed": 58 - }, - "color": "blue" + "Defense": 100, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 20 + } }, { - "id": 160, + "id": 75, "name": { - "english": "Feraligatr", - "japanese": "オーダイル", - "chinese": "大力鳄" + "english": "Graveler", + "japanese": "ゴローン", + "chinese": "隆隆石" }, "type": [ - "Water" + "Rock", + "Ground" ], "base": { - "HP": 85, - "Attack": 105, - "Defense": 100, - "Sp. Attack": 79, - "Sp. Defense": 83, - "Speed": 78 - }, - "color": "blue" + "HP": 55, + "Attack": 95, + "Defense": 115, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 35 + } }, { - "id": 161, + "id": 75, "name": { - "english": "Sentret", - "japanese": "オタチ", - "chinese": "尾立" + "english": "Graveler", + "japanese": "ゴローン", + "chinese": "隆隆石" }, "type": [ - "Normal" + "Rock", + "Electric" ], "base": { - "HP": 35, - "Attack": 46, - "Defense": 34, - "Sp. Attack": 35, + "HP": 55, + "Attack": 95, + "Defense": 115, + "Sp. Attack": 45, "Sp. Defense": 45, - "Speed": 20 + "Speed": 35 }, - "color": "brown" + "form": { + "key": "alola" + } }, { - "id": 162, + "id": 75, "name": { - "english": "Furret", - "japanese": "オオタチ", - "chinese": "大尾立" + "english": "Graveler", + "japanese": "ゴローン", + "chinese": "隆隆石" }, "type": [ - "Normal" + "Rock", + "Ground" ], "base": { - "HP": 85, - "Attack": 76, - "Defense": 64, + "HP": 55, + "Attack": 95, + "Defense": 115, "Sp. Attack": 45, - "Sp. Defense": 55, - "Speed": 90 - }, - "color": "brown" + "Sp. Defense": 45, + "Speed": 35 + } }, { - "id": 163, + "id": 76, "name": { - "english": "Hoothoot", - "japanese": "ホーホー", - "chinese": "咕咕" + "english": "Golem", + "japanese": "ゴローニャ", + "chinese": "隆隆岩" }, "type": [ - "Normal", - "Flying" + "Rock", + "Ground" ], "base": { - "HP": 60, - "Attack": 30, - "Defense": 30, - "Sp. Attack": 36, - "Sp. Defense": 56, - "Speed": 50 - }, - "color": "brown" + "HP": 80, + "Attack": 120, + "Defense": 130, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 45 + } }, { - "id": 164, + "id": 76, "name": { - "english": "Noctowl", - "japanese": "ヨルノズク", - "chinese": "猫头夜鹰" + "english": "Golem", + "japanese": "ゴローニャ", + "chinese": "隆隆岩" }, "type": [ - "Normal", - "Flying" + "Rock", + "Electric" ], "base": { - "HP": 100, - "Attack": 50, - "Defense": 50, - "Sp. Attack": 86, - "Sp. Defense": 96, - "Speed": 70 + "HP": 80, + "Attack": 120, + "Defense": 130, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 45 }, - "color": "brown" + "form": { + "key": "alola" + } }, { - "id": 165, + "id": 76, "name": { - "english": "Ledyba", - "japanese": "レディバ", - "chinese": "芭瓢虫" + "english": "Golem", + "japanese": "ゴローニャ", + "chinese": "隆隆岩" }, "type": [ - "Bug", - "Flying" + "Rock", + "Ground" ], "base": { - "HP": 40, - "Attack": 20, - "Defense": 30, - "Sp. Attack": 40, - "Sp. Defense": 80, - "Speed": 55 - }, - "color": "red" + "HP": 80, + "Attack": 120, + "Defense": 130, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 45 + } }, { - "id": 166, + "id": 77, "name": { - "english": "Ledian", - "japanese": "レディアン", - "chinese": "安瓢虫" + "english": "Ponyta", + "japanese": "ポニータ", + "chinese": "小火马" }, "type": [ - "Bug", - "Flying" + "Fire" ], "base": { - "HP": 55, - "Attack": 35, - "Defense": 50, - "Sp. Attack": 55, - "Sp. Defense": 110, - "Speed": 85 + "HP": 50, + "Attack": 85, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 90 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 167, + "id": 77, "name": { - "english": "Spinarak", - "japanese": "イトマル", - "chinese": "圆丝蛛" + "english": "Ponyta", + "japanese": "ポニータ", + "chinese": "小火马" }, "type": [ - "Bug", - "Poison" + "Psychic" ], "base": { - "HP": 40, - "Attack": 60, - "Defense": 40, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 30 + "HP": 50, + "Attack": 85, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 90 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 168, + "id": 77, "name": { - "english": "Ariados", - "japanese": "アリアドス", - "chinese": "阿利多斯" + "english": "Ponyta", + "japanese": "ポニータ", + "chinese": "小火马" }, "type": [ - "Bug", - "Poison" + "Fire" ], "base": { - "HP": 70, - "Attack": 90, - "Defense": 70, - "Sp. Attack": 60, - "Sp. Defense": 70, - "Speed": 40 + "HP": 50, + "Attack": 85, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 90 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 169, + "id": 78, "name": { - "english": "Crobat", - "japanese": "クロバット", - "chinese": "叉字蝠" + "english": "Rapidash", + "japanese": "ギャロップ", + "chinese": "烈焰马" }, "type": [ - "Poison", - "Flying" + "Fire" ], "base": { - "HP": 85, - "Attack": 90, - "Defense": 80, - "Sp. Attack": 70, + "HP": 65, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 80, "Sp. Defense": 80, - "Speed": 130 + "Speed": 105 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 170, + "id": 78, "name": { - "english": "Chinchou", - "japanese": "チョンチー", - "chinese": "灯笼鱼" + "english": "Rapidash", + "japanese": "ギャロップ", + "chinese": "烈焰马" }, "type": [ - "Water", - "Electric" + "Psychic", + "Fairy" ], "base": { - "HP": 75, - "Attack": 38, - "Defense": 38, - "Sp. Attack": 56, - "Sp. Defense": 56, - "Speed": 67 + "HP": 65, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 105 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 171, + "id": 78, "name": { - "english": "Lanturn", - "japanese": "ランターン", - "chinese": "电灯怪" + "english": "Rapidash", + "japanese": "ギャロップ", + "chinese": "烈焰马" }, "type": [ - "Water", - "Electric" + "Fire" ], "base": { - "HP": 125, - "Attack": 58, - "Defense": 58, - "Sp. Attack": 76, - "Sp. Defense": 76, - "Speed": 67 + "HP": 65, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 105 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 172, + "id": 79, "name": { - "english": "Pichu", - "japanese": "ピチュー", - "chinese": "皮丘" + "english": "Slowpoke", + "japanese": "ヤドン", + "chinese": "呆呆兽" }, "type": [ - "Electric" + "Water", + "Psychic" ], "base": { - "HP": 20, - "Attack": 40, - "Defense": 15, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 60 + "HP": 90, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 15 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 173, + "id": 79, "name": { - "english": "Cleffa", - "japanese": "ピィ", - "chinese": "皮宝宝" + "english": "Slowpoke", + "japanese": "ヤドン", + "chinese": "呆呆兽" }, "type": [ - "Fairy" + "Psychic" ], "base": { - "HP": 50, - "Attack": 25, - "Defense": 28, - "Sp. Attack": 45, - "Sp. Defense": 55, + "HP": 90, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 40, + "Sp. Defense": 40, "Speed": 15 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 174, + "id": 79, "name": { - "english": "Igglybuff", - "japanese": "ププリン", - "chinese": "宝宝丁" + "english": "Slowpoke", + "japanese": "ヤドン", + "chinese": "呆呆兽" }, "type": [ - "Normal", - "Fairy" + "Water", + "Psychic" ], "base": { "HP": 90, - "Attack": 30, - "Defense": 15, + "Attack": 65, + "Defense": 65, "Sp. Attack": 40, - "Sp. Defense": 20, + "Sp. Defense": 40, "Speed": 15 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 175, + "id": 80, "name": { - "english": "Togepi", - "japanese": "トゲピー", - "chinese": "波克比" + "english": "Slowbro", + "japanese": "ヤドラン", + "chinese": "呆壳兽" }, "type": [ - "Fairy" + "Water", + "Psychic" ], "base": { - "HP": 35, - "Attack": 20, - "Defense": 65, - "Sp. Attack": 40, - "Sp. Defense": 65, - "Speed": 20 + "HP": 95, + "Attack": 75, + "Defense": 110, + "Sp. Attack": 100, + "Sp. Defense": 80, + "Speed": 30 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 176, + "id": 80, "name": { - "english": "Togetic", - "japanese": "トゲチック", - "chinese": "波克基古" + "english": "Slowbro", + "japanese": "ヤドラン", + "chinese": "呆壳兽" }, "type": [ - "Fairy", - "Flying" + "Water", + "Psychic" ], "base": { - "HP": 55, - "Attack": 40, - "Defense": 85, - "Sp. Attack": 80, - "Sp. Defense": 105, - "Speed": 40 + "HP": 95, + "Attack": 75, + "Defense": 180, + "Sp. Attack": 130, + "Sp. Defense": 80, + "Speed": 30 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 177, + "id": 80, "name": { - "english": "Natu", - "japanese": "ネイティ", - "chinese": "天然雀" + "english": "Slowbro", + "japanese": "ヤドラン", + "chinese": "呆壳兽" }, "type": [ - "Psychic", - "Flying" + "Poison", + "Psychic" ], "base": { - "HP": 40, - "Attack": 50, - "Defense": 45, - "Sp. Attack": 70, - "Sp. Defense": 45, - "Speed": 70 + "HP": 95, + "Attack": 100, + "Defense": 95, + "Sp. Attack": 100, + "Sp. Defense": 70, + "Speed": 30 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 178, + "id": 80, "name": { - "english": "Xatu", - "japanese": "ネイティオ", - "chinese": "天然鸟" + "english": "Slowbro", + "japanese": "ヤドラン", + "chinese": "呆壳兽" }, "type": [ - "Psychic", - "Flying" + "Water", + "Psychic" ], "base": { - "HP": 65, + "HP": 95, "Attack": 75, - "Defense": 70, - "Sp. Attack": 95, - "Sp. Defense": 70, - "Speed": 95 + "Defense": 110, + "Sp. Attack": 100, + "Sp. Defense": 80, + "Speed": 30 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 179, + "id": 81, "name": { - "english": "Mareep", - "japanese": "メリープ", - "chinese": "咩利羊" + "english": "Magnemite", + "japanese": "コイル", + "chinese": "小磁怪" }, "type": [ - "Electric" + "Electric", + "Steel" ], "base": { - "HP": 55, - "Attack": 40, - "Defense": 40, - "Sp. Attack": 65, - "Sp. Defense": 45, - "Speed": 35 + "HP": 25, + "Attack": 35, + "Defense": 70, + "Sp. Attack": 95, + "Sp. Defense": 55, + "Speed": 45 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 180, + "id": 81, "name": { - "english": "Flaaffy", - "japanese": "モココ", - "chinese": "茸茸羊" + "english": "Magnemite", + "japanese": "コイル", + "chinese": "小磁怪" }, "type": [ - "Electric" + "Electric", + "Steel" ], "base": { - "HP": 70, - "Attack": 55, - "Defense": 55, - "Sp. Attack": 80, - "Sp. Defense": 60, + "HP": 25, + "Attack": 35, + "Defense": 70, + "Sp. Attack": 95, + "Sp. Defense": 55, "Speed": 45 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 181, + "id": 82, "name": { - "english": "Ampharos", - "japanese": "デンリュウ", - "chinese": "电龙" + "english": "Magneton", + "japanese": "レアコイル", + "chinese": "三合一磁怪" }, "type": [ - "Electric" + "Electric", + "Steel" ], "base": { - "HP": 90, - "Attack": 75, - "Defense": 85, - "Sp. Attack": 115, - "Sp. Defense": 90, - "Speed": 55 + "HP": 50, + "Attack": 60, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 70, + "Speed": 70 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 182, + "id": 82, "name": { - "english": "Bellossom", - "japanese": "キレイハナ", - "chinese": "美丽花" + "english": "Magneton", + "japanese": "レアコイル", + "chinese": "三合一磁怪" }, "type": [ - "Grass" + "Electric", + "Steel" ], "base": { - "HP": 75, - "Attack": 80, + "HP": 50, + "Attack": 60, "Defense": 95, - "Sp. Attack": 90, - "Sp. Defense": 100, - "Speed": 50 + "Sp. Attack": 120, + "Sp. Defense": 70, + "Speed": 70 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 183, + "id": 83, "name": { - "english": "Marill", - "japanese": "マリル", - "chinese": "玛力露" + "english": "Farfetch'd", + "japanese": "カモネギ", + "chinese": "大葱鸭" }, "type": [ - "Water", - "Fairy" + "Normal", + "Flying" ], "base": { - "HP": 70, - "Attack": 20, - "Defense": 50, - "Sp. Attack": 20, - "Sp. Defense": 50, - "Speed": 40 + "HP": 52, + "Attack": 90, + "Defense": 55, + "Sp. Attack": 58, + "Sp. Defense": 62, + "Speed": 60 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 184, + "id": 83, "name": { - "english": "Azumarill", - "japanese": "マリルリ", - "chinese": "玛力露丽" + "english": "Farfetch'd", + "japanese": "カモネギ", + "chinese": "大葱鸭" }, "type": [ - "Water", - "Fairy" + "Fighting" ], "base": { - "HP": 100, - "Attack": 50, - "Defense": 80, - "Sp. Attack": 60, - "Sp. Defense": 80, - "Speed": 50 + "HP": 52, + "Attack": 95, + "Defense": 55, + "Sp. Attack": 58, + "Sp. Defense": 62, + "Speed": 55 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 185, + "id": 83, "name": { - "english": "Sudowoodo", - "japanese": "ウソッキー", - "chinese": "树才怪‎" + "english": "Farfetch'd", + "japanese": "カモネギ", + "chinese": "大葱鸭" }, "type": [ - "Rock" + "Normal", + "Flying" ], "base": { - "HP": 70, - "Attack": 100, - "Defense": 115, - "Sp. Attack": 30, - "Sp. Defense": 65, - "Speed": 30 + "HP": 52, + "Attack": 90, + "Defense": 55, + "Sp. Attack": 58, + "Sp. Defense": 62, + "Speed": 60 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 186, + "id": 84, "name": { - "english": "Politoed", - "japanese": "ニョロトノ", - "chinese": "蚊香蛙皇" + "english": "Doduo", + "japanese": "ドードー", + "chinese": "嘟嘟" }, "type": [ - "Water" + "Normal", + "Flying" ], "base": { - "HP": 90, - "Attack": 75, - "Defense": 75, - "Sp. Attack": 90, - "Sp. Defense": 100, - "Speed": 70 - }, - "color": "green" + "HP": 35, + "Attack": 85, + "Defense": 45, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 75 + } }, { - "id": 187, + "id": 84, "name": { - "english": "Hoppip", - "japanese": "ハネッコ", - "chinese": "毽子草" + "english": "Doduo", + "japanese": "ドードー", + "chinese": "嘟嘟" }, "type": [ - "Grass", + "Normal", "Flying" ], "base": { "HP": 35, - "Attack": 35, - "Defense": 40, + "Attack": 85, + "Defense": 45, "Sp. Attack": 35, - "Sp. Defense": 55, - "Speed": 50 - }, - "color": "pink" + "Sp. Defense": 35, + "Speed": 75 + } }, { - "id": 188, + "id": 85, "name": { - "english": "Skiploom", - "japanese": "ポポッコ", - "chinese": "毽子花" + "english": "Dodrio", + "japanese": "ドードリオ", + "chinese": "嘟嘟利" }, "type": [ - "Grass", + "Normal", "Flying" ], "base": { - "HP": 55, - "Attack": 45, - "Defense": 50, - "Sp. Attack": 45, - "Sp. Defense": 65, - "Speed": 80 - }, - "color": "green" + "HP": 60, + "Attack": 110, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 110 + } }, { - "id": 189, + "id": 85, "name": { - "english": "Jumpluff", - "japanese": "ワタッコ", - "chinese": "毽子棉" + "english": "Dodrio", + "japanese": "ドードリオ", + "chinese": "嘟嘟利" }, "type": [ - "Grass", + "Normal", "Flying" ], "base": { - "HP": 75, - "Attack": 55, + "HP": 60, + "Attack": 110, "Defense": 70, - "Sp. Attack": 55, - "Sp. Defense": 95, + "Sp. Attack": 60, + "Sp. Defense": 60, "Speed": 110 - }, - "color": "blue" + } }, { - "id": 190, + "id": 86, "name": { - "english": "Aipom", - "japanese": "エイパム", - "chinese": "长尾怪手" + "english": "Seel", + "japanese": "パウワウ", + "chinese": "小海狮" }, "type": [ - "Normal" + "Water" ], "base": { - "HP": 55, - "Attack": 70, + "HP": 65, + "Attack": 45, "Defense": 55, - "Sp. Attack": 40, - "Sp. Defense": 55, - "Speed": 85 - }, - "color": "purple" + "Sp. Attack": 45, + "Sp. Defense": 70, + "Speed": 45 + } }, { - "id": 191, + "id": 86, "name": { - "english": "Sunkern", - "japanese": "ヒマナッツ", - "chinese": "向日种子" + "english": "Seel", + "japanese": "パウワウ", + "chinese": "小海狮" }, "type": [ - "Grass" + "Water" ], "base": { - "HP": 30, - "Attack": 30, - "Defense": 30, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 30 - }, - "color": "yellow" + "HP": 65, + "Attack": 45, + "Defense": 55, + "Sp. Attack": 45, + "Sp. Defense": 70, + "Speed": 45 + } }, { - "id": 192, + "id": 87, "name": { - "english": "Sunflora", - "japanese": "キマワリ", - "chinese": "向日花怪" + "english": "Dewgong", + "japanese": "ジュゴン", + "chinese": "白海狮" }, "type": [ - "Grass" + "Water", + "Ice" ], "base": { - "HP": 75, - "Attack": 75, - "Defense": 55, - "Sp. Attack": 105, - "Sp. Defense": 85, - "Speed": 30 - }, - "color": "yellow" + "HP": 90, + "Attack": 70, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 95, + "Speed": 70 + } }, { - "id": 193, + "id": 87, "name": { - "english": "Yanma", - "japanese": "ヤンヤンマ", - "chinese": "蜻蜻蜓" + "english": "Dewgong", + "japanese": "ジュゴン", + "chinese": "白海狮" }, "type": [ - "Bug", - "Flying" + "Water", + "Ice" ], "base": { - "HP": 65, - "Attack": 65, - "Defense": 45, - "Sp. Attack": 75, - "Sp. Defense": 45, - "Speed": 95 - }, - "color": "red" + "HP": 90, + "Attack": 70, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 95, + "Speed": 70 + } }, { - "id": 194, + "id": 88, "name": { - "english": "Wooper", - "japanese": "ウパー", - "chinese": "乌波" + "english": "Grimer", + "japanese": "ベトベター", + "chinese": "臭泥" }, "type": [ - "Water", - "Ground" + "Poison" ], "base": { - "HP": 55, - "Attack": 45, - "Defense": 45, - "Sp. Attack": 25, - "Sp. Defense": 25, - "Speed": 15 - }, - "color": "blue" + "HP": 80, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 25 + } }, { - "id": 195, + "id": 88, "name": { - "english": "Quagsire", - "japanese": "ヌオー", - "chinese": "沼王" + "english": "Grimer", + "japanese": "ベトベター", + "chinese": "臭泥" }, "type": [ - "Water", - "Ground" + "Poison", + "Dark" ], "base": { - "HP": 95, - "Attack": 85, - "Defense": 85, - "Sp. Attack": 65, - "Sp. Defense": 65, - "Speed": 35 + "HP": 80, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 25 }, - "color": "blue" + "form": { + "key": "alola" + } }, { - "id": 196, + "id": 88, "name": { - "english": "Espeon", - "japanese": "エーフィ", - "chinese": "太阳伊布" + "english": "Grimer", + "japanese": "ベトベター", + "chinese": "臭泥" }, "type": [ - "Psychic" + "Poison" ], "base": { - "HP": 65, - "Attack": 65, - "Defense": 60, - "Sp. Attack": 130, - "Sp. Defense": 95, - "Speed": 110 - }, - "color": "purple" + "HP": 80, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 25 + } }, { - "id": 197, + "id": 89, "name": { - "english": "Umbreon", - "japanese": "ブラッキー", - "chinese": "月亮伊布" + "english": "Muk", + "japanese": "ベトベトン", + "chinese": "臭臭泥" }, "type": [ - "Dark" + "Poison" ], "base": { - "HP": 95, - "Attack": 65, - "Defense": 110, - "Sp. Attack": 60, - "Sp. Defense": 130, - "Speed": 65 - }, - "color": "black" + "HP": 105, + "Attack": 105, + "Defense": 75, + "Sp. Attack": 65, + "Sp. Defense": 100, + "Speed": 50 + } }, { - "id": 198, + "id": 89, "name": { - "english": "Murkrow", - "japanese": "ヤミカラス", - "chinese": "黑暗鸦" + "english": "Muk", + "japanese": "ベトベトン", + "chinese": "臭臭泥" }, "type": [ - "Dark", - "Flying" + "Poison", + "Dark" ], "base": { - "HP": 60, - "Attack": 85, - "Defense": 42, - "Sp. Attack": 85, - "Sp. Defense": 42, - "Speed": 91 + "HP": 105, + "Attack": 105, + "Defense": 75, + "Sp. Attack": 65, + "Sp. Defense": 100, + "Speed": 50 }, - "color": "black" + "form": { + "key": "alola" + } }, { - "id": 199, + "id": 89, "name": { - "english": "Slowking", - "japanese": "ヤドキング", - "chinese": "呆呆王" + "english": "Muk", + "japanese": "ベトベトン", + "chinese": "臭臭泥" }, "type": [ - "Water", - "Psychic" + "Poison" ], "base": { - "HP": 95, - "Attack": 75, - "Defense": 80, - "Sp. Attack": 100, - "Sp. Defense": 110, - "Speed": 30 - }, - "color": "pink" + "HP": 105, + "Attack": 105, + "Defense": 75, + "Sp. Attack": 65, + "Sp. Defense": 100, + "Speed": 50 + } }, { - "id": 200, + "id": 90, "name": { - "english": "Misdreavus", - "japanese": "ムウマ", - "chinese": "梦妖" + "english": "Shellder", + "japanese": "シェルダー", + "chinese": "大舌贝" }, "type": [ - "Ghost" + "Water" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 60, - "Sp. Attack": 85, - "Sp. Defense": 85, - "Speed": 85 + "HP": 30, + "Attack": 65, + "Defense": 100, + "Sp. Attack": 45, + "Sp. Defense": 25, + "Speed": 40 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 201, + "id": 90, "name": { - "english": "Unown", - "japanese": "アンノーン", - "chinese": "未知图腾" + "english": "Shellder", + "japanese": "シェルダー", + "chinese": "大舌贝" }, "type": [ - "Psychic" + "Water" ], "base": { - "HP": 48, - "Attack": 72, - "Defense": 48, - "Sp. Attack": 72, - "Sp. Defense": 48, - "Speed": 48 + "HP": 30, + "Attack": 65, + "Defense": 100, + "Sp. Attack": 45, + "Sp. Defense": 25, + "Speed": 40 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 202, + "id": 91, "name": { - "english": "Wobbuffet", - "japanese": "ソーナンス", - "chinese": "果然翁" + "english": "Cloyster", + "japanese": "パルシェン", + "chinese": "刺甲贝" }, "type": [ - "Psychic" + "Water", + "Ice" ], "base": { - "HP": 190, - "Attack": 33, - "Defense": 58, - "Sp. Attack": 33, - "Sp. Defense": 58, - "Speed": 33 + "HP": 50, + "Attack": 95, + "Defense": 180, + "Sp. Attack": 85, + "Sp. Defense": 45, + "Speed": 70 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 203, + "id": 91, "name": { - "english": "Girafarig", - "japanese": "キリンリキ", - "chinese": "麒麟奇" + "english": "Cloyster", + "japanese": "パルシェン", + "chinese": "刺甲贝" }, "type": [ - "Normal", - "Psychic" + "Water", + "Ice" ], "base": { - "HP": 70, - "Attack": 80, - "Defense": 65, - "Sp. Attack": 90, - "Sp. Defense": 65, - "Speed": 85 + "HP": 50, + "Attack": 95, + "Defense": 180, + "Sp. Attack": 85, + "Sp. Defense": 45, + "Speed": 70 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 204, + "id": 92, "name": { - "english": "Pineco", - "japanese": "クヌギダマ", - "chinese": "榛果球" + "english": "Gastly", + "japanese": "ゴース", + "chinese": "鬼斯" }, "type": [ - "Bug" + "Ghost", + "Poison" ], "base": { - "HP": 50, - "Attack": 65, - "Defense": 90, - "Sp. Attack": 35, + "HP": 30, + "Attack": 35, + "Defense": 30, + "Sp. Attack": 100, "Sp. Defense": 35, - "Speed": 15 + "Speed": 80 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 205, + "id": 92, "name": { - "english": "Forretress", - "japanese": "フォレトス", - "chinese": "佛烈托斯" + "english": "Gastly", + "japanese": "ゴース", + "chinese": "鬼斯" }, "type": [ - "Bug", - "Steel" + "Ghost", + "Poison" ], "base": { - "HP": 75, - "Attack": 90, - "Defense": 140, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 40 + "HP": 30, + "Attack": 35, + "Defense": 30, + "Sp. Attack": 100, + "Sp. Defense": 35, + "Speed": 80 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 206, + "id": 93, "name": { - "english": "Dunsparce", - "japanese": "ノコッチ", - "chinese": "土龙弟弟" - }, + "english": "Haunter", + "japanese": "ゴースト", + "chinese": "鬼斯通" + }, "type": [ - "Normal" + "Ghost", + "Poison" ], "base": { - "HP": 100, - "Attack": 70, - "Defense": 70, - "Sp. Attack": 65, - "Sp. Defense": 65, - "Speed": 45 + "HP": 45, + "Attack": 50, + "Defense": 45, + "Sp. Attack": 115, + "Sp. Defense": 55, + "Speed": 95 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 207, + "id": 93, "name": { - "english": "Gligar", - "japanese": "グライガー", - "chinese": "天蝎" + "english": "Haunter", + "japanese": "ゴースト", + "chinese": "鬼斯通" }, "type": [ - "Ground", - "Flying" + "Ghost", + "Poison" ], "base": { - "HP": 65, - "Attack": 75, - "Defense": 105, - "Sp. Attack": 35, - "Sp. Defense": 65, - "Speed": 85 + "HP": 45, + "Attack": 50, + "Defense": 45, + "Sp. Attack": 115, + "Sp. Defense": 55, + "Speed": 95 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 208, + "id": 94, "name": { - "english": "Steelix", - "japanese": "ハガネール", - "chinese": "大钢蛇" + "english": "Gengar", + "japanese": "ゲンガー", + "chinese": "耿鬼" }, "type": [ - "Steel", - "Ground" + "Ghost", + "Poison" ], "base": { - "HP": 75, - "Attack": 85, - "Defense": 200, - "Sp. Attack": 55, - "Sp. Defense": 65, - "Speed": 30 + "HP": 60, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 130, + "Sp. Defense": 75, + "Speed": 110 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 209, + "id": 94, "name": { - "english": "Snubbull", - "japanese": "ブルー", - "chinese": "布鲁" + "english": "Gengar", + "japanese": "ゲンガー", + "chinese": "耿鬼" }, "type": [ - "Fairy" + "Ghost", + "Poison" ], "base": { "HP": 60, - "Attack": 80, - "Defense": 50, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 30 + "Attack": 65, + "Defense": 80, + "Sp. Attack": 170, + "Sp. Defense": 95, + "Speed": 130 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 210, + "id": 94, "name": { - "english": "Granbull", - "japanese": "グランブル", - "chinese": "布鲁皇" + "english": "Gengar", + "japanese": "ゲンガー", + "chinese": "耿鬼" }, "type": [ - "Fairy" + "Ghost", + "Poison" ], "base": { - "HP": 90, - "Attack": 120, - "Defense": 75, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 45 + "HP": 60, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 130, + "Sp. Defense": 75, + "Speed": 110 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 211, + "id": 94, "name": { - "english": "Qwilfish", - "japanese": "ハリーセン", - "chinese": "千针鱼" + "english": "Gengar", + "japanese": "ゲンガー", + "chinese": "耿鬼" }, "type": [ - "Water", + "Ghost", "Poison" ], "base": { - "HP": 65, - "Attack": 95, - "Defense": 85, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 85 + "HP": 60, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 130, + "Sp. Defense": 75, + "Speed": 110 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 212, + "id": 95, "name": { - "english": "Scizor", - "japanese": "ハッサム", - "chinese": "巨钳螳螂" + "english": "Onix", + "japanese": "イワーク", + "chinese": "大岩蛇" }, "type": [ - "Bug", - "Steel" + "Rock", + "Ground" ], "base": { - "HP": 70, - "Attack": 130, - "Defense": 100, - "Sp. Attack": 55, - "Sp. Defense": 80, - "Speed": 65 + "HP": 35, + "Attack": 45, + "Defense": 160, + "Sp. Attack": 30, + "Sp. Defense": 45, + "Speed": 70 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 213, + "id": 95, "name": { - "english": "Shuckle", - "japanese": "ツボツボ", - "chinese": "壶壶" + "english": "Onix", + "japanese": "イワーク", + "chinese": "大岩蛇" }, "type": [ - "Bug", - "Rock" + "Rock", + "Ground" ], "base": { - "HP": 20, - "Attack": 10, - "Defense": 230, - "Sp. Attack": 10, - "Sp. Defense": 230, - "Speed": 5 + "HP": 35, + "Attack": 45, + "Defense": 160, + "Sp. Attack": 30, + "Sp. Defense": 45, + "Speed": 70 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 214, + "id": 96, "name": { - "english": "Heracross", - "japanese": "ヘラクロス", - "chinese": "赫拉克罗斯" + "english": "Drowzee", + "japanese": "スリープ", + "chinese": "催眠貘" }, "type": [ - "Bug", - "Fighting" + "Psychic" ], "base": { - "HP": 80, - "Attack": 125, - "Defense": 75, - "Sp. Attack": 40, - "Sp. Defense": 95, - "Speed": 85 - }, - "color": "blue" + "HP": 60, + "Attack": 48, + "Defense": 45, + "Sp. Attack": 43, + "Sp. Defense": 90, + "Speed": 42 + } }, { - "id": 215, + "id": 96, "name": { - "english": "Sneasel", - "japanese": "ニューラ", - "chinese": "狃拉" + "english": "Drowzee", + "japanese": "スリープ", + "chinese": "催眠貘" }, "type": [ - "Dark", - "Ice" + "Psychic" ], "base": { - "HP": 55, - "Attack": 95, - "Defense": 55, - "Sp. Attack": 35, - "Sp. Defense": 75, - "Speed": 115 - }, - "color": "black" + "HP": 60, + "Attack": 48, + "Defense": 45, + "Sp. Attack": 43, + "Sp. Defense": 90, + "Speed": 42 + } }, { - "id": 216, + "id": 97, "name": { - "english": "Teddiursa", - "japanese": "ヒメグマ", - "chinese": "熊宝宝" + "english": "Hypno", + "japanese": "スリーパー", + "chinese": "引梦貘人" }, "type": [ - "Normal" + "Psychic" ], "base": { - "HP": 60, - "Attack": 80, - "Defense": 50, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 40 - }, - "color": "brown" - }, - { - "id": 217, - "name": { - "english": "Ursaring", - "japanese": "リングマ", - "chinese": "圈圈熊" - }, - "type": [ - "Normal" - ], - "base": { - "HP": 90, - "Attack": 130, - "Defense": 75, - "Sp. Attack": 75, - "Sp. Defense": 75, - "Speed": 55 - }, - "color": "brown" + "HP": 85, + "Attack": 73, + "Defense": 70, + "Sp. Attack": 73, + "Sp. Defense": 115, + "Speed": 67 + } }, { - "id": 218, + "id": 97, "name": { - "english": "Slugma", - "japanese": "マグマッグ", - "chinese": "熔岩虫" + "english": "Hypno", + "japanese": "スリーパー", + "chinese": "引梦貘人" }, "type": [ - "Fire" + "Psychic" ], "base": { - "HP": 40, - "Attack": 40, - "Defense": 40, - "Sp. Attack": 70, - "Sp. Defense": 40, - "Speed": 20 - }, - "color": "red" + "HP": 85, + "Attack": 73, + "Defense": 70, + "Sp. Attack": 73, + "Sp. Defense": 115, + "Speed": 67 + } }, { - "id": 219, + "id": 98, "name": { - "english": "Magcargo", - "japanese": "マグカルゴ", - "chinese": "熔岩蜗牛" + "english": "Krabby", + "japanese": "クラブ", + "chinese": "大钳蟹" }, "type": [ - "Fire", - "Rock" + "Water" ], "base": { - "HP": 60, - "Attack": 50, - "Defense": 120, - "Sp. Attack": 90, - "Sp. Defense": 80, - "Speed": 30 + "HP": 30, + "Attack": 105, + "Defense": 90, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 50 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 220, + "id": 98, "name": { - "english": "Swinub", - "japanese": "ウリムー", - "chinese": "小山猪" + "english": "Krabby", + "japanese": "クラブ", + "chinese": "大钳蟹" }, "type": [ - "Ice", - "Ground" + "Water" ], "base": { - "HP": 50, - "Attack": 50, - "Defense": 40, - "Sp. Attack": 30, - "Sp. Defense": 30, + "HP": 30, + "Attack": 105, + "Defense": 90, + "Sp. Attack": 25, + "Sp. Defense": 25, "Speed": 50 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 221, + "id": 99, "name": { - "english": "Piloswine", - "japanese": "イノムー", - "chinese": "长毛猪" + "english": "Kingler", + "japanese": "キングラー", + "chinese": "巨钳蟹" }, "type": [ - "Ice", - "Ground" + "Water" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 80, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 50 + "HP": 55, + "Attack": 130, + "Defense": 115, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 75 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 222, + "id": 99, "name": { - "english": "Corsola", - "japanese": "サニーゴ", - "chinese": "太阳珊瑚" + "english": "Kingler", + "japanese": "キングラー", + "chinese": "巨钳蟹" }, "type": [ - "Water", - "Rock" + "Water" ], "base": { - "HP": 65, - "Attack": 55, - "Defense": 95, - "Sp. Attack": 65, - "Sp. Defense": 95, - "Speed": 35 + "HP": 55, + "Attack": 130, + "Defense": 115, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 75 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 223, + "id": 99, "name": { - "english": "Remoraid", - "japanese": "テッポウオ", - "chinese": "铁炮鱼" + "english": "Kingler", + "japanese": "キングラー", + "chinese": "巨钳蟹" }, "type": [ "Water" ], "base": { - "HP": 35, - "Attack": 65, - "Defense": 35, - "Sp. Attack": 65, - "Sp. Defense": 35, - "Speed": 65 + "HP": 55, + "Attack": 130, + "Defense": 115, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 75 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 224, + "id": 100, "name": { - "english": "Octillery", - "japanese": "オクタン", - "chinese": "章鱼桶" + "english": "Voltorb", + "japanese": "ビリリダマ", + "chinese": "霹雳电球" }, "type": [ - "Water" + "Electric" ], "base": { - "HP": 75, - "Attack": 105, - "Defense": 75, - "Sp. Attack": 105, - "Sp. Defense": 75, - "Speed": 45 + "HP": 40, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 100 }, - "color": "red" + "form": { + "key": "hisuian" + } }, { - "id": 225, + "id": 100, "name": { - "english": "Delibird", - "japanese": "デリバード", - "chinese": "信使鸟" + "english": "Voltorb", + "japanese": "ビリリダマ", + "chinese": "霹雳电球" }, "type": [ - "Ice", - "Flying" + "Electric", + "Grass" ], "base": { - "HP": 45, - "Attack": 55, - "Defense": 45, - "Sp. Attack": 65, - "Sp. Defense": 45, - "Speed": 75 + "HP": 40, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 100 }, - "color": "red" + "form": { + "key": "hisui" + } }, { - "id": 226, + "id": 100, "name": { - "english": "Mantine", - "japanese": "マンタイン", - "chinese": "巨翅飞鱼" + "english": "Voltorb", + "japanese": "ビリリダマ", + "chinese": "霹雳电球" }, "type": [ - "Water", - "Flying" + "Electric", + "Grass" ], "base": { - "HP": 85, - "Attack": 40, - "Defense": 70, - "Sp. Attack": 80, - "Sp. Defense": 140, - "Speed": 70 + "HP": 40, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 100 }, - "color": "purple" + "form": { + "key": "hisuian" + } }, { - "id": 227, + "id": 100, "name": { - "english": "Skarmory", - "japanese": "エアームド", - "chinese": "盔甲鸟" + "english": "Voltorb", + "japanese": "ビリリダマ", + "chinese": "霹雳电球" }, "type": [ - "Steel", - "Flying" + "Electric" ], "base": { - "HP": 65, - "Attack": 80, - "Defense": 140, - "Sp. Attack": 40, - "Sp. Defense": 70, - "Speed": 70 - }, - "color": "gray" + "HP": 40, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 100 + } }, { - "id": 228, + "id": 101, "name": { - "english": "Houndour", - "japanese": "デルビル", - "chinese": "戴鲁比" + "english": "Electrode", + "japanese": "マルマイン", + "chinese": "顽皮雷弹" }, "type": [ - "Dark", - "Fire" + "Electric" ], "base": { - "HP": 45, - "Attack": 60, - "Defense": 30, + "HP": 60, + "Attack": 50, + "Defense": 70, "Sp. Attack": 80, - "Sp. Defense": 50, - "Speed": 65 + "Sp. Defense": 80, + "Speed": 150 }, - "color": "black" + "form": { + "key": "hisuian" + } }, { - "id": 229, + "id": 101, "name": { - "english": "Houndoom", - "japanese": "ヘルガー", - "chinese": "黑鲁加" + "english": "Electrode", + "japanese": "マルマイン", + "chinese": "顽皮雷弹" }, "type": [ - "Dark", - "Fire" + "Electric", + "Grass" ], "base": { - "HP": 75, - "Attack": 90, - "Defense": 50, - "Sp. Attack": 110, + "HP": 60, + "Attack": 50, + "Defense": 70, + "Sp. Attack": 80, "Sp. Defense": 80, - "Speed": 95 + "Speed": 150 }, - "color": "black" + "form": { + "key": "hisui" + } }, { - "id": 230, + "id": 101, "name": { - "english": "Kingdra", - "japanese": "キングドラ", - "chinese": "刺龙王" + "english": "Electrode", + "japanese": "マルマイン", + "chinese": "顽皮雷弹" }, "type": [ - "Water", - "Dragon" + "Electric", + "Grass" ], "base": { - "HP": 75, - "Attack": 95, - "Defense": 95, - "Sp. Attack": 95, - "Sp. Defense": 95, - "Speed": 85 + "HP": 60, + "Attack": 50, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 150 }, - "color": "blue" + "form": { + "key": "hisuian" + } }, { - "id": 231, + "id": 101, "name": { - "english": "Phanpy", - "japanese": "ゴマゾウ", - "chinese": "小小象" + "english": "Electrode", + "japanese": "マルマイン", + "chinese": "顽皮雷弹" }, "type": [ - "Ground" + "Electric" ], "base": { - "HP": 90, - "Attack": 60, - "Defense": 60, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 40 - }, - "color": "blue" + "HP": 60, + "Attack": 50, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 150 + } }, { - "id": 232, + "id": 102, "name": { - "english": "Donphan", - "japanese": "ドンファン", - "chinese": "顿甲" + "english": "Exeggcute", + "japanese": "タマタマ", + "chinese": "蛋蛋" }, "type": [ - "Ground" + "Grass", + "Psychic" ], "base": { - "HP": 90, - "Attack": 120, - "Defense": 120, + "HP": 60, + "Attack": 40, + "Defense": 80, "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 50 + "Sp. Defense": 45, + "Speed": 40 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 233, + "id": 102, "name": { - "english": "Porygon2", - "japanese": "ポリゴン2", - "chinese": "多边兽Ⅱ" + "english": "Exeggcute", + "japanese": "タマタマ", + "chinese": "蛋蛋" }, "type": [ - "Normal" + "Grass", + "Psychic" ], "base": { - "HP": 85, - "Attack": 80, - "Defense": 90, - "Sp. Attack": 105, - "Sp. Defense": 95, - "Speed": 60 + "HP": 60, + "Attack": 40, + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 45, + "Speed": 40 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 234, + "id": 103, "name": { - "english": "Stantler", - "japanese": "オドシシ", - "chinese": "惊角鹿" + "english": "Exeggutor", + "japanese": "ナッシー", + "chinese": "椰蛋树" }, "type": [ - "Normal" + "Grass", + "Psychic" ], "base": { - "HP": 73, + "HP": 95, "Attack": 95, - "Defense": 62, - "Sp. Attack": 85, - "Sp. Defense": 65, - "Speed": 85 + "Defense": 85, + "Sp. Attack": 125, + "Sp. Defense": 75, + "Speed": 55 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 235, + "id": 103, "name": { - "english": "Smeargle", - "japanese": "ドーブル", - "chinese": "图图犬" + "english": "Exeggutor", + "japanese": "ナッシー", + "chinese": "椰蛋树" }, "type": [ - "Normal" + "Grass", + "Dragon" ], "base": { - "HP": 55, - "Attack": 20, - "Defense": 35, - "Sp. Attack": 20, - "Sp. Defense": 45, - "Speed": 75 + "HP": 95, + "Attack": 105, + "Defense": 85, + "Sp. Attack": 125, + "Sp. Defense": 75, + "Speed": 45 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 236, + "id": 103, "name": { - "english": "Tyrogue", - "japanese": "バルキー", - "chinese": "无畏小子" + "english": "Exeggutor", + "japanese": "ナッシー", + "chinese": "椰蛋树" }, "type": [ - "Fighting" + "Grass", + "Psychic" ], "base": { - "HP": 35, - "Attack": 35, - "Defense": 35, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 35 + "HP": 95, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 125, + "Sp. Defense": 75, + "Speed": 55 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 237, + "id": 104, "name": { - "english": "Hitmontop", - "japanese": "カポエラー", - "chinese": "战舞郎" + "english": "Cubone", + "japanese": "カラカラ", + "chinese": "卡拉卡拉" }, "type": [ - "Fighting" + "Ground" ], "base": { "HP": 50, - "Attack": 95, + "Attack": 50, "Defense": 95, - "Sp. Attack": 35, - "Sp. Defense": 110, - "Speed": 70 + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 35 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 238, + "id": 104, "name": { - "english": "Smoochum", - "japanese": "ムチュール", - "chinese": "迷唇娃" + "english": "Cubone", + "japanese": "カラカラ", + "chinese": "卡拉卡拉" }, "type": [ - "Ice", - "Psychic" + "Ground" ], "base": { - "HP": 45, - "Attack": 30, - "Defense": 15, - "Sp. Attack": 85, - "Sp. Defense": 65, - "Speed": 65 + "HP": 50, + "Attack": 50, + "Defense": 95, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 35 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 239, + "id": 105, "name": { - "english": "Elekid", - "japanese": "エレキッド", - "chinese": "电击怪" + "english": "Marowak", + "japanese": "ガラガラ", + "chinese": "嘎啦嘎啦" }, "type": [ - "Electric" + "Ground" ], "base": { - "HP": 45, - "Attack": 63, - "Defense": 37, - "Sp. Attack": 65, - "Sp. Defense": 55, - "Speed": 95 + "HP": 60, + "Attack": 80, + "Defense": 110, + "Sp. Attack": 50, + "Sp. Defense": 80, + "Speed": 45 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 240, + "id": 105, "name": { - "english": "Magby", - "japanese": "ブビィ", - "chinese": "鸭嘴宝宝" + "english": "Marowak", + "japanese": "ガラガラ", + "chinese": "嘎啦嘎啦" }, "type": [ - "Fire" + "Fire", + "Ghost" ], "base": { - "HP": 45, - "Attack": 75, - "Defense": 37, - "Sp. Attack": 70, - "Sp. Defense": 55, - "Speed": 83 + "HP": 60, + "Attack": 80, + "Defense": 110, + "Sp. Attack": 50, + "Sp. Defense": 80, + "Speed": 45 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola" + } }, { - "id": 241, + "id": 105, "name": { - "english": "Miltank", - "japanese": "ミルタンク", - "chinese": "大奶罐" + "english": "Marowak", + "japanese": "ガラガラ", + "chinese": "嘎啦嘎啦" }, "type": [ - "Normal" + "Fire", + "Ghost" ], "base": { - "HP": 95, + "HP": 60, "Attack": 80, - "Defense": 105, - "Sp. Attack": 40, - "Sp. Defense": 70, - "Speed": 100 + "Defense": 110, + "Sp. Attack": 50, + "Sp. Defense": 80, + "Speed": 45 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "alola-totem" + } }, { - "id": 242, + "id": 105, "name": { - "english": "Blissey", - "japanese": "ハピナス", - "chinese": "幸福蛋" + "english": "Marowak", + "japanese": "ガラガラ", + "chinese": "嘎啦嘎啦" }, "type": [ - "Normal" + "Ground" ], "base": { - "HP": 255, - "Attack": 10, - "Defense": 10, - "Sp. Attack": 75, - "Sp. Defense": 135, - "Speed": 55 + "HP": 60, + "Attack": 80, + "Defense": 110, + "Sp. Attack": 50, + "Sp. Defense": 80, + "Speed": 45 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 243, + "id": 106, "name": { - "english": "Raikou", - "japanese": "ライコウ", - "chinese": "雷公" + "english": "Hitmonlee", + "japanese": "サワムラー", + "chinese": "飞腿郎" }, "type": [ - "Electric" + "Fighting" ], "base": { - "HP": 90, - "Attack": 85, - "Defense": 75, - "Sp. Attack": 115, - "Sp. Defense": 100, - "Speed": 115 + "HP": 50, + "Attack": 120, + "Defense": 53, + "Sp. Attack": 35, + "Sp. Defense": 110, + "Speed": 87 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 244, + "id": 106, "name": { - "english": "Entei", - "japanese": "エンテイ", - "chinese": "炎帝" + "english": "Hitmonlee", + "japanese": "サワムラー", + "chinese": "飞腿郎" }, "type": [ - "Fire" + "Fighting" ], "base": { - "HP": 115, - "Attack": 115, - "Defense": 85, - "Sp. Attack": 90, - "Sp. Defense": 75, - "Speed": 100 + "HP": 50, + "Attack": 120, + "Defense": 53, + "Sp. Attack": 35, + "Sp. Defense": 110, + "Speed": 87 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 245, + "id": 107, "name": { - "english": "Suicune", - "japanese": "スイクン", - "chinese": "水君" + "english": "Hitmonchan", + "japanese": "エビワラー", + "chinese": "快拳郎" }, "type": [ - "Water" + "Fighting" ], "base": { - "HP": 100, - "Attack": 75, - "Defense": 115, - "Sp. Attack": 90, - "Sp. Defense": 115, - "Speed": 85 + "HP": 50, + "Attack": 105, + "Defense": 79, + "Sp. Attack": 35, + "Sp. Defense": 110, + "Speed": 76 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 246, + "id": 107, "name": { - "english": "Larvitar", - "japanese": "ヨーギラス", - "chinese": "幼基拉斯" + "english": "Hitmonchan", + "japanese": "エビワラー", + "chinese": "快拳郎" }, "type": [ - "Rock", - "Ground" + "Fighting" ], "base": { "HP": 50, - "Attack": 64, - "Defense": 50, - "Sp. Attack": 45, - "Sp. Defense": 50, - "Speed": 41 + "Attack": 105, + "Defense": 79, + "Sp. Attack": 35, + "Sp. Defense": 110, + "Speed": 76 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 247, + "id": 108, "name": { - "english": "Pupitar", - "japanese": "サナギラス", - "chinese": "沙基拉斯" + "english": "Lickitung", + "japanese": "ベロリンガ", + "chinese": "大舌头" }, "type": [ - "Rock", - "Ground" + "Normal" ], "base": { - "HP": 70, - "Attack": 84, - "Defense": 70, - "Sp. Attack": 65, - "Sp. Defense": 70, - "Speed": 51 + "HP": 90, + "Attack": 55, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 30 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 248, + "id": 108, "name": { - "english": "Tyranitar", - "japanese": "バンギラス", - "chinese": "班基拉斯" + "english": "Lickitung", + "japanese": "ベロリンガ", + "chinese": "大舌头" }, "type": [ - "Rock", - "Dark" + "Normal" ], "base": { - "HP": 100, - "Attack": 134, - "Defense": 110, - "Sp. Attack": 95, - "Sp. Defense": 100, - "Speed": 61 + "HP": 90, + "Attack": 55, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 30 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 249, + "id": 109, "name": { - "english": "Lugia", - "japanese": "ルギア", - "chinese": "洛奇亚" + "english": "Koffing", + "japanese": "ドガース", + "chinese": "瓦斯弹" }, "type": [ - "Psychic", - "Flying" + "Poison" ], "base": { - "HP": 106, - "Attack": 90, - "Defense": 130, - "Sp. Attack": 90, - "Sp. Defense": 154, - "Speed": 110 + "HP": 40, + "Attack": 65, + "Defense": 95, + "Sp. Attack": 60, + "Sp. Defense": 45, + "Speed": 35 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 250, + "id": 109, "name": { - "english": "Ho-Oh", - "japanese": "ホウオウ", - "chinese": "凤王" + "english": "Koffing", + "japanese": "ドガース", + "chinese": "瓦斯弹" }, "type": [ - "Fire", - "Flying" + "Poison" ], "base": { - "HP": 106, - "Attack": 130, - "Defense": 90, - "Sp. Attack": 110, - "Sp. Defense": 154, - "Speed": 90 + "HP": 40, + "Attack": 65, + "Defense": 95, + "Sp. Attack": 60, + "Sp. Defense": 45, + "Speed": 35 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 251, + "id": 110, "name": { - "english": "Celebi", - "japanese": "セレビィ", - "chinese": "时拉比" + "english": "Weezing", + "japanese": "マタドガス", + "chinese": "双弹瓦斯" }, "type": [ - "Psychic", - "Grass" + "Poison" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 100, - "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 100 + "HP": 65, + "Attack": 90, + "Defense": 120, + "Sp. Attack": 85, + "Sp. Defense": 70, + "Speed": 60 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 252, + "id": 110, "name": { - "english": "Treecko", - "japanese": "キモリ", - "chinese": "木守宫" + "english": "Weezing", + "japanese": "マタドガス", + "chinese": "双弹瓦斯" }, "type": [ - "Grass" + "Poison", + "Fairy" ], "base": { - "HP": 40, - "Attack": 45, - "Defense": 35, - "Sp. Attack": 65, - "Sp. Defense": 55, - "Speed": 70 + "HP": 65, + "Attack": 90, + "Defense": 120, + "Sp. Attack": 85, + "Sp. Defense": 70, + "Speed": 60 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 253, + "id": 110, "name": { - "english": "Grovyle", - "japanese": "ジュプトル", - "chinese": "森林蜥蜴" + "english": "Weezing", + "japanese": "マタドガス", + "chinese": "双弹瓦斯" }, "type": [ - "Grass" + "Poison" ], "base": { - "HP": 50, - "Attack": 65, - "Defense": 45, + "HP": 65, + "Attack": 90, + "Defense": 120, "Sp. Attack": 85, - "Sp. Defense": 65, - "Speed": 95 + "Sp. Defense": 70, + "Speed": 60 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 254, + "id": 111, "name": { - "english": "Sceptile", - "japanese": "ジュカイン", - "chinese": "蜥蜴王" + "english": "Rhyhorn", + "japanese": "サイホーン", + "chinese": "独角犀牛" }, "type": [ - "Grass" + "Ground", + "Rock" ], "base": { - "HP": 70, + "HP": 80, "Attack": 85, - "Defense": 65, - "Sp. Attack": 105, - "Sp. Defense": 85, - "Speed": 120 + "Defense": 95, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 25 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 255, + "id": 111, "name": { - "english": "Torchic", - "japanese": "アチャモ", - "chinese": "火稚鸡" + "english": "Rhyhorn", + "japanese": "サイホーン", + "chinese": "独角犀牛" }, "type": [ - "Fire" + "Ground", + "Rock" ], "base": { - "HP": 45, - "Attack": 60, - "Defense": 40, - "Sp. Attack": 70, - "Sp. Defense": 50, - "Speed": 45 + "HP": 80, + "Attack": 85, + "Defense": 95, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 25 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 256, + "id": 112, "name": { - "english": "Combusken", - "japanese": "ワカシャモ", - "chinese": "力壮鸡" + "english": "Rhydon", + "japanese": "サイドン", + "chinese": "钻角犀兽" }, "type": [ - "Fire", - "Fighting" + "Ground", + "Rock" ], "base": { - "HP": 60, - "Attack": 85, - "Defense": 60, - "Sp. Attack": 85, - "Sp. Defense": 60, - "Speed": 55 + "HP": 105, + "Attack": 130, + "Defense": 120, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 40 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 257, + "id": 112, "name": { - "english": "Blaziken", - "japanese": "バシャーモ", - "chinese": "火焰鸡" + "english": "Rhydon", + "japanese": "サイドン", + "chinese": "钻角犀兽" }, "type": [ - "Fire", - "Fighting" + "Ground", + "Rock" ], "base": { - "HP": 80, - "Attack": 120, - "Defense": 70, - "Sp. Attack": 110, - "Sp. Defense": 70, - "Speed": 80 + "HP": 105, + "Attack": 130, + "Defense": 120, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 40 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 258, + "id": 113, "name": { - "english": "Mudkip", - "japanese": "ミズゴロウ", - "chinese": "水跃鱼" + "english": "Chansey", + "japanese": "ラッキー", + "chinese": "吉利蛋" }, "type": [ - "Water" + "Normal" ], "base": { - "HP": 50, - "Attack": 70, - "Defense": 50, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 40 + "HP": 250, + "Attack": 5, + "Defense": 5, + "Sp. Attack": 35, + "Sp. Defense": 105, + "Speed": 50 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 259, + "id": 113, "name": { - "english": "Marshtomp", - "japanese": "ヌマクロー", - "chinese": "沼跃鱼" + "english": "Chansey", + "japanese": "ラッキー", + "chinese": "吉利蛋" }, "type": [ - "Water", - "Ground" + "Normal" ], "base": { - "HP": 70, - "Attack": 85, - "Defense": 70, - "Sp. Attack": 60, - "Sp. Defense": 70, + "HP": 250, + "Attack": 5, + "Defense": 5, + "Sp. Attack": 35, + "Sp. Defense": 105, "Speed": 50 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 260, + "id": 114, "name": { - "english": "Swampert", - "japanese": "ラグラージ", - "chinese": "巨沼怪" + "english": "Tangela", + "japanese": "モンジャラ", + "chinese": "蔓藤怪" }, "type": [ - "Water", - "Ground" + "Grass" ], "base": { - "HP": 100, - "Attack": 110, - "Defense": 90, - "Sp. Attack": 85, - "Sp. Defense": 90, + "HP": 65, + "Attack": 55, + "Defense": 115, + "Sp. Attack": 100, + "Sp. Defense": 40, "Speed": 60 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 261, + "id": 114, "name": { - "english": "Poochyena", - "japanese": "ポチエナ", - "chinese": "土狼犬" + "english": "Tangela", + "japanese": "モンジャラ", + "chinese": "蔓藤怪" }, "type": [ - "Dark" + "Grass" ], "base": { - "HP": 35, + "HP": 65, "Attack": 55, - "Defense": 35, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 35 - }, - "color": "gray" + "Defense": 115, + "Sp. Attack": 100, + "Sp. Defense": 40, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] }, { - "id": 262, + "id": 115, "name": { - "english": "Mightyena", - "japanese": "グラエナ", - "chinese": "大狼犬" + "english": "Kangaskhan", + "japanese": "ガルーラ", + "chinese": "袋兽" }, "type": [ - "Dark" + "Normal" ], "base": { - "HP": 70, - "Attack": 90, - "Defense": 70, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 70 + "HP": 105, + "Attack": 95, + "Defense": 80, + "Sp. Attack": 40, + "Sp. Defense": 80, + "Speed": 90 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 263, + "id": 115, "name": { - "english": "Zigzagoon", - "japanese": "ジグザグマ", - "chinese": "蛇纹熊" + "english": "Kangaskhan", + "japanese": "ガルーラ", + "chinese": "袋兽" }, "type": [ "Normal" ], "base": { - "HP": 38, - "Attack": 30, - "Defense": 41, - "Sp. Attack": 30, - "Sp. Defense": 41, - "Speed": 60 + "HP": 105, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 100, + "Speed": 100 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 264, + "id": 115, "name": { - "english": "Linoone", - "japanese": "マッスグマ", - "chinese": "直冲熊" + "english": "Kangaskhan", + "japanese": "ガルーラ", + "chinese": "袋兽" }, "type": [ "Normal" ], "base": { - "HP": 78, - "Attack": 70, - "Defense": 61, - "Sp. Attack": 50, - "Sp. Defense": 61, - "Speed": 100 + "HP": 105, + "Attack": 95, + "Defense": 80, + "Sp. Attack": 40, + "Sp. Defense": 80, + "Speed": 90 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 265, + "id": 116, "name": { - "english": "Wurmple", - "japanese": "ケムッソ", - "chinese": "刺尾虫" + "english": "Horsea", + "japanese": "タッツー", + "chinese": "墨海马" }, "type": [ - "Bug" + "Water" ], "base": { - "HP": 45, - "Attack": 45, - "Defense": 35, - "Sp. Attack": 20, - "Sp. Defense": 30, - "Speed": 20 + "HP": 30, + "Attack": 40, + "Defense": 70, + "Sp. Attack": 70, + "Sp. Defense": 25, + "Speed": 60 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 266, + "id": 116, "name": { - "english": "Silcoon", - "japanese": "カラサリス", - "chinese": "甲壳茧" + "english": "Horsea", + "japanese": "タッツー", + "chinese": "墨海马" }, "type": [ - "Bug" + "Water" ], "base": { - "HP": 50, - "Attack": 35, - "Defense": 55, - "Sp. Attack": 25, + "HP": 30, + "Attack": 40, + "Defense": 70, + "Sp. Attack": 70, "Sp. Defense": 25, - "Speed": 15 + "Speed": 60 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 267, + "id": 117, "name": { - "english": "Beautifly", - "japanese": "アゲハント", - "chinese": "狩猎凤蝶" + "english": "Seadra", + "japanese": "シードラ", + "chinese": "海刺龙" }, "type": [ - "Bug", - "Flying" + "Water" ], "base": { - "HP": 60, - "Attack": 70, - "Defense": 50, - "Sp. Attack": 100, - "Sp. Defense": 50, - "Speed": 65 + "HP": 55, + "Attack": 65, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 45, + "Speed": 85 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 268, + "id": 117, "name": { - "english": "Cascoon", - "japanese": "マユルド", - "chinese": "盾甲茧" + "english": "Seadra", + "japanese": "シードラ", + "chinese": "海刺龙" }, "type": [ - "Bug" + "Water" ], "base": { - "HP": 50, - "Attack": 35, - "Defense": 55, - "Sp. Attack": 25, - "Sp. Defense": 25, - "Speed": 15 + "HP": 55, + "Attack": 65, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 45, + "Speed": 85 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 269, + "id": 118, "name": { - "english": "Dustox", - "japanese": "ドクケイル", - "chinese": "毒粉蛾" + "english": "Goldeen", + "japanese": "トサキント", + "chinese": "角金鱼" }, "type": [ - "Bug", - "Poison" + "Water" ], "base": { - "HP": 60, - "Attack": 50, - "Defense": 70, - "Sp. Attack": 50, - "Sp. Defense": 90, - "Speed": 65 + "HP": 45, + "Attack": 67, + "Defense": 60, + "Sp. Attack": 35, + "Sp. Defense": 50, + "Speed": 63 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 270, + "id": 118, "name": { - "english": "Lotad", - "japanese": "ハスボー", - "chinese": "莲叶童子" + "english": "Goldeen", + "japanese": "トサキント", + "chinese": "角金鱼" }, "type": [ - "Water", - "Grass" + "Water" ], "base": { - "HP": 40, - "Attack": 30, - "Defense": 30, - "Sp. Attack": 40, + "HP": 45, + "Attack": 67, + "Defense": 60, + "Sp. Attack": 35, "Sp. Defense": 50, - "Speed": 30 + "Speed": 63 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 271, + "id": 119, "name": { - "english": "Lombre", - "japanese": "ハスブレロ", - "chinese": "莲帽小童" + "english": "Seaking", + "japanese": "アズマオウ", + "chinese": "金鱼王" }, "type": [ - "Water", - "Grass" + "Water" ], "base": { - "HP": 60, - "Attack": 50, - "Defense": 50, - "Sp. Attack": 60, - "Sp. Defense": 70, - "Speed": 50 + "HP": 80, + "Attack": 92, + "Defense": 65, + "Sp. Attack": 65, + "Sp. Defense": 80, + "Speed": 68 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 272, + "id": 119, "name": { - "english": "Ludicolo", - "japanese": "ルンパッパ", - "chinese": "乐天河童" + "english": "Seaking", + "japanese": "アズマオウ", + "chinese": "金鱼王" }, "type": [ - "Water", - "Grass" + "Water" ], "base": { "HP": 80, - "Attack": 70, - "Defense": 70, - "Sp. Attack": 90, - "Sp. Defense": 100, - "Speed": 70 + "Attack": 92, + "Defense": 65, + "Sp. Attack": 65, + "Sp. Defense": 80, + "Speed": 68 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 273, + "id": 120, "name": { - "english": "Seedot", - "japanese": "タネボー", - "chinese": "橡实果" - }, - "type": [ - "Grass" - ], - "base": { - "HP": 40, - "Attack": 40, - "Defense": 50, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 30 - }, - "color": "brown" - }, - { - "id": 274, - "name": { - "english": "Nuzleaf", - "japanese": "コノハナ", - "chinese": "长鼻叶" - }, - "type": [ - "Grass", - "Dark" - ], - "base": { - "HP": 70, - "Attack": 70, - "Defense": 40, - "Sp. Attack": 60, - "Sp. Defense": 40, - "Speed": 60 - }, - "color": "brown" - }, - { - "id": 275, - "name": { - "english": "Shiftry", - "japanese": "ダーテング", - "chinese": "狡猾天狗" - }, - "type": [ - "Grass", - "Dark" - ], - "base": { - "HP": 90, - "Attack": 100, - "Defense": 60, - "Sp. Attack": 90, - "Sp. Defense": 60, - "Speed": 80 - }, - "color": "brown" - }, - { - "id": 276, - "name": { - "english": "Taillow", - "japanese": "スバメ", - "chinese": "傲骨燕" + "english": "Staryu", + "japanese": "ヒトデマン", + "chinese": "海星星" }, "type": [ - "Normal", - "Flying" + "Water" ], "base": { - "HP": 40, - "Attack": 55, - "Defense": 30, - "Sp. Attack": 30, - "Sp. Defense": 30, + "HP": 30, + "Attack": 45, + "Defense": 55, + "Sp. Attack": 70, + "Sp. Defense": 55, "Speed": 85 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 277, + "id": 120, "name": { - "english": "Swellow", - "japanese": "オオスバメ", - "chinese": "大王燕" + "english": "Staryu", + "japanese": "ヒトデマン", + "chinese": "海星星" }, "type": [ - "Normal", - "Flying" + "Water" ], "base": { - "HP": 60, - "Attack": 85, - "Defense": 60, - "Sp. Attack": 75, - "Sp. Defense": 50, - "Speed": 125 + "HP": 30, + "Attack": 45, + "Defense": 55, + "Sp. Attack": 70, + "Sp. Defense": 55, + "Speed": 85 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 278, + "id": 121, "name": { - "english": "Wingull", - "japanese": "キャモメ", - "chinese": "长翅鸥" + "english": "Starmie", + "japanese": "スターミー", + "chinese": "宝石海星" }, "type": [ "Water", - "Flying" + "Psychic" ], "base": { - "HP": 40, - "Attack": 30, - "Defense": 30, - "Sp. Attack": 55, - "Sp. Defense": 30, - "Speed": 85 + "HP": 60, + "Attack": 75, + "Defense": 85, + "Sp. Attack": 100, + "Sp. Defense": 85, + "Speed": 115 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 279, + "id": 121, "name": { - "english": "Pelipper", - "japanese": "ペリッパー", - "chinese": "大嘴鸥" + "english": "Starmie", + "japanese": "スターミー", + "chinese": "宝石海星" }, "type": [ "Water", - "Flying" + "Psychic" ], "base": { "HP": 60, - "Attack": 50, - "Defense": 100, - "Sp. Attack": 95, - "Sp. Defense": 70, - "Speed": 65 + "Attack": 75, + "Defense": 85, + "Sp. Attack": 100, + "Sp. Defense": 85, + "Speed": 115 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 280, + "id": 122, "name": { - "english": "Ralts", - "japanese": "ラルトス", - "chinese": "拉鲁拉丝" + "english": "Mr. Mime", + "japanese": "バリヤード", + "chinese": "魔墙人偶" }, "type": [ "Psychic", "Fairy" ], "base": { - "HP": 28, - "Attack": 25, - "Defense": 25, - "Sp. Attack": 45, - "Sp. Defense": 35, - "Speed": 40 + "HP": 40, + "Attack": 45, + "Defense": 65, + "Sp. Attack": 100, + "Sp. Defense": 120, + "Speed": 90 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 281, + "id": 122, "name": { - "english": "Kirlia", - "japanese": "キルリア", - "chinese": "奇鲁莉安" + "english": "Mr. Mime", + "japanese": "バリヤード", + "chinese": "魔墙人偶" }, "type": [ - "Psychic", - "Fairy" + "Ice", + "Psychic" ], "base": { - "HP": 38, - "Attack": 35, - "Defense": 35, - "Sp. Attack": 65, - "Sp. Defense": 55, - "Speed": 50 + "HP": 50, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 90, + "Sp. Defense": 90, + "Speed": 100 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 282, + "id": 122, "name": { - "english": "Gardevoir", - "japanese": "サーナイト", - "chinese": "沙奈朵" + "english": "Mr. Mime", + "japanese": "バリヤード", + "chinese": "魔墙人偶" }, "type": [ "Psychic", "Fairy" ], "base": { - "HP": 68, - "Attack": 65, + "HP": 40, + "Attack": 45, "Defense": 65, - "Sp. Attack": 125, - "Sp. Defense": 115, - "Speed": 80 + "Sp. Attack": 100, + "Sp. Defense": 120, + "Speed": 90 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 283, + "id": 123, "name": { - "english": "Surskit", - "japanese": "アメタマ", - "chinese": "溜溜糖球" + "english": "Scyther", + "japanese": "ストライク", + "chinese": "飞天螳螂" }, "type": [ "Bug", - "Water" + "Flying" ], "base": { - "HP": 40, - "Attack": 30, - "Defense": 32, - "Sp. Attack": 50, - "Sp. Defense": 52, - "Speed": 65 + "HP": 70, + "Attack": 110, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 105 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 284, + "id": 123, "name": { - "english": "Masquerain", - "japanese": "アメモース", - "chinese": "雨翅蛾" + "english": "Scyther", + "japanese": "ストライク", + "chinese": "飞天螳螂" }, "type": [ "Bug", @@ -5815,11759 +7054,38583 @@ var pokedex = [ ], "base": { "HP": 70, - "Attack": 60, - "Defense": 62, - "Sp. Attack": 100, - "Sp. Defense": 82, - "Speed": 80 + "Attack": 110, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 105 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 285, + "id": 124, "name": { - "english": "Shroomish", - "japanese": "キノココ", - "chinese": "蘑蘑菇" + "english": "Jynx", + "japanese": "ルージュラ", + "chinese": "迷唇姐" }, "type": [ - "Grass" + "Ice", + "Psychic" ], "base": { - "HP": 60, - "Attack": 40, - "Defense": 60, - "Sp. Attack": 40, - "Sp. Defense": 60, - "Speed": 35 + "HP": 65, + "Attack": 50, + "Defense": 35, + "Sp. Attack": 115, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 286, + "id": 124, "name": { - "english": "Breloom", - "japanese": "キノガッサ", - "chinese": "斗笠菇" + "english": "Jynx", + "japanese": "ルージュラ", + "chinese": "迷唇姐" }, "type": [ - "Grass", - "Fighting" + "Ice", + "Psychic" ], "base": { - "HP": 60, - "Attack": 130, - "Defense": 80, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 70 + "HP": 65, + "Attack": 50, + "Defense": 35, + "Sp. Attack": 115, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 287, + "id": 125, "name": { - "english": "Slakoth", - "japanese": "ナマケロ", - "chinese": "懒人獭" + "english": "Electabuzz", + "japanese": "エレブー", + "chinese": "电击兽" }, "type": [ - "Normal" + "Electric" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 60, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 30 + "HP": 65, + "Attack": 83, + "Defense": 57, + "Sp. Attack": 95, + "Sp. Defense": 85, + "Speed": 105 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 288, + "id": 125, "name": { - "english": "Vigoroth", - "japanese": "ヤルキモノ", - "chinese": "过动猿" + "english": "Electabuzz", + "japanese": "エレブー", + "chinese": "电击兽" }, "type": [ - "Normal" + "Electric" ], "base": { - "HP": 80, - "Attack": 80, - "Defense": 80, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 90 + "HP": 65, + "Attack": 83, + "Defense": 57, + "Sp. Attack": 95, + "Sp. Defense": 85, + "Speed": 105 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 289, + "id": 126, "name": { - "english": "Slaking", - "japanese": "ケッキング", - "chinese": "请假王" + "english": "Magmar", + "japanese": "ブーバー", + "chinese": "鸭嘴火兽" }, "type": [ - "Normal" + "Fire" ], "base": { - "HP": 150, - "Attack": 160, - "Defense": 100, - "Sp. Attack": 95, - "Sp. Defense": 65, - "Speed": 100 + "HP": 65, + "Attack": 95, + "Defense": 57, + "Sp. Attack": 100, + "Sp. Defense": 85, + "Speed": 93 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 290, + "id": 126, "name": { - "english": "Nincada", - "japanese": "ツチニン", - "chinese": "土居忍士" + "english": "Magmar", + "japanese": "ブーバー", + "chinese": "鸭嘴火兽" }, "type": [ - "Bug", - "Ground" + "Fire" ], "base": { - "HP": 31, - "Attack": 45, - "Defense": 90, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 40 + "HP": 65, + "Attack": 95, + "Defense": 57, + "Sp. Attack": 100, + "Sp. Defense": 85, + "Speed": 93 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 291, + "id": 127, "name": { - "english": "Ninjask", - "japanese": "テッカニン", - "chinese": "铁面忍者" + "english": "Pinsir", + "japanese": "カイロス", + "chinese": "凯罗斯" }, "type": [ - "Bug", - "Flying" + "Bug" ], "base": { - "HP": 61, - "Attack": 90, - "Defense": 45, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 160 + "HP": 65, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 70, + "Speed": 85 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 292, + "id": 127, "name": { - "english": "Shedinja", - "japanese": "ヌケニン", - "chinese": "脱壳忍者" + "english": "Pinsir", + "japanese": "カイロス", + "chinese": "凯罗斯" }, "type": [ "Bug", - "Ghost" + "Flying" ], "base": { - "HP": 1, - "Attack": 90, - "Defense": 45, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 40 + "HP": 65, + "Attack": 155, + "Defense": 120, + "Sp. Attack": 65, + "Sp. Defense": 90, + "Speed": 105 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 293, + "id": 127, "name": { - "english": "Whismur", - "japanese": "ゴニョニョ", - "chinese": "咕妞妞" + "english": "Pinsir", + "japanese": "カイロス", + "chinese": "凯罗斯" }, "type": [ - "Normal" + "Bug" ], "base": { - "HP": 64, - "Attack": 51, - "Defense": 23, - "Sp. Attack": 51, - "Sp. Defense": 23, - "Speed": 28 + "HP": 65, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 70, + "Speed": 85 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 294, + "id": 128, "name": { - "english": "Loudred", - "japanese": "ドゴーム", - "chinese": "吼爆弹" + "english": "Tauros", + "japanese": "ケンタロス", + "chinese": "肯泰罗" }, "type": [ "Normal" ], "base": { - "HP": 84, - "Attack": 71, - "Defense": 43, - "Sp. Attack": 71, - "Sp. Defense": 43, - "Speed": 48 + "HP": 75, + "Attack": 100, + "Defense": 95, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 110 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 295, + "id": 128, "name": { - "english": "Exploud", - "japanese": "バクオング", - "chinese": "爆音怪" + "english": "Tauros", + "japanese": "ケンタロス", + "chinese": "肯泰罗" }, "type": [ "Normal" ], "base": { - "HP": 104, - "Attack": 91, - "Defense": 63, - "Sp. Attack": 91, - "Sp. Defense": 73, - "Speed": 68 + "HP": 75, + "Attack": 100, + "Defense": 95, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 110 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 296, + "id": 129, "name": { - "english": "Makuhita", - "japanese": "マクノシタ", - "chinese": "幕下力士" + "english": "Magikarp", + "japanese": "コイキング", + "chinese": "鲤鱼王" }, "type": [ - "Fighting" + "Water" ], "base": { - "HP": 72, - "Attack": 60, - "Defense": 30, - "Sp. Attack": 20, - "Sp. Defense": 30, - "Speed": 25 - }, - "color": "yellow" - }, - { - "id": 297, + "HP": 20, + "Attack": 10, + "Defense": 55, + "Sp. Attack": 15, + "Sp. Defense": 20, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 129, "name": { - "english": "Hariyama", - "japanese": "ハリテヤマ", - "chinese": "铁掌力士" + "english": "Magikarp", + "japanese": "コイキング", + "chinese": "鲤鱼王" }, "type": [ - "Fighting" + "Water" ], "base": { - "HP": 144, - "Attack": 120, - "Defense": 60, - "Sp. Attack": 40, - "Sp. Defense": 60, - "Speed": 50 + "HP": 20, + "Attack": 10, + "Defense": 55, + "Sp. Attack": 15, + "Sp. Defense": 20, + "Speed": 80 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 298, + "id": 130, "name": { - "english": "Azurill", - "japanese": "ルリリ", - "chinese": "露力丽" + "english": "Gyarados", + "japanese": "ギャラドス", + "chinese": "暴鲤龙" }, "type": [ - "Normal", - "Fairy" + "Water", + "Flying" ], "base": { - "HP": 50, - "Attack": 20, - "Defense": 40, - "Sp. Attack": 20, - "Sp. Defense": 40, - "Speed": 20 + "HP": 95, + "Attack": 125, + "Defense": 79, + "Sp. Attack": 60, + "Sp. Defense": 100, + "Speed": 81 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 299, + "id": 130, "name": { - "english": "Nosepass", - "japanese": "ノズパス", - "chinese": "朝北鼻" + "english": "Gyarados", + "japanese": "ギャラドス", + "chinese": "暴鲤龙" }, "type": [ - "Rock" + "Water", + "Dark" ], "base": { - "HP": 30, - "Attack": 45, - "Defense": 135, - "Sp. Attack": 45, - "Sp. Defense": 90, - "Speed": 30 + "HP": 95, + "Attack": 155, + "Defense": 109, + "Sp. Attack": 70, + "Sp. Defense": 130, + "Speed": 81 }, - "color": "gray" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 300, + "id": 130, "name": { - "english": "Skitty", - "japanese": "エネコ", - "chinese": "向尾喵" + "english": "Gyarados", + "japanese": "ギャラドス", + "chinese": "暴鲤龙" }, "type": [ - "Normal" + "Water", + "Flying" ], "base": { - "HP": 50, - "Attack": 45, - "Defense": 45, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 50 + "HP": 95, + "Attack": 125, + "Defense": 79, + "Sp. Attack": 60, + "Sp. Defense": 100, + "Speed": 81 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 301, + "id": 131, "name": { - "english": "Delcatty", - "japanese": "エネコロロ", - "chinese": "优雅猫" + "english": "Lapras", + "japanese": "ラプラス", + "chinese": "拉普拉斯" }, "type": [ - "Normal" + "Water", + "Ice" ], "base": { - "HP": 70, - "Attack": 65, - "Defense": 65, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 90 + "HP": 130, + "Attack": 85, + "Defense": 80, + "Sp. Attack": 85, + "Sp. Defense": 95, + "Speed": 60 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 302, + "id": 131, "name": { - "english": "Sableye", - "japanese": "ヤミラミ", - "chinese": "勾魂眼" + "english": "Lapras", + "japanese": "ラプラス", + "chinese": "拉普拉斯" }, "type": [ - "Dark", - "Ghost" + "Water", + "Ice" ], "base": { - "HP": 50, - "Attack": 75, - "Defense": 75, - "Sp. Attack": 65, - "Sp. Defense": 65, - "Speed": 50 + "HP": 130, + "Attack": 85, + "Defense": 80, + "Sp. Attack": 85, + "Sp. Defense": 95, + "Speed": 60 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 303, + "id": 131, "name": { - "english": "Mawile", - "japanese": "クチート", - "chinese": "大嘴娃" + "english": "Lapras", + "japanese": "ラプラス", + "chinese": "拉普拉斯" }, "type": [ - "Steel", - "Fairy" + "Water", + "Ice" ], "base": { - "HP": 50, + "HP": 130, "Attack": 85, - "Defense": 85, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 50 + "Defense": 80, + "Sp. Attack": 85, + "Sp. Defense": 95, + "Speed": 60 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 304, + "id": 132, "name": { - "english": "Aron", - "japanese": "ココドラ", - "chinese": "可可多拉" + "english": "Ditto", + "japanese": "メタモン", + "chinese": "百变怪" }, "type": [ - "Steel", - "Rock" + "Normal" ], "base": { - "HP": 50, - "Attack": 70, - "Defense": 100, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 30 + "HP": 48, + "Attack": 48, + "Defense": 48, + "Sp. Attack": 48, + "Sp. Defense": 48, + "Speed": 48 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 305, + "id": 132, "name": { - "english": "Lairon", - "japanese": "コドラ", - "chinese": "可多拉" + "english": "Ditto", + "japanese": "メタモン", + "chinese": "百变怪" }, "type": [ - "Steel", - "Rock" + "Normal" ], "base": { - "HP": 60, - "Attack": 90, - "Defense": 140, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 40 + "HP": 48, + "Attack": 48, + "Defense": 48, + "Sp. Attack": 48, + "Sp. Defense": 48, + "Speed": 48 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 306, + "id": 133, "name": { - "english": "Aggron", - "japanese": "ボスゴドラ", - "chinese": "波士可多拉" + "english": "Eevee", + "japanese": "イーブイ", + "chinese": "伊布" }, "type": [ - "Steel", - "Rock" + "Normal" ], "base": { - "HP": 70, - "Attack": 110, - "Defense": 180, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 50 + "HP": 55, + "Attack": 55, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 55 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 307, + "id": 133, "name": { - "english": "Meditite", - "japanese": "アサナン", - "chinese": "玛沙那" + "english": "Eevee", + "japanese": "イーブイ", + "chinese": "伊布" }, "type": [ - "Fighting", - "Psychic" + "Normal" ], "base": { - "HP": 30, - "Attack": 40, - "Defense": 55, - "Sp. Attack": 40, - "Sp. Defense": 55, - "Speed": 60 + "HP": 65, + "Attack": 75, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 85, + "Speed": 75 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "starter" + } }, { - "id": 308, + "id": 133, "name": { - "english": "Medicham", - "japanese": "チャーレム", - "chinese": "恰雷姆" + "english": "Eevee", + "japanese": "イーブイ", + "chinese": "伊布" }, "type": [ - "Fighting", - "Psychic" + "Normal" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 75, - "Sp. Attack": 60, - "Sp. Defense": 75, - "Speed": 80 + "HP": 55, + "Attack": 55, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 55 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 309, + "id": 133, "name": { - "english": "Electrike", - "japanese": "ラクライ", - "chinese": "落雷兽" + "english": "Eevee", + "japanese": "イーブイ", + "chinese": "伊布" }, "type": [ - "Electric" + "Normal" ], "base": { - "HP": 40, - "Attack": 45, - "Defense": 40, - "Sp. Attack": 65, - "Sp. Defense": 40, - "Speed": 65 + "HP": 55, + "Attack": 55, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 55 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 310, + "id": 134, "name": { - "english": "Manectric", - "japanese": "ライボルト", - "chinese": "雷电兽" + "english": "Vaporeon", + "japanese": "シャワーズ", + "chinese": "水伊布" }, "type": [ - "Electric" + "Water" ], "base": { - "HP": 70, - "Attack": 75, + "HP": 130, + "Attack": 65, "Defense": 60, - "Sp. Attack": 105, - "Sp. Defense": 60, - "Speed": 105 + "Sp. Attack": 110, + "Sp. Defense": 95, + "Speed": 65 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 311, + "id": 134, "name": { - "english": "Plusle", - "japanese": "プラスル", - "chinese": "正电拍拍" + "english": "Vaporeon", + "japanese": "シャワーズ", + "chinese": "水伊布" }, "type": [ - "Electric" + "Water" ], "base": { - "HP": 60, - "Attack": 50, - "Defense": 40, - "Sp. Attack": 85, - "Sp. Defense": 75, - "Speed": 95 + "HP": 130, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 110, + "Sp. Defense": 95, + "Speed": 65 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 312, + "id": 135, "name": { - "english": "Minun", - "japanese": "マイナン", - "chinese": "负电拍拍" + "english": "Jolteon", + "japanese": "サンダース", + "chinese": "雷伊布" }, "type": [ "Electric" ], "base": { - "HP": 60, - "Attack": 40, - "Defense": 50, - "Sp. Attack": 75, - "Sp. Defense": 85, - "Speed": 95 + "HP": 65, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 110, + "Sp. Defense": 95, + "Speed": 130 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 313, + "id": 135, "name": { - "english": "Volbeat", - "japanese": "バルビート", - "chinese": "电萤虫" + "english": "Jolteon", + "japanese": "サンダース", + "chinese": "雷伊布" }, "type": [ - "Bug" + "Electric" ], "base": { "HP": 65, - "Attack": 73, - "Defense": 75, - "Sp. Attack": 47, - "Sp. Defense": 85, - "Speed": 85 + "Attack": 65, + "Defense": 60, + "Sp. Attack": 110, + "Sp. Defense": 95, + "Speed": 130 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 314, + "id": 136, "name": { - "english": "Illumise", - "japanese": "イルミーゼ", - "chinese": "甜甜萤" + "english": "Flareon", + "japanese": "ブースター", + "chinese": "火伊布" }, "type": [ - "Bug" + "Fire" ], "base": { "HP": 65, - "Attack": 47, - "Defense": 75, - "Sp. Attack": 73, - "Sp. Defense": 85, - "Speed": 85 + "Attack": 130, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 110, + "Speed": 65 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 315, + "id": 136, "name": { - "english": "Roselia", - "japanese": "ロゼリア", - "chinese": "毒蔷薇" + "english": "Flareon", + "japanese": "ブースター", + "chinese": "火伊布" }, "type": [ - "Grass", - "Poison" + "Fire" ], "base": { - "HP": 50, - "Attack": 60, - "Defense": 45, - "Sp. Attack": 100, - "Sp. Defense": 80, + "HP": 65, + "Attack": 130, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 110, "Speed": 65 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 316, + "id": 137, "name": { - "english": "Gulpin", - "japanese": "ゴクリン", - "chinese": "溶食兽" + "english": "Porygon", + "japanese": "ポリゴン", + "chinese": "多边兽" }, "type": [ - "Poison" + "Normal" ], "base": { - "HP": 70, - "Attack": 43, - "Defense": 53, - "Sp. Attack": 43, - "Sp. Defense": 53, + "HP": 65, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 85, + "Sp. Defense": 75, "Speed": 40 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 317, + "id": 137, "name": { - "english": "Swalot", - "japanese": "マルノーム", - "chinese": "吞食兽" + "english": "Porygon", + "japanese": "ポリゴン", + "chinese": "多边兽" }, "type": [ - "Poison" + "Normal" ], "base": { - "HP": 100, - "Attack": 73, - "Defense": 83, - "Sp. Attack": 73, - "Sp. Defense": 83, - "Speed": 55 + "HP": 65, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 40 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 318, + "id": 138, "name": { - "english": "Carvanha", - "japanese": "キバニア", - "chinese": "利牙鱼" + "english": "Omanyte", + "japanese": "オムナイト", + "chinese": "菊石兽" }, "type": [ - "Water", - "Dark" + "Rock", + "Water" ], "base": { - "HP": 45, - "Attack": 90, - "Defense": 20, - "Sp. Attack": 65, - "Sp. Defense": 20, - "Speed": 65 + "HP": 35, + "Attack": 40, + "Defense": 100, + "Sp. Attack": 90, + "Sp. Defense": 55, + "Speed": 35 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 319, + "id": 138, "name": { - "english": "Sharpedo", - "japanese": "サメハダー", - "chinese": "巨牙鲨" + "english": "Omanyte", + "japanese": "オムナイト", + "chinese": "菊石兽" }, "type": [ - "Water", - "Dark" + "Rock", + "Water" ], "base": { - "HP": 70, - "Attack": 120, - "Defense": 40, - "Sp. Attack": 95, - "Sp. Defense": 40, - "Speed": 95 + "HP": 35, + "Attack": 40, + "Defense": 100, + "Sp. Attack": 90, + "Sp. Defense": 55, + "Speed": 35 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 320, + "id": 139, "name": { - "english": "Wailmer", - "japanese": "ホエルコ", - "chinese": "吼吼鲸" + "english": "Omastar", + "japanese": "オムスター", + "chinese": "多刺菊石兽" }, "type": [ + "Rock", "Water" ], "base": { - "HP": 130, - "Attack": 70, - "Defense": 35, - "Sp. Attack": 70, - "Sp. Defense": 35, - "Speed": 60 + "HP": 70, + "Attack": 60, + "Defense": 125, + "Sp. Attack": 115, + "Sp. Defense": 70, + "Speed": 55 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 321, + "id": 139, "name": { - "english": "Wailord", - "japanese": "ホエルオー", - "chinese": "吼鲸王" + "english": "Omastar", + "japanese": "オムスター", + "chinese": "多刺菊石兽" }, "type": [ + "Rock", "Water" ], "base": { - "HP": 170, - "Attack": 90, - "Defense": 45, - "Sp. Attack": 90, - "Sp. Defense": 45, - "Speed": 60 + "HP": 70, + "Attack": 60, + "Defense": 125, + "Sp. Attack": 115, + "Sp. Defense": 70, + "Speed": 55 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 322, + "id": 140, "name": { - "english": "Numel", - "japanese": "ドンメル", - "chinese": "呆火驼" + "english": "Kabuto", + "japanese": "カブト", + "chinese": "化石盔" }, "type": [ - "Fire", - "Ground" + "Rock", + "Water" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 40, - "Sp. Attack": 65, + "HP": 30, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 55, "Sp. Defense": 45, - "Speed": 35 + "Speed": 55 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 323, + "id": 140, "name": { - "english": "Camerupt", - "japanese": "バクーダ", - "chinese": "喷火驼" + "english": "Kabuto", + "japanese": "カブト", + "chinese": "化石盔" }, "type": [ - "Fire", - "Ground" + "Rock", + "Water" ], "base": { - "HP": 70, - "Attack": 100, - "Defense": 70, - "Sp. Attack": 105, - "Sp. Defense": 75, - "Speed": 40 + "HP": 30, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 55, + "Sp. Defense": 45, + "Speed": 55 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 324, + "id": 141, "name": { - "english": "Torkoal", - "japanese": "コータス", - "chinese": "煤炭龟" + "english": "Kabutops", + "japanese": "カブトプス", + "chinese": "镰刀盔" }, "type": [ - "Fire" + "Rock", + "Water" ], "base": { - "HP": 70, - "Attack": 85, - "Defense": 140, - "Sp. Attack": 85, + "HP": 60, + "Attack": 115, + "Defense": 105, + "Sp. Attack": 65, "Sp. Defense": 70, - "Speed": 20 + "Speed": 80 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 325, + "id": 141, "name": { - "english": "Spoink", - "japanese": "バネブー", - "chinese": "跳跳猪" + "english": "Kabutops", + "japanese": "カブトプス", + "chinese": "镰刀盔" }, "type": [ - "Psychic" + "Rock", + "Water" ], "base": { "HP": 60, - "Attack": 25, - "Defense": 35, - "Sp. Attack": 70, - "Sp. Defense": 80, - "Speed": 60 + "Attack": 115, + "Defense": 105, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 80 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 326, + "id": 142, "name": { - "english": "Grumpig", - "japanese": "ブーピッグ", - "chinese": "噗噗猪" + "english": "Aerodactyl", + "japanese": "プテラ", + "chinese": "化石翼龙" }, "type": [ - "Psychic" + "Rock", + "Flying" ], "base": { "HP": 80, - "Attack": 45, + "Attack": 105, "Defense": 65, - "Sp. Attack": 90, - "Sp. Defense": 110, - "Speed": 80 + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 130 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 327, + "id": 142, "name": { - "english": "Spinda", - "japanese": "パッチール", - "chinese": "晃晃斑" + "english": "Aerodactyl", + "japanese": "プテラ", + "chinese": "化石翼龙" }, "type": [ - "Normal" + "Rock", + "Flying" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 60, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 60 + "HP": 80, + "Attack": 135, + "Defense": 85, + "Sp. Attack": 70, + "Sp. Defense": 95, + "Speed": 150 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 328, + "id": 142, "name": { - "english": "Trapinch", - "japanese": "ナックラー", - "chinese": "大颚蚁" + "english": "Aerodactyl", + "japanese": "プテラ", + "chinese": "化石翼龙" }, "type": [ - "Ground" + "Rock", + "Flying" ], "base": { - "HP": 45, - "Attack": 100, - "Defense": 45, - "Sp. Attack": 45, - "Sp. Defense": 45, - "Speed": 10 + "HP": 80, + "Attack": 105, + "Defense": 65, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 130 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 329, + "id": 143, "name": { - "english": "Vibrava", - "japanese": "ビブラーバ", - "chinese": "超音波幼虫" + "english": "Snorlax", + "japanese": "カビゴン", + "chinese": "卡比兽" }, "type": [ - "Ground", - "Dragon" + "Normal" ], "base": { - "HP": 50, - "Attack": 70, - "Defense": 50, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 70 + "HP": 160, + "Attack": 110, + "Defense": 65, + "Sp. Attack": 65, + "Sp. Defense": 110, + "Speed": 30 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 330, + "id": 143, "name": { - "english": "Flygon", - "japanese": "フライゴン", - "chinese": "沙漠蜻蜓" + "english": "Snorlax", + "japanese": "カビゴン", + "chinese": "卡比兽" }, "type": [ - "Ground", - "Dragon" + "Normal" ], "base": { - "HP": 80, - "Attack": 100, - "Defense": 80, - "Sp. Attack": 80, - "Sp. Defense": 80, - "Speed": 100 + "HP": 160, + "Attack": 110, + "Defense": 65, + "Sp. Attack": 65, + "Sp. Defense": 110, + "Speed": 30 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 331, + "id": 143, "name": { - "english": "Cacnea", - "japanese": "サボネア", - "chinese": "刺球仙人掌" + "english": "Snorlax", + "japanese": "カビゴン", + "chinese": "卡比兽" }, "type": [ - "Grass" + "Normal" ], "base": { - "HP": 50, - "Attack": 85, - "Defense": 40, - "Sp. Attack": 85, - "Sp. Defense": 40, - "Speed": 35 + "HP": 160, + "Attack": 110, + "Defense": 65, + "Sp. Attack": 65, + "Sp. Defense": 110, + "Speed": 30 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 332, + "id": 144, "name": { - "english": "Cacturne", - "japanese": "ノクタス", - "chinese": "梦歌仙人掌" + "english": "Articuno", + "japanese": "フリーザー", + "chinese": "急冻鸟" }, "type": [ - "Grass", - "Dark" + "Ice", + "Flying" ], "base": { - "HP": 70, - "Attack": 115, - "Defense": 60, - "Sp. Attack": 115, - "Sp. Defense": 60, - "Speed": 55 + "HP": 90, + "Attack": 85, + "Defense": 100, + "Sp. Attack": 95, + "Sp. Defense": 125, + "Speed": 85 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 333, + "id": 144, "name": { - "english": "Swablu", - "japanese": "チルット", - "chinese": "青绵鸟" + "english": "Articuno", + "japanese": "フリーザー", + "chinese": "急冻鸟" }, "type": [ - "Normal", + "Psychic", "Flying" ], "base": { - "HP": 45, - "Attack": 40, - "Defense": 60, - "Sp. Attack": 40, - "Sp. Defense": 75, - "Speed": 50 + "HP": 90, + "Attack": 85, + "Defense": 85, + "Sp. Attack": 125, + "Sp. Defense": 100, + "Speed": 95 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 334, + "id": 144, "name": { - "english": "Altaria", - "japanese": "チルタリス", - "chinese": "七夕青鸟" + "english": "Articuno", + "japanese": "フリーザー", + "chinese": "急冻鸟" }, "type": [ - "Dragon", + "Ice", "Flying" ], "base": { - "HP": 75, - "Attack": 70, - "Defense": 90, - "Sp. Attack": 70, - "Sp. Defense": 105, - "Speed": 80 + "HP": 90, + "Attack": 85, + "Defense": 100, + "Sp. Attack": 95, + "Sp. Defense": 125, + "Speed": 85 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 335, + "id": 144, "name": { - "english": "Zangoose", - "japanese": "ザングース", - "chinese": "猫鼬斩" + "english": "Articuno", + "japanese": "フリーザー", + "chinese": "急冻鸟" }, "type": [ - "Normal" + "Psychic", + "Flying" ], "base": { - "HP": 73, - "Attack": 115, - "Defense": 60, - "Sp. Attack": 60, - "Sp. Defense": 60, - "Speed": 90 + "HP": 90, + "Attack": 85, + "Defense": 100, + "Sp. Attack": 95, + "Sp. Defense": 125, + "Speed": 85 }, - "color": "white" + "form": { + "key": "galar" + }, + "includedInGens": [ + 8 + ] }, { - "id": 336, + "id": 145, "name": { - "english": "Seviper", - "japanese": "ハブネーク", - "chinese": "饭匙蛇" + "english": "Zapdos", + "japanese": "サンダー", + "chinese": "闪电鸟" }, "type": [ - "Poison" + "Electric", + "Flying" ], "base": { - "HP": 73, - "Attack": 100, - "Defense": 60, - "Sp. Attack": 100, - "Sp. Defense": 60, - "Speed": 65 + "HP": 90, + "Attack": 90, + "Defense": 85, + "Sp. Attack": 125, + "Sp. Defense": 90, + "Speed": 100 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 337, + "id": 145, "name": { - "english": "Lunatone", - "japanese": "ルナトーン", - "chinese": "月石" + "english": "Zapdos", + "japanese": "サンダー", + "chinese": "闪电鸟" }, "type": [ - "Rock", - "Psychic" + "Fighting", + "Flying" ], "base": { "HP": 90, - "Attack": 55, - "Defense": 65, - "Sp. Attack": 95, - "Sp. Defense": 85, - "Speed": 70 + "Attack": 125, + "Defense": 90, + "Sp. Attack": 85, + "Sp. Defense": 90, + "Speed": 100 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 338, + "id": 145, "name": { - "english": "Solrock", - "japanese": "ソルロック", - "chinese": "太阳岩" + "english": "Zapdos", + "japanese": "サンダー", + "chinese": "闪电鸟" }, "type": [ - "Rock", - "Psychic" + "Electric", + "Flying" ], "base": { "HP": 90, - "Attack": 95, + "Attack": 90, "Defense": 85, - "Sp. Attack": 55, - "Sp. Defense": 65, - "Speed": 70 + "Sp. Attack": 125, + "Sp. Defense": 90, + "Speed": 100 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 339, + "id": 145, "name": { - "english": "Barboach", - "japanese": "ドジョッチ", - "chinese": "泥泥鳅" + "english": "Zapdos", + "japanese": "サンダー", + "chinese": "闪电鸟" }, "type": [ - "Water", - "Ground" + "Fighting", + "Flying" ], "base": { - "HP": 50, - "Attack": 48, - "Defense": 43, - "Sp. Attack": 46, - "Sp. Defense": 41, - "Speed": 60 + "HP": 90, + "Attack": 90, + "Defense": 85, + "Sp. Attack": 125, + "Sp. Defense": 90, + "Speed": 100 }, - "color": "gray" + "form": { + "key": "galar" + }, + "includedInGens": [ + 8 + ] }, { - "id": 340, + "id": 146, "name": { - "english": "Whiscash", - "japanese": "ナマズン", - "chinese": "鲶鱼王" + "english": "Moltres", + "japanese": "ファイヤー", + "chinese": "火焰鸟" }, "type": [ - "Water", - "Ground" + "Fire", + "Flying" ], "base": { - "HP": 110, - "Attack": 78, - "Defense": 73, - "Sp. Attack": 76, - "Sp. Defense": 71, - "Speed": 60 + "HP": 90, + "Attack": 100, + "Defense": 90, + "Sp. Attack": 125, + "Sp. Defense": 85, + "Speed": 90 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 341, + "id": 146, "name": { - "english": "Corphish", - "japanese": "ヘイガニ", - "chinese": "龙虾小兵" - }, - "type": [ - "Water" - ], - "base": { - "HP": 43, - "Attack": 80, - "Defense": 65, - "Sp. Attack": 50, - "Sp. Defense": 35, - "Speed": 35 - }, - "color": "red" - }, - { - "id": 342, - "name": { - "english": "Crawdaunt", - "japanese": "シザリガー", - "chinese": "铁螯龙虾" + "english": "Moltres", + "japanese": "ファイヤー", + "chinese": "火焰鸟" }, "type": [ - "Water", - "Dark" + "Dark", + "Flying" ], "base": { - "HP": 63, - "Attack": 120, - "Defense": 85, - "Sp. Attack": 90, - "Sp. Defense": 55, - "Speed": 55 + "HP": 90, + "Attack": 85, + "Defense": 90, + "Sp. Attack": 100, + "Sp. Defense": 125, + "Speed": 90 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } }, { - "id": 343, + "id": 146, "name": { - "english": "Baltoy", - "japanese": "ヤジロン", - "chinese": "天秤偶" + "english": "Moltres", + "japanese": "ファイヤー", + "chinese": "火焰鸟" }, "type": [ - "Ground", - "Psychic" + "Fire", + "Flying" ], "base": { - "HP": 40, - "Attack": 40, - "Defense": 55, - "Sp. Attack": 40, - "Sp. Defense": 70, - "Speed": 55 + "HP": 90, + "Attack": 100, + "Defense": 90, + "Sp. Attack": 125, + "Sp. Defense": 85, + "Speed": 90 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 344, + "id": 146, "name": { - "english": "Claydol", - "japanese": "ネンドール", - "chinese": "念力土偶" + "english": "Moltres", + "japanese": "ファイヤー", + "chinese": "火焰鸟" }, "type": [ - "Ground", - "Psychic" + "Dark", + "Flying" ], "base": { - "HP": 60, - "Attack": 70, - "Defense": 105, - "Sp. Attack": 70, - "Sp. Defense": 120, - "Speed": 75 + "HP": 90, + "Attack": 100, + "Defense": 90, + "Sp. Attack": 125, + "Sp. Defense": 85, + "Speed": 90 + }, + "form": { + "key": "galar" }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 345, + "id": 147, "name": { - "english": "Lileep", - "japanese": "リリーラ", - "chinese": "触手百合" + "english": "Dratini", + "japanese": "ミニリュウ", + "chinese": "迷你龙" }, "type": [ - "Rock", - "Grass" + "Dragon" ], "base": { - "HP": 66, - "Attack": 41, - "Defense": 77, - "Sp. Attack": 61, - "Sp. Defense": 87, - "Speed": 23 + "HP": 41, + "Attack": 64, + "Defense": 45, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 50 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 346, + "id": 147, "name": { - "english": "Cradily", - "japanese": "ユレイドル", - "chinese": "摇篮百合" + "english": "Dratini", + "japanese": "ミニリュウ", + "chinese": "迷你龙" }, "type": [ - "Rock", - "Grass" + "Dragon" ], "base": { - "HP": 86, - "Attack": 81, - "Defense": 97, - "Sp. Attack": 81, - "Sp. Defense": 107, - "Speed": 43 + "HP": 41, + "Attack": 64, + "Defense": 45, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 50 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 347, + "id": 148, "name": { - "english": "Anorith", - "japanese": "アノプス", - "chinese": "太古羽虫" + "english": "Dragonair", + "japanese": "ハクリュー", + "chinese": "哈克龙" }, "type": [ - "Rock", - "Bug" + "Dragon" ], "base": { - "HP": 45, - "Attack": 95, - "Defense": 50, - "Sp. Attack": 40, - "Sp. Defense": 50, - "Speed": 75 + "HP": 61, + "Attack": 84, + "Defense": 65, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 70 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 348, + "id": 148, "name": { - "english": "Armaldo", - "japanese": "アーマルド", - "chinese": "太古盔甲" + "english": "Dragonair", + "japanese": "ハクリュー", + "chinese": "哈克龙" }, "type": [ - "Rock", - "Bug" + "Dragon" ], "base": { - "HP": 75, - "Attack": 125, - "Defense": 100, + "HP": 61, + "Attack": 84, + "Defense": 65, "Sp. Attack": 70, - "Sp. Defense": 80, - "Speed": 45 + "Sp. Defense": 70, + "Speed": 70 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 349, + "id": 149, "name": { - "english": "Feebas", - "japanese": "ヒンバス", - "chinese": "丑丑鱼" + "english": "Dragonite", + "japanese": "カイリュー", + "chinese": "快龙" }, "type": [ - "Water" + "Dragon", + "Flying" ], "base": { - "HP": 20, - "Attack": 15, - "Defense": 20, - "Sp. Attack": 10, - "Sp. Defense": 55, + "HP": 91, + "Attack": 134, + "Defense": 95, + "Sp. Attack": 100, + "Sp. Defense": 100, "Speed": 80 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 350, + "id": 149, "name": { - "english": "Milotic", - "japanese": "ミロカロス", - "chinese": "美纳斯" + "english": "Dragonite", + "japanese": "カイリュー", + "chinese": "快龙" }, "type": [ - "Water" + "Dragon", + "Flying" ], "base": { - "HP": 95, - "Attack": 60, - "Defense": 79, + "HP": 91, + "Attack": 134, + "Defense": 95, "Sp. Attack": 100, - "Sp. Defense": 125, - "Speed": 81 + "Sp. Defense": 100, + "Speed": 80 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 351, + "id": 150, "name": { - "english": "Castform", - "japanese": "ポワルン", - "chinese": "飘浮泡泡" + "english": "Mewtwo", + "japanese": "ミュウツー", + "chinese": "超梦" }, "type": [ - "Normal" + "Psychic" ], "base": { - "HP": 70, - "Attack": 70, - "Defense": 70, - "Sp. Attack": 70, - "Sp. Defense": 70, - "Speed": 70 + "HP": 106, + "Attack": 110, + "Defense": 90, + "Sp. Attack": 154, + "Sp. Defense": 90, + "Speed": 130 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 352, + "id": 150, "name": { - "english": "Kecleon", - "japanese": "カクレオン", - "chinese": "变隐龙" + "english": "Mewtwo", + "japanese": "ミュウツー", + "chinese": "超梦" }, "type": [ - "Normal" - ], + "Psychic", + "Fighting" + ], "base": { - "HP": 60, - "Attack": 90, - "Defense": 70, - "Sp. Attack": 60, - "Sp. Defense": 120, - "Speed": 40 + "HP": 106, + "Attack": 190, + "Defense": 100, + "Sp. Attack": 154, + "Sp. Defense": 100, + "Speed": 130 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega-x" + } }, { - "id": 353, + "id": 150, "name": { - "english": "Shuppet", - "japanese": "カゲボウズ", - "chinese": "怨影娃娃" + "english": "Mewtwo", + "japanese": "ミュウツー", + "chinese": "超梦" }, "type": [ - "Ghost" + "Psychic" ], "base": { - "HP": 44, - "Attack": 75, - "Defense": 35, - "Sp. Attack": 63, - "Sp. Defense": 33, - "Speed": 45 + "HP": 106, + "Attack": 150, + "Defense": 70, + "Sp. Attack": 194, + "Sp. Defense": 120, + "Speed": 140 }, - "color": "black" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega-y" + } }, { - "id": 354, + "id": 150, "name": { - "english": "Banette", - "japanese": "ジュペッタ", - "chinese": "诅咒娃娃" + "english": "Mewtwo", + "japanese": "ミュウツー", + "chinese": "超梦" }, "type": [ - "Ghost" + "Psychic" ], "base": { - "HP": 64, - "Attack": 115, - "Defense": 65, - "Sp. Attack": 83, - "Sp. Defense": 63, - "Speed": 65 + "HP": 106, + "Attack": 110, + "Defense": 90, + "Sp. Attack": 154, + "Sp. Defense": 90, + "Speed": 130 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 355, + "id": 151, "name": { - "english": "Duskull", - "japanese": "ヨマワル", - "chinese": "夜巡灵" + "english": "Mew", + "japanese": "ミュウ", + "chinese": "梦幻" }, "type": [ - "Ghost" + "Psychic" ], "base": { - "HP": 20, - "Attack": 40, - "Defense": 90, - "Sp. Attack": 30, - "Sp. Defense": 90, - "Speed": 25 + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 356, + "id": 151, "name": { - "english": "Dusclops", - "japanese": "サマヨール", - "chinese": "彷徨夜灵" + "english": "Mew", + "japanese": "ミュウ", + "chinese": "梦幻" }, "type": [ - "Ghost" + "Psychic" ], "base": { - "HP": 40, - "Attack": 70, - "Defense": 130, - "Sp. Attack": 60, - "Sp. Defense": 130, - "Speed": 25 + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 357, + "id": 152, "name": { - "english": "Tropius", - "japanese": "トロピウス", - "chinese": "热带龙" + "english": "Chikorita", + "japanese": "チコリータ", + "chinese": "菊草叶" }, "type": [ - "Grass", - "Flying" + "Grass" ], "base": { - "HP": 99, - "Attack": 68, - "Defense": 83, - "Sp. Attack": 72, - "Sp. Defense": 87, - "Speed": 51 - }, - "color": "green" + "HP": 45, + "Attack": 49, + "Defense": 65, + "Sp. Attack": 49, + "Sp. Defense": 65, + "Speed": 45 + } }, { - "id": 358, + "id": 152, "name": { - "english": "Chimecho", - "japanese": "チリーン", - "chinese": "风铃铃" + "english": "Chikorita", + "japanese": "チコリータ", + "chinese": "菊草叶" }, "type": [ - "Psychic" + "Grass" ], "base": { - "HP": 75, - "Attack": 50, - "Defense": 80, - "Sp. Attack": 95, - "Sp. Defense": 90, - "Speed": 65 - }, - "color": "blue" + "HP": 45, + "Attack": 49, + "Defense": 65, + "Sp. Attack": 49, + "Sp. Defense": 65, + "Speed": 45 + } }, { - "id": 359, + "id": 153, "name": { - "english": "Absol", - "japanese": "アブソル", - "chinese": "阿勃梭鲁" + "english": "Bayleef", + "japanese": "ベイリーフ", + "chinese": "月桂叶" }, "type": [ - "Dark" + "Grass" ], "base": { - "HP": 65, - "Attack": 130, - "Defense": 60, - "Sp. Attack": 75, - "Sp. Defense": 60, - "Speed": 75 - }, - "color": "white" + "HP": 60, + "Attack": 62, + "Defense": 80, + "Sp. Attack": 63, + "Sp. Defense": 80, + "Speed": 60 + } }, { - "id": 360, + "id": 153, "name": { - "english": "Wynaut", - "japanese": "ソーナノ", - "chinese": "小果然" + "english": "Bayleef", + "japanese": "ベイリーフ", + "chinese": "月桂叶" }, "type": [ - "Psychic" + "Grass" ], "base": { - "HP": 95, - "Attack": 23, - "Defense": 48, - "Sp. Attack": 23, - "Sp. Defense": 48, - "Speed": 23 - }, - "color": "blue" + "HP": 60, + "Attack": 62, + "Defense": 80, + "Sp. Attack": 63, + "Sp. Defense": 80, + "Speed": 60 + } }, { - "id": 361, + "id": 154, "name": { - "english": "Snorunt", - "japanese": "ユキワラシ", - "chinese": "雪童子" + "english": "Meganium", + "japanese": "メガニウム", + "chinese": "大竺葵" }, "type": [ - "Ice" + "Grass" ], "base": { - "HP": 50, - "Attack": 50, - "Defense": 50, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 50 - }, - "color": "gray" + "HP": 80, + "Attack": 82, + "Defense": 100, + "Sp. Attack": 83, + "Sp. Defense": 100, + "Speed": 80 + } }, { - "id": 362, + "id": 154, "name": { - "english": "Glalie", - "japanese": "オニゴーリ", - "chinese": "冰鬼护" + "english": "Meganium", + "japanese": "メガニウム", + "chinese": "大竺葵" }, "type": [ - "Ice" + "Grass" ], "base": { "HP": 80, - "Attack": 80, - "Defense": 80, - "Sp. Attack": 80, - "Sp. Defense": 80, + "Attack": 82, + "Defense": 100, + "Sp. Attack": 83, + "Sp. Defense": 100, "Speed": 80 - }, - "color": "gray" + } }, { - "id": 363, + "id": 155, "name": { - "english": "Spheal", - "japanese": "タマザラシ", - "chinese": "海豹球" + "english": "Cyndaquil", + "japanese": "ヒノアラシ", + "chinese": "火球鼠" }, "type": [ - "Ice", - "Water" + "Fire" ], "base": { - "HP": 70, - "Attack": 40, - "Defense": 50, - "Sp. Attack": 55, + "HP": 39, + "Attack": 52, + "Defense": 43, + "Sp. Attack": 60, "Sp. Defense": 50, - "Speed": 25 - }, - "color": "blue" + "Speed": 65 + } }, { - "id": 364, + "id": 155, "name": { - "english": "Sealeo", - "japanese": "トドグラー", - "chinese": "海魔狮" + "english": "Cyndaquil", + "japanese": "ヒノアラシ", + "chinese": "火球鼠" }, "type": [ - "Ice", - "Water" + "Fire" ], "base": { - "HP": 90, - "Attack": 60, - "Defense": 70, - "Sp. Attack": 75, - "Sp. Defense": 70, - "Speed": 45 - }, - "color": "blue" + "HP": 39, + "Attack": 52, + "Defense": 43, + "Sp. Attack": 60, + "Sp. Defense": 50, + "Speed": 65 + } }, { - "id": 365, + "id": 156, "name": { - "english": "Walrein", - "japanese": "トドゼルガ", - "chinese": "帝牙海狮" + "english": "Quilava", + "japanese": "マグマラシ", + "chinese": "火岩鼠" }, "type": [ - "Ice", - "Water" + "Fire" ], "base": { - "HP": 110, - "Attack": 80, - "Defense": 90, - "Sp. Attack": 95, - "Sp. Defense": 90, - "Speed": 65 - }, - "color": "blue" + "HP": 58, + "Attack": 64, + "Defense": 58, + "Sp. Attack": 80, + "Sp. Defense": 65, + "Speed": 80 + } }, { - "id": 366, + "id": 156, "name": { - "english": "Clamperl", - "japanese": "パールル", - "chinese": "珍珠贝" + "english": "Quilava", + "japanese": "マグマラシ", + "chinese": "火岩鼠" }, "type": [ - "Water" + "Fire" ], "base": { - "HP": 35, + "HP": 58, "Attack": 64, - "Defense": 85, - "Sp. Attack": 74, - "Sp. Defense": 55, - "Speed": 32 - }, - "color": "blue" + "Defense": 58, + "Sp. Attack": 80, + "Sp. Defense": 65, + "Speed": 80 + } }, { - "id": 367, + "id": 157, "name": { - "english": "Huntail", - "japanese": "ハンテール", - "chinese": "猎斑鱼" + "english": "Typhlosion", + "japanese": "バクフーン", + "chinese": "火暴兽" }, "type": [ - "Water" + "Fire" ], "base": { - "HP": 55, - "Attack": 104, - "Defense": 105, - "Sp. Attack": 94, - "Sp. Defense": 75, - "Speed": 52 + "HP": 78, + "Attack": 84, + "Defense": 78, + "Sp. Attack": 109, + "Sp. Defense": 85, + "Speed": 100 }, - "color": "blue" + "form": { + "key": "hisuian" + } }, { - "id": 368, + "id": 157, "name": { - "english": "Gorebyss", - "japanese": "サクラビス", - "chinese": "樱花鱼" + "english": "Typhlosion", + "japanese": "バクフーン", + "chinese": "火暴兽" }, "type": [ - "Water" + "Fire", + "Ghost" ], "base": { - "HP": 55, + "HP": 73, "Attack": 84, - "Defense": 105, - "Sp. Attack": 114, - "Sp. Defense": 75, - "Speed": 52 + "Defense": 78, + "Sp. Attack": 119, + "Sp. Defense": 85, + "Speed": 95 }, - "color": "pink" + "form": { + "key": "hisui" + } }, { - "id": 369, + "id": 157, "name": { - "english": "Relicanth", - "japanese": "ジーランス", - "chinese": "古空棘鱼" + "english": "Typhlosion", + "japanese": "バクフーン", + "chinese": "火暴兽" }, "type": [ - "Water", - "Rock" + "Fire", + "Ghost" ], "base": { - "HP": 100, - "Attack": 90, - "Defense": 130, - "Sp. Attack": 45, - "Sp. Defense": 65, - "Speed": 55 + "HP": 73, + "Attack": 84, + "Defense": 78, + "Sp. Attack": 119, + "Sp. Defense": 85, + "Speed": 95 }, - "color": "gray" + "form": { + "key": "hisuian" + } }, { - "id": 370, + "id": 157, "name": { - "english": "Luvdisc", - "japanese": "ラブカス", - "chinese": "爱心鱼" + "english": "Typhlosion", + "japanese": "バクフーン", + "chinese": "火暴兽" }, "type": [ - "Water" + "Fire" ], "base": { - "HP": 43, - "Attack": 30, - "Defense": 55, - "Sp. Attack": 40, - "Sp. Defense": 65, - "Speed": 97 - }, - "color": "pink" + "HP": 78, + "Attack": 84, + "Defense": 78, + "Sp. Attack": 109, + "Sp. Defense": 85, + "Speed": 100 + } }, { - "id": 371, + "id": 158, "name": { - "english": "Bagon", - "japanese": "タツベイ", - "chinese": "宝贝龙" + "english": "Totodile", + "japanese": "ワニノコ", + "chinese": "小锯鳄" }, "type": [ - "Dragon" + "Water" ], "base": { - "HP": 45, - "Attack": 75, - "Defense": 60, - "Sp. Attack": 40, - "Sp. Defense": 30, - "Speed": 50 - }, - "color": "blue" + "HP": 50, + "Attack": 65, + "Defense": 64, + "Sp. Attack": 44, + "Sp. Defense": 48, + "Speed": 43 + } }, { - "id": 372, + "id": 158, "name": { - "english": "Shelgon", - "japanese": "コモルー", - "chinese": "甲壳龙" + "english": "Totodile", + "japanese": "ワニノコ", + "chinese": "小锯鳄" }, "type": [ - "Dragon" + "Water" ], "base": { - "HP": 65, - "Attack": 95, - "Defense": 100, - "Sp. Attack": 60, - "Sp. Defense": 50, - "Speed": 50 - }, - "color": "white" + "HP": 50, + "Attack": 65, + "Defense": 64, + "Sp. Attack": 44, + "Sp. Defense": 48, + "Speed": 43 + } }, { - "id": 373, + "id": 159, "name": { - "english": "Salamence", - "japanese": "ボーマンダ", - "chinese": "暴飞龙" + "english": "Croconaw", + "japanese": "アリゲイツ", + "chinese": "蓝鳄" }, "type": [ - "Dragon", - "Flying" + "Water" ], "base": { - "HP": 95, - "Attack": 135, + "HP": 65, + "Attack": 80, "Defense": 80, - "Sp. Attack": 110, - "Sp. Defense": 80, - "Speed": 100 - }, - "color": "blue" + "Sp. Attack": 59, + "Sp. Defense": 63, + "Speed": 58 + } }, { - "id": 374, + "id": 159, "name": { - "english": "Beldum", - "japanese": "ダンバル", - "chinese": "铁哑铃" + "english": "Croconaw", + "japanese": "アリゲイツ", + "chinese": "蓝鳄" }, "type": [ - "Steel", - "Psychic" + "Water" ], "base": { - "HP": 40, - "Attack": 55, + "HP": 65, + "Attack": 80, "Defense": 80, - "Sp. Attack": 35, - "Sp. Defense": 60, - "Speed": 30 - }, - "color": "blue" + "Sp. Attack": 59, + "Sp. Defense": 63, + "Speed": 58 + } }, { - "id": 375, + "id": 160, "name": { - "english": "Metang", - "japanese": "メタング", - "chinese": "金属怪" + "english": "Feraligatr", + "japanese": "オーダイル", + "chinese": "大力鳄" }, "type": [ - "Steel", - "Psychic" + "Water" ], "base": { - "HP": 60, - "Attack": 75, + "HP": 85, + "Attack": 105, "Defense": 100, - "Sp. Attack": 55, - "Sp. Defense": 80, - "Speed": 50 - }, - "color": "blue" + "Sp. Attack": 79, + "Sp. Defense": 83, + "Speed": 78 + } }, { - "id": 376, + "id": 160, "name": { - "english": "Metagross", - "japanese": "メタグロス", - "chinese": "巨金怪" + "english": "Feraligatr", + "japanese": "オーダイル", + "chinese": "大力鳄" }, "type": [ - "Steel", - "Psychic" + "Water" ], "base": { - "HP": 80, - "Attack": 135, - "Defense": 130, - "Sp. Attack": 95, - "Sp. Defense": 90, - "Speed": 70 - }, - "color": "blue" + "HP": 85, + "Attack": 105, + "Defense": 100, + "Sp. Attack": 79, + "Sp. Defense": 83, + "Speed": 78 + } }, { - "id": 377, + "id": 161, "name": { - "english": "Regirock", - "japanese": "レジロック", - "chinese": "雷吉洛克" + "english": "Sentret", + "japanese": "オタチ", + "chinese": "尾立" }, "type": [ - "Rock" + "Normal" ], "base": { - "HP": 80, - "Attack": 100, - "Defense": 200, - "Sp. Attack": 50, - "Sp. Defense": 100, - "Speed": 50 - }, - "color": "brown" + "HP": 35, + "Attack": 46, + "Defense": 34, + "Sp. Attack": 35, + "Sp. Defense": 45, + "Speed": 20 + } }, { - "id": 378, + "id": 161, "name": { - "english": "Regice", - "japanese": "レジアイス", - "chinese": "雷吉艾斯" + "english": "Sentret", + "japanese": "オタチ", + "chinese": "尾立" }, "type": [ - "Ice" + "Normal" ], "base": { - "HP": 80, - "Attack": 50, - "Defense": 100, - "Sp. Attack": 100, - "Sp. Defense": 200, - "Speed": 50 - }, - "color": "blue" + "HP": 35, + "Attack": 46, + "Defense": 34, + "Sp. Attack": 35, + "Sp. Defense": 45, + "Speed": 20 + } }, { - "id": 379, + "id": 162, "name": { - "english": "Registeel", - "japanese": "レジスチル", - "chinese": "雷吉斯奇鲁" + "english": "Furret", + "japanese": "オオタチ", + "chinese": "大尾立" }, "type": [ - "Steel" + "Normal" ], "base": { - "HP": 80, - "Attack": 75, - "Defense": 150, - "Sp. Attack": 75, - "Sp. Defense": 150, - "Speed": 50 - }, - "color": "gray" + "HP": 85, + "Attack": 76, + "Defense": 64, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 90 + } }, { - "id": 380, + "id": 162, "name": { - "english": "Latias", - "japanese": "ラティアス", - "chinese": "拉帝亚斯" + "english": "Furret", + "japanese": "オオタチ", + "chinese": "大尾立" }, "type": [ - "Dragon", - "Psychic" + "Normal" ], "base": { - "HP": 80, - "Attack": 80, - "Defense": 90, - "Sp. Attack": 110, - "Sp. Defense": 130, - "Speed": 110 - }, - "color": "red" + "HP": 85, + "Attack": 76, + "Defense": 64, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 90 + } }, { - "id": 381, + "id": 163, "name": { - "english": "Latios", - "japanese": "ラティオス", - "chinese": "拉帝欧斯" + "english": "Hoothoot", + "japanese": "ホーホー", + "chinese": "咕咕" }, "type": [ - "Dragon", - "Psychic" + "Normal", + "Flying" ], "base": { - "HP": 80, - "Attack": 90, - "Defense": 80, - "Sp. Attack": 130, - "Sp. Defense": 110, - "Speed": 110 + "HP": 60, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 36, + "Sp. Defense": 56, + "Speed": 50 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 382, + "id": 163, "name": { - "english": "Kyogre", - "japanese": "カイオーガ", - "chinese": "盖欧卡" + "english": "Hoothoot", + "japanese": "ホーホー", + "chinese": "咕咕" }, "type": [ - "Water" + "Normal", + "Flying" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 90, - "Sp. Attack": 150, - "Sp. Defense": 140, - "Speed": 90 + "HP": 60, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 36, + "Sp. Defense": 56, + "Speed": 50 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 383, + "id": 164, "name": { - "english": "Groudon", - "japanese": "グラードン", - "chinese": "固拉多" + "english": "Noctowl", + "japanese": "ヨルノズク", + "chinese": "猫头夜鹰" }, "type": [ - "Ground" + "Normal", + "Flying" ], "base": { "HP": 100, - "Attack": 150, - "Defense": 140, - "Sp. Attack": 100, - "Sp. Defense": 90, - "Speed": 90 + "Attack": 50, + "Defense": 50, + "Sp. Attack": 86, + "Sp. Defense": 96, + "Speed": 70 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 384, + "id": 164, "name": { - "english": "Rayquaza", - "japanese": "レックウザ", - "chinese": "烈空坐" + "english": "Noctowl", + "japanese": "ヨルノズク", + "chinese": "猫头夜鹰" }, "type": [ - "Dragon", + "Normal", "Flying" ], "base": { - "HP": 105, - "Attack": 150, - "Defense": 90, - "Sp. Attack": 150, - "Sp. Defense": 90, - "Speed": 95 + "HP": 100, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 86, + "Sp. Defense": 96, + "Speed": 70 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 385, + "id": 165, "name": { - "english": "Jirachi", - "japanese": "ジラーチ", - "chinese": "基拉祈" + "english": "Ledyba", + "japanese": "レディバ", + "chinese": "芭瓢虫" }, "type": [ - "Steel", - "Psychic" + "Bug", + "Flying" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 100, - "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 100 - }, - "color": "yellow" + "HP": 40, + "Attack": 20, + "Defense": 30, + "Sp. Attack": 40, + "Sp. Defense": 80, + "Speed": 55 + } }, { - "id": 386, + "id": 165, "name": { - "english": "Deoxys", - "japanese": "デオキシス", - "chinese": "代欧奇希斯" + "english": "Ledyba", + "japanese": "レディバ", + "chinese": "芭瓢虫" }, "type": [ - "Psychic" + "Bug", + "Flying" ], "base": { - "HP": 50, - "Attack": 150, - "Defense": 50, - "Sp. Attack": 150, - "Sp. Defense": 50, - "Speed": 150 - }, - "color": "red" + "HP": 40, + "Attack": 20, + "Defense": 30, + "Sp. Attack": 40, + "Sp. Defense": 80, + "Speed": 55 + } }, { - "id": 387, + "id": 166, "name": { - "english": "Turtwig", - "japanese": "ナエトル", - "chinese": "草苗龟" + "english": "Ledian", + "japanese": "レディアン", + "chinese": "安瓢虫" }, "type": [ - "Grass" + "Bug", + "Flying" ], "base": { "HP": 55, - "Attack": 68, - "Defense": 64, - "Sp. Attack": 45, - "Sp. Defense": 55, - "Speed": 31 - }, - "color": "green" + "Attack": 35, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 110, + "Speed": 85 + } }, { - "id": 388, + "id": 166, "name": { - "english": "Grotle", - "japanese": "ハヤシガメ", - "chinese": "树林龟" + "english": "Ledian", + "japanese": "レディアン", + "chinese": "安瓢虫" }, "type": [ - "Grass" + "Bug", + "Flying" ], "base": { - "HP": 75, - "Attack": 89, - "Defense": 85, + "HP": 55, + "Attack": 35, + "Defense": 50, "Sp. Attack": 55, - "Sp. Defense": 65, - "Speed": 36 - }, - "color": "green" + "Sp. Defense": 110, + "Speed": 85 + } }, { - "id": 389, + "id": 167, "name": { - "english": "Torterra", - "japanese": "ドダイトス", - "chinese": "土台龟" + "english": "Spinarak", + "japanese": "イトマル", + "chinese": "圆丝蛛" }, "type": [ - "Grass", - "Ground" + "Bug", + "Poison" ], "base": { - "HP": 95, - "Attack": 109, - "Defense": 105, - "Sp. Attack": 75, - "Sp. Defense": 85, - "Speed": 56 - }, - "color": "green" + "HP": 40, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 30 + } }, { - "id": 390, + "id": 167, "name": { - "english": "Chimchar", - "japanese": "ヒコザル", - "chinese": "小火焰猴" + "english": "Spinarak", + "japanese": "イトマル", + "chinese": "圆丝蛛" }, "type": [ - "Fire" + "Bug", + "Poison" ], "base": { - "HP": 44, - "Attack": 58, - "Defense": 44, - "Sp. Attack": 58, - "Sp. Defense": 44, - "Speed": 61 - }, - "color": "brown" + "HP": 40, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 30 + } }, { - "id": 391, + "id": 168, "name": { - "english": "Monferno", - "japanese": "モウカザル", - "chinese": "猛火猴" + "english": "Ariados", + "japanese": "アリアドス", + "chinese": "阿利多斯" }, "type": [ - "Fire", - "Fighting" + "Bug", + "Poison" ], "base": { - "HP": 64, - "Attack": 78, - "Defense": 52, - "Sp. Attack": 78, - "Sp. Defense": 52, - "Speed": 81 - }, - "color": "brown" + "HP": 70, + "Attack": 90, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 40 + } }, { - "id": 392, + "id": 168, "name": { - "english": "Infernape", - "japanese": "ゴウカザル", - "chinese": "烈焰猴" + "english": "Ariados", + "japanese": "アリアドス", + "chinese": "阿利多斯" }, "type": [ - "Fire", - "Fighting" + "Bug", + "Poison" ], "base": { - "HP": 76, - "Attack": 104, - "Defense": 71, - "Sp. Attack": 104, - "Sp. Defense": 71, - "Speed": 108 - }, - "color": "brown" + "HP": 70, + "Attack": 90, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 40 + } }, { - "id": 393, + "id": 169, "name": { - "english": "Piplup", - "japanese": "ポッチャマ", - "chinese": "波加曼" + "english": "Crobat", + "japanese": "クロバット", + "chinese": "叉字蝠" }, "type": [ - "Water" + "Poison", + "Flying" ], "base": { - "HP": 53, - "Attack": 51, - "Defense": 53, - "Sp. Attack": 61, - "Sp. Defense": 56, - "Speed": 40 + "HP": 85, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 130 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 394, + "id": 169, "name": { - "english": "Prinplup", - "japanese": "ポッタイシ", - "chinese": "波皇子" + "english": "Crobat", + "japanese": "クロバット", + "chinese": "叉字蝠" }, "type": [ - "Water" + "Poison", + "Flying" ], "base": { - "HP": 64, - "Attack": 66, - "Defense": 68, - "Sp. Attack": 81, - "Sp. Defense": 76, - "Speed": 50 + "HP": 85, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 130 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 395, + "id": 170, "name": { - "english": "Empoleon", - "japanese": "エンペルト", - "chinese": "帝王拿波" + "english": "Chinchou", + "japanese": "チョンチー", + "chinese": "灯笼鱼" }, "type": [ "Water", - "Steel" + "Electric" ], "base": { - "HP": 84, - "Attack": 86, - "Defense": 88, - "Sp. Attack": 111, - "Sp. Defense": 101, - "Speed": 60 + "HP": 75, + "Attack": 38, + "Defense": 38, + "Sp. Attack": 56, + "Sp. Defense": 56, + "Speed": 67 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 396, + "id": 170, "name": { - "english": "Starly", - "japanese": "ムックル", - "chinese": "姆克儿" + "english": "Chinchou", + "japanese": "チョンチー", + "chinese": "灯笼鱼" }, "type": [ - "Normal", - "Flying" + "Water", + "Electric" ], "base": { - "HP": 40, - "Attack": 55, - "Defense": 30, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 60 + "HP": 75, + "Attack": 38, + "Defense": 38, + "Sp. Attack": 56, + "Sp. Defense": 56, + "Speed": 67 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 397, + "id": 171, "name": { - "english": "Staravia", - "japanese": "ムクバード", - "chinese": "姆克鸟" + "english": "Lanturn", + "japanese": "ランターン", + "chinese": "电灯怪" }, "type": [ - "Normal", - "Flying" + "Water", + "Electric" ], "base": { - "HP": 55, - "Attack": 75, - "Defense": 50, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 80 + "HP": 125, + "Attack": 58, + "Defense": 58, + "Sp. Attack": 76, + "Sp. Defense": 76, + "Speed": 67 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 398, + "id": 171, "name": { - "english": "Staraptor", - "japanese": "ムクホーク", - "chinese": "姆克鹰" + "english": "Lanturn", + "japanese": "ランターン", + "chinese": "电灯怪" }, "type": [ - "Normal", - "Flying" + "Water", + "Electric" ], "base": { - "HP": 85, - "Attack": 120, - "Defense": 70, - "Sp. Attack": 50, - "Sp. Defense": 60, - "Speed": 100 + "HP": 125, + "Attack": 58, + "Defense": 58, + "Sp. Attack": 76, + "Sp. Defense": 76, + "Speed": 67 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 399, + "id": 172, "name": { - "english": "Bidoof", - "japanese": "ビッパ", - "chinese": "大牙狸" + "english": "Pichu", + "japanese": "ピチュー", + "chinese": "皮丘" }, "type": [ - "Normal" + "Electric" ], "base": { - "HP": 59, - "Attack": 45, - "Defense": 40, + "HP": 20, + "Attack": 40, + "Defense": 15, "Sp. Attack": 35, - "Sp. Defense": 40, - "Speed": 31 + "Sp. Defense": 35, + "Speed": 60 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 400, + "id": 172, "name": { - "english": "Bibarel", - "japanese": "ビーダル", - "chinese": "大尾狸" + "english": "Pichu", + "japanese": "ピチュー", + "chinese": "皮丘" }, "type": [ - "Normal", - "Water" + "Electric" ], "base": { - "HP": 79, - "Attack": 85, - "Defense": 60, - "Sp. Attack": 55, - "Sp. Defense": 60, - "Speed": 71 + "HP": 20, + "Attack": 40, + "Defense": 15, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 60 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "spiky-eared" + } }, { - "id": 401, + "id": 172, "name": { - "english": "Kricketot", - "japanese": "コロボーシ", - "chinese": "圆法师" + "english": "Pichu", + "japanese": "ピチュー", + "chinese": "皮丘" }, "type": [ - "Bug" + "Electric" ], "base": { - "HP": 37, - "Attack": 25, - "Defense": 41, - "Sp. Attack": 25, - "Sp. Defense": 41, - "Speed": 25 + "HP": 20, + "Attack": 40, + "Defense": 15, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 60 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 402, + "id": 173, "name": { - "english": "Kricketune", - "japanese": "コロトック", - "chinese": "音箱蟀" + "english": "Cleffa", + "japanese": "ピィ", + "chinese": "皮宝宝" }, "type": [ - "Bug" + "Fairy" ], "base": { - "HP": 77, - "Attack": 85, - "Defense": 51, - "Sp. Attack": 55, - "Sp. Defense": 51, - "Speed": 65 + "HP": 50, + "Attack": 25, + "Defense": 28, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 15 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 403, + "id": 173, "name": { - "english": "Shinx", - "japanese": "コリンク", - "chinese": "小猫怪" + "english": "Cleffa", + "japanese": "ピィ", + "chinese": "皮宝宝" }, "type": [ - "Electric" + "Fairy" ], "base": { - "HP": 45, - "Attack": 65, - "Defense": 34, - "Sp. Attack": 40, - "Sp. Defense": 34, - "Speed": 45 + "HP": 50, + "Attack": 25, + "Defense": 28, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 15 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 404, + "id": 174, "name": { - "english": "Luxio", - "japanese": "ルクシオ", - "chinese": "勒克猫" + "english": "Igglybuff", + "japanese": "ププリン", + "chinese": "宝宝丁" }, "type": [ - "Electric" + "Normal", + "Fairy" ], "base": { - "HP": 60, - "Attack": 85, - "Defense": 49, - "Sp. Attack": 60, - "Sp. Defense": 49, - "Speed": 60 + "HP": 90, + "Attack": 30, + "Defense": 15, + "Sp. Attack": 40, + "Sp. Defense": 20, + "Speed": 15 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 405, + "id": 174, "name": { - "english": "Luxray", - "japanese": "レントラー", - "chinese": "伦琴猫" + "english": "Igglybuff", + "japanese": "ププリン", + "chinese": "宝宝丁" }, "type": [ - "Electric" + "Normal", + "Fairy" ], "base": { - "HP": 80, - "Attack": 120, - "Defense": 79, - "Sp. Attack": 95, - "Sp. Defense": 79, - "Speed": 70 + "HP": 90, + "Attack": 30, + "Defense": 15, + "Sp. Attack": 40, + "Sp. Defense": 20, + "Speed": 15 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 406, + "id": 175, "name": { - "english": "Budew", - "japanese": "スボミー", - "chinese": "含羞苞" + "english": "Togepi", + "japanese": "トゲピー", + "chinese": "波克比" }, "type": [ - "Grass", - "Poison" + "Fairy" ], "base": { - "HP": 40, - "Attack": 30, - "Defense": 35, - "Sp. Attack": 50, - "Sp. Defense": 70, - "Speed": 55 + "HP": 35, + "Attack": 20, + "Defense": 65, + "Sp. Attack": 40, + "Sp. Defense": 65, + "Speed": 20 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 407, + "id": 175, "name": { - "english": "Roserade", - "japanese": "ロズレイド", - "chinese": "罗丝雷朵" + "english": "Togepi", + "japanese": "トゲピー", + "chinese": "波克比" }, "type": [ - "Grass", - "Poison" + "Fairy" ], "base": { - "HP": 60, - "Attack": 70, + "HP": 35, + "Attack": 20, "Defense": 65, - "Sp. Attack": 125, - "Sp. Defense": 105, - "Speed": 90 + "Sp. Attack": 40, + "Sp. Defense": 65, + "Speed": 20 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 408, + "id": 176, "name": { - "english": "Cranidos", - "japanese": "ズガイドス", - "chinese": "头盖龙" + "english": "Togetic", + "japanese": "トゲチック", + "chinese": "波克基古" }, "type": [ - "Rock" + "Fairy", + "Flying" ], "base": { - "HP": 67, - "Attack": 125, - "Defense": 40, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 58 + "HP": 55, + "Attack": 40, + "Defense": 85, + "Sp. Attack": 80, + "Sp. Defense": 105, + "Speed": 40 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 409, + "id": 176, "name": { - "english": "Rampardos", - "japanese": "ラムパルド", - "chinese": "战槌龙" + "english": "Togetic", + "japanese": "トゲチック", + "chinese": "波克基古" }, "type": [ - "Rock" + "Fairy", + "Flying" ], "base": { - "HP": 97, - "Attack": 165, - "Defense": 60, - "Sp. Attack": 65, - "Sp. Defense": 50, - "Speed": 58 + "HP": 55, + "Attack": 40, + "Defense": 85, + "Sp. Attack": 80, + "Sp. Defense": 105, + "Speed": 40 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 410, + "id": 177, "name": { - "english": "Shieldon", - "japanese": "タテトプス", - "chinese": "盾甲龙" + "english": "Natu", + "japanese": "ネイティ", + "chinese": "天然雀" }, "type": [ - "Rock", - "Steel" + "Psychic", + "Flying" ], "base": { - "HP": 30, - "Attack": 42, - "Defense": 118, - "Sp. Attack": 42, - "Sp. Defense": 88, - "Speed": 30 + "HP": 40, + "Attack": 50, + "Defense": 45, + "Sp. Attack": 70, + "Sp. Defense": 45, + "Speed": 70 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 411, + "id": 177, "name": { - "english": "Bastiodon", - "japanese": "トリデプス", - "chinese": "护城龙" + "english": "Natu", + "japanese": "ネイティ", + "chinese": "天然雀" }, "type": [ - "Rock", - "Steel" + "Psychic", + "Flying" ], "base": { - "HP": 60, - "Attack": 52, - "Defense": 168, - "Sp. Attack": 47, - "Sp. Defense": 138, - "Speed": 30 + "HP": 40, + "Attack": 50, + "Defense": 45, + "Sp. Attack": 70, + "Sp. Defense": 45, + "Speed": 70 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 412, + "id": 178, "name": { - "english": "Burmy", - "japanese": "ミノムッチ", - "chinese": "结草儿" + "english": "Xatu", + "japanese": "ネイティオ", + "chinese": "天然鸟" }, "type": [ - "Bug" + "Psychic", + "Flying" ], "base": { - "HP": 40, - "Attack": 29, - "Defense": 45, - "Sp. Attack": 29, - "Sp. Defense": 45, - "Speed": 36 + "HP": 65, + "Attack": 75, + "Defense": 70, + "Sp. Attack": 95, + "Sp. Defense": 70, + "Speed": 95 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 413, + "id": 178, "name": { - "english": "Wormadam", - "japanese": "ミノマダム", - "chinese": "结草贵妇" + "english": "Xatu", + "japanese": "ネイティオ", + "chinese": "天然鸟" }, "type": [ - "Bug", - "Grass" + "Psychic", + "Flying" ], "base": { - "HP": 60, - "Attack": 59, - "Defense": 85, - "Sp. Attack": 79, - "Sp. Defense": 105, - "Speed": 36 + "HP": 65, + "Attack": 75, + "Defense": 70, + "Sp. Attack": 95, + "Sp. Defense": 70, + "Speed": 95 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 414, + "id": 179, "name": { - "english": "Mothim", - "japanese": "ガーメイル", - "chinese": "绅士蛾" + "english": "Mareep", + "japanese": "メリープ", + "chinese": "咩利羊" }, "type": [ - "Bug", - "Flying" + "Electric" ], "base": { - "HP": 70, - "Attack": 94, - "Defense": 50, - "Sp. Attack": 94, - "Sp. Defense": 50, - "Speed": 66 - }, - "color": "yellow" + "HP": 55, + "Attack": 40, + "Defense": 40, + "Sp. Attack": 65, + "Sp. Defense": 45, + "Speed": 35 + } }, { - "id": 415, + "id": 179, "name": { - "english": "Combee", - "japanese": "ミツハニー", - "chinese": "三蜜蜂" + "english": "Mareep", + "japanese": "メリープ", + "chinese": "咩利羊" }, "type": [ - "Bug", - "Flying" + "Electric" ], "base": { - "HP": 30, - "Attack": 30, - "Defense": 42, - "Sp. Attack": 30, - "Sp. Defense": 42, - "Speed": 70 - }, - "color": "yellow" + "HP": 55, + "Attack": 40, + "Defense": 40, + "Sp. Attack": 65, + "Sp. Defense": 45, + "Speed": 35 + } }, { - "id": 416, + "id": 180, "name": { - "english": "Vespiquen", - "japanese": "ビークイン", - "chinese": "蜂女王" + "english": "Flaaffy", + "japanese": "モココ", + "chinese": "茸茸羊" }, "type": [ - "Bug", - "Flying" + "Electric" ], "base": { "HP": 70, - "Attack": 80, - "Defense": 102, + "Attack": 55, + "Defense": 55, "Sp. Attack": 80, - "Sp. Defense": 102, - "Speed": 40 - }, - "color": "yellow" + "Sp. Defense": 60, + "Speed": 45 + } }, { - "id": 417, + "id": 180, "name": { - "english": "Pachirisu", - "japanese": "パチリス", - "chinese": "帕奇利兹" + "english": "Flaaffy", + "japanese": "モココ", + "chinese": "茸茸羊" }, "type": [ "Electric" ], "base": { - "HP": 60, - "Attack": 45, - "Defense": 70, - "Sp. Attack": 45, - "Sp. Defense": 90, - "Speed": 95 - }, - "color": "white" + "HP": 70, + "Attack": 55, + "Defense": 55, + "Sp. Attack": 80, + "Sp. Defense": 60, + "Speed": 45 + } }, { - "id": 418, + "id": 181, "name": { - "english": "Buizel", - "japanese": "ブイゼル", - "chinese": "泳圈鼬" + "english": "Ampharos", + "japanese": "デンリュウ", + "chinese": "电龙" }, "type": [ - "Water" + "Electric" ], "base": { - "HP": 55, - "Attack": 65, - "Defense": 35, - "Sp. Attack": 60, - "Sp. Defense": 30, - "Speed": 85 - }, - "color": "brown" + "HP": 90, + "Attack": 75, + "Defense": 85, + "Sp. Attack": 115, + "Sp. Defense": 90, + "Speed": 55 + } }, { - "id": 419, + "id": 181, "name": { - "english": "Floatzel", - "japanese": "フローゼル", - "chinese": "浮潜鼬" + "english": "Ampharos", + "japanese": "デンリュウ", + "chinese": "电龙" }, "type": [ - "Water" + "Electric", + "Dragon" ], "base": { - "HP": 85, - "Attack": 105, - "Defense": 55, - "Sp. Attack": 85, - "Sp. Defense": 50, - "Speed": 115 + "HP": 90, + "Attack": 95, + "Defense": 105, + "Sp. Attack": 165, + "Sp. Defense": 110, + "Speed": 45 }, - "color": "brown" + "form": { + "key": "mega" + } }, { - "id": 420, + "id": 181, "name": { - "english": "Cherubi", - "japanese": "チェリンボ", - "chinese": "樱花宝" + "english": "Ampharos", + "japanese": "デンリュウ", + "chinese": "电龙" }, "type": [ - "Grass" + "Electric" ], "base": { - "HP": 45, - "Attack": 35, - "Defense": 45, - "Sp. Attack": 62, - "Sp. Defense": 53, - "Speed": 35 - }, - "color": "pink" + "HP": 90, + "Attack": 75, + "Defense": 85, + "Sp. Attack": 115, + "Sp. Defense": 90, + "Speed": 55 + } }, { - "id": 421, + "id": 182, "name": { - "english": "Cherrim", - "japanese": "チェリム", - "chinese": "樱花儿" + "english": "Bellossom", + "japanese": "キレイハナ", + "chinese": "美丽花" }, "type": [ "Grass" ], "base": { - "HP": 70, - "Attack": 60, - "Defense": 70, - "Sp. Attack": 87, - "Sp. Defense": 78, - "Speed": 85 + "HP": 75, + "Attack": 80, + "Defense": 95, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 50 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 422, + "id": 182, "name": { - "english": "Shellos", - "japanese": "カラナクシ", - "chinese": "无壳海兔" + "english": "Bellossom", + "japanese": "キレイハナ", + "chinese": "美丽花" }, "type": [ - "Water" + "Grass" ], "base": { - "HP": 76, - "Attack": 48, - "Defense": 48, - "Sp. Attack": 57, - "Sp. Defense": 62, - "Speed": 34 + "HP": 75, + "Attack": 80, + "Defense": 95, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 50 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 423, + "id": 183, "name": { - "english": "Gastrodon", - "japanese": "トリトドン", - "chinese": "海兔兽" + "english": "Marill", + "japanese": "マリル", + "chinese": "玛力露" }, "type": [ "Water", - "Ground" + "Fairy" ], "base": { - "HP": 111, - "Attack": 83, - "Defense": 68, - "Sp. Attack": 92, - "Sp. Defense": 82, - "Speed": 39 + "HP": 70, + "Attack": 20, + "Defense": 50, + "Sp. Attack": 20, + "Sp. Defense": 50, + "Speed": 40 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 424, + "id": 183, "name": { - "english": "Ambipom", - "japanese": "エテボース", - "chinese": "双尾怪手" + "english": "Marill", + "japanese": "マリル", + "chinese": "玛力露" }, "type": [ - "Normal" + "Water", + "Fairy" ], "base": { - "HP": 75, - "Attack": 100, - "Defense": 66, - "Sp. Attack": 60, - "Sp. Defense": 66, - "Speed": 115 + "HP": 70, + "Attack": 20, + "Defense": 50, + "Sp. Attack": 20, + "Sp. Defense": 50, + "Speed": 40 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 425, + "id": 184, "name": { - "english": "Drifloon", - "japanese": "フワンテ", - "chinese": "飘飘球" + "english": "Azumarill", + "japanese": "マリルリ", + "chinese": "玛力露丽" }, "type": [ - "Ghost", - "Flying" + "Water", + "Fairy" ], "base": { - "HP": 90, + "HP": 100, "Attack": 50, - "Defense": 34, + "Defense": 80, "Sp. Attack": 60, - "Sp. Defense": 44, - "Speed": 70 + "Sp. Defense": 80, + "Speed": 50 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 426, + "id": 184, "name": { - "english": "Drifblim", - "japanese": "フワライド", - "chinese": "随风球" + "english": "Azumarill", + "japanese": "マリルリ", + "chinese": "玛力露丽" }, "type": [ - "Ghost", - "Flying" + "Water", + "Fairy" ], "base": { - "HP": 150, - "Attack": 80, - "Defense": 44, - "Sp. Attack": 90, - "Sp. Defense": 54, - "Speed": 80 + "HP": 100, + "Attack": 50, + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 80, + "Speed": 50 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 427, + "id": 185, "name": { - "english": "Buneary", - "japanese": "ミミロル", - "chinese": "卷卷耳" + "english": "Sudowoodo", + "japanese": "ウソッキー", + "chinese": "树才怪‎" }, "type": [ - "Normal" + "Rock" ], "base": { - "HP": 55, - "Attack": 66, - "Defense": 44, - "Sp. Attack": 44, - "Sp. Defense": 56, - "Speed": 85 + "HP": 70, + "Attack": 100, + "Defense": 115, + "Sp. Attack": 30, + "Sp. Defense": 65, + "Speed": 30 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 428, + "id": 185, "name": { - "english": "Lopunny", - "japanese": "ミミロップ", - "chinese": "长耳兔" + "english": "Sudowoodo", + "japanese": "ウソッキー", + "chinese": "树才怪‎" }, "type": [ - "Normal" + "Rock" ], "base": { - "HP": 65, - "Attack": 76, - "Defense": 84, - "Sp. Attack": 54, - "Sp. Defense": 96, - "Speed": 105 + "HP": 70, + "Attack": 100, + "Defense": 115, + "Sp. Attack": 30, + "Sp. Defense": 65, + "Speed": 30 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 429, + "id": 186, "name": { - "english": "Mismagius", - "japanese": "ムウマージ", - "chinese": "梦妖魔" + "english": "Politoed", + "japanese": "ニョロトノ", + "chinese": "蚊香蛙皇" }, "type": [ - "Ghost" + "Water" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 60, - "Sp. Attack": 105, - "Sp. Defense": 105, - "Speed": 105 + "HP": 90, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 70 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 430, + "id": 186, "name": { - "english": "Honchkrow", - "japanese": "ドンカラス", - "chinese": "乌鸦头头" + "english": "Politoed", + "japanese": "ニョロトノ", + "chinese": "蚊香蛙皇" + }, + "type": [ + "Water" + ], + "base": { + "HP": 90, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 187, + "name": { + "english": "Hoppip", + "japanese": "ハネッコ", + "chinese": "毽子草" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 35, + "Attack": 35, + "Defense": 40, + "Sp. Attack": 35, + "Sp. Defense": 55, + "Speed": 50 + } + }, + { + "id": 187, + "name": { + "english": "Hoppip", + "japanese": "ハネッコ", + "chinese": "毽子草" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 35, + "Attack": 35, + "Defense": 40, + "Sp. Attack": 35, + "Sp. Defense": 55, + "Speed": 50 + } + }, + { + "id": 188, + "name": { + "english": "Skiploom", + "japanese": "ポポッコ", + "chinese": "毽子花" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 45, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 80 + } + }, + { + "id": 188, + "name": { + "english": "Skiploom", + "japanese": "ポポッコ", + "chinese": "毽子花" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 45, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 80 + } + }, + { + "id": 189, + "name": { + "english": "Jumpluff", + "japanese": "ワタッコ", + "chinese": "毽子棉" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 55, + "Defense": 70, + "Sp. Attack": 55, + "Sp. Defense": 95, + "Speed": 110 + } + }, + { + "id": 189, + "name": { + "english": "Jumpluff", + "japanese": "ワタッコ", + "chinese": "毽子棉" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 55, + "Defense": 70, + "Sp. Attack": 55, + "Sp. Defense": 95, + "Speed": 110 + } + }, + { + "id": 190, + "name": { + "english": "Aipom", + "japanese": "エイパム", + "chinese": "长尾怪手" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 70, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 55, + "Speed": 85 + } + }, + { + "id": 190, + "name": { + "english": "Aipom", + "japanese": "エイパム", + "chinese": "长尾怪手" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 70, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 55, + "Speed": 85 + } + }, + { + "id": 191, + "name": { + "english": "Sunkern", + "japanese": "ヒマナッツ", + "chinese": "向日种子" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 30, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 30 + } + }, + { + "id": 191, + "name": { + "english": "Sunkern", + "japanese": "ヒマナッツ", + "chinese": "向日种子" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 30, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 30 + } + }, + { + "id": 192, + "name": { + "english": "Sunflora", + "japanese": "キマワリ", + "chinese": "向日花怪" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 55, + "Sp. Attack": 105, + "Sp. Defense": 85, + "Speed": 30 + } + }, + { + "id": 192, + "name": { + "english": "Sunflora", + "japanese": "キマワリ", + "chinese": "向日花怪" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 55, + "Sp. Attack": 105, + "Sp. Defense": 85, + "Speed": 30 + } + }, + { + "id": 193, + "name": { + "english": "Yanma", + "japanese": "ヤンヤンマ", + "chinese": "蜻蜻蜓" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 65, + "Defense": 45, + "Sp. Attack": 75, + "Sp. Defense": 45, + "Speed": 95 + } + }, + { + "id": 193, + "name": { + "english": "Yanma", + "japanese": "ヤンヤンマ", + "chinese": "蜻蜻蜓" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 65, + "Defense": 45, + "Sp. Attack": 75, + "Sp. Defense": 45, + "Speed": 95 + } + }, + { + "id": 194, + "name": { + "english": "Wooper", + "japanese": "ウパー", + "chinese": "乌波" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 55, + "Attack": 45, + "Defense": 45, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 194, + "name": { + "english": "Wooper", + "japanese": "ウパー", + "chinese": "乌波" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 55, + "Attack": 45, + "Defense": 45, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 195, + "name": { + "english": "Quagsire", + "japanese": "ヌオー", + "chinese": "沼王" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 95, + "Attack": 85, + "Defense": 85, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 195, + "name": { + "english": "Quagsire", + "japanese": "ヌオー", + "chinese": "沼王" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 95, + "Attack": 85, + "Defense": 85, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 196, + "name": { + "english": "Espeon", + "japanese": "エーフィ", + "chinese": "太阳伊布" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 65, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 130, + "Sp. Defense": 95, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 196, + "name": { + "english": "Espeon", + "japanese": "エーフィ", + "chinese": "太阳伊布" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 65, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 130, + "Sp. Defense": 95, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 197, + "name": { + "english": "Umbreon", + "japanese": "ブラッキー", + "chinese": "月亮伊布" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 95, + "Attack": 65, + "Defense": 110, + "Sp. Attack": 60, + "Sp. Defense": 130, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 197, + "name": { + "english": "Umbreon", + "japanese": "ブラッキー", + "chinese": "月亮伊布" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 95, + "Attack": 65, + "Defense": 110, + "Sp. Attack": 60, + "Sp. Defense": 130, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 198, + "name": { + "english": "Murkrow", + "japanese": "ヤミカラス", + "chinese": "黑暗鸦" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 42, + "Sp. Attack": 85, + "Sp. Defense": 42, + "Speed": 91 + } + }, + { + "id": 198, + "name": { + "english": "Murkrow", + "japanese": "ヤミカラス", + "chinese": "黑暗鸦" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 42, + "Sp. Attack": 85, + "Sp. Defense": 42, + "Speed": 91 + } + }, + { + "id": 199, + "name": { + "english": "Slowking", + "japanese": "ヤドキング", + "chinese": "呆呆王" + }, + "type": [ + "Water", + "Psychic" + ], + "base": { + "HP": 95, + "Attack": 75, + "Defense": 80, + "Sp. Attack": 100, + "Sp. Defense": 110, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 199, + "name": { + "english": "Slowking", + "japanese": "ヤドキング", + "chinese": "呆呆王" + }, + "type": [ + "Poison", + "Psychic" + ], + "base": { + "HP": 95, + "Attack": 65, + "Defense": 80, + "Sp. Attack": 110, + "Sp. Defense": 110, + "Speed": 30 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 199, + "name": { + "english": "Slowking", + "japanese": "ヤドキング", + "chinese": "呆呆王" + }, + "type": [ + "Water", + "Psychic" + ], + "base": { + "HP": 95, + "Attack": 75, + "Defense": 80, + "Sp. Attack": 100, + "Sp. Defense": 110, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 200, + "name": { + "english": "Misdreavus", + "japanese": "ムウマ", + "chinese": "梦妖" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 85, + "Sp. Defense": 85, + "Speed": 85 + } + }, + { + "id": 200, + "name": { + "english": "Misdreavus", + "japanese": "ムウマ", + "chinese": "梦妖" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 85, + "Sp. Defense": 85, + "Speed": 85 + } + }, + { + "id": 201, + "name": { + "english": "Unown", + "japanese": "アンノーン", + "chinese": "未知图腾" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 48, + "Attack": 72, + "Defense": 48, + "Sp. Attack": 72, + "Sp. Defense": 48, + "Speed": 48 + } + }, + { + "id": 201, + "name": { + "english": "Unown", + "japanese": "アンノーン", + "chinese": "未知图腾" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 48, + "Attack": 72, + "Defense": 48, + "Sp. Attack": 72, + "Sp. Defense": 48, + "Speed": 48 + } + }, + { + "id": 202, + "name": { + "english": "Wobbuffet", + "japanese": "ソーナンス", + "chinese": "果然翁" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 190, + "Attack": 33, + "Defense": 58, + "Sp. Attack": 33, + "Sp. Defense": 58, + "Speed": 33 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 202, + "name": { + "english": "Wobbuffet", + "japanese": "ソーナンス", + "chinese": "果然翁" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 190, + "Attack": 33, + "Defense": 58, + "Sp. Attack": 33, + "Sp. Defense": 58, + "Speed": 33 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 203, + "name": { + "english": "Girafarig", + "japanese": "キリンリキ", + "chinese": "麒麟奇" + }, + "type": [ + "Normal", + "Psychic" + ], + "base": { + "HP": 70, + "Attack": 80, + "Defense": 65, + "Sp. Attack": 90, + "Sp. Defense": 65, + "Speed": 85 + } + }, + { + "id": 203, + "name": { + "english": "Girafarig", + "japanese": "キリンリキ", + "chinese": "麒麟奇" + }, + "type": [ + "Normal", + "Psychic" + ], + "base": { + "HP": 70, + "Attack": 80, + "Defense": 65, + "Sp. Attack": 90, + "Sp. Defense": 65, + "Speed": 85 + } + }, + { + "id": 204, + "name": { + "english": "Pineco", + "japanese": "クヌギダマ", + "chinese": "榛果球" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 90, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 15 + } + }, + { + "id": 204, + "name": { + "english": "Pineco", + "japanese": "クヌギダマ", + "chinese": "榛果球" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 90, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 15 + } + }, + { + "id": 205, + "name": { + "english": "Forretress", + "japanese": "フォレトス", + "chinese": "佛烈托斯" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 75, + "Attack": 90, + "Defense": 140, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 40 + } + }, + { + "id": 205, + "name": { + "english": "Forretress", + "japanese": "フォレトス", + "chinese": "佛烈托斯" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 75, + "Attack": 90, + "Defense": 140, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 40 + } + }, + { + "id": 206, + "name": { + "english": "Dunsparce", + "japanese": "ノコッチ", + "chinese": "土龙弟弟" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 100, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 206, + "name": { + "english": "Dunsparce", + "japanese": "ノコッチ", + "chinese": "土龙弟弟" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 100, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 207, + "name": { + "english": "Gligar", + "japanese": "グライガー", + "chinese": "天蝎" + }, + "type": [ + "Ground", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 75, + "Defense": 105, + "Sp. Attack": 35, + "Sp. Defense": 65, + "Speed": 85 + } + }, + { + "id": 207, + "name": { + "english": "Gligar", + "japanese": "グライガー", + "chinese": "天蝎" + }, + "type": [ + "Ground", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 75, + "Defense": 105, + "Sp. Attack": 35, + "Sp. Defense": 65, + "Speed": 85 + } + }, + { + "id": 208, + "name": { + "english": "Steelix", + "japanese": "ハガネール", + "chinese": "大钢蛇" + }, + "type": [ + "Steel", + "Ground" + ], + "base": { + "HP": 75, + "Attack": 85, + "Defense": 200, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 208, + "name": { + "english": "Steelix", + "japanese": "ハガネール", + "chinese": "大钢蛇" + }, + "type": [ + "Steel", + "Ground" + ], + "base": { + "HP": 75, + "Attack": 125, + "Defense": 230, + "Sp. Attack": 55, + "Sp. Defense": 95, + "Speed": 30 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 208, + "name": { + "english": "Steelix", + "japanese": "ハガネール", + "chinese": "大钢蛇" + }, + "type": [ + "Steel", + "Ground" + ], + "base": { + "HP": 75, + "Attack": 85, + "Defense": 200, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 209, + "name": { + "english": "Snubbull", + "japanese": "ブルー", + "chinese": "布鲁" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 60, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 30 + } + }, + { + "id": 209, + "name": { + "english": "Snubbull", + "japanese": "ブルー", + "chinese": "布鲁" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 60, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 30 + } + }, + { + "id": 210, + "name": { + "english": "Granbull", + "japanese": "グランブル", + "chinese": "布鲁皇" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 90, + "Attack": 120, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 45 + } + }, + { + "id": 210, + "name": { + "english": "Granbull", + "japanese": "グランブル", + "chinese": "布鲁皇" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 90, + "Attack": 120, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 45 + } + }, + { + "id": 211, + "name": { + "english": "Qwilfish", + "japanese": "ハリーセン", + "chinese": "千针鱼" + }, + "type": [ + "Water", + "Poison" + ], + "base": { + "HP": 65, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 85 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 211, + "name": { + "english": "Qwilfish", + "japanese": "ハリーセン", + "chinese": "千针鱼" + }, + "type": [ + "Dark", + "Poison" + ], + "base": { + "HP": 65, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 85 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 211, + "name": { + "english": "Qwilfish", + "japanese": "ハリーセン", + "chinese": "千针鱼" + }, + "type": [ + "Dark", + "Poison" + ], + "base": { + "HP": 65, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 85 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 211, + "name": { + "english": "Qwilfish", + "japanese": "ハリーセン", + "chinese": "千针鱼" + }, + "type": [ + "Water", + "Poison" + ], + "base": { + "HP": 65, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 212, + "name": { + "english": "Scizor", + "japanese": "ハッサム", + "chinese": "巨钳螳螂" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 130, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 212, + "name": { + "english": "Scizor", + "japanese": "ハッサム", + "chinese": "巨钳螳螂" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 150, + "Defense": 140, + "Sp. Attack": 65, + "Sp. Defense": 100, + "Speed": 75 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 212, + "name": { + "english": "Scizor", + "japanese": "ハッサム", + "chinese": "巨钳螳螂" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 130, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 213, + "name": { + "english": "Shuckle", + "japanese": "ツボツボ", + "chinese": "壶壶" + }, + "type": [ + "Bug", + "Rock" + ], + "base": { + "HP": 20, + "Attack": 10, + "Defense": 230, + "Sp. Attack": 10, + "Sp. Defense": 230, + "Speed": 5 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 213, + "name": { + "english": "Shuckle", + "japanese": "ツボツボ", + "chinese": "壶壶" + }, + "type": [ + "Bug", + "Rock" + ], + "base": { + "HP": 20, + "Attack": 10, + "Defense": 230, + "Sp. Attack": 10, + "Sp. Defense": 230, + "Speed": 5 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 214, + "name": { + "english": "Heracross", + "japanese": "ヘラクロス", + "chinese": "赫拉克罗斯" + }, + "type": [ + "Bug", + "Fighting" + ], + "base": { + "HP": 80, + "Attack": 125, + "Defense": 75, + "Sp. Attack": 40, + "Sp. Defense": 95, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 214, + "name": { + "english": "Heracross", + "japanese": "ヘラクロス", + "chinese": "赫拉克罗斯" + }, + "type": [ + "Bug", + "Fighting" + ], + "base": { + "HP": 80, + "Attack": 185, + "Defense": 115, + "Sp. Attack": 40, + "Sp. Defense": 105, + "Speed": 75 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 214, + "name": { + "english": "Heracross", + "japanese": "ヘラクロス", + "chinese": "赫拉克罗斯" + }, + "type": [ + "Bug", + "Fighting" + ], + "base": { + "HP": 80, + "Attack": 125, + "Defense": 75, + "Sp. Attack": 40, + "Sp. Defense": 95, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 215, + "name": { + "english": "Sneasel", + "japanese": "ニューラ", + "chinese": "狃拉" + }, + "type": [ + "Dark", + "Ice" + ], + "base": { + "HP": 55, + "Attack": 95, + "Defense": 55, + "Sp. Attack": 35, + "Sp. Defense": 75, + "Speed": 115 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 215, + "name": { + "english": "Sneasel", + "japanese": "ニューラ", + "chinese": "狃拉" + }, + "type": [ + "Fighting", + "Poison" + ], + "base": { + "HP": 55, + "Attack": 95, + "Defense": 55, + "Sp. Attack": 35, + "Sp. Defense": 75, + "Speed": 115 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 215, + "name": { + "english": "Sneasel", + "japanese": "ニューラ", + "chinese": "狃拉" + }, + "type": [ + "Fighting", + "Poison" + ], + "base": { + "HP": 55, + "Attack": 95, + "Defense": 55, + "Sp. Attack": 35, + "Sp. Defense": 75, + "Speed": 115 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 215, + "name": { + "english": "Sneasel", + "japanese": "ニューラ", + "chinese": "狃拉" + }, + "type": [ + "Dark", + "Ice" + ], + "base": { + "HP": 55, + "Attack": 95, + "Defense": 55, + "Sp. Attack": 35, + "Sp. Defense": 75, + "Speed": 115 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 216, + "name": { + "english": "Teddiursa", + "japanese": "ヒメグマ", + "chinese": "熊宝宝" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 40 + } + }, + { + "id": 216, + "name": { + "english": "Teddiursa", + "japanese": "ヒメグマ", + "chinese": "熊宝宝" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 40 + } + }, + { + "id": 217, + "name": { + "english": "Ursaring", + "japanese": "リングマ", + "chinese": "圈圈熊" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 90, + "Attack": 130, + "Defense": 75, + "Sp. Attack": 75, + "Sp. Defense": 75, + "Speed": 55 + } + }, + { + "id": 217, + "name": { + "english": "Ursaring", + "japanese": "リングマ", + "chinese": "圈圈熊" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 90, + "Attack": 130, + "Defense": 75, + "Sp. Attack": 75, + "Sp. Defense": 75, + "Speed": 55 + } + }, + { + "id": 218, + "name": { + "english": "Slugma", + "japanese": "マグマッグ", + "chinese": "熔岩虫" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 40, + "Attack": 40, + "Defense": 40, + "Sp. Attack": 70, + "Sp. Defense": 40, + "Speed": 20 + } + }, + { + "id": 218, + "name": { + "english": "Slugma", + "japanese": "マグマッグ", + "chinese": "熔岩虫" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 40, + "Attack": 40, + "Defense": 40, + "Sp. Attack": 70, + "Sp. Defense": 40, + "Speed": 20 + } + }, + { + "id": 219, + "name": { + "english": "Magcargo", + "japanese": "マグカルゴ", + "chinese": "熔岩蜗牛" + }, + "type": [ + "Fire", + "Rock" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 120, + "Sp. Attack": 90, + "Sp. Defense": 80, + "Speed": 30 + } + }, + { + "id": 219, + "name": { + "english": "Magcargo", + "japanese": "マグカルゴ", + "chinese": "熔岩蜗牛" + }, + "type": [ + "Fire", + "Rock" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 120, + "Sp. Attack": 90, + "Sp. Defense": 80, + "Speed": 30 + } + }, + { + "id": 220, + "name": { + "english": "Swinub", + "japanese": "ウリムー", + "chinese": "小山猪" + }, + "type": [ + "Ice", + "Ground" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 220, + "name": { + "english": "Swinub", + "japanese": "ウリムー", + "chinese": "小山猪" + }, + "type": [ + "Ice", + "Ground" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 221, + "name": { + "english": "Piloswine", + "japanese": "イノムー", + "chinese": "长毛猪" + }, + "type": [ + "Ice", + "Ground" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 221, + "name": { + "english": "Piloswine", + "japanese": "イノムー", + "chinese": "长毛猪" + }, + "type": [ + "Ice", + "Ground" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 222, + "name": { + "english": "Corsola", + "japanese": "サニーゴ", + "chinese": "太阳珊瑚" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 65, + "Attack": 55, + "Defense": 95, + "Sp. Attack": 65, + "Sp. Defense": 95, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 222, + "name": { + "english": "Corsola", + "japanese": "サニーゴ", + "chinese": "太阳珊瑚" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 55, + "Defense": 100, + "Sp. Attack": 65, + "Sp. Defense": 100, + "Speed": 30 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 222, + "name": { + "english": "Corsola", + "japanese": "サニーゴ", + "chinese": "太阳珊瑚" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 65, + "Attack": 55, + "Defense": 95, + "Sp. Attack": 65, + "Sp. Defense": 95, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 223, + "name": { + "english": "Remoraid", + "japanese": "テッポウオ", + "chinese": "铁炮鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 35, + "Attack": 65, + "Defense": 35, + "Sp. Attack": 65, + "Sp. Defense": 35, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 223, + "name": { + "english": "Remoraid", + "japanese": "テッポウオ", + "chinese": "铁炮鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 35, + "Attack": 65, + "Defense": 35, + "Sp. Attack": 65, + "Sp. Defense": 35, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 224, + "name": { + "english": "Octillery", + "japanese": "オクタン", + "chinese": "章鱼桶" + }, + "type": [ + "Water" + ], + "base": { + "HP": 75, + "Attack": 105, + "Defense": 75, + "Sp. Attack": 105, + "Sp. Defense": 75, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 224, + "name": { + "english": "Octillery", + "japanese": "オクタン", + "chinese": "章鱼桶" + }, + "type": [ + "Water" + ], + "base": { + "HP": 75, + "Attack": 105, + "Defense": 75, + "Sp. Attack": 105, + "Sp. Defense": 75, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 225, + "name": { + "english": "Delibird", + "japanese": "デリバード", + "chinese": "信使鸟" + }, + "type": [ + "Ice", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 55, + "Defense": 45, + "Sp. Attack": 65, + "Sp. Defense": 45, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 225, + "name": { + "english": "Delibird", + "japanese": "デリバード", + "chinese": "信使鸟" + }, + "type": [ + "Ice", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 55, + "Defense": 45, + "Sp. Attack": 65, + "Sp. Defense": 45, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 226, + "name": { + "english": "Mantine", + "japanese": "マンタイン", + "chinese": "巨翅飞鱼" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 85, + "Attack": 40, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 140, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 226, + "name": { + "english": "Mantine", + "japanese": "マンタイン", + "chinese": "巨翅飞鱼" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 85, + "Attack": 40, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 140, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 227, + "name": { + "english": "Skarmory", + "japanese": "エアームド", + "chinese": "盔甲鸟" + }, + "type": [ + "Steel", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 80, + "Defense": 140, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 227, + "name": { + "english": "Skarmory", + "japanese": "エアームド", + "chinese": "盔甲鸟" + }, + "type": [ + "Steel", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 80, + "Defense": 140, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 228, + "name": { + "english": "Houndour", + "japanese": "デルビル", + "chinese": "戴鲁比" + }, + "type": [ + "Dark", + "Fire" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 30, + "Sp. Attack": 80, + "Sp. Defense": 50, + "Speed": 65 + } + }, + { + "id": 228, + "name": { + "english": "Houndour", + "japanese": "デルビル", + "chinese": "戴鲁比" + }, + "type": [ + "Dark", + "Fire" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 30, + "Sp. Attack": 80, + "Sp. Defense": 50, + "Speed": 65 + } + }, + { + "id": 229, + "name": { + "english": "Houndoom", + "japanese": "ヘルガー", + "chinese": "黑鲁加" + }, + "type": [ + "Dark", + "Fire" + ], + "base": { + "HP": 75, + "Attack": 90, + "Defense": 50, + "Sp. Attack": 110, + "Sp. Defense": 80, + "Speed": 95 + } + }, + { + "id": 229, + "name": { + "english": "Houndoom", + "japanese": "ヘルガー", + "chinese": "黑鲁加" + }, + "type": [ + "Dark", + "Fire" + ], + "base": { + "HP": 75, + "Attack": 90, + "Defense": 90, + "Sp. Attack": 140, + "Sp. Defense": 90, + "Speed": 115 + }, + "form": { + "key": "mega" + } + }, + { + "id": 229, + "name": { + "english": "Houndoom", + "japanese": "ヘルガー", + "chinese": "黑鲁加" + }, + "type": [ + "Dark", + "Fire" + ], + "base": { + "HP": 75, + "Attack": 90, + "Defense": 50, + "Sp. Attack": 110, + "Sp. Defense": 80, + "Speed": 95 + } + }, + { + "id": 230, + "name": { + "english": "Kingdra", + "japanese": "キングドラ", + "chinese": "刺龙王" + }, + "type": [ + "Water", + "Dragon" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 230, + "name": { + "english": "Kingdra", + "japanese": "キングドラ", + "chinese": "刺龙王" + }, + "type": [ + "Water", + "Dragon" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 231, + "name": { + "english": "Phanpy", + "japanese": "ゴマゾウ", + "chinese": "小小象" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 90, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 40 + } + }, + { + "id": 231, + "name": { + "english": "Phanpy", + "japanese": "ゴマゾウ", + "chinese": "小小象" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 90, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 40 + } + }, + { + "id": 232, + "name": { + "english": "Donphan", + "japanese": "ドンファン", + "chinese": "顿甲" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 90, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 50 + } + }, + { + "id": 232, + "name": { + "english": "Donphan", + "japanese": "ドンファン", + "chinese": "顿甲" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 90, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 50 + } + }, + { + "id": 233, + "name": { + "english": "Porygon2", + "japanese": "ポリゴン2", + "chinese": "多边兽Ⅱ" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 85, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 105, + "Sp. Defense": 95, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 233, + "name": { + "english": "Porygon2", + "japanese": "ポリゴン2", + "chinese": "多边兽Ⅱ" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 85, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 105, + "Sp. Defense": 95, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 234, + "name": { + "english": "Stantler", + "japanese": "オドシシ", + "chinese": "惊角鹿" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 73, + "Attack": 95, + "Defense": 62, + "Sp. Attack": 85, + "Sp. Defense": 65, + "Speed": 85 + } + }, + { + "id": 234, + "name": { + "english": "Stantler", + "japanese": "オドシシ", + "chinese": "惊角鹿" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 73, + "Attack": 95, + "Defense": 62, + "Sp. Attack": 85, + "Sp. Defense": 65, + "Speed": 85 + } + }, + { + "id": 235, + "name": { + "english": "Smeargle", + "japanese": "ドーブル", + "chinese": "图图犬" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 20, + "Defense": 35, + "Sp. Attack": 20, + "Sp. Defense": 45, + "Speed": 75 + } + }, + { + "id": 235, + "name": { + "english": "Smeargle", + "japanese": "ドーブル", + "chinese": "图图犬" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 20, + "Defense": 35, + "Sp. Attack": 20, + "Sp. Defense": 45, + "Speed": 75 + } + }, + { + "id": 236, + "name": { + "english": "Tyrogue", + "japanese": "バルキー", + "chinese": "无畏小子" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 35, + "Attack": 35, + "Defense": 35, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 236, + "name": { + "english": "Tyrogue", + "japanese": "バルキー", + "chinese": "无畏小子" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 35, + "Attack": 35, + "Defense": 35, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 237, + "name": { + "english": "Hitmontop", + "japanese": "カポエラー", + "chinese": "战舞郎" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 50, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 35, + "Sp. Defense": 110, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 237, + "name": { + "english": "Hitmontop", + "japanese": "カポエラー", + "chinese": "战舞郎" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 50, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 35, + "Sp. Defense": 110, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 238, + "name": { + "english": "Smoochum", + "japanese": "ムチュール", + "chinese": "迷唇娃" + }, + "type": [ + "Ice", + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 15, + "Sp. Attack": 85, + "Sp. Defense": 65, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 238, + "name": { + "english": "Smoochum", + "japanese": "ムチュール", + "chinese": "迷唇娃" + }, + "type": [ + "Ice", + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 15, + "Sp. Attack": 85, + "Sp. Defense": 65, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 239, + "name": { + "english": "Elekid", + "japanese": "エレキッド", + "chinese": "电击怪" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 45, + "Attack": 63, + "Defense": 37, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 239, + "name": { + "english": "Elekid", + "japanese": "エレキッド", + "chinese": "电击怪" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 45, + "Attack": 63, + "Defense": 37, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 240, + "name": { + "english": "Magby", + "japanese": "ブビィ", + "chinese": "鸭嘴宝宝" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 45, + "Attack": 75, + "Defense": 37, + "Sp. Attack": 70, + "Sp. Defense": 55, + "Speed": 83 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 240, + "name": { + "english": "Magby", + "japanese": "ブビィ", + "chinese": "鸭嘴宝宝" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 45, + "Attack": 75, + "Defense": 37, + "Sp. Attack": 70, + "Sp. Defense": 55, + "Speed": 83 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 241, + "name": { + "english": "Miltank", + "japanese": "ミルタンク", + "chinese": "大奶罐" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 95, + "Attack": 80, + "Defense": 105, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 241, + "name": { + "english": "Miltank", + "japanese": "ミルタンク", + "chinese": "大奶罐" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 95, + "Attack": 80, + "Defense": 105, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 242, + "name": { + "english": "Blissey", + "japanese": "ハピナス", + "chinese": "幸福蛋" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 255, + "Attack": 10, + "Defense": 10, + "Sp. Attack": 75, + "Sp. Defense": 135, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 242, + "name": { + "english": "Blissey", + "japanese": "ハピナス", + "chinese": "幸福蛋" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 255, + "Attack": 10, + "Defense": 10, + "Sp. Attack": 75, + "Sp. Defense": 135, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 243, + "name": { + "english": "Raikou", + "japanese": "ライコウ", + "chinese": "雷公" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 90, + "Attack": 85, + "Defense": 75, + "Sp. Attack": 115, + "Sp. Defense": 100, + "Speed": 115 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 243, + "name": { + "english": "Raikou", + "japanese": "ライコウ", + "chinese": "雷公" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 90, + "Attack": 85, + "Defense": 75, + "Sp. Attack": 115, + "Sp. Defense": 100, + "Speed": 115 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 244, + "name": { + "english": "Entei", + "japanese": "エンテイ", + "chinese": "炎帝" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 115, + "Attack": 115, + "Defense": 85, + "Sp. Attack": 90, + "Sp. Defense": 75, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 244, + "name": { + "english": "Entei", + "japanese": "エンテイ", + "chinese": "炎帝" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 115, + "Attack": 115, + "Defense": 85, + "Sp. Attack": 90, + "Sp. Defense": 75, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 245, + "name": { + "english": "Suicune", + "japanese": "スイクン", + "chinese": "水君" + }, + "type": [ + "Water" + ], + "base": { + "HP": 100, + "Attack": 75, + "Defense": 115, + "Sp. Attack": 90, + "Sp. Defense": 115, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 245, + "name": { + "english": "Suicune", + "japanese": "スイクン", + "chinese": "水君" + }, + "type": [ + "Water" + ], + "base": { + "HP": 100, + "Attack": 75, + "Defense": 115, + "Sp. Attack": 90, + "Sp. Defense": 115, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 246, + "name": { + "english": "Larvitar", + "japanese": "ヨーギラス", + "chinese": "幼基拉斯" + }, + "type": [ + "Rock", + "Ground" + ], + "base": { + "HP": 50, + "Attack": 64, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 50, + "Speed": 41 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 246, + "name": { + "english": "Larvitar", + "japanese": "ヨーギラス", + "chinese": "幼基拉斯" + }, + "type": [ + "Rock", + "Ground" + ], + "base": { + "HP": 50, + "Attack": 64, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 50, + "Speed": 41 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 247, + "name": { + "english": "Pupitar", + "japanese": "サナギラス", + "chinese": "沙基拉斯" + }, + "type": [ + "Rock", + "Ground" + ], + "base": { + "HP": 70, + "Attack": 84, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 51 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 247, + "name": { + "english": "Pupitar", + "japanese": "サナギラス", + "chinese": "沙基拉斯" + }, + "type": [ + "Rock", + "Ground" + ], + "base": { + "HP": 70, + "Attack": 84, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 51 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 248, + "name": { + "english": "Tyranitar", + "japanese": "バンギラス", + "chinese": "班基拉斯" + }, + "type": [ + "Rock", + "Dark" + ], + "base": { + "HP": 100, + "Attack": 134, + "Defense": 110, + "Sp. Attack": 95, + "Sp. Defense": 100, + "Speed": 61 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 248, + "name": { + "english": "Tyranitar", + "japanese": "バンギラス", + "chinese": "班基拉斯" + }, + "type": [ + "Rock", + "Dark" + ], + "base": { + "HP": 100, + "Attack": 164, + "Defense": 150, + "Sp. Attack": 95, + "Sp. Defense": 120, + "Speed": 71 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 248, + "name": { + "english": "Tyranitar", + "japanese": "バンギラス", + "chinese": "班基拉斯" + }, + "type": [ + "Rock", + "Dark" + ], + "base": { + "HP": 100, + "Attack": 134, + "Defense": 110, + "Sp. Attack": 95, + "Sp. Defense": 100, + "Speed": 61 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 249, + "name": { + "english": "Lugia", + "japanese": "ルギア", + "chinese": "洛奇亚" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 106, + "Attack": 90, + "Defense": 130, + "Sp. Attack": 90, + "Sp. Defense": 154, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 249, + "name": { + "english": "Lugia", + "japanese": "ルギア", + "chinese": "洛奇亚" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 106, + "Attack": 90, + "Defense": 130, + "Sp. Attack": 90, + "Sp. Defense": 154, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 250, + "name": { + "english": "Ho-Oh", + "japanese": "ホウオウ", + "chinese": "凤王" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 106, + "Attack": 130, + "Defense": 90, + "Sp. Attack": 110, + "Sp. Defense": 154, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 250, + "name": { + "english": "Ho-Oh", + "japanese": "ホウオウ", + "chinese": "凤王" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 106, + "Attack": 130, + "Defense": 90, + "Sp. Attack": 110, + "Sp. Defense": 154, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 251, + "name": { + "english": "Celebi", + "japanese": "セレビィ", + "chinese": "时拉比" + }, + "type": [ + "Psychic", + "Grass" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 251, + "name": { + "english": "Celebi", + "japanese": "セレビィ", + "chinese": "时拉比" + }, + "type": [ + "Psychic", + "Grass" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 252, + "name": { + "english": "Treecko", + "japanese": "キモリ", + "chinese": "木守宫" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 40, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 252, + "name": { + "english": "Treecko", + "japanese": "キモリ", + "chinese": "木守宫" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 40, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 253, + "name": { + "english": "Grovyle", + "japanese": "ジュプトル", + "chinese": "森林蜥蜴" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 45, + "Sp. Attack": 85, + "Sp. Defense": 65, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 253, + "name": { + "english": "Grovyle", + "japanese": "ジュプトル", + "chinese": "森林蜥蜴" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 45, + "Sp. Attack": 85, + "Sp. Defense": 65, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 254, + "name": { + "english": "Sceptile", + "japanese": "ジュカイン", + "chinese": "蜥蜴王" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 70, + "Attack": 85, + "Defense": 65, + "Sp. Attack": 105, + "Sp. Defense": 85, + "Speed": 120 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 254, + "name": { + "english": "Sceptile", + "japanese": "ジュカイン", + "chinese": "蜥蜴王" + }, + "type": [ + "Grass", + "Dragon" + ], + "base": { + "HP": 70, + "Attack": 110, + "Defense": 75, + "Sp. Attack": 145, + "Sp. Defense": 85, + "Speed": 145 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 254, + "name": { + "english": "Sceptile", + "japanese": "ジュカイン", + "chinese": "蜥蜴王" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 70, + "Attack": 85, + "Defense": 65, + "Sp. Attack": 105, + "Sp. Defense": 85, + "Speed": 120 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 255, + "name": { + "english": "Torchic", + "japanese": "アチャモ", + "chinese": "火稚鸡" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 70, + "Sp. Defense": 50, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 255, + "name": { + "english": "Torchic", + "japanese": "アチャモ", + "chinese": "火稚鸡" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 70, + "Sp. Defense": 50, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 256, + "name": { + "english": "Combusken", + "japanese": "ワカシャモ", + "chinese": "力壮鸡" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 60, + "Sp. Attack": 85, + "Sp. Defense": 60, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 256, + "name": { + "english": "Combusken", + "japanese": "ワカシャモ", + "chinese": "力壮鸡" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 60, + "Sp. Attack": 85, + "Sp. Defense": 60, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 257, + "name": { + "english": "Blaziken", + "japanese": "バシャーモ", + "chinese": "火焰鸡" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 80, + "Attack": 120, + "Defense": 70, + "Sp. Attack": 110, + "Sp. Defense": 70, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 257, + "name": { + "english": "Blaziken", + "japanese": "バシャーモ", + "chinese": "火焰鸡" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 80, + "Attack": 160, + "Defense": 80, + "Sp. Attack": 130, + "Sp. Defense": 80, + "Speed": 100 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 257, + "name": { + "english": "Blaziken", + "japanese": "バシャーモ", + "chinese": "火焰鸡" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 80, + "Attack": 120, + "Defense": 70, + "Sp. Attack": 110, + "Sp. Defense": 70, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 258, + "name": { + "english": "Mudkip", + "japanese": "ミズゴロウ", + "chinese": "水跃鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 70, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 258, + "name": { + "english": "Mudkip", + "japanese": "ミズゴロウ", + "chinese": "水跃鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 70, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 259, + "name": { + "english": "Marshtomp", + "japanese": "ヌマクロー", + "chinese": "沼跃鱼" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 70, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 259, + "name": { + "english": "Marshtomp", + "japanese": "ヌマクロー", + "chinese": "沼跃鱼" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 70, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 260, + "name": { + "english": "Swampert", + "japanese": "ラグラージ", + "chinese": "巨沼怪" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 100, + "Attack": 110, + "Defense": 90, + "Sp. Attack": 85, + "Sp. Defense": 90, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 260, + "name": { + "english": "Swampert", + "japanese": "ラグラージ", + "chinese": "巨沼怪" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 100, + "Attack": 150, + "Defense": 110, + "Sp. Attack": 95, + "Sp. Defense": 110, + "Speed": 70 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 260, + "name": { + "english": "Swampert", + "japanese": "ラグラージ", + "chinese": "巨沼怪" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 100, + "Attack": 110, + "Defense": 90, + "Sp. Attack": 85, + "Sp. Defense": 90, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 261, + "name": { + "english": "Poochyena", + "japanese": "ポチエナ", + "chinese": "土狼犬" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 35, + "Attack": 55, + "Defense": 35, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 35 + } + }, + { + "id": 261, + "name": { + "english": "Poochyena", + "japanese": "ポチエナ", + "chinese": "土狼犬" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 35, + "Attack": 55, + "Defense": 35, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 35 + } + }, + { + "id": 262, + "name": { + "english": "Mightyena", + "japanese": "グラエナ", + "chinese": "大狼犬" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 70 + } + }, + { + "id": 262, + "name": { + "english": "Mightyena", + "japanese": "グラエナ", + "chinese": "大狼犬" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 70 + } + }, + { + "id": 263, + "name": { + "english": "Zigzagoon", + "japanese": "ジグザグマ", + "chinese": "蛇纹熊" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 38, + "Attack": 30, + "Defense": 41, + "Sp. Attack": 30, + "Sp. Defense": 41, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 263, + "name": { + "english": "Zigzagoon", + "japanese": "ジグザグマ", + "chinese": "蛇纹熊" + }, + "type": [ + "Dark", + "Normal" + ], + "base": { + "HP": 38, + "Attack": 30, + "Defense": 41, + "Sp. Attack": 30, + "Sp. Defense": 41, + "Speed": 60 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 263, + "name": { + "english": "Zigzagoon", + "japanese": "ジグザグマ", + "chinese": "蛇纹熊" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 38, + "Attack": 30, + "Defense": 41, + "Sp. Attack": 30, + "Sp. Defense": 41, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 264, + "name": { + "english": "Linoone", + "japanese": "マッスグマ", + "chinese": "直冲熊" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 78, + "Attack": 70, + "Defense": 61, + "Sp. Attack": 50, + "Sp. Defense": 61, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 264, + "name": { + "english": "Linoone", + "japanese": "マッスグマ", + "chinese": "直冲熊" + }, + "type": [ + "Dark", + "Normal" + ], + "base": { + "HP": 78, + "Attack": 70, + "Defense": 61, + "Sp. Attack": 50, + "Sp. Defense": 61, + "Speed": 100 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 264, + "name": { + "english": "Linoone", + "japanese": "マッスグマ", + "chinese": "直冲熊" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 78, + "Attack": 70, + "Defense": 61, + "Sp. Attack": 50, + "Sp. Defense": 61, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 265, + "name": { + "english": "Wurmple", + "japanese": "ケムッソ", + "chinese": "刺尾虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 45, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 20 + } + }, + { + "id": 265, + "name": { + "english": "Wurmple", + "japanese": "ケムッソ", + "chinese": "刺尾虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 45, + "Attack": 45, + "Defense": 35, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 20 + } + }, + { + "id": 266, + "name": { + "english": "Silcoon", + "japanese": "カラサリス", + "chinese": "甲壳茧" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 35, + "Defense": 55, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + } + }, + { + "id": 266, + "name": { + "english": "Silcoon", + "japanese": "カラサリス", + "chinese": "甲壳茧" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 35, + "Defense": 55, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + } + }, + { + "id": 267, + "name": { + "english": "Beautifly", + "japanese": "アゲハント", + "chinese": "狩猎凤蝶" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 70, + "Defense": 50, + "Sp. Attack": 100, + "Sp. Defense": 50, + "Speed": 65 + } + }, + { + "id": 267, + "name": { + "english": "Beautifly", + "japanese": "アゲハント", + "chinese": "狩猎凤蝶" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 70, + "Defense": 50, + "Sp. Attack": 100, + "Sp. Defense": 50, + "Speed": 65 + } + }, + { + "id": 268, + "name": { + "english": "Cascoon", + "japanese": "マユルド", + "chinese": "盾甲茧" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 35, + "Defense": 55, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + } + }, + { + "id": 268, + "name": { + "english": "Cascoon", + "japanese": "マユルド", + "chinese": "盾甲茧" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 35, + "Defense": 55, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + } + }, + { + "id": 269, + "name": { + "english": "Dustox", + "japanese": "ドクケイル", + "chinese": "毒粉蛾" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 70, + "Sp. Attack": 50, + "Sp. Defense": 90, + "Speed": 65 + } + }, + { + "id": 269, + "name": { + "english": "Dustox", + "japanese": "ドクケイル", + "chinese": "毒粉蛾" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 70, + "Sp. Attack": 50, + "Sp. Defense": 90, + "Speed": 65 + } + }, + { + "id": 270, + "name": { + "english": "Lotad", + "japanese": "ハスボー", + "chinese": "莲叶童子" + }, + "type": [ + "Water", + "Grass" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 270, + "name": { + "english": "Lotad", + "japanese": "ハスボー", + "chinese": "莲叶童子" + }, + "type": [ + "Water", + "Grass" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 271, + "name": { + "english": "Lombre", + "japanese": "ハスブレロ", + "chinese": "莲帽小童" + }, + "type": [ + "Water", + "Grass" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 271, + "name": { + "english": "Lombre", + "japanese": "ハスブレロ", + "chinese": "莲帽小童" + }, + "type": [ + "Water", + "Grass" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 272, + "name": { + "english": "Ludicolo", + "japanese": "ルンパッパ", + "chinese": "乐天河童" + }, + "type": [ + "Water", + "Grass" + ], + "base": { + "HP": 80, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 272, + "name": { + "english": "Ludicolo", + "japanese": "ルンパッパ", + "chinese": "乐天河童" + }, + "type": [ + "Water", + "Grass" + ], + "base": { + "HP": 80, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 273, + "name": { + "english": "Seedot", + "japanese": "タネボー", + "chinese": "橡实果" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 40, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 273, + "name": { + "english": "Seedot", + "japanese": "タネボー", + "chinese": "橡实果" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 40, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 274, + "name": { + "english": "Nuzleaf", + "japanese": "コノハナ", + "chinese": "长鼻叶" + }, + "type": [ + "Grass", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 60, + "Sp. Defense": 40, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 274, + "name": { + "english": "Nuzleaf", + "japanese": "コノハナ", + "chinese": "长鼻叶" + }, + "type": [ + "Grass", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 60, + "Sp. Defense": 40, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 275, + "name": { + "english": "Shiftry", + "japanese": "ダーテング", + "chinese": "狡猾天狗" + }, + "type": [ + "Grass", + "Dark" + ], + "base": { + "HP": 90, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 90, + "Sp. Defense": 60, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 275, + "name": { + "english": "Shiftry", + "japanese": "ダーテング", + "chinese": "狡猾天狗" + }, + "type": [ + "Grass", + "Dark" + ], + "base": { + "HP": 90, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 90, + "Sp. Defense": 60, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 276, + "name": { + "english": "Taillow", + "japanese": "スバメ", + "chinese": "傲骨燕" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 85 + } + }, + { + "id": 276, + "name": { + "english": "Taillow", + "japanese": "スバメ", + "chinese": "傲骨燕" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 85 + } + }, + { + "id": 277, + "name": { + "english": "Swellow", + "japanese": "オオスバメ", + "chinese": "大王燕" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 60, + "Sp. Attack": 75, + "Sp. Defense": 50, + "Speed": 125 + } + }, + { + "id": 277, + "name": { + "english": "Swellow", + "japanese": "オオスバメ", + "chinese": "大王燕" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 60, + "Sp. Attack": 75, + "Sp. Defense": 50, + "Speed": 125 + } + }, + { + "id": 278, + "name": { + "english": "Wingull", + "japanese": "キャモメ", + "chinese": "长翅鸥" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 55, + "Sp. Defense": 30, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 278, + "name": { + "english": "Wingull", + "japanese": "キャモメ", + "chinese": "长翅鸥" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 30, + "Sp. Attack": 55, + "Sp. Defense": 30, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 279, + "name": { + "english": "Pelipper", + "japanese": "ペリッパー", + "chinese": "大嘴鸥" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 100, + "Sp. Attack": 95, + "Sp. Defense": 70, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 279, + "name": { + "english": "Pelipper", + "japanese": "ペリッパー", + "chinese": "大嘴鸥" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 100, + "Sp. Attack": 95, + "Sp. Defense": 70, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 280, + "name": { + "english": "Ralts", + "japanese": "ラルトス", + "chinese": "拉鲁拉丝" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 28, + "Attack": 25, + "Defense": 25, + "Sp. Attack": 45, + "Sp. Defense": 35, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 280, + "name": { + "english": "Ralts", + "japanese": "ラルトス", + "chinese": "拉鲁拉丝" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 28, + "Attack": 25, + "Defense": 25, + "Sp. Attack": 45, + "Sp. Defense": 35, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 281, + "name": { + "english": "Kirlia", + "japanese": "キルリア", + "chinese": "奇鲁莉安" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 38, + "Attack": 35, + "Defense": 35, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 281, + "name": { + "english": "Kirlia", + "japanese": "キルリア", + "chinese": "奇鲁莉安" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 38, + "Attack": 35, + "Defense": 35, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 282, + "name": { + "english": "Gardevoir", + "japanese": "サーナイト", + "chinese": "沙奈朵" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 68, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 125, + "Sp. Defense": 115, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 282, + "name": { + "english": "Gardevoir", + "japanese": "サーナイト", + "chinese": "沙奈朵" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 68, + "Attack": 85, + "Defense": 65, + "Sp. Attack": 165, + "Sp. Defense": 135, + "Speed": 100 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 282, + "name": { + "english": "Gardevoir", + "japanese": "サーナイト", + "chinese": "沙奈朵" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 68, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 125, + "Sp. Defense": 115, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 283, + "name": { + "english": "Surskit", + "japanese": "アメタマ", + "chinese": "溜溜糖球" + }, + "type": [ + "Bug", + "Water" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 32, + "Sp. Attack": 50, + "Sp. Defense": 52, + "Speed": 65 + } + }, + { + "id": 283, + "name": { + "english": "Surskit", + "japanese": "アメタマ", + "chinese": "溜溜糖球" + }, + "type": [ + "Bug", + "Water" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 32, + "Sp. Attack": 50, + "Sp. Defense": 52, + "Speed": 65 + } + }, + { + "id": 284, + "name": { + "english": "Masquerain", + "japanese": "アメモース", + "chinese": "雨翅蛾" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 60, + "Defense": 62, + "Sp. Attack": 100, + "Sp. Defense": 82, + "Speed": 80 + } + }, + { + "id": 284, + "name": { + "english": "Masquerain", + "japanese": "アメモース", + "chinese": "雨翅蛾" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 60, + "Defense": 62, + "Sp. Attack": 100, + "Sp. Defense": 82, + "Speed": 80 + } + }, + { + "id": 285, + "name": { + "english": "Shroomish", + "japanese": "キノココ", + "chinese": "蘑蘑菇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 60, + "Attack": 40, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 35 + } + }, + { + "id": 285, + "name": { + "english": "Shroomish", + "japanese": "キノココ", + "chinese": "蘑蘑菇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 60, + "Attack": 40, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 35 + } + }, + { + "id": 286, + "name": { + "english": "Breloom", + "japanese": "キノガッサ", + "chinese": "斗笠菇" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 60, + "Attack": 130, + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 70 + } + }, + { + "id": 286, + "name": { + "english": "Breloom", + "japanese": "キノガッサ", + "chinese": "斗笠菇" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 60, + "Attack": 130, + "Defense": 80, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 70 + } + }, + { + "id": 287, + "name": { + "english": "Slakoth", + "japanese": "ナマケロ", + "chinese": "懒人獭" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 30 + } + }, + { + "id": 287, + "name": { + "english": "Slakoth", + "japanese": "ナマケロ", + "chinese": "懒人獭" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 30 + } + }, + { + "id": 288, + "name": { + "english": "Vigoroth", + "japanese": "ヤルキモノ", + "chinese": "过动猿" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 90 + } + }, + { + "id": 288, + "name": { + "english": "Vigoroth", + "japanese": "ヤルキモノ", + "chinese": "过动猿" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 90 + } + }, + { + "id": 289, + "name": { + "english": "Slaking", + "japanese": "ケッキング", + "chinese": "请假王" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 150, + "Attack": 160, + "Defense": 100, + "Sp. Attack": 95, + "Sp. Defense": 65, + "Speed": 100 + } + }, + { + "id": 289, + "name": { + "english": "Slaking", + "japanese": "ケッキング", + "chinese": "请假王" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 150, + "Attack": 160, + "Defense": 100, + "Sp. Attack": 95, + "Sp. Defense": 65, + "Speed": 100 + } + }, + { + "id": 290, + "name": { + "english": "Nincada", + "japanese": "ツチニン", + "chinese": "土居忍士" + }, + "type": [ + "Bug", + "Ground" + ], + "base": { + "HP": 31, + "Attack": 45, + "Defense": 90, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 290, + "name": { + "english": "Nincada", + "japanese": "ツチニン", + "chinese": "土居忍士" + }, + "type": [ + "Bug", + "Ground" + ], + "base": { + "HP": 31, + "Attack": 45, + "Defense": 90, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 291, + "name": { + "english": "Ninjask", + "japanese": "テッカニン", + "chinese": "铁面忍者" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 61, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 160 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 291, + "name": { + "english": "Ninjask", + "japanese": "テッカニン", + "chinese": "铁面忍者" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 61, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 160 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 292, + "name": { + "english": "Shedinja", + "japanese": "ヌケニン", + "chinese": "脱壳忍者" + }, + "type": [ + "Bug", + "Ghost" + ], + "base": { + "HP": 1, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 292, + "name": { + "english": "Shedinja", + "japanese": "ヌケニン", + "chinese": "脱壳忍者" + }, + "type": [ + "Bug", + "Ghost" + ], + "base": { + "HP": 1, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 293, + "name": { + "english": "Whismur", + "japanese": "ゴニョニョ", + "chinese": "咕妞妞" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 64, + "Attack": 51, + "Defense": 23, + "Sp. Attack": 51, + "Sp. Defense": 23, + "Speed": 28 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 293, + "name": { + "english": "Whismur", + "japanese": "ゴニョニョ", + "chinese": "咕妞妞" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 64, + "Attack": 51, + "Defense": 23, + "Sp. Attack": 51, + "Sp. Defense": 23, + "Speed": 28 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 294, + "name": { + "english": "Loudred", + "japanese": "ドゴーム", + "chinese": "吼爆弹" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 84, + "Attack": 71, + "Defense": 43, + "Sp. Attack": 71, + "Sp. Defense": 43, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 294, + "name": { + "english": "Loudred", + "japanese": "ドゴーム", + "chinese": "吼爆弹" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 84, + "Attack": 71, + "Defense": 43, + "Sp. Attack": 71, + "Sp. Defense": 43, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 295, + "name": { + "english": "Exploud", + "japanese": "バクオング", + "chinese": "爆音怪" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 104, + "Attack": 91, + "Defense": 63, + "Sp. Attack": 91, + "Sp. Defense": 73, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 295, + "name": { + "english": "Exploud", + "japanese": "バクオング", + "chinese": "爆音怪" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 104, + "Attack": 91, + "Defense": 63, + "Sp. Attack": 91, + "Sp. Defense": 73, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 296, + "name": { + "english": "Makuhita", + "japanese": "マクノシタ", + "chinese": "幕下力士" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 72, + "Attack": 60, + "Defense": 30, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 25 + } + }, + { + "id": 296, + "name": { + "english": "Makuhita", + "japanese": "マクノシタ", + "chinese": "幕下力士" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 72, + "Attack": 60, + "Defense": 30, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 25 + } + }, + { + "id": 297, + "name": { + "english": "Hariyama", + "japanese": "ハリテヤマ", + "chinese": "铁掌力士" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 144, + "Attack": 120, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 50 + } + }, + { + "id": 297, + "name": { + "english": "Hariyama", + "japanese": "ハリテヤマ", + "chinese": "铁掌力士" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 144, + "Attack": 120, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 50 + } + }, + { + "id": 298, + "name": { + "english": "Azurill", + "japanese": "ルリリ", + "chinese": "露力丽" + }, + "type": [ + "Normal", + "Fairy" + ], + "base": { + "HP": 50, + "Attack": 20, + "Defense": 40, + "Sp. Attack": 20, + "Sp. Defense": 40, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 298, + "name": { + "english": "Azurill", + "japanese": "ルリリ", + "chinese": "露力丽" + }, + "type": [ + "Normal", + "Fairy" + ], + "base": { + "HP": 50, + "Attack": 20, + "Defense": 40, + "Sp. Attack": 20, + "Sp. Defense": 40, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 299, + "name": { + "english": "Nosepass", + "japanese": "ノズパス", + "chinese": "朝北鼻" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 30, + "Attack": 45, + "Defense": 135, + "Sp. Attack": 45, + "Sp. Defense": 90, + "Speed": 30 + } + }, + { + "id": 299, + "name": { + "english": "Nosepass", + "japanese": "ノズパス", + "chinese": "朝北鼻" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 30, + "Attack": 45, + "Defense": 135, + "Sp. Attack": 45, + "Sp. Defense": 90, + "Speed": 30 + } + }, + { + "id": 300, + "name": { + "english": "Skitty", + "japanese": "エネコ", + "chinese": "向尾喵" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 50, + "Attack": 45, + "Defense": 45, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 50 + } + }, + { + "id": 300, + "name": { + "english": "Skitty", + "japanese": "エネコ", + "chinese": "向尾喵" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 50, + "Attack": 45, + "Defense": 45, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 50 + } + }, + { + "id": 301, + "name": { + "english": "Delcatty", + "japanese": "エネコロロ", + "chinese": "优雅猫" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 70, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 90 + } + }, + { + "id": 301, + "name": { + "english": "Delcatty", + "japanese": "エネコロロ", + "chinese": "优雅猫" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 70, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 90 + } + }, + { + "id": 302, + "name": { + "english": "Sableye", + "japanese": "ヤミラミ", + "chinese": "勾魂眼" + }, + "type": [ + "Dark", + "Ghost" + ], + "base": { + "HP": 50, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 302, + "name": { + "english": "Sableye", + "japanese": "ヤミラミ", + "chinese": "勾魂眼" + }, + "type": [ + "Dark", + "Ghost" + ], + "base": { + "HP": 50, + "Attack": 85, + "Defense": 125, + "Sp. Attack": 85, + "Sp. Defense": 115, + "Speed": 20 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 302, + "name": { + "english": "Sableye", + "japanese": "ヤミラミ", + "chinese": "勾魂眼" + }, + "type": [ + "Dark", + "Ghost" + ], + "base": { + "HP": 50, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 303, + "name": { + "english": "Mawile", + "japanese": "クチート", + "chinese": "大嘴娃" + }, + "type": [ + "Steel", + "Fairy" + ], + "base": { + "HP": 50, + "Attack": 85, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 303, + "name": { + "english": "Mawile", + "japanese": "クチート", + "chinese": "大嘴娃" + }, + "type": [ + "Steel", + "Fairy" + ], + "base": { + "HP": 50, + "Attack": 105, + "Defense": 125, + "Sp. Attack": 55, + "Sp. Defense": 95, + "Speed": 50 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 303, + "name": { + "english": "Mawile", + "japanese": "クチート", + "chinese": "大嘴娃" + }, + "type": [ + "Steel", + "Fairy" + ], + "base": { + "HP": 50, + "Attack": 85, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 304, + "name": { + "english": "Aron", + "japanese": "ココドラ", + "chinese": "可可多拉" + }, + "type": [ + "Steel", + "Rock" + ], + "base": { + "HP": 50, + "Attack": 70, + "Defense": 100, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 304, + "name": { + "english": "Aron", + "japanese": "ココドラ", + "chinese": "可可多拉" + }, + "type": [ + "Steel", + "Rock" + ], + "base": { + "HP": 50, + "Attack": 70, + "Defense": 100, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 305, + "name": { + "english": "Lairon", + "japanese": "コドラ", + "chinese": "可多拉" + }, + "type": [ + "Steel", + "Rock" + ], + "base": { + "HP": 60, + "Attack": 90, + "Defense": 140, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 305, + "name": { + "english": "Lairon", + "japanese": "コドラ", + "chinese": "可多拉" + }, + "type": [ + "Steel", + "Rock" + ], + "base": { + "HP": 60, + "Attack": 90, + "Defense": 140, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 306, + "name": { + "english": "Aggron", + "japanese": "ボスゴドラ", + "chinese": "波士可多拉" + }, + "type": [ + "Steel", + "Rock" + ], + "base": { + "HP": 70, + "Attack": 110, + "Defense": 180, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 306, + "name": { + "english": "Aggron", + "japanese": "ボスゴドラ", + "chinese": "波士可多拉" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 70, + "Attack": 140, + "Defense": 230, + "Sp. Attack": 60, + "Sp. Defense": 80, + "Speed": 50 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 306, + "name": { + "english": "Aggron", + "japanese": "ボスゴドラ", + "chinese": "波士可多拉" + }, + "type": [ + "Steel", + "Rock" + ], + "base": { + "HP": 70, + "Attack": 110, + "Defense": 180, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 307, + "name": { + "english": "Meditite", + "japanese": "アサナン", + "chinese": "玛沙那" + }, + "type": [ + "Fighting", + "Psychic" + ], + "base": { + "HP": 30, + "Attack": 40, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 55, + "Speed": 60 + } + }, + { + "id": 307, + "name": { + "english": "Meditite", + "japanese": "アサナン", + "chinese": "玛沙那" + }, + "type": [ + "Fighting", + "Psychic" + ], + "base": { + "HP": 30, + "Attack": 40, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 55, + "Speed": 60 + } + }, + { + "id": 308, + "name": { + "english": "Medicham", + "japanese": "チャーレム", + "chinese": "恰雷姆" + }, + "type": [ + "Fighting", + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 80 + } + }, + { + "id": 308, + "name": { + "english": "Medicham", + "japanese": "チャーレム", + "chinese": "恰雷姆" + }, + "type": [ + "Fighting", + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 100, + "Defense": 85, + "Sp. Attack": 80, + "Sp. Defense": 85, + "Speed": 100 + }, + "form": { + "key": "mega" + } + }, + { + "id": 308, + "name": { + "english": "Medicham", + "japanese": "チャーレム", + "chinese": "恰雷姆" + }, + "type": [ + "Fighting", + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 80 + } + }, + { + "id": 309, + "name": { + "english": "Electrike", + "japanese": "ラクライ", + "chinese": "落雷兽" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 40, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 65, + "Sp. Defense": 40, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 309, + "name": { + "english": "Electrike", + "japanese": "ラクライ", + "chinese": "落雷兽" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 40, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 65, + "Sp. Defense": 40, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 310, + "name": { + "english": "Manectric", + "japanese": "ライボルト", + "chinese": "雷电兽" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 70, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 105, + "Sp. Defense": 60, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 310, + "name": { + "english": "Manectric", + "japanese": "ライボルト", + "chinese": "雷电兽" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 70, + "Attack": 75, + "Defense": 80, + "Sp. Attack": 135, + "Sp. Defense": 80, + "Speed": 135 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 310, + "name": { + "english": "Manectric", + "japanese": "ライボルト", + "chinese": "雷电兽" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 70, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 105, + "Sp. Defense": 60, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 311, + "name": { + "english": "Plusle", + "japanese": "プラスル", + "chinese": "正电拍拍" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 95 + } + }, + { + "id": 311, + "name": { + "english": "Plusle", + "japanese": "プラスル", + "chinese": "正电拍拍" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 95 + } + }, + { + "id": 312, + "name": { + "english": "Minun", + "japanese": "マイナン", + "chinese": "负电拍拍" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 95 + } + }, + { + "id": 312, + "name": { + "english": "Minun", + "japanese": "マイナン", + "chinese": "负电拍拍" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 95 + } + }, + { + "id": 313, + "name": { + "english": "Volbeat", + "japanese": "バルビート", + "chinese": "电萤虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 65, + "Attack": 73, + "Defense": 75, + "Sp. Attack": 47, + "Sp. Defense": 85, + "Speed": 85 + } + }, + { + "id": 313, + "name": { + "english": "Volbeat", + "japanese": "バルビート", + "chinese": "电萤虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 65, + "Attack": 73, + "Defense": 75, + "Sp. Attack": 47, + "Sp. Defense": 85, + "Speed": 85 + } + }, + { + "id": 314, + "name": { + "english": "Illumise", + "japanese": "イルミーゼ", + "chinese": "甜甜萤" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 65, + "Attack": 47, + "Defense": 75, + "Sp. Attack": 73, + "Sp. Defense": 85, + "Speed": 85 + } + }, + { + "id": 314, + "name": { + "english": "Illumise", + "japanese": "イルミーゼ", + "chinese": "甜甜萤" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 65, + "Attack": 47, + "Defense": 75, + "Sp. Attack": 73, + "Sp. Defense": 85, + "Speed": 85 + } + }, + { + "id": 315, + "name": { + "english": "Roselia", + "japanese": "ロゼリア", + "chinese": "毒蔷薇" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 50, + "Attack": 60, + "Defense": 45, + "Sp. Attack": 100, + "Sp. Defense": 80, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 315, + "name": { + "english": "Roselia", + "japanese": "ロゼリア", + "chinese": "毒蔷薇" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 50, + "Attack": 60, + "Defense": 45, + "Sp. Attack": 100, + "Sp. Defense": 80, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 316, + "name": { + "english": "Gulpin", + "japanese": "ゴクリン", + "chinese": "溶食兽" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 70, + "Attack": 43, + "Defense": 53, + "Sp. Attack": 43, + "Sp. Defense": 53, + "Speed": 40 + } + }, + { + "id": 316, + "name": { + "english": "Gulpin", + "japanese": "ゴクリン", + "chinese": "溶食兽" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 70, + "Attack": 43, + "Defense": 53, + "Sp. Attack": 43, + "Sp. Defense": 53, + "Speed": 40 + } + }, + { + "id": 317, + "name": { + "english": "Swalot", + "japanese": "マルノーム", + "chinese": "吞食兽" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 100, + "Attack": 73, + "Defense": 83, + "Sp. Attack": 73, + "Sp. Defense": 83, + "Speed": 55 + } + }, + { + "id": 317, + "name": { + "english": "Swalot", + "japanese": "マルノーム", + "chinese": "吞食兽" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 100, + "Attack": 73, + "Defense": 83, + "Sp. Attack": 73, + "Sp. Defense": 83, + "Speed": 55 + } + }, + { + "id": 318, + "name": { + "english": "Carvanha", + "japanese": "キバニア", + "chinese": "利牙鱼" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 45, + "Attack": 90, + "Defense": 20, + "Sp. Attack": 65, + "Sp. Defense": 20, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 318, + "name": { + "english": "Carvanha", + "japanese": "キバニア", + "chinese": "利牙鱼" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 45, + "Attack": 90, + "Defense": 20, + "Sp. Attack": 65, + "Sp. Defense": 20, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 319, + "name": { + "english": "Sharpedo", + "japanese": "サメハダー", + "chinese": "巨牙鲨" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 120, + "Defense": 40, + "Sp. Attack": 95, + "Sp. Defense": 40, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 319, + "name": { + "english": "Sharpedo", + "japanese": "サメハダー", + "chinese": "巨牙鲨" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 140, + "Defense": 70, + "Sp. Attack": 110, + "Sp. Defense": 65, + "Speed": 105 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 319, + "name": { + "english": "Sharpedo", + "japanese": "サメハダー", + "chinese": "巨牙鲨" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 120, + "Defense": 40, + "Sp. Attack": 95, + "Sp. Defense": 40, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 320, + "name": { + "english": "Wailmer", + "japanese": "ホエルコ", + "chinese": "吼吼鲸" + }, + "type": [ + "Water" + ], + "base": { + "HP": 130, + "Attack": 70, + "Defense": 35, + "Sp. Attack": 70, + "Sp. Defense": 35, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 320, + "name": { + "english": "Wailmer", + "japanese": "ホエルコ", + "chinese": "吼吼鲸" + }, + "type": [ + "Water" + ], + "base": { + "HP": 130, + "Attack": 70, + "Defense": 35, + "Sp. Attack": 70, + "Sp. Defense": 35, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 321, + "name": { + "english": "Wailord", + "japanese": "ホエルオー", + "chinese": "吼鲸王" + }, + "type": [ + "Water" + ], + "base": { + "HP": 170, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 90, + "Sp. Defense": 45, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 321, + "name": { + "english": "Wailord", + "japanese": "ホエルオー", + "chinese": "吼鲸王" + }, + "type": [ + "Water" + ], + "base": { + "HP": 170, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 90, + "Sp. Defense": 45, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 322, + "name": { + "english": "Numel", + "japanese": "ドンメル", + "chinese": "呆火驼" + }, + "type": [ + "Fire", + "Ground" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 65, + "Sp. Defense": 45, + "Speed": 35 + } + }, + { + "id": 322, + "name": { + "english": "Numel", + "japanese": "ドンメル", + "chinese": "呆火驼" + }, + "type": [ + "Fire", + "Ground" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 65, + "Sp. Defense": 45, + "Speed": 35 + } + }, + { + "id": 323, + "name": { + "english": "Camerupt", + "japanese": "バクーダ", + "chinese": "喷火驼" + }, + "type": [ + "Fire", + "Ground" + ], + "base": { + "HP": 70, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 105, + "Sp. Defense": 75, + "Speed": 40 + } + }, + { + "id": 323, + "name": { + "english": "Camerupt", + "japanese": "バクーダ", + "chinese": "喷火驼" + }, + "type": [ + "Fire", + "Ground" + ], + "base": { + "HP": 70, + "Attack": 120, + "Defense": 100, + "Sp. Attack": 145, + "Sp. Defense": 105, + "Speed": 20 + }, + "form": { + "key": "mega" + } + }, + { + "id": 323, + "name": { + "english": "Camerupt", + "japanese": "バクーダ", + "chinese": "喷火驼" + }, + "type": [ + "Fire", + "Ground" + ], + "base": { + "HP": 70, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 105, + "Sp. Defense": 75, + "Speed": 40 + } + }, + { + "id": 324, + "name": { + "english": "Torkoal", + "japanese": "コータス", + "chinese": "煤炭龟" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 70, + "Attack": 85, + "Defense": 140, + "Sp. Attack": 85, + "Sp. Defense": 70, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 324, + "name": { + "english": "Torkoal", + "japanese": "コータス", + "chinese": "煤炭龟" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 70, + "Attack": 85, + "Defense": 140, + "Sp. Attack": 85, + "Sp. Defense": 70, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 325, + "name": { + "english": "Spoink", + "japanese": "バネブー", + "chinese": "跳跳猪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 25, + "Defense": 35, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 60 + } + }, + { + "id": 325, + "name": { + "english": "Spoink", + "japanese": "バネブー", + "chinese": "跳跳猪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 25, + "Defense": 35, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 60 + } + }, + { + "id": 326, + "name": { + "english": "Grumpig", + "japanese": "ブーピッグ", + "chinese": "噗噗猪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 45, + "Defense": 65, + "Sp. Attack": 90, + "Sp. Defense": 110, + "Speed": 80 + } + }, + { + "id": 326, + "name": { + "english": "Grumpig", + "japanese": "ブーピッグ", + "chinese": "噗噗猪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 45, + "Defense": 65, + "Sp. Attack": 90, + "Sp. Defense": 110, + "Speed": 80 + } + }, + { + "id": 327, + "name": { + "english": "Spinda", + "japanese": "パッチール", + "chinese": "晃晃斑" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 60 + } + }, + { + "id": 327, + "name": { + "english": "Spinda", + "japanese": "パッチール", + "chinese": "晃晃斑" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 60 + } + }, + { + "id": 328, + "name": { + "english": "Trapinch", + "japanese": "ナックラー", + "chinese": "大颚蚁" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 45, + "Attack": 100, + "Defense": 45, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 10 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 328, + "name": { + "english": "Trapinch", + "japanese": "ナックラー", + "chinese": "大颚蚁" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 45, + "Attack": 100, + "Defense": 45, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 10 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 329, + "name": { + "english": "Vibrava", + "japanese": "ビブラーバ", + "chinese": "超音波幼虫" + }, + "type": [ + "Ground", + "Dragon" + ], + "base": { + "HP": 50, + "Attack": 70, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 329, + "name": { + "english": "Vibrava", + "japanese": "ビブラーバ", + "chinese": "超音波幼虫" + }, + "type": [ + "Ground", + "Dragon" + ], + "base": { + "HP": 50, + "Attack": 70, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 330, + "name": { + "english": "Flygon", + "japanese": "フライゴン", + "chinese": "沙漠蜻蜓" + }, + "type": [ + "Ground", + "Dragon" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 80, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 330, + "name": { + "english": "Flygon", + "japanese": "フライゴン", + "chinese": "沙漠蜻蜓" + }, + "type": [ + "Ground", + "Dragon" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 80, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 331, + "name": { + "english": "Cacnea", + "japanese": "サボネア", + "chinese": "刺球仙人掌" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 50, + "Attack": 85, + "Defense": 40, + "Sp. Attack": 85, + "Sp. Defense": 40, + "Speed": 35 + } + }, + { + "id": 331, + "name": { + "english": "Cacnea", + "japanese": "サボネア", + "chinese": "刺球仙人掌" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 50, + "Attack": 85, + "Defense": 40, + "Sp. Attack": 85, + "Sp. Defense": 40, + "Speed": 35 + } + }, + { + "id": 332, + "name": { + "english": "Cacturne", + "japanese": "ノクタス", + "chinese": "梦歌仙人掌" + }, + "type": [ + "Grass", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 115, + "Defense": 60, + "Sp. Attack": 115, + "Sp. Defense": 60, + "Speed": 55 + } + }, + { + "id": 332, + "name": { + "english": "Cacturne", + "japanese": "ノクタス", + "chinese": "梦歌仙人掌" + }, + "type": [ + "Grass", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 115, + "Defense": 60, + "Sp. Attack": 115, + "Sp. Defense": 60, + "Speed": 55 + } + }, + { + "id": 333, + "name": { + "english": "Swablu", + "japanese": "チルット", + "chinese": "青绵鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 40, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 75, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 333, + "name": { + "english": "Swablu", + "japanese": "チルット", + "chinese": "青绵鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 40, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 75, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 334, + "name": { + "english": "Altaria", + "japanese": "チルタリス", + "chinese": "七夕青鸟" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 70, + "Defense": 90, + "Sp. Attack": 70, + "Sp. Defense": 105, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 334, + "name": { + "english": "Altaria", + "japanese": "チルタリス", + "chinese": "七夕青鸟" + }, + "type": [ + "Dragon", + "Fairy" + ], + "base": { + "HP": 75, + "Attack": 110, + "Defense": 110, + "Sp. Attack": 110, + "Sp. Defense": 105, + "Speed": 80 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 334, + "name": { + "english": "Altaria", + "japanese": "チルタリス", + "chinese": "七夕青鸟" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 70, + "Defense": 90, + "Sp. Attack": 70, + "Sp. Defense": 105, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 335, + "name": { + "english": "Zangoose", + "japanese": "ザングース", + "chinese": "猫鼬斩" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 73, + "Attack": 115, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 90 + } + }, + { + "id": 335, + "name": { + "english": "Zangoose", + "japanese": "ザングース", + "chinese": "猫鼬斩" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 73, + "Attack": 115, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 90 + } + }, + { + "id": 336, + "name": { + "english": "Seviper", + "japanese": "ハブネーク", + "chinese": "饭匙蛇" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 73, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 100, + "Sp. Defense": 60, + "Speed": 65 + } + }, + { + "id": 336, + "name": { + "english": "Seviper", + "japanese": "ハブネーク", + "chinese": "饭匙蛇" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 73, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 100, + "Sp. Defense": 60, + "Speed": 65 + } + }, + { + "id": 337, + "name": { + "english": "Lunatone", + "japanese": "ルナトーン", + "chinese": "月石" + }, + "type": [ + "Rock", + "Psychic" + ], + "base": { + "HP": 90, + "Attack": 55, + "Defense": 65, + "Sp. Attack": 95, + "Sp. Defense": 85, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 337, + "name": { + "english": "Lunatone", + "japanese": "ルナトーン", + "chinese": "月石" + }, + "type": [ + "Rock", + "Psychic" + ], + "base": { + "HP": 90, + "Attack": 55, + "Defense": 65, + "Sp. Attack": 95, + "Sp. Defense": 85, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 338, + "name": { + "english": "Solrock", + "japanese": "ソルロック", + "chinese": "太阳岩" + }, + "type": [ + "Rock", + "Psychic" + ], + "base": { + "HP": 90, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 338, + "name": { + "english": "Solrock", + "japanese": "ソルロック", + "chinese": "太阳岩" + }, + "type": [ + "Rock", + "Psychic" + ], + "base": { + "HP": 90, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 339, + "name": { + "english": "Barboach", + "japanese": "ドジョッチ", + "chinese": "泥泥鳅" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 50, + "Attack": 48, + "Defense": 43, + "Sp. Attack": 46, + "Sp. Defense": 41, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 339, + "name": { + "english": "Barboach", + "japanese": "ドジョッチ", + "chinese": "泥泥鳅" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 50, + "Attack": 48, + "Defense": 43, + "Sp. Attack": 46, + "Sp. Defense": 41, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 340, + "name": { + "english": "Whiscash", + "japanese": "ナマズン", + "chinese": "鲶鱼王" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 110, + "Attack": 78, + "Defense": 73, + "Sp. Attack": 76, + "Sp. Defense": 71, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 340, + "name": { + "english": "Whiscash", + "japanese": "ナマズン", + "chinese": "鲶鱼王" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 110, + "Attack": 78, + "Defense": 73, + "Sp. Attack": 76, + "Sp. Defense": 71, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 341, + "name": { + "english": "Corphish", + "japanese": "ヘイガニ", + "chinese": "龙虾小兵" + }, + "type": [ + "Water" + ], + "base": { + "HP": 43, + "Attack": 80, + "Defense": 65, + "Sp. Attack": 50, + "Sp. Defense": 35, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 341, + "name": { + "english": "Corphish", + "japanese": "ヘイガニ", + "chinese": "龙虾小兵" + }, + "type": [ + "Water" + ], + "base": { + "HP": 43, + "Attack": 80, + "Defense": 65, + "Sp. Attack": 50, + "Sp. Defense": 35, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 342, + "name": { + "english": "Crawdaunt", + "japanese": "シザリガー", + "chinese": "铁螯龙虾" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 63, + "Attack": 120, + "Defense": 85, + "Sp. Attack": 90, + "Sp. Defense": 55, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 342, + "name": { + "english": "Crawdaunt", + "japanese": "シザリガー", + "chinese": "铁螯龙虾" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 63, + "Attack": 120, + "Defense": 85, + "Sp. Attack": 90, + "Sp. Defense": 55, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 343, + "name": { + "english": "Baltoy", + "japanese": "ヤジロン", + "chinese": "天秤偶" + }, + "type": [ + "Ground", + "Psychic" + ], + "base": { + "HP": 40, + "Attack": 40, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 343, + "name": { + "english": "Baltoy", + "japanese": "ヤジロン", + "chinese": "天秤偶" + }, + "type": [ + "Ground", + "Psychic" + ], + "base": { + "HP": 40, + "Attack": 40, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 70, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 344, + "name": { + "english": "Claydol", + "japanese": "ネンドール", + "chinese": "念力土偶" + }, + "type": [ + "Ground", + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 70, + "Defense": 105, + "Sp. Attack": 70, + "Sp. Defense": 120, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 344, + "name": { + "english": "Claydol", + "japanese": "ネンドール", + "chinese": "念力土偶" + }, + "type": [ + "Ground", + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 70, + "Defense": 105, + "Sp. Attack": 70, + "Sp. Defense": 120, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 345, + "name": { + "english": "Lileep", + "japanese": "リリーラ", + "chinese": "触手百合" + }, + "type": [ + "Rock", + "Grass" + ], + "base": { + "HP": 66, + "Attack": 41, + "Defense": 77, + "Sp. Attack": 61, + "Sp. Defense": 87, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 345, + "name": { + "english": "Lileep", + "japanese": "リリーラ", + "chinese": "触手百合" + }, + "type": [ + "Rock", + "Grass" + ], + "base": { + "HP": 66, + "Attack": 41, + "Defense": 77, + "Sp. Attack": 61, + "Sp. Defense": 87, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 346, + "name": { + "english": "Cradily", + "japanese": "ユレイドル", + "chinese": "摇篮百合" + }, + "type": [ + "Rock", + "Grass" + ], + "base": { + "HP": 86, + "Attack": 81, + "Defense": 97, + "Sp. Attack": 81, + "Sp. Defense": 107, + "Speed": 43 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 346, + "name": { + "english": "Cradily", + "japanese": "ユレイドル", + "chinese": "摇篮百合" + }, + "type": [ + "Rock", + "Grass" + ], + "base": { + "HP": 86, + "Attack": 81, + "Defense": 97, + "Sp. Attack": 81, + "Sp. Defense": 107, + "Speed": 43 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 347, + "name": { + "english": "Anorith", + "japanese": "アノプス", + "chinese": "太古羽虫" + }, + "type": [ + "Rock", + "Bug" + ], + "base": { + "HP": 45, + "Attack": 95, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 347, + "name": { + "english": "Anorith", + "japanese": "アノプス", + "chinese": "太古羽虫" + }, + "type": [ + "Rock", + "Bug" + ], + "base": { + "HP": 45, + "Attack": 95, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 348, + "name": { + "english": "Armaldo", + "japanese": "アーマルド", + "chinese": "太古盔甲" + }, + "type": [ + "Rock", + "Bug" + ], + "base": { + "HP": 75, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 348, + "name": { + "english": "Armaldo", + "japanese": "アーマルド", + "chinese": "太古盔甲" + }, + "type": [ + "Rock", + "Bug" + ], + "base": { + "HP": 75, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 349, + "name": { + "english": "Feebas", + "japanese": "ヒンバス", + "chinese": "丑丑鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 20, + "Attack": 15, + "Defense": 20, + "Sp. Attack": 10, + "Sp. Defense": 55, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 349, + "name": { + "english": "Feebas", + "japanese": "ヒンバス", + "chinese": "丑丑鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 20, + "Attack": 15, + "Defense": 20, + "Sp. Attack": 10, + "Sp. Defense": 55, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 350, + "name": { + "english": "Milotic", + "japanese": "ミロカロス", + "chinese": "美纳斯" + }, + "type": [ + "Water" + ], + "base": { + "HP": 95, + "Attack": 60, + "Defense": 79, + "Sp. Attack": 100, + "Sp. Defense": 125, + "Speed": 81 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 350, + "name": { + "english": "Milotic", + "japanese": "ミロカロス", + "chinese": "美纳斯" + }, + "type": [ + "Water" + ], + "base": { + "HP": 95, + "Attack": 60, + "Defense": 79, + "Sp. Attack": 100, + "Sp. Defense": 125, + "Speed": 81 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 351, + "name": { + "english": "Castform", + "japanese": "ポワルン", + "chinese": "飘浮泡泡" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 70 + } + }, + { + "id": 351, + "name": { + "english": "Castform", + "japanese": "ポワルン", + "chinese": "飘浮泡泡" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 70 + }, + "form": { + "key": "sunny" + } + }, + { + "id": 351, + "name": { + "english": "Castform", + "japanese": "ポワルン", + "chinese": "飘浮泡泡" + }, + "type": [ + "Water" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 70 + }, + "form": { + "key": "rainy" + } + }, + { + "id": 351, + "name": { + "english": "Castform", + "japanese": "ポワルン", + "chinese": "飘浮泡泡" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 70 + }, + "form": { + "key": "snowy" + } + }, + { + "id": 351, + "name": { + "english": "Castform", + "japanese": "ポワルン", + "chinese": "飘浮泡泡" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 70 + } + }, + { + "id": 352, + "name": { + "english": "Kecleon", + "japanese": "カクレオン", + "chinese": "变隐龙" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 90, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 120, + "Speed": 40 + } + }, + { + "id": 352, + "name": { + "english": "Kecleon", + "japanese": "カクレオン", + "chinese": "变隐龙" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 90, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 120, + "Speed": 40 + } + }, + { + "id": 353, + "name": { + "english": "Shuppet", + "japanese": "カゲボウズ", + "chinese": "怨影娃娃" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 44, + "Attack": 75, + "Defense": 35, + "Sp. Attack": 63, + "Sp. Defense": 33, + "Speed": 45 + } + }, + { + "id": 353, + "name": { + "english": "Shuppet", + "japanese": "カゲボウズ", + "chinese": "怨影娃娃" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 44, + "Attack": 75, + "Defense": 35, + "Sp. Attack": 63, + "Sp. Defense": 33, + "Speed": 45 + } + }, + { + "id": 354, + "name": { + "english": "Banette", + "japanese": "ジュペッタ", + "chinese": "诅咒娃娃" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 64, + "Attack": 115, + "Defense": 65, + "Sp. Attack": 83, + "Sp. Defense": 63, + "Speed": 65 + } + }, + { + "id": 354, + "name": { + "english": "Banette", + "japanese": "ジュペッタ", + "chinese": "诅咒娃娃" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 64, + "Attack": 165, + "Defense": 75, + "Sp. Attack": 93, + "Sp. Defense": 83, + "Speed": 75 + }, + "form": { + "key": "mega" + } + }, + { + "id": 354, + "name": { + "english": "Banette", + "japanese": "ジュペッタ", + "chinese": "诅咒娃娃" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 64, + "Attack": 115, + "Defense": 65, + "Sp. Attack": 83, + "Sp. Defense": 63, + "Speed": 65 + } + }, + { + "id": 355, + "name": { + "english": "Duskull", + "japanese": "ヨマワル", + "chinese": "夜巡灵" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 20, + "Attack": 40, + "Defense": 90, + "Sp. Attack": 30, + "Sp. Defense": 90, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 355, + "name": { + "english": "Duskull", + "japanese": "ヨマワル", + "chinese": "夜巡灵" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 20, + "Attack": 40, + "Defense": 90, + "Sp. Attack": 30, + "Sp. Defense": 90, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 356, + "name": { + "english": "Dusclops", + "japanese": "サマヨール", + "chinese": "彷徨夜灵" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 40, + "Attack": 70, + "Defense": 130, + "Sp. Attack": 60, + "Sp. Defense": 130, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 356, + "name": { + "english": "Dusclops", + "japanese": "サマヨール", + "chinese": "彷徨夜灵" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 40, + "Attack": 70, + "Defense": 130, + "Sp. Attack": 60, + "Sp. Defense": 130, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 357, + "name": { + "english": "Tropius", + "japanese": "トロピウス", + "chinese": "热带龙" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 99, + "Attack": 68, + "Defense": 83, + "Sp. Attack": 72, + "Sp. Defense": 87, + "Speed": 51 + } + }, + { + "id": 357, + "name": { + "english": "Tropius", + "japanese": "トロピウス", + "chinese": "热带龙" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 99, + "Attack": 68, + "Defense": 83, + "Sp. Attack": 72, + "Sp. Defense": 87, + "Speed": 51 + } + }, + { + "id": 358, + "name": { + "english": "Chimecho", + "japanese": "チリーン", + "chinese": "风铃铃" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 50, + "Defense": 80, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 65 + } + }, + { + "id": 358, + "name": { + "english": "Chimecho", + "japanese": "チリーン", + "chinese": "风铃铃" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 50, + "Defense": 80, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 65 + } + }, + { + "id": 359, + "name": { + "english": "Absol", + "japanese": "アブソル", + "chinese": "阿勃梭鲁" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 65, + "Attack": 130, + "Defense": 60, + "Sp. Attack": 75, + "Sp. Defense": 60, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 359, + "name": { + "english": "Absol", + "japanese": "アブソル", + "chinese": "阿勃梭鲁" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 65, + "Attack": 150, + "Defense": 60, + "Sp. Attack": 115, + "Sp. Defense": 60, + "Speed": 115 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 359, + "name": { + "english": "Absol", + "japanese": "アブソル", + "chinese": "阿勃梭鲁" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 65, + "Attack": 130, + "Defense": 60, + "Sp. Attack": 75, + "Sp. Defense": 60, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 360, + "name": { + "english": "Wynaut", + "japanese": "ソーナノ", + "chinese": "小果然" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 95, + "Attack": 23, + "Defense": 48, + "Sp. Attack": 23, + "Sp. Defense": 48, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 360, + "name": { + "english": "Wynaut", + "japanese": "ソーナノ", + "chinese": "小果然" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 95, + "Attack": 23, + "Defense": 48, + "Sp. Attack": 23, + "Sp. Defense": 48, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 361, + "name": { + "english": "Snorunt", + "japanese": "ユキワラシ", + "chinese": "雪童子" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 361, + "name": { + "english": "Snorunt", + "japanese": "ユキワラシ", + "chinese": "雪童子" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 362, + "name": { + "english": "Glalie", + "japanese": "オニゴーリ", + "chinese": "冰鬼护" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 362, + "name": { + "english": "Glalie", + "japanese": "オニゴーリ", + "chinese": "冰鬼护" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 80, + "Attack": 120, + "Defense": 80, + "Sp. Attack": 120, + "Sp. Defense": 80, + "Speed": 100 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 362, + "name": { + "english": "Glalie", + "japanese": "オニゴーリ", + "chinese": "冰鬼护" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 363, + "name": { + "english": "Spheal", + "japanese": "タマザラシ", + "chinese": "海豹球" + }, + "type": [ + "Ice", + "Water" + ], + "base": { + "HP": 70, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 50, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 363, + "name": { + "english": "Spheal", + "japanese": "タマザラシ", + "chinese": "海豹球" + }, + "type": [ + "Ice", + "Water" + ], + "base": { + "HP": 70, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 50, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 364, + "name": { + "english": "Sealeo", + "japanese": "トドグラー", + "chinese": "海魔狮" + }, + "type": [ + "Ice", + "Water" + ], + "base": { + "HP": 90, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 75, + "Sp. Defense": 70, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 364, + "name": { + "english": "Sealeo", + "japanese": "トドグラー", + "chinese": "海魔狮" + }, + "type": [ + "Ice", + "Water" + ], + "base": { + "HP": 90, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 75, + "Sp. Defense": 70, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 365, + "name": { + "english": "Walrein", + "japanese": "トドゼルガ", + "chinese": "帝牙海狮" + }, + "type": [ + "Ice", + "Water" + ], + "base": { + "HP": 110, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 365, + "name": { + "english": "Walrein", + "japanese": "トドゼルガ", + "chinese": "帝牙海狮" + }, + "type": [ + "Ice", + "Water" + ], + "base": { + "HP": 110, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 366, + "name": { + "english": "Clamperl", + "japanese": "パールル", + "chinese": "珍珠贝" + }, + "type": [ + "Water" + ], + "base": { + "HP": 35, + "Attack": 64, + "Defense": 85, + "Sp. Attack": 74, + "Sp. Defense": 55, + "Speed": 32 + } + }, + { + "id": 366, + "name": { + "english": "Clamperl", + "japanese": "パールル", + "chinese": "珍珠贝" + }, + "type": [ + "Water" + ], + "base": { + "HP": 35, + "Attack": 64, + "Defense": 85, + "Sp. Attack": 74, + "Sp. Defense": 55, + "Speed": 32 + } + }, + { + "id": 367, + "name": { + "english": "Huntail", + "japanese": "ハンテール", + "chinese": "猎斑鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 104, + "Defense": 105, + "Sp. Attack": 94, + "Sp. Defense": 75, + "Speed": 52 + } + }, + { + "id": 367, + "name": { + "english": "Huntail", + "japanese": "ハンテール", + "chinese": "猎斑鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 104, + "Defense": 105, + "Sp. Attack": 94, + "Sp. Defense": 75, + "Speed": 52 + } + }, + { + "id": 368, + "name": { + "english": "Gorebyss", + "japanese": "サクラビス", + "chinese": "樱花鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 84, + "Defense": 105, + "Sp. Attack": 114, + "Sp. Defense": 75, + "Speed": 52 + } + }, + { + "id": 368, + "name": { + "english": "Gorebyss", + "japanese": "サクラビス", + "chinese": "樱花鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 84, + "Defense": 105, + "Sp. Attack": 114, + "Sp. Defense": 75, + "Speed": 52 + } + }, + { + "id": 369, + "name": { + "english": "Relicanth", + "japanese": "ジーランス", + "chinese": "古空棘鱼" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 100, + "Attack": 90, + "Defense": 130, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 369, + "name": { + "english": "Relicanth", + "japanese": "ジーランス", + "chinese": "古空棘鱼" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 100, + "Attack": 90, + "Defense": 130, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 370, + "name": { + "english": "Luvdisc", + "japanese": "ラブカス", + "chinese": "爱心鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 43, + "Attack": 30, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 65, + "Speed": 97 + } + }, + { + "id": 370, + "name": { + "english": "Luvdisc", + "japanese": "ラブカス", + "chinese": "爱心鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 43, + "Attack": 30, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 65, + "Speed": 97 + } + }, + { + "id": 371, + "name": { + "english": "Bagon", + "japanese": "タツベイ", + "chinese": "宝贝龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 45, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 30, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 371, + "name": { + "english": "Bagon", + "japanese": "タツベイ", + "chinese": "宝贝龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 45, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 30, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 372, + "name": { + "english": "Shelgon", + "japanese": "コモルー", + "chinese": "甲壳龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 65, + "Attack": 95, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 50, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 372, + "name": { + "english": "Shelgon", + "japanese": "コモルー", + "chinese": "甲壳龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 65, + "Attack": 95, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 50, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 373, + "name": { + "english": "Salamence", + "japanese": "ボーマンダ", + "chinese": "暴飞龙" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 95, + "Attack": 135, + "Defense": 80, + "Sp. Attack": 110, + "Sp. Defense": 80, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 373, + "name": { + "english": "Salamence", + "japanese": "ボーマンダ", + "chinese": "暴飞龙" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 95, + "Attack": 145, + "Defense": 130, + "Sp. Attack": 120, + "Sp. Defense": 90, + "Speed": 120 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 373, + "name": { + "english": "Salamence", + "japanese": "ボーマンダ", + "chinese": "暴飞龙" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 95, + "Attack": 135, + "Defense": 80, + "Sp. Attack": 110, + "Sp. Defense": 80, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 374, + "name": { + "english": "Beldum", + "japanese": "ダンバル", + "chinese": "铁哑铃" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 80, + "Sp. Attack": 35, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 374, + "name": { + "english": "Beldum", + "japanese": "ダンバル", + "chinese": "铁哑铃" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 80, + "Sp. Attack": 35, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 375, + "name": { + "english": "Metang", + "japanese": "メタング", + "chinese": "金属怪" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 75, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 375, + "name": { + "english": "Metang", + "japanese": "メタング", + "chinese": "金属怪" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 75, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 376, + "name": { + "english": "Metagross", + "japanese": "メタグロス", + "chinese": "巨金怪" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 135, + "Defense": 130, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 376, + "name": { + "english": "Metagross", + "japanese": "メタグロス", + "chinese": "巨金怪" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 145, + "Defense": 150, + "Sp. Attack": 105, + "Sp. Defense": 110, + "Speed": 110 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 376, + "name": { + "english": "Metagross", + "japanese": "メタグロス", + "chinese": "巨金怪" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 135, + "Defense": 130, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 377, + "name": { + "english": "Regirock", + "japanese": "レジロック", + "chinese": "雷吉洛克" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 200, + "Sp. Attack": 50, + "Sp. Defense": 100, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 377, + "name": { + "english": "Regirock", + "japanese": "レジロック", + "chinese": "雷吉洛克" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 200, + "Sp. Attack": 50, + "Sp. Defense": 100, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 378, + "name": { + "english": "Regice", + "japanese": "レジアイス", + "chinese": "雷吉艾斯" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 80, + "Attack": 50, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 200, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 378, + "name": { + "english": "Regice", + "japanese": "レジアイス", + "chinese": "雷吉艾斯" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 80, + "Attack": 50, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 200, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 379, + "name": { + "english": "Registeel", + "japanese": "レジスチル", + "chinese": "雷吉斯奇鲁" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 80, + "Attack": 75, + "Defense": 150, + "Sp. Attack": 75, + "Sp. Defense": 150, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 379, + "name": { + "english": "Registeel", + "japanese": "レジスチル", + "chinese": "雷吉斯奇鲁" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 80, + "Attack": 75, + "Defense": 150, + "Sp. Attack": 75, + "Sp. Defense": 150, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 380, + "name": { + "english": "Latias", + "japanese": "ラティアス", + "chinese": "拉帝亚斯" + }, + "type": [ + "Dragon", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 110, + "Sp. Defense": 130, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 380, + "name": { + "english": "Latias", + "japanese": "ラティアス", + "chinese": "拉帝亚斯" + }, + "type": [ + "Dragon", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 120, + "Sp. Attack": 140, + "Sp. Defense": 150, + "Speed": 110 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 380, + "name": { + "english": "Latias", + "japanese": "ラティアス", + "chinese": "拉帝亚斯" + }, + "type": [ + "Dragon", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 90, + "Sp. Attack": 110, + "Sp. Defense": 130, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 381, + "name": { + "english": "Latios", + "japanese": "ラティオス", + "chinese": "拉帝欧斯" + }, + "type": [ + "Dragon", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 130, + "Sp. Defense": 110, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 381, + "name": { + "english": "Latios", + "japanese": "ラティオス", + "chinese": "拉帝欧斯" + }, + "type": [ + "Dragon", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 130, + "Defense": 100, + "Sp. Attack": 160, + "Sp. Defense": 120, + "Speed": 110 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 381, + "name": { + "english": "Latios", + "japanese": "ラティオス", + "chinese": "拉帝欧斯" + }, + "type": [ + "Dragon", + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 130, + "Sp. Defense": 110, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 382, + "name": { + "english": "Kyogre", + "japanese": "カイオーガ", + "chinese": "盖欧卡" + }, + "type": [ + "Water" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 90, + "Sp. Attack": 150, + "Sp. Defense": 140, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 382, + "name": { + "english": "Kyogre", + "japanese": "カイオーガ", + "chinese": "盖欧卡" + }, + "type": [ + "Water" + ], + "base": { + "HP": 100, + "Attack": 150, + "Defense": 90, + "Sp. Attack": 180, + "Sp. Defense": 160, + "Speed": 90 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "primal" + } + }, + { + "id": 382, + "name": { + "english": "Kyogre", + "japanese": "カイオーガ", + "chinese": "盖欧卡" + }, + "type": [ + "Water" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 90, + "Sp. Attack": 150, + "Sp. Defense": 140, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 383, + "name": { + "english": "Groudon", + "japanese": "グラードン", + "chinese": "固拉多" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 100, + "Attack": 150, + "Defense": 140, + "Sp. Attack": 100, + "Sp. Defense": 90, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 383, + "name": { + "english": "Groudon", + "japanese": "グラードン", + "chinese": "固拉多" + }, + "type": [ + "Ground", + "Fire" + ], + "base": { + "HP": 100, + "Attack": 180, + "Defense": 160, + "Sp. Attack": 150, + "Sp. Defense": 90, + "Speed": 90 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "primal" + } + }, + { + "id": 383, + "name": { + "english": "Groudon", + "japanese": "グラードン", + "chinese": "固拉多" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 100, + "Attack": 150, + "Defense": 140, + "Sp. Attack": 100, + "Sp. Defense": 90, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 384, + "name": { + "english": "Rayquaza", + "japanese": "レックウザ", + "chinese": "烈空坐" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 105, + "Attack": 150, + "Defense": 90, + "Sp. Attack": 150, + "Sp. Defense": 90, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 384, + "name": { + "english": "Rayquaza", + "japanese": "レックウザ", + "chinese": "烈空坐" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 105, + "Attack": 180, + "Defense": 100, + "Sp. Attack": 180, + "Sp. Defense": 100, + "Speed": 115 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 384, + "name": { + "english": "Rayquaza", + "japanese": "レックウザ", + "chinese": "烈空坐" + }, + "type": [ + "Dragon", + "Flying" + ], + "base": { + "HP": 105, + "Attack": 150, + "Defense": 90, + "Sp. Attack": 150, + "Sp. Defense": 90, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 385, + "name": { + "english": "Jirachi", + "japanese": "ジラーチ", + "chinese": "基拉祈" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 385, + "name": { + "english": "Jirachi", + "japanese": "ジラーチ", + "chinese": "基拉祈" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 386, + "name": { + "english": "Deoxys", + "japanese": "デオキシス", + "chinese": "代欧奇希斯" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 50, + "Attack": 150, + "Defense": 50, + "Sp. Attack": 150, + "Sp. Defense": 50, + "Speed": 150 + } + }, + { + "id": 386, + "name": { + "english": "Deoxys", + "japanese": "デオキシス", + "chinese": "代欧奇希斯" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 50, + "Attack": 180, + "Defense": 20, + "Sp. Attack": 180, + "Sp. Defense": 20, + "Speed": 150 + }, + "form": { + "key": "attack" + } + }, + { + "id": 386, + "name": { + "english": "Deoxys", + "japanese": "デオキシス", + "chinese": "代欧奇希斯" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 50, + "Attack": 70, + "Defense": 160, + "Sp. Attack": 70, + "Sp. Defense": 160, + "Speed": 90 + }, + "form": { + "key": "defense" + } + }, + { + "id": 386, + "name": { + "english": "Deoxys", + "japanese": "デオキシス", + "chinese": "代欧奇希斯" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 50, + "Attack": 95, + "Defense": 90, + "Sp. Attack": 95, + "Sp. Defense": 90, + "Speed": 180 + }, + "form": { + "key": "speed" + } + }, + { + "id": 386, + "name": { + "english": "Deoxys", + "japanese": "デオキシス", + "chinese": "代欧奇希斯" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 50, + "Attack": 150, + "Defense": 50, + "Sp. Attack": 150, + "Sp. Defense": 50, + "Speed": 150 + } + }, + { + "id": 387, + "name": { + "english": "Turtwig", + "japanese": "ナエトル", + "chinese": "草苗龟" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 55, + "Attack": 68, + "Defense": 64, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 31 + } + }, + { + "id": 387, + "name": { + "english": "Turtwig", + "japanese": "ナエトル", + "chinese": "草苗龟" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 55, + "Attack": 68, + "Defense": 64, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 31 + } + }, + { + "id": 388, + "name": { + "english": "Grotle", + "japanese": "ハヤシガメ", + "chinese": "树林龟" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 89, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 36 + } + }, + { + "id": 388, + "name": { + "english": "Grotle", + "japanese": "ハヤシガメ", + "chinese": "树林龟" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 89, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 36 + } + }, + { + "id": 389, + "name": { + "english": "Torterra", + "japanese": "ドダイトス", + "chinese": "土台龟" + }, + "type": [ + "Grass", + "Ground" + ], + "base": { + "HP": 95, + "Attack": 109, + "Defense": 105, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 56 + } + }, + { + "id": 389, + "name": { + "english": "Torterra", + "japanese": "ドダイトス", + "chinese": "土台龟" + }, + "type": [ + "Grass", + "Ground" + ], + "base": { + "HP": 95, + "Attack": 109, + "Defense": 105, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 56 + } + }, + { + "id": 390, + "name": { + "english": "Chimchar", + "japanese": "ヒコザル", + "chinese": "小火焰猴" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 44, + "Attack": 58, + "Defense": 44, + "Sp. Attack": 58, + "Sp. Defense": 44, + "Speed": 61 + } + }, + { + "id": 390, + "name": { + "english": "Chimchar", + "japanese": "ヒコザル", + "chinese": "小火焰猴" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 44, + "Attack": 58, + "Defense": 44, + "Sp. Attack": 58, + "Sp. Defense": 44, + "Speed": 61 + } + }, + { + "id": 391, + "name": { + "english": "Monferno", + "japanese": "モウカザル", + "chinese": "猛火猴" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 64, + "Attack": 78, + "Defense": 52, + "Sp. Attack": 78, + "Sp. Defense": 52, + "Speed": 81 + } + }, + { + "id": 391, + "name": { + "english": "Monferno", + "japanese": "モウカザル", + "chinese": "猛火猴" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 64, + "Attack": 78, + "Defense": 52, + "Sp. Attack": 78, + "Sp. Defense": 52, + "Speed": 81 + } + }, + { + "id": 392, + "name": { + "english": "Infernape", + "japanese": "ゴウカザル", + "chinese": "烈焰猴" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 76, + "Attack": 104, + "Defense": 71, + "Sp. Attack": 104, + "Sp. Defense": 71, + "Speed": 108 + } + }, + { + "id": 392, + "name": { + "english": "Infernape", + "japanese": "ゴウカザル", + "chinese": "烈焰猴" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 76, + "Attack": 104, + "Defense": 71, + "Sp. Attack": 104, + "Sp. Defense": 71, + "Speed": 108 + } + }, + { + "id": 393, + "name": { + "english": "Piplup", + "japanese": "ポッチャマ", + "chinese": "波加曼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 53, + "Attack": 51, + "Defense": 53, + "Sp. Attack": 61, + "Sp. Defense": 56, + "Speed": 40 + } + }, + { + "id": 393, + "name": { + "english": "Piplup", + "japanese": "ポッチャマ", + "chinese": "波加曼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 53, + "Attack": 51, + "Defense": 53, + "Sp. Attack": 61, + "Sp. Defense": 56, + "Speed": 40 + } + }, + { + "id": 394, + "name": { + "english": "Prinplup", + "japanese": "ポッタイシ", + "chinese": "波皇子" + }, + "type": [ + "Water" + ], + "base": { + "HP": 64, + "Attack": 66, + "Defense": 68, + "Sp. Attack": 81, + "Sp. Defense": 76, + "Speed": 50 + } + }, + { + "id": 394, + "name": { + "english": "Prinplup", + "japanese": "ポッタイシ", + "chinese": "波皇子" + }, + "type": [ + "Water" + ], + "base": { + "HP": 64, + "Attack": 66, + "Defense": 68, + "Sp. Attack": 81, + "Sp. Defense": 76, + "Speed": 50 + } + }, + { + "id": 395, + "name": { + "english": "Empoleon", + "japanese": "エンペルト", + "chinese": "帝王拿波" + }, + "type": [ + "Water", + "Steel" + ], + "base": { + "HP": 84, + "Attack": 86, + "Defense": 88, + "Sp. Attack": 111, + "Sp. Defense": 101, + "Speed": 60 + } + }, + { + "id": 395, + "name": { + "english": "Empoleon", + "japanese": "エンペルト", + "chinese": "帝王拿波" + }, + "type": [ + "Water", + "Steel" + ], + "base": { + "HP": 84, + "Attack": 86, + "Defense": 88, + "Sp. Attack": 111, + "Sp. Defense": 101, + "Speed": 60 + } + }, + { + "id": 396, + "name": { + "english": "Starly", + "japanese": "ムックル", + "chinese": "姆克儿" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 60 + } + }, + { + "id": 396, + "name": { + "english": "Starly", + "japanese": "ムックル", + "chinese": "姆克儿" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 60 + } + }, + { + "id": 397, + "name": { + "english": "Staravia", + "japanese": "ムクバード", + "chinese": "姆克鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 75, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 80 + } + }, + { + "id": 397, + "name": { + "english": "Staravia", + "japanese": "ムクバード", + "chinese": "姆克鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 75, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 80 + } + }, + { + "id": 398, + "name": { + "english": "Staraptor", + "japanese": "ムクホーク", + "chinese": "姆克鹰" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 85, + "Attack": 120, + "Defense": 70, + "Sp. Attack": 50, + "Sp. Defense": 60, + "Speed": 100 + } + }, + { + "id": 398, + "name": { + "english": "Staraptor", + "japanese": "ムクホーク", + "chinese": "姆克鹰" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 85, + "Attack": 120, + "Defense": 70, + "Sp. Attack": 50, + "Sp. Defense": 60, + "Speed": 100 + } + }, + { + "id": 399, + "name": { + "english": "Bidoof", + "japanese": "ビッパ", + "chinese": "大牙狸" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 59, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 35, + "Sp. Defense": 40, + "Speed": 31 + } + }, + { + "id": 399, + "name": { + "english": "Bidoof", + "japanese": "ビッパ", + "chinese": "大牙狸" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 59, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 35, + "Sp. Defense": 40, + "Speed": 31 + } + }, + { + "id": 400, + "name": { + "english": "Bibarel", + "japanese": "ビーダル", + "chinese": "大尾狸" + }, + "type": [ + "Normal", + "Water" + ], + "base": { + "HP": 79, + "Attack": 85, + "Defense": 60, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 71 + } + }, + { + "id": 400, + "name": { + "english": "Bibarel", + "japanese": "ビーダル", + "chinese": "大尾狸" + }, + "type": [ + "Normal", + "Water" + ], + "base": { + "HP": 79, + "Attack": 85, + "Defense": 60, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 71 + } + }, + { + "id": 401, + "name": { + "english": "Kricketot", + "japanese": "コロボーシ", + "chinese": "圆法师" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 37, + "Attack": 25, + "Defense": 41, + "Sp. Attack": 25, + "Sp. Defense": 41, + "Speed": 25 + } + }, + { + "id": 401, + "name": { + "english": "Kricketot", + "japanese": "コロボーシ", + "chinese": "圆法师" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 37, + "Attack": 25, + "Defense": 41, + "Sp. Attack": 25, + "Sp. Defense": 41, + "Speed": 25 + } + }, + { + "id": 402, + "name": { + "english": "Kricketune", + "japanese": "コロトック", + "chinese": "音箱蟀" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 77, + "Attack": 85, + "Defense": 51, + "Sp. Attack": 55, + "Sp. Defense": 51, + "Speed": 65 + } + }, + { + "id": 402, + "name": { + "english": "Kricketune", + "japanese": "コロトック", + "chinese": "音箱蟀" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 77, + "Attack": 85, + "Defense": 51, + "Sp. Attack": 55, + "Sp. Defense": 51, + "Speed": 65 + } + }, + { + "id": 403, + "name": { + "english": "Shinx", + "japanese": "コリンク", + "chinese": "小猫怪" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 45, + "Attack": 65, + "Defense": 34, + "Sp. Attack": 40, + "Sp. Defense": 34, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 403, + "name": { + "english": "Shinx", + "japanese": "コリンク", + "chinese": "小猫怪" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 45, + "Attack": 65, + "Defense": 34, + "Sp. Attack": 40, + "Sp. Defense": 34, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 404, + "name": { + "english": "Luxio", + "japanese": "ルクシオ", + "chinese": "勒克猫" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 49, + "Sp. Attack": 60, + "Sp. Defense": 49, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 404, + "name": { + "english": "Luxio", + "japanese": "ルクシオ", + "chinese": "勒克猫" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 49, + "Sp. Attack": 60, + "Sp. Defense": 49, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 405, + "name": { + "english": "Luxray", + "japanese": "レントラー", + "chinese": "伦琴猫" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 80, + "Attack": 120, + "Defense": 79, + "Sp. Attack": 95, + "Sp. Defense": 79, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 405, + "name": { + "english": "Luxray", + "japanese": "レントラー", + "chinese": "伦琴猫" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 80, + "Attack": 120, + "Defense": 79, + "Sp. Attack": 95, + "Sp. Defense": 79, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 406, + "name": { + "english": "Budew", + "japanese": "スボミー", + "chinese": "含羞苞" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 35, + "Sp. Attack": 50, + "Sp. Defense": 70, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 406, + "name": { + "english": "Budew", + "japanese": "スボミー", + "chinese": "含羞苞" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 40, + "Attack": 30, + "Defense": 35, + "Sp. Attack": 50, + "Sp. Defense": 70, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 407, + "name": { + "english": "Roserade", + "japanese": "ロズレイド", + "chinese": "罗丝雷朵" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 60, + "Attack": 70, + "Defense": 65, + "Sp. Attack": 125, + "Sp. Defense": 105, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 407, + "name": { + "english": "Roserade", + "japanese": "ロズレイド", + "chinese": "罗丝雷朵" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 60, + "Attack": 70, + "Defense": 65, + "Sp. Attack": 125, + "Sp. Defense": 105, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 408, + "name": { + "english": "Cranidos", + "japanese": "ズガイドス", + "chinese": "头盖龙" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 67, + "Attack": 125, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 58 + } + }, + { + "id": 408, + "name": { + "english": "Cranidos", + "japanese": "ズガイドス", + "chinese": "头盖龙" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 67, + "Attack": 125, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 58 + } + }, + { + "id": 409, + "name": { + "english": "Rampardos", + "japanese": "ラムパルド", + "chinese": "战槌龙" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 97, + "Attack": 165, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 58 + } + }, + { + "id": 409, + "name": { + "english": "Rampardos", + "japanese": "ラムパルド", + "chinese": "战槌龙" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 97, + "Attack": 165, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 58 + } + }, + { + "id": 410, + "name": { + "english": "Shieldon", + "japanese": "タテトプス", + "chinese": "盾甲龙" + }, + "type": [ + "Rock", + "Steel" + ], + "base": { + "HP": 30, + "Attack": 42, + "Defense": 118, + "Sp. Attack": 42, + "Sp. Defense": 88, + "Speed": 30 + } + }, + { + "id": 410, + "name": { + "english": "Shieldon", + "japanese": "タテトプス", + "chinese": "盾甲龙" + }, + "type": [ + "Rock", + "Steel" + ], + "base": { + "HP": 30, + "Attack": 42, + "Defense": 118, + "Sp. Attack": 42, + "Sp. Defense": 88, + "Speed": 30 + } + }, + { + "id": 411, + "name": { + "english": "Bastiodon", + "japanese": "トリデプス", + "chinese": "护城龙" + }, + "type": [ + "Rock", + "Steel" + ], + "base": { + "HP": 60, + "Attack": 52, + "Defense": 168, + "Sp. Attack": 47, + "Sp. Defense": 138, + "Speed": 30 + } + }, + { + "id": 411, + "name": { + "english": "Bastiodon", + "japanese": "トリデプス", + "chinese": "护城龙" + }, + "type": [ + "Rock", + "Steel" + ], + "base": { + "HP": 60, + "Attack": 52, + "Defense": 168, + "Sp. Attack": 47, + "Sp. Defense": 138, + "Speed": 30 + } + }, + { + "id": 412, + "name": { + "english": "Burmy", + "japanese": "ミノムッチ", + "chinese": "结草儿" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 40, + "Attack": 29, + "Defense": 45, + "Sp. Attack": 29, + "Sp. Defense": 45, + "Speed": 36 + } + }, + { + "id": 412, + "name": { + "english": "Burmy", + "japanese": "ミノムッチ", + "chinese": "结草儿" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 40, + "Attack": 29, + "Defense": 45, + "Sp. Attack": 29, + "Sp. Defense": 45, + "Speed": 36 + } + }, + { + "id": 413, + "name": { + "english": "Wormadam", + "japanese": "ミノマダム", + "chinese": "结草贵妇" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 60, + "Attack": 59, + "Defense": 85, + "Sp. Attack": 79, + "Sp. Defense": 105, + "Speed": 36 + } + }, + { + "id": 413, + "name": { + "english": "Wormadam", + "japanese": "ミノマダム", + "chinese": "结草贵妇" + }, + "type": [ + "Bug", + "Ground" + ], + "base": { + "HP": 60, + "Attack": 79, + "Defense": 105, + "Sp. Attack": 59, + "Sp. Defense": 85, + "Speed": 36 + }, + "form": { + "key": "sandy" + } + }, + { + "id": 413, + "name": { + "english": "Wormadam", + "japanese": "ミノマダム", + "chinese": "结草贵妇" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 60, + "Attack": 69, + "Defense": 95, + "Sp. Attack": 69, + "Sp. Defense": 95, + "Speed": 36 + }, + "form": { + "key": "trash" + } + }, + { + "id": 413, + "name": { + "english": "Wormadam", + "japanese": "ミノマダム", + "chinese": "结草贵妇" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 60, + "Attack": 59, + "Defense": 85, + "Sp. Attack": 79, + "Sp. Defense": 105, + "Speed": 36 + } + }, + { + "id": 414, + "name": { + "english": "Mothim", + "japanese": "ガーメイル", + "chinese": "绅士蛾" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 94, + "Defense": 50, + "Sp. Attack": 94, + "Sp. Defense": 50, + "Speed": 66 + } + }, + { + "id": 414, + "name": { + "english": "Mothim", + "japanese": "ガーメイル", + "chinese": "绅士蛾" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 94, + "Defense": 50, + "Sp. Attack": 94, + "Sp. Defense": 50, + "Speed": 66 + } + }, + { + "id": 415, + "name": { + "english": "Combee", + "japanese": "ミツハニー", + "chinese": "三蜜蜂" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 30, + "Attack": 30, + "Defense": 42, + "Sp. Attack": 30, + "Sp. Defense": 42, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 415, + "name": { + "english": "Combee", + "japanese": "ミツハニー", + "chinese": "三蜜蜂" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 30, + "Attack": 30, + "Defense": 42, + "Sp. Attack": 30, + "Sp. Defense": 42, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 416, + "name": { + "english": "Vespiquen", + "japanese": "ビークイン", + "chinese": "蜂女王" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 80, + "Defense": 102, + "Sp. Attack": 80, + "Sp. Defense": 102, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 416, + "name": { + "english": "Vespiquen", + "japanese": "ビークイン", + "chinese": "蜂女王" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 80, + "Defense": 102, + "Sp. Attack": 80, + "Sp. Defense": 102, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 417, + "name": { + "english": "Pachirisu", + "japanese": "パチリス", + "chinese": "帕奇利兹" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 45, + "Defense": 70, + "Sp. Attack": 45, + "Sp. Defense": 90, + "Speed": 95 + } + }, + { + "id": 417, + "name": { + "english": "Pachirisu", + "japanese": "パチリス", + "chinese": "帕奇利兹" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 60, + "Attack": 45, + "Defense": 70, + "Sp. Attack": 45, + "Sp. Defense": 90, + "Speed": 95 + } + }, + { + "id": 418, + "name": { + "english": "Buizel", + "japanese": "ブイゼル", + "chinese": "泳圈鼬" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 65, + "Defense": 35, + "Sp. Attack": 60, + "Sp. Defense": 30, + "Speed": 85 + } + }, + { + "id": 418, + "name": { + "english": "Buizel", + "japanese": "ブイゼル", + "chinese": "泳圈鼬" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 65, + "Defense": 35, + "Sp. Attack": 60, + "Sp. Defense": 30, + "Speed": 85 + } + }, + { + "id": 419, + "name": { + "english": "Floatzel", + "japanese": "フローゼル", + "chinese": "浮潜鼬" + }, + "type": [ + "Water" + ], + "base": { + "HP": 85, + "Attack": 105, + "Defense": 55, + "Sp. Attack": 85, + "Sp. Defense": 50, + "Speed": 115 + } + }, + { + "id": 419, + "name": { + "english": "Floatzel", + "japanese": "フローゼル", + "chinese": "浮潜鼬" + }, + "type": [ + "Water" + ], + "base": { + "HP": 85, + "Attack": 105, + "Defense": 55, + "Sp. Attack": 85, + "Sp. Defense": 50, + "Speed": 115 + } + }, + { + "id": 420, + "name": { + "english": "Cherubi", + "japanese": "チェリンボ", + "chinese": "樱花宝" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 45, + "Attack": 35, + "Defense": 45, + "Sp. Attack": 62, + "Sp. Defense": 53, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 420, + "name": { + "english": "Cherubi", + "japanese": "チェリンボ", + "chinese": "樱花宝" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 45, + "Attack": 35, + "Defense": 45, + "Sp. Attack": 62, + "Sp. Defense": 53, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 421, + "name": { + "english": "Cherrim", + "japanese": "チェリム", + "chinese": "樱花儿" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 70, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 87, + "Sp. Defense": 78, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 421, + "name": { + "english": "Cherrim", + "japanese": "チェリム", + "chinese": "樱花儿" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 70, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 87, + "Sp. Defense": 78, + "Speed": 85 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "sunshine" + } + }, + { + "id": 421, + "name": { + "english": "Cherrim", + "japanese": "チェリム", + "chinese": "樱花儿" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 70, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 87, + "Sp. Defense": 78, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 422, + "name": { + "english": "Shellos", + "japanese": "カラナクシ", + "chinese": "无壳海兔" + }, + "type": [ + "Water" + ], + "base": { + "HP": 76, + "Attack": 48, + "Defense": 48, + "Sp. Attack": 57, + "Sp. Defense": 62, + "Speed": 34 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 422, + "name": { + "english": "Shellos", + "japanese": "カラナクシ", + "chinese": "无壳海兔" + }, + "type": [ + "Water" + ], + "base": { + "HP": 76, + "Attack": 48, + "Defense": 48, + "Sp. Attack": 57, + "Sp. Defense": 62, + "Speed": 34 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 423, + "name": { + "english": "Gastrodon", + "japanese": "トリトドン", + "chinese": "海兔兽" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 111, + "Attack": 83, + "Defense": 68, + "Sp. Attack": 92, + "Sp. Defense": 82, + "Speed": 39 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 423, + "name": { + "english": "Gastrodon", + "japanese": "トリトドン", + "chinese": "海兔兽" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 111, + "Attack": 83, + "Defense": 68, + "Sp. Attack": 92, + "Sp. Defense": 82, + "Speed": 39 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 424, + "name": { + "english": "Ambipom", + "japanese": "エテボース", + "chinese": "双尾怪手" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 75, + "Attack": 100, + "Defense": 66, + "Sp. Attack": 60, + "Sp. Defense": 66, + "Speed": 115 + } + }, + { + "id": 424, + "name": { + "english": "Ambipom", + "japanese": "エテボース", + "chinese": "双尾怪手" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 75, + "Attack": 100, + "Defense": 66, + "Sp. Attack": 60, + "Sp. Defense": 66, + "Speed": 115 + } + }, + { + "id": 425, + "name": { + "english": "Drifloon", + "japanese": "フワンテ", + "chinese": "飘飘球" + }, + "type": [ + "Ghost", + "Flying" + ], + "base": { + "HP": 90, + "Attack": 50, + "Defense": 34, + "Sp. Attack": 60, + "Sp. Defense": 44, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 425, + "name": { + "english": "Drifloon", + "japanese": "フワンテ", + "chinese": "飘飘球" + }, + "type": [ + "Ghost", + "Flying" + ], + "base": { + "HP": 90, + "Attack": 50, + "Defense": 34, + "Sp. Attack": 60, + "Sp. Defense": 44, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 426, + "name": { + "english": "Drifblim", + "japanese": "フワライド", + "chinese": "随风球" + }, + "type": [ + "Ghost", + "Flying" + ], + "base": { + "HP": 150, + "Attack": 80, + "Defense": 44, + "Sp. Attack": 90, + "Sp. Defense": 54, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 426, + "name": { + "english": "Drifblim", + "japanese": "フワライド", + "chinese": "随风球" + }, + "type": [ + "Ghost", + "Flying" + ], + "base": { + "HP": 150, + "Attack": 80, + "Defense": 44, + "Sp. Attack": 90, + "Sp. Defense": 54, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 427, + "name": { + "english": "Buneary", + "japanese": "ミミロル", + "chinese": "卷卷耳" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 66, + "Defense": 44, + "Sp. Attack": 44, + "Sp. Defense": 56, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 427, + "name": { + "english": "Buneary", + "japanese": "ミミロル", + "chinese": "卷卷耳" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 66, + "Defense": 44, + "Sp. Attack": 44, + "Sp. Defense": 56, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 428, + "name": { + "english": "Lopunny", + "japanese": "ミミロップ", + "chinese": "长耳兔" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 65, + "Attack": 76, + "Defense": 84, + "Sp. Attack": 54, + "Sp. Defense": 96, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 428, + "name": { + "english": "Lopunny", + "japanese": "ミミロップ", + "chinese": "长耳兔" + }, + "type": [ + "Normal", + "Fighting" + ], + "base": { + "HP": 65, + "Attack": 136, + "Defense": 94, + "Sp. Attack": 54, + "Sp. Defense": 96, + "Speed": 135 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 428, + "name": { + "english": "Lopunny", + "japanese": "ミミロップ", + "chinese": "长耳兔" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 65, + "Attack": 76, + "Defense": 84, + "Sp. Attack": 54, + "Sp. Defense": 96, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 429, + "name": { + "english": "Mismagius", + "japanese": "ムウマージ", + "chinese": "梦妖魔" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 105, + "Sp. Defense": 105, + "Speed": 105 + } + }, + { + "id": 429, + "name": { + "english": "Mismagius", + "japanese": "ムウマージ", + "chinese": "梦妖魔" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 105, + "Sp. Defense": 105, + "Speed": 105 + } + }, + { + "id": 430, + "name": { + "english": "Honchkrow", + "japanese": "ドンカラス", + "chinese": "乌鸦头头" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 100, + "Attack": 125, + "Defense": 52, + "Sp. Attack": 105, + "Sp. Defense": 52, + "Speed": 71 + } + }, + { + "id": 430, + "name": { + "english": "Honchkrow", + "japanese": "ドンカラス", + "chinese": "乌鸦头头" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 100, + "Attack": 125, + "Defense": 52, + "Sp. Attack": 105, + "Sp. Defense": 52, + "Speed": 71 + } + }, + { + "id": 431, + "name": { + "english": "Glameow", + "japanese": "ニャルマー", + "chinese": "魅力喵" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 49, + "Attack": 55, + "Defense": 42, + "Sp. Attack": 42, + "Sp. Defense": 37, + "Speed": 85 + } + }, + { + "id": 431, + "name": { + "english": "Glameow", + "japanese": "ニャルマー", + "chinese": "魅力喵" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 49, + "Attack": 55, + "Defense": 42, + "Sp. Attack": 42, + "Sp. Defense": 37, + "Speed": 85 + } + }, + { + "id": 432, + "name": { + "english": "Purugly", + "japanese": "ブニャット", + "chinese": "东施喵" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 71, + "Attack": 82, + "Defense": 64, + "Sp. Attack": 64, + "Sp. Defense": 59, + "Speed": 112 + } + }, + { + "id": 432, + "name": { + "english": "Purugly", + "japanese": "ブニャット", + "chinese": "东施喵" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 71, + "Attack": 82, + "Defense": 64, + "Sp. Attack": 64, + "Sp. Defense": 59, + "Speed": 112 + } + }, + { + "id": 433, + "name": { + "english": "Chingling", + "japanese": "リーシャン", + "chinese": "铃铛响" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 45 + } + }, + { + "id": 433, + "name": { + "english": "Chingling", + "japanese": "リーシャン", + "chinese": "铃铛响" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 45 + } + }, + { + "id": 434, + "name": { + "english": "Stunky", + "japanese": "スカンプー", + "chinese": "臭鼬噗" + }, + "type": [ + "Poison", + "Dark" + ], + "base": { + "HP": 63, + "Attack": 63, + "Defense": 47, + "Sp. Attack": 41, + "Sp. Defense": 41, + "Speed": 74 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 434, + "name": { + "english": "Stunky", + "japanese": "スカンプー", + "chinese": "臭鼬噗" + }, + "type": [ + "Poison", + "Dark" + ], + "base": { + "HP": 63, + "Attack": 63, + "Defense": 47, + "Sp. Attack": 41, + "Sp. Defense": 41, + "Speed": 74 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 435, + "name": { + "english": "Skuntank", + "japanese": "スカタンク", + "chinese": "坦克臭鼬" + }, + "type": [ + "Poison", + "Dark" + ], + "base": { + "HP": 103, + "Attack": 93, + "Defense": 67, + "Sp. Attack": 71, + "Sp. Defense": 61, + "Speed": 84 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 435, + "name": { + "english": "Skuntank", + "japanese": "スカタンク", + "chinese": "坦克臭鼬" + }, + "type": [ + "Poison", + "Dark" + ], + "base": { + "HP": 103, + "Attack": 93, + "Defense": 67, + "Sp. Attack": 71, + "Sp. Defense": 61, + "Speed": 84 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 436, + "name": { + "english": "Bronzor", + "japanese": "ドーミラー", + "chinese": "铜镜怪" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 57, + "Attack": 24, + "Defense": 86, + "Sp. Attack": 24, + "Sp. Defense": 86, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 436, + "name": { + "english": "Bronzor", + "japanese": "ドーミラー", + "chinese": "铜镜怪" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 57, + "Attack": 24, + "Defense": 86, + "Sp. Attack": 24, + "Sp. Defense": 86, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 437, + "name": { + "english": "Bronzong", + "japanese": "ドータクン", + "chinese": "青铜钟" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 67, + "Attack": 89, + "Defense": 116, + "Sp. Attack": 79, + "Sp. Defense": 116, + "Speed": 33 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 437, + "name": { + "english": "Bronzong", + "japanese": "ドータクン", + "chinese": "青铜钟" + }, + "type": [ + "Steel", + "Psychic" + ], + "base": { + "HP": 67, + "Attack": 89, + "Defense": 116, + "Sp. Attack": 79, + "Sp. Defense": 116, + "Speed": 33 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 438, + "name": { + "english": "Bonsly", + "japanese": "ウソハチ", + "chinese": "盆才怪" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 50, + "Attack": 80, + "Defense": 95, + "Sp. Attack": 10, + "Sp. Defense": 45, + "Speed": 10 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 438, + "name": { + "english": "Bonsly", + "japanese": "ウソハチ", + "chinese": "盆才怪" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 50, + "Attack": 80, + "Defense": 95, + "Sp. Attack": 10, + "Sp. Defense": 45, + "Speed": 10 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 439, + "name": { + "english": "Mime Jr.", + "japanese": "マネネ", + "chinese": "魔尼尼" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 20, + "Attack": 25, + "Defense": 45, + "Sp. Attack": 70, + "Sp. Defense": 90, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 439, + "name": { + "english": "Mime Jr.", + "japanese": "マネネ", + "chinese": "魔尼尼" + }, + "type": [ + "Psychic", + "Fairy" + ], + "base": { + "HP": 20, + "Attack": 25, + "Defense": 45, + "Sp. Attack": 70, + "Sp. Defense": 90, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 440, + "name": { + "english": "Happiny", + "japanese": "ピンプク", + "chinese": "小福蛋" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 100, + "Attack": 5, + "Defense": 5, + "Sp. Attack": 15, + "Sp. Defense": 65, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 440, + "name": { + "english": "Happiny", + "japanese": "ピンプク", + "chinese": "小福蛋" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 100, + "Attack": 5, + "Defense": 5, + "Sp. Attack": 15, + "Sp. Defense": 65, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 441, + "name": { + "english": "Chatot", + "japanese": "ペラップ", + "chinese": "聒噪鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 76, + "Attack": 65, + "Defense": 45, + "Sp. Attack": 92, + "Sp. Defense": 42, + "Speed": 91 + } + }, + { + "id": 441, + "name": { + "english": "Chatot", + "japanese": "ペラップ", + "chinese": "聒噪鸟" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 76, + "Attack": 65, + "Defense": 45, + "Sp. Attack": 92, + "Sp. Defense": 42, + "Speed": 91 + } + }, + { + "id": 442, + "name": { + "english": "Spiritomb", + "japanese": "ミカルゲ", + "chinese": "花岩怪" + }, + "type": [ + "Ghost", + "Dark" + ], + "base": { + "HP": 50, + "Attack": 92, + "Defense": 108, + "Sp. Attack": 92, + "Sp. Defense": 108, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 442, + "name": { + "english": "Spiritomb", + "japanese": "ミカルゲ", + "chinese": "花岩怪" + }, + "type": [ + "Ghost", + "Dark" + ], + "base": { + "HP": 50, + "Attack": 92, + "Defense": 108, + "Sp. Attack": 92, + "Sp. Defense": 108, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 443, + "name": { + "english": "Gible", + "japanese": "フカマル", + "chinese": "圆陆鲨" + }, + "type": [ + "Dragon", + "Ground" + ], + "base": { + "HP": 58, + "Attack": 70, + "Defense": 45, + "Sp. Attack": 40, + "Sp. Defense": 45, + "Speed": 42 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 443, + "name": { + "english": "Gible", + "japanese": "フカマル", + "chinese": "圆陆鲨" + }, + "type": [ + "Dragon", + "Ground" + ], + "base": { + "HP": 58, + "Attack": 70, + "Defense": 45, + "Sp. Attack": 40, + "Sp. Defense": 45, + "Speed": 42 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 444, + "name": { + "english": "Gabite", + "japanese": "ガバイト", + "chinese": "尖牙陆鲨" + }, + "type": [ + "Dragon", + "Ground" + ], + "base": { + "HP": 68, + "Attack": 90, + "Defense": 65, + "Sp. Attack": 50, + "Sp. Defense": 55, + "Speed": 82 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 444, + "name": { + "english": "Gabite", + "japanese": "ガバイト", + "chinese": "尖牙陆鲨" + }, + "type": [ + "Dragon", + "Ground" + ], + "base": { + "HP": 68, + "Attack": 90, + "Defense": 65, + "Sp. Attack": 50, + "Sp. Defense": 55, + "Speed": 82 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 445, + "name": { + "english": "Garchomp", + "japanese": "ガブリアス", + "chinese": "烈咬陆鲨" + }, + "type": [ + "Dragon", + "Ground" + ], + "base": { + "HP": 108, + "Attack": 130, + "Defense": 95, + "Sp. Attack": 80, + "Sp. Defense": 85, + "Speed": 102 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 445, + "name": { + "english": "Garchomp", + "japanese": "ガブリアス", + "chinese": "烈咬陆鲨" + }, + "type": [ + "Dragon", + "Ground" + ], + "base": { + "HP": 108, + "Attack": 170, + "Defense": 115, + "Sp. Attack": 120, + "Sp. Defense": 95, + "Speed": 92 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 445, + "name": { + "english": "Garchomp", + "japanese": "ガブリアス", + "chinese": "烈咬陆鲨" + }, + "type": [ + "Dragon", + "Ground" + ], + "base": { + "HP": 108, + "Attack": 130, + "Defense": 95, + "Sp. Attack": 80, + "Sp. Defense": 85, + "Speed": 102 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 446, + "name": { + "english": "Munchlax", + "japanese": "ゴンベ", + "chinese": "小卡比兽" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 135, + "Attack": 85, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 85, + "Speed": 5 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 446, + "name": { + "english": "Munchlax", + "japanese": "ゴンベ", + "chinese": "小卡比兽" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 135, + "Attack": 85, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 85, + "Speed": 5 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 447, + "name": { + "english": "Riolu", + "japanese": "リオル", + "chinese": "利欧路" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 40, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 35, + "Sp. Defense": 40, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 447, + "name": { + "english": "Riolu", + "japanese": "リオル", + "chinese": "利欧路" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 40, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 35, + "Sp. Defense": 40, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 448, + "name": { + "english": "Lucario", + "japanese": "ルカリオ", + "chinese": "路卡利欧" + }, + "type": [ + "Fighting", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 110, + "Defense": 70, + "Sp. Attack": 115, + "Sp. Defense": 70, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 448, + "name": { + "english": "Lucario", + "japanese": "ルカリオ", + "chinese": "路卡利欧" + }, + "type": [ + "Fighting", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 145, + "Defense": 88, + "Sp. Attack": 140, + "Sp. Defense": 70, + "Speed": 112 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 448, + "name": { + "english": "Lucario", + "japanese": "ルカリオ", + "chinese": "路卡利欧" + }, + "type": [ + "Fighting", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 110, + "Defense": 70, + "Sp. Attack": 115, + "Sp. Defense": 70, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 449, + "name": { + "english": "Hippopotas", + "japanese": "ヒポポタス", + "chinese": "沙河马" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 68, + "Attack": 72, + "Defense": 78, + "Sp. Attack": 38, + "Sp. Defense": 42, + "Speed": 32 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 449, + "name": { + "english": "Hippopotas", + "japanese": "ヒポポタス", + "chinese": "沙河马" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 68, + "Attack": 72, + "Defense": 78, + "Sp. Attack": 38, + "Sp. Defense": 42, + "Speed": 32 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 450, + "name": { + "english": "Hippowdon", + "japanese": "カバルドン", + "chinese": "河马兽" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 108, + "Attack": 112, + "Defense": 118, + "Sp. Attack": 68, + "Sp. Defense": 72, + "Speed": 47 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 450, + "name": { + "english": "Hippowdon", + "japanese": "カバルドン", + "chinese": "河马兽" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 108, + "Attack": 112, + "Defense": 118, + "Sp. Attack": 68, + "Sp. Defense": 72, + "Speed": 47 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 451, + "name": { + "english": "Skorupi", + "japanese": "スコルピ", + "chinese": "钳尾蝎" + }, + "type": [ + "Poison", + "Bug" + ], + "base": { + "HP": 40, + "Attack": 50, + "Defense": 90, + "Sp. Attack": 30, + "Sp. Defense": 55, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 451, + "name": { + "english": "Skorupi", + "japanese": "スコルピ", + "chinese": "钳尾蝎" + }, + "type": [ + "Poison", + "Bug" + ], + "base": { + "HP": 40, + "Attack": 50, + "Defense": 90, + "Sp. Attack": 30, + "Sp. Defense": 55, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 452, + "name": { + "english": "Drapion", + "japanese": "ドラピオン", + "chinese": "龙王蝎" + }, + "type": [ + "Poison", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 110, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 452, + "name": { + "english": "Drapion", + "japanese": "ドラピオン", + "chinese": "龙王蝎" + }, + "type": [ + "Poison", + "Dark" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 110, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 453, + "name": { + "english": "Croagunk", + "japanese": "グレッグル", + "chinese": "不良蛙" + }, + "type": [ + "Poison", + "Fighting" + ], + "base": { + "HP": 48, + "Attack": 61, + "Defense": 40, + "Sp. Attack": 61, + "Sp. Defense": 40, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 453, + "name": { + "english": "Croagunk", + "japanese": "グレッグル", + "chinese": "不良蛙" + }, + "type": [ + "Poison", + "Fighting" + ], + "base": { + "HP": 48, + "Attack": 61, + "Defense": 40, + "Sp. Attack": 61, + "Sp. Defense": 40, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 454, + "name": { + "english": "Toxicroak", + "japanese": "ドクロッグ", + "chinese": "毒骷蛙" + }, + "type": [ + "Poison", + "Fighting" + ], + "base": { + "HP": 83, + "Attack": 106, + "Defense": 65, + "Sp. Attack": 86, + "Sp. Defense": 65, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 454, + "name": { + "english": "Toxicroak", + "japanese": "ドクロッグ", + "chinese": "毒骷蛙" + }, + "type": [ + "Poison", + "Fighting" + ], + "base": { + "HP": 83, + "Attack": 106, + "Defense": 65, + "Sp. Attack": 86, + "Sp. Defense": 65, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 455, + "name": { + "english": "Carnivine", + "japanese": "マスキッパ", + "chinese": "尖牙笼" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 74, + "Attack": 100, + "Defense": 72, + "Sp. Attack": 90, + "Sp. Defense": 72, + "Speed": 46 + } + }, + { + "id": 455, + "name": { + "english": "Carnivine", + "japanese": "マスキッパ", + "chinese": "尖牙笼" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 74, + "Attack": 100, + "Defense": 72, + "Sp. Attack": 90, + "Sp. Defense": 72, + "Speed": 46 + } + }, + { + "id": 456, + "name": { + "english": "Finneon", + "japanese": "ケイコウオ", + "chinese": "荧光鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 49, + "Attack": 49, + "Defense": 56, + "Sp. Attack": 49, + "Sp. Defense": 61, + "Speed": 66 + } + }, + { + "id": 456, + "name": { + "english": "Finneon", + "japanese": "ケイコウオ", + "chinese": "荧光鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 49, + "Attack": 49, + "Defense": 56, + "Sp. Attack": 49, + "Sp. Defense": 61, + "Speed": 66 + } + }, + { + "id": 457, + "name": { + "english": "Lumineon", + "japanese": "ネオラント", + "chinese": "霓虹鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 69, + "Attack": 69, + "Defense": 76, + "Sp. Attack": 69, + "Sp. Defense": 86, + "Speed": 91 + } + }, + { + "id": 457, + "name": { + "english": "Lumineon", + "japanese": "ネオラント", + "chinese": "霓虹鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 69, + "Attack": 69, + "Defense": 76, + "Sp. Attack": 69, + "Sp. Defense": 86, + "Speed": 91 + } + }, + { + "id": 458, + "name": { + "english": "Mantyke", + "japanese": "タマンタ", + "chinese": "小球飞鱼" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 20, + "Defense": 50, + "Sp. Attack": 60, + "Sp. Defense": 120, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 458, + "name": { + "english": "Mantyke", + "japanese": "タマンタ", + "chinese": "小球飞鱼" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 20, + "Defense": 50, + "Sp. Attack": 60, + "Sp. Defense": 120, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 459, + "name": { + "english": "Snover", + "japanese": "ユキカブリ", + "chinese": "雪笠怪" + }, + "type": [ + "Grass", + "Ice" + ], + "base": { + "HP": 60, + "Attack": 62, + "Defense": 50, + "Sp. Attack": 62, + "Sp. Defense": 60, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 459, + "name": { + "english": "Snover", + "japanese": "ユキカブリ", + "chinese": "雪笠怪" + }, + "type": [ + "Grass", + "Ice" + ], + "base": { + "HP": 60, + "Attack": 62, + "Defense": 50, + "Sp. Attack": 62, + "Sp. Defense": 60, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 460, + "name": { + "english": "Abomasnow", + "japanese": "ユキノオー", + "chinese": "暴雪王" + }, + "type": [ + "Grass", + "Ice" + ], + "base": { + "HP": 90, + "Attack": 92, + "Defense": 75, + "Sp. Attack": 92, + "Sp. Defense": 85, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 460, + "name": { + "english": "Abomasnow", + "japanese": "ユキノオー", + "chinese": "暴雪王" + }, + "type": [ + "Grass", + "Ice" + ], + "base": { + "HP": 90, + "Attack": 132, + "Defense": 105, + "Sp. Attack": 132, + "Sp. Defense": 105, + "Speed": 30 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 460, + "name": { + "english": "Abomasnow", + "japanese": "ユキノオー", + "chinese": "暴雪王" + }, + "type": [ + "Grass", + "Ice" + ], + "base": { + "HP": 90, + "Attack": 92, + "Defense": 75, + "Sp. Attack": 92, + "Sp. Defense": 85, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 461, + "name": { + "english": "Weavile", + "japanese": "マニューラ", + "chinese": "玛狃拉" + }, + "type": [ + "Dark", + "Ice" + ], + "base": { + "HP": 70, + "Attack": 120, + "Defense": 65, + "Sp. Attack": 45, + "Sp. Defense": 85, + "Speed": 125 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 461, + "name": { + "english": "Weavile", + "japanese": "マニューラ", + "chinese": "玛狃拉" + }, + "type": [ + "Dark", + "Ice" + ], + "base": { + "HP": 70, + "Attack": 120, + "Defense": 65, + "Sp. Attack": 45, + "Sp. Defense": 85, + "Speed": 125 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 462, + "name": { + "english": "Magnezone", + "japanese": "ジバコイル", + "chinese": "自爆磁怪" + }, + "type": [ + "Electric", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 115, + "Sp. Attack": 130, + "Sp. Defense": 90, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 462, + "name": { + "english": "Magnezone", + "japanese": "ジバコイル", + "chinese": "自爆磁怪" + }, + "type": [ + "Electric", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 70, + "Defense": 115, + "Sp. Attack": 130, + "Sp. Defense": 90, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 463, + "name": { + "english": "Lickilicky", + "japanese": "ベロベルト", + "chinese": "大舌舔" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 110, + "Attack": 85, + "Defense": 95, + "Sp. Attack": 80, + "Sp. Defense": 95, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 463, + "name": { + "english": "Lickilicky", + "japanese": "ベロベルト", + "chinese": "大舌舔" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 110, + "Attack": 85, + "Defense": 95, + "Sp. Attack": 80, + "Sp. Defense": 95, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 464, + "name": { + "english": "Rhyperior", + "japanese": "ドサイドン", + "chinese": "超甲狂犀" + }, + "type": [ + "Ground", + "Rock" + ], + "base": { + "HP": 115, + "Attack": 140, + "Defense": 130, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 464, + "name": { + "english": "Rhyperior", + "japanese": "ドサイドン", + "chinese": "超甲狂犀" + }, + "type": [ + "Ground", + "Rock" + ], + "base": { + "HP": 115, + "Attack": 140, + "Defense": 130, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 465, + "name": { + "english": "Tangrowth", + "japanese": "モジャンボ", + "chinese": "巨蔓藤" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 125, + "Sp. Attack": 110, + "Sp. Defense": 50, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 465, + "name": { + "english": "Tangrowth", + "japanese": "モジャンボ", + "chinese": "巨蔓藤" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 125, + "Sp. Attack": 110, + "Sp. Defense": 50, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 466, + "name": { + "english": "Electivire", + "japanese": "エレキブル", + "chinese": "电击魔兽" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 75, + "Attack": 123, + "Defense": 67, + "Sp. Attack": 95, + "Sp. Defense": 85, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 466, + "name": { + "english": "Electivire", + "japanese": "エレキブル", + "chinese": "电击魔兽" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 75, + "Attack": 123, + "Defense": 67, + "Sp. Attack": 95, + "Sp. Defense": 85, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 467, + "name": { + "english": "Magmortar", + "japanese": "ブーバーン", + "chinese": "鸭嘴炎兽" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 67, + "Sp. Attack": 125, + "Sp. Defense": 95, + "Speed": 83 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 467, + "name": { + "english": "Magmortar", + "japanese": "ブーバーン", + "chinese": "鸭嘴炎兽" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 67, + "Sp. Attack": 125, + "Sp. Defense": 95, + "Speed": 83 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 468, + "name": { + "english": "Togekiss", + "japanese": "トゲキッス", + "chinese": "波克基斯" + }, + "type": [ + "Fairy", + "Flying" + ], + "base": { + "HP": 85, + "Attack": 50, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 115, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 468, + "name": { + "english": "Togekiss", + "japanese": "トゲキッス", + "chinese": "波克基斯" + }, + "type": [ + "Fairy", + "Flying" + ], + "base": { + "HP": 85, + "Attack": 50, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 115, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 469, + "name": { + "english": "Yanmega", + "japanese": "メガヤンマ", + "chinese": "远古巨蜓" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 86, + "Attack": 76, + "Defense": 86, + "Sp. Attack": 116, + "Sp. Defense": 56, + "Speed": 95 + } + }, + { + "id": 469, + "name": { + "english": "Yanmega", + "japanese": "メガヤンマ", + "chinese": "远古巨蜓" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 86, + "Attack": 76, + "Defense": 86, + "Sp. Attack": 116, + "Sp. Defense": 56, + "Speed": 95 + } + }, + { + "id": 470, + "name": { + "english": "Leafeon", + "japanese": "リーフィア", + "chinese": "叶伊布" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 65, + "Attack": 110, + "Defense": 130, + "Sp. Attack": 60, + "Sp. Defense": 65, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 470, + "name": { + "english": "Leafeon", + "japanese": "リーフィア", + "chinese": "叶伊布" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 65, + "Attack": 110, + "Defense": 130, + "Sp. Attack": 60, + "Sp. Defense": 65, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 471, + "name": { + "english": "Glaceon", + "japanese": "グレイシア", + "chinese": "冰伊布" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 65, + "Attack": 60, + "Defense": 110, + "Sp. Attack": 130, + "Sp. Defense": 95, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 471, + "name": { + "english": "Glaceon", + "japanese": "グレイシア", + "chinese": "冰伊布" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 65, + "Attack": 60, + "Defense": 110, + "Sp. Attack": 130, + "Sp. Defense": 95, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 472, + "name": { + "english": "Gliscor", + "japanese": "グライオン", + "chinese": "天蝎王" + }, + "type": [ + "Ground", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 125, + "Sp. Attack": 45, + "Sp. Defense": 75, + "Speed": 95 + } + }, + { + "id": 472, + "name": { + "english": "Gliscor", + "japanese": "グライオン", + "chinese": "天蝎王" + }, + "type": [ + "Ground", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 125, + "Sp. Attack": 45, + "Sp. Defense": 75, + "Speed": 95 + } + }, + { + "id": 473, + "name": { + "english": "Mamoswine", + "japanese": "マンムー", + "chinese": "象牙猪" + }, + "type": [ + "Ice", + "Ground" + ], + "base": { + "HP": 110, + "Attack": 130, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 60, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 473, + "name": { + "english": "Mamoswine", + "japanese": "マンムー", + "chinese": "象牙猪" + }, + "type": [ + "Ice", + "Ground" + ], + "base": { + "HP": 110, + "Attack": 130, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 60, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 474, + "name": { + "english": "Porygon-Z", + "japanese": "ポリゴンZ", + "chinese": "多边兽Z" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 85, + "Attack": 80, + "Defense": 70, + "Sp. Attack": 135, + "Sp. Defense": 75, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 474, + "name": { + "english": "Porygon-Z", + "japanese": "ポリゴンZ", + "chinese": "多边兽Z" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 85, + "Attack": 80, + "Defense": 70, + "Sp. Attack": 135, + "Sp. Defense": 75, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 475, + "name": { + "english": "Gallade", + "japanese": "エルレイド", + "chinese": "艾路雷朵" + }, + "type": [ + "Psychic", + "Fighting" + ], + "base": { + "HP": 68, + "Attack": 125, + "Defense": 65, + "Sp. Attack": 65, + "Sp. Defense": 115, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 475, + "name": { + "english": "Gallade", + "japanese": "エルレイド", + "chinese": "艾路雷朵" + }, + "type": [ + "Psychic", + "Fighting" + ], + "base": { + "HP": 68, + "Attack": 165, + "Defense": 95, + "Sp. Attack": 65, + "Sp. Defense": 115, + "Speed": 110 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 475, + "name": { + "english": "Gallade", + "japanese": "エルレイド", + "chinese": "艾路雷朵" + }, + "type": [ + "Psychic", + "Fighting" + ], + "base": { + "HP": 68, + "Attack": 125, + "Defense": 65, + "Sp. Attack": 65, + "Sp. Defense": 115, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 476, + "name": { + "english": "Probopass", + "japanese": "ダイノーズ", + "chinese": "大朝北鼻" + }, + "type": [ + "Rock", + "Steel" + ], + "base": { + "HP": 60, + "Attack": 55, + "Defense": 145, + "Sp. Attack": 75, + "Sp. Defense": 150, + "Speed": 40 + } + }, + { + "id": 476, + "name": { + "english": "Probopass", + "japanese": "ダイノーズ", + "chinese": "大朝北鼻" + }, + "type": [ + "Rock", + "Steel" + ], + "base": { + "HP": 60, + "Attack": 55, + "Defense": 145, + "Sp. Attack": 75, + "Sp. Defense": 150, + "Speed": 40 + } + }, + { + "id": 477, + "name": { + "english": "Dusknoir", + "japanese": "ヨノワール", + "chinese": "黑夜魔灵" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 45, + "Attack": 100, + "Defense": 135, + "Sp. Attack": 65, + "Sp. Defense": 135, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 477, + "name": { + "english": "Dusknoir", + "japanese": "ヨノワール", + "chinese": "黑夜魔灵" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 45, + "Attack": 100, + "Defense": 135, + "Sp. Attack": 65, + "Sp. Defense": 135, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 478, + "name": { + "english": "Froslass", + "japanese": "ユキメノコ", + "chinese": "雪妖女" + }, + "type": [ + "Ice", + "Ghost" + ], + "base": { + "HP": 70, + "Attack": 80, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 70, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 478, + "name": { + "english": "Froslass", + "japanese": "ユキメノコ", + "chinese": "雪妖女" + }, + "type": [ + "Ice", + "Ghost" + ], + "base": { + "HP": 70, + "Attack": 80, + "Defense": 70, + "Sp. Attack": 80, + "Sp. Defense": 70, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 479, + "name": { + "english": "Rotom", + "japanese": "ロトム", + "chinese": "洛托姆" + }, + "type": [ + "Electric", + "Ghost" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 77, + "Sp. Attack": 95, + "Sp. Defense": 77, + "Speed": 91 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 479, + "name": { + "english": "Rotom", + "japanese": "ロトム", + "chinese": "洛托姆" + }, + "type": [ + "Electric", + "Fire" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 107, + "Sp. Attack": 105, + "Sp. Defense": 107, + "Speed": 86 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "heat" + } + }, + { + "id": 479, + "name": { + "english": "Rotom", + "japanese": "ロトム", + "chinese": "洛托姆" + }, + "type": [ + "Electric", + "Water" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 107, + "Sp. Attack": 105, + "Sp. Defense": 107, + "Speed": 86 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "wash" + } + }, + { + "id": 479, + "name": { + "english": "Rotom", + "japanese": "ロトム", + "chinese": "洛托姆" + }, + "type": [ + "Electric", + "Ice" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 107, + "Sp. Attack": 105, + "Sp. Defense": 107, + "Speed": 86 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "frost" + } + }, + { + "id": 479, + "name": { + "english": "Rotom", + "japanese": "ロトム", + "chinese": "洛托姆" + }, + "type": [ + "Electric", + "Flying" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 107, + "Sp. Attack": 105, + "Sp. Defense": 107, + "Speed": 86 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "fan" + } + }, + { + "id": 479, + "name": { + "english": "Rotom", + "japanese": "ロトム", + "chinese": "洛托姆" + }, + "type": [ + "Electric", + "Grass" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 107, + "Sp. Attack": 105, + "Sp. Defense": 107, + "Speed": 86 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mow" + } + }, + { + "id": 479, + "name": { + "english": "Rotom", + "japanese": "ロトム", + "chinese": "洛托姆" + }, + "type": [ + "Electric", + "Ghost" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 77, + "Sp. Attack": 95, + "Sp. Defense": 77, + "Speed": 91 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 480, + "name": { + "english": "Uxie", + "japanese": "ユクシー", + "chinese": "由克希" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 130, + "Sp. Attack": 75, + "Sp. Defense": 130, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 480, + "name": { + "english": "Uxie", + "japanese": "ユクシー", + "chinese": "由克希" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 130, + "Sp. Attack": 75, + "Sp. Defense": 130, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 481, + "name": { + "english": "Mesprit", + "japanese": "エムリット", + "chinese": "艾姆利多" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 105, + "Defense": 105, + "Sp. Attack": 105, + "Sp. Defense": 105, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 481, + "name": { + "english": "Mesprit", + "japanese": "エムリット", + "chinese": "艾姆利多" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 80, + "Attack": 105, + "Defense": 105, + "Sp. Attack": 105, + "Sp. Defense": 105, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 482, + "name": { + "english": "Azelf", + "japanese": "アグノム", + "chinese": "亚克诺姆" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 125, + "Defense": 70, + "Sp. Attack": 125, + "Sp. Defense": 70, + "Speed": 115 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 482, + "name": { + "english": "Azelf", + "japanese": "アグノム", + "chinese": "亚克诺姆" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 125, + "Defense": 70, + "Sp. Attack": 125, + "Sp. Defense": 70, + "Speed": 115 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 483, + "name": { + "english": "Dialga", + "japanese": "ディアルガ", + "chinese": "帝牙卢卡" + }, + "type": [ + "Steel", + "Dragon" + ], + "base": { + "HP": 100, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 150, + "Sp. Defense": 100, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 483, + "name": { + "english": "Dialga", + "japanese": "ディアルガ", + "chinese": "帝牙卢卡" + }, + "type": [ + "Steel", + "Dragon" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 120, + "Sp. Attack": 150, + "Sp. Defense": 120, + "Speed": 90 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "origin" + } + }, + { + "id": 483, + "name": { + "english": "Dialga", + "japanese": "ディアルガ", + "chinese": "帝牙卢卡" + }, + "type": [ + "Steel", + "Dragon" + ], + "base": { + "HP": 100, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 150, + "Sp. Defense": 100, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 484, + "name": { + "english": "Palkia", + "japanese": "パルキア", + "chinese": "帕路奇亚" + }, + "type": [ + "Water", + "Dragon" + ], + "base": { + "HP": 90, + "Attack": 120, + "Defense": 100, + "Sp. Attack": 150, + "Sp. Defense": 120, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 484, + "name": { + "english": "Palkia", + "japanese": "パルキア", + "chinese": "帕路奇亚" + }, + "type": [ + "Water", + "Dragon" + ], + "base": { + "HP": 90, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 150, + "Sp. Defense": 120, + "Speed": 120 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "origin" + } + }, + { + "id": 484, + "name": { + "english": "Palkia", + "japanese": "パルキア", + "chinese": "帕路奇亚" + }, + "type": [ + "Water", + "Dragon" + ], + "base": { + "HP": 90, + "Attack": 120, + "Defense": 100, + "Sp. Attack": 150, + "Sp. Defense": 120, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 485, + "name": { + "english": "Heatran", + "japanese": "ヒードラン", + "chinese": "席多蓝恩" + }, + "type": [ + "Fire", + "Steel" + ], + "base": { + "HP": 91, + "Attack": 90, + "Defense": 106, + "Sp. Attack": 130, + "Sp. Defense": 106, + "Speed": 77 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 485, + "name": { + "english": "Heatran", + "japanese": "ヒードラン", + "chinese": "席多蓝恩" + }, + "type": [ + "Fire", + "Steel" + ], + "base": { + "HP": 91, + "Attack": 90, + "Defense": 106, + "Sp. Attack": 130, + "Sp. Defense": 106, + "Speed": 77 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 486, + "name": { + "english": "Regigigas", + "japanese": "レジギガス", + "chinese": "雷吉奇卡斯" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 110, + "Attack": 160, + "Defense": 110, + "Sp. Attack": 80, + "Sp. Defense": 110, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 486, + "name": { + "english": "Regigigas", + "japanese": "レジギガス", + "chinese": "雷吉奇卡斯" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 110, + "Attack": 160, + "Defense": 110, + "Sp. Attack": 80, + "Sp. Defense": 110, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 487, + "name": { + "english": "Giratina", + "japanese": "ギラティナ", + "chinese": "骑拉帝纳" + }, + "type": [ + "Ghost", + "Dragon" + ], + "base": { + "HP": 150, + "Attack": 100, + "Defense": 120, + "Sp. Attack": 100, + "Sp. Defense": 120, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 487, + "name": { + "english": "Giratina", + "japanese": "ギラティナ", + "chinese": "骑拉帝纳" + }, + "type": [ + "Ghost", + "Dragon" + ], + "base": { + "HP": 150, + "Attack": 120, + "Defense": 100, + "Sp. Attack": 120, + "Sp. Defense": 100, + "Speed": 90 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "origin" + } + }, + { + "id": 487, + "name": { + "english": "Giratina", + "japanese": "ギラティナ", + "chinese": "骑拉帝纳" + }, + "type": [ + "Ghost", + "Dragon" + ], + "base": { + "HP": 150, + "Attack": 100, + "Defense": 120, + "Sp. Attack": 100, + "Sp. Defense": 120, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 488, + "name": { + "english": "Cresselia", + "japanese": "クレセリア", + "chinese": "克雷色利亚" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 120, + "Attack": 70, + "Defense": 120, + "Sp. Attack": 75, + "Sp. Defense": 130, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 488, + "name": { + "english": "Cresselia", + "japanese": "クレセリア", + "chinese": "克雷色利亚" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 120, + "Attack": 70, + "Defense": 120, + "Sp. Attack": 75, + "Sp. Defense": 130, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 489, + "name": { + "english": "Phione", + "japanese": "フィオネ", + "chinese": "霏欧纳" + }, + "type": [ + "Water" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 80 + } + }, + { + "id": 489, + "name": { + "english": "Phione", + "japanese": "フィオネ", + "chinese": "霏欧纳" + }, + "type": [ + "Water" + ], + "base": { + "HP": 80, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 80 + } + }, + { + "id": 490, + "name": { + "english": "Manaphy", + "japanese": "マナフィ", + "chinese": "玛纳霏" + }, + "type": [ + "Water" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + } + }, + { + "id": 490, + "name": { + "english": "Manaphy", + "japanese": "マナフィ", + "chinese": "玛纳霏" + }, + "type": [ + "Water" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + } + }, + { + "id": 491, + "name": { + "english": "Darkrai", + "japanese": "ダークライ", + "chinese": "达克莱伊" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 90, + "Sp. Attack": 135, + "Sp. Defense": 90, + "Speed": 125 + } + }, + { + "id": 491, + "name": { + "english": "Darkrai", + "japanese": "ダークライ", + "chinese": "达克莱伊" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 90, + "Sp. Attack": 135, + "Sp. Defense": 90, + "Speed": 125 + } + }, + { + "id": 492, + "name": { + "english": "Shaymin", + "japanese": "シェイミ", + "chinese": "谢米" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + } + }, + { + "id": 492, + "name": { + "english": "Shaymin", + "japanese": "シェイミ", + "chinese": "谢米" + }, + "type": [ + "Grass", + "Flying" + ], + "base": { + "HP": 100, + "Attack": 103, + "Defense": 75, + "Sp. Attack": 120, + "Sp. Defense": 75, + "Speed": 127 + }, + "form": { + "key": "sky" + } + }, + { + "id": 492, + "name": { + "english": "Shaymin", + "japanese": "シェイミ", + "chinese": "谢米" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "bug" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "dark" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "dragon" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "electric" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "fairy" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "fighting" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "fire" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Flying" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "flying" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "ghost" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "grass" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "ground" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "ice" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "poison" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "psychic" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "rock" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "steel" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Water" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + }, + "form": { + "key": "water" + } + }, + { + "id": 493, + "name": { + "english": "Arceus", + "japanese": "アルセウス", + "chinese": "阿尔宙斯" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 120, + "Attack": 120, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 120, + "Speed": 120 + } + }, + { + "id": 494, + "name": { + "english": "Victini", + "japanese": "ビクティニ", + "chinese": "比克提尼" + }, + "type": [ + "Psychic", + "Fire" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 494, + "name": { + "english": "Victini", + "japanese": "ビクティニ", + "chinese": "比克提尼" + }, + "type": [ + "Psychic", + "Fire" + ], + "base": { + "HP": 100, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 495, + "name": { + "english": "Snivy", + "japanese": "ツタージャ", + "chinese": "藤藤蛇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 45, + "Attack": 45, + "Defense": 55, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 63 + } + }, + { + "id": 495, + "name": { + "english": "Snivy", + "japanese": "ツタージャ", + "chinese": "藤藤蛇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 45, + "Attack": 45, + "Defense": 55, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 63 + } + }, + { + "id": 496, + "name": { + "english": "Servine", + "japanese": "ジャノビー", + "chinese": "青藤蛇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 83 + } + }, + { + "id": 496, + "name": { + "english": "Servine", + "japanese": "ジャノビー", + "chinese": "青藤蛇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 60, + "Sp. Defense": 75, + "Speed": 83 + } + }, + { + "id": 497, + "name": { + "english": "Serperior", + "japanese": "ジャローダ", + "chinese": "君主蛇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 95, + "Sp. Attack": 75, + "Sp. Defense": 95, + "Speed": 113 + } + }, + { + "id": 497, + "name": { + "english": "Serperior", + "japanese": "ジャローダ", + "chinese": "君主蛇" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 95, + "Sp. Attack": 75, + "Sp. Defense": 95, + "Speed": 113 + } + }, + { + "id": 498, + "name": { + "english": "Tepig", + "japanese": "ポカブ", + "chinese": "暖暖猪" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 65, + "Attack": 63, + "Defense": 45, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 45 + } + }, + { + "id": 498, + "name": { + "english": "Tepig", + "japanese": "ポカブ", + "chinese": "暖暖猪" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 65, + "Attack": 63, + "Defense": 45, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 45 + } + }, + { + "id": 499, + "name": { + "english": "Pignite", + "japanese": "チャオブー", + "chinese": "炒炒猪" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 90, + "Attack": 93, + "Defense": 55, + "Sp. Attack": 70, + "Sp. Defense": 55, + "Speed": 55 + } + }, + { + "id": 499, + "name": { + "english": "Pignite", + "japanese": "チャオブー", + "chinese": "炒炒猪" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 90, + "Attack": 93, + "Defense": 55, + "Sp. Attack": 70, + "Sp. Defense": 55, + "Speed": 55 + } + }, + { + "id": 500, + "name": { + "english": "Emboar", + "japanese": "エンブオー", + "chinese": "炎武王" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 110, + "Attack": 123, + "Defense": 65, + "Sp. Attack": 100, + "Sp. Defense": 65, + "Speed": 65 + } + }, + { + "id": 500, + "name": { + "english": "Emboar", + "japanese": "エンブオー", + "chinese": "炎武王" + }, + "type": [ + "Fire", + "Fighting" + ], + "base": { + "HP": 110, + "Attack": 123, + "Defense": 65, + "Sp. Attack": 100, + "Sp. Defense": 65, + "Speed": 65 + } + }, + { + "id": 501, + "name": { + "english": "Oshawott", + "japanese": "ミジュマル", + "chinese": "水水獭" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 55, + "Defense": 45, + "Sp. Attack": 63, + "Sp. Defense": 45, + "Speed": 45 + } + }, + { + "id": 501, + "name": { + "english": "Oshawott", + "japanese": "ミジュマル", + "chinese": "水水獭" + }, + "type": [ + "Water" + ], + "base": { + "HP": 55, + "Attack": 55, + "Defense": 45, + "Sp. Attack": 63, + "Sp. Defense": 45, + "Speed": 45 + } + }, + { + "id": 502, + "name": { + "english": "Dewott", + "japanese": "フタチマル", + "chinese": "双刃丸" + }, + "type": [ + "Water" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 83, + "Sp. Defense": 60, + "Speed": 60 + } + }, + { + "id": 502, + "name": { + "english": "Dewott", + "japanese": "フタチマル", + "chinese": "双刃丸" + }, + "type": [ + "Water" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 83, + "Sp. Defense": 60, + "Speed": 60 + } + }, + { + "id": 503, + "name": { + "english": "Samurott", + "japanese": "ダイケンキ", + "chinese": "大剑鬼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 95, + "Attack": 100, + "Defense": 85, + "Sp. Attack": 108, + "Sp. Defense": 70, + "Speed": 70 + }, + "form": { + "key": "hisuian" + } + }, + { + "id": 503, + "name": { + "english": "Samurott", + "japanese": "ダイケンキ", + "chinese": "大剑鬼" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 90, + "Attack": 108, + "Defense": 80, + "Sp. Attack": 100, + "Sp. Defense": 65, + "Speed": 85 + }, + "form": { + "key": "hisui" + } + }, + { + "id": 503, + "name": { + "english": "Samurott", + "japanese": "ダイケンキ", + "chinese": "大剑鬼" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 90, + "Attack": 108, + "Defense": 80, + "Sp. Attack": 100, + "Sp. Defense": 65, + "Speed": 85 + }, + "form": { + "key": "hisuian" + } + }, + { + "id": 503, + "name": { + "english": "Samurott", + "japanese": "ダイケンキ", + "chinese": "大剑鬼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 95, + "Attack": 100, + "Defense": 85, + "Sp. Attack": 108, + "Sp. Defense": 70, + "Speed": 70 + } + }, + { + "id": 504, + "name": { + "english": "Patrat", + "japanese": "ミネズミ", + "chinese": "探探鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 45, + "Attack": 55, + "Defense": 39, + "Sp. Attack": 35, + "Sp. Defense": 39, + "Speed": 42 + } + }, + { + "id": 504, + "name": { + "english": "Patrat", + "japanese": "ミネズミ", + "chinese": "探探鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 45, + "Attack": 55, + "Defense": 39, + "Sp. Attack": 35, + "Sp. Defense": 39, + "Speed": 42 + } + }, + { + "id": 505, + "name": { + "english": "Watchog", + "japanese": "ミルホッグ", + "chinese": "步哨鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 69, + "Sp. Attack": 60, + "Sp. Defense": 69, + "Speed": 77 + } + }, + { + "id": 505, + "name": { + "english": "Watchog", + "japanese": "ミルホッグ", + "chinese": "步哨鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 69, + "Sp. Attack": 60, + "Sp. Defense": 69, + "Speed": 77 + } + }, + { + "id": 506, + "name": { + "english": "Lillipup", + "japanese": "ヨーテリー", + "chinese": "小约克" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 45, + "Sp. Attack": 25, + "Sp. Defense": 45, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 506, + "name": { + "english": "Lillipup", + "japanese": "ヨーテリー", + "chinese": "小约克" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 45, + "Sp. Attack": 25, + "Sp. Defense": 45, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 507, + "name": { + "english": "Herdier", + "japanese": "ハーデリア", + "chinese": "哈约克" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 65, + "Attack": 80, + "Defense": 65, + "Sp. Attack": 35, + "Sp. Defense": 65, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 507, + "name": { + "english": "Herdier", + "japanese": "ハーデリア", + "chinese": "哈约克" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 65, + "Attack": 80, + "Defense": 65, + "Sp. Attack": 35, + "Sp. Defense": 65, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 508, + "name": { + "english": "Stoutland", + "japanese": "ムーランド", + "chinese": "长毛狗" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 85, + "Attack": 110, + "Defense": 90, + "Sp. Attack": 45, + "Sp. Defense": 90, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 508, + "name": { + "english": "Stoutland", + "japanese": "ムーランド", + "chinese": "长毛狗" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 85, + "Attack": 110, + "Defense": 90, + "Sp. Attack": 45, + "Sp. Defense": 90, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 509, + "name": { + "english": "Purrloin", + "japanese": "チョロネコ", + "chinese": "扒手猫" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 41, + "Attack": 50, + "Defense": 37, + "Sp. Attack": 50, + "Sp. Defense": 37, + "Speed": 66 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 509, + "name": { + "english": "Purrloin", + "japanese": "チョロネコ", + "chinese": "扒手猫" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 41, + "Attack": 50, + "Defense": 37, + "Sp. Attack": 50, + "Sp. Defense": 37, + "Speed": 66 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 510, + "name": { + "english": "Liepard", + "japanese": "レパルダス", + "chinese": "酷豹" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 64, + "Attack": 88, + "Defense": 50, + "Sp. Attack": 88, + "Sp. Defense": 50, + "Speed": 106 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 510, + "name": { + "english": "Liepard", + "japanese": "レパルダス", + "chinese": "酷豹" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 64, + "Attack": 88, + "Defense": 50, + "Sp. Attack": 88, + "Sp. Defense": 50, + "Speed": 106 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 511, + "name": { + "english": "Pansage", + "japanese": "ヤナップ", + "chinese": "花椰猴" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 48, + "Sp. Attack": 53, + "Sp. Defense": 48, + "Speed": 64 + } + }, + { + "id": 511, + "name": { + "english": "Pansage", + "japanese": "ヤナップ", + "chinese": "花椰猴" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 48, + "Sp. Attack": 53, + "Sp. Defense": 48, + "Speed": 64 + } + }, + { + "id": 512, + "name": { + "english": "Simisage", + "japanese": "ヤナッキー", + "chinese": "花椰猿" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 98, + "Sp. Defense": 63, + "Speed": 101 + } + }, + { + "id": 512, + "name": { + "english": "Simisage", + "japanese": "ヤナッキー", + "chinese": "花椰猿" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 98, + "Sp. Defense": 63, + "Speed": 101 + } + }, + { + "id": 513, + "name": { + "english": "Pansear", + "japanese": "バオップ", + "chinese": "爆香猴" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 48, + "Sp. Attack": 53, + "Sp. Defense": 48, + "Speed": 64 + } + }, + { + "id": 513, + "name": { + "english": "Pansear", + "japanese": "バオップ", + "chinese": "爆香猴" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 48, + "Sp. Attack": 53, + "Sp. Defense": 48, + "Speed": 64 + } + }, + { + "id": 514, + "name": { + "english": "Simisear", + "japanese": "バオッキー", + "chinese": "爆香猿" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 75, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 98, + "Sp. Defense": 63, + "Speed": 101 + } + }, + { + "id": 514, + "name": { + "english": "Simisear", + "japanese": "バオッキー", + "chinese": "爆香猿" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 75, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 98, + "Sp. Defense": 63, + "Speed": 101 + } + }, + { + "id": 515, + "name": { + "english": "Panpour", + "japanese": "ヒヤップ", + "chinese": "冷水猴" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 48, + "Sp. Attack": 53, + "Sp. Defense": 48, + "Speed": 64 + } + }, + { + "id": 515, + "name": { + "english": "Panpour", + "japanese": "ヒヤップ", + "chinese": "冷水猴" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 48, + "Sp. Attack": 53, + "Sp. Defense": 48, + "Speed": 64 + } + }, + { + "id": 516, + "name": { + "english": "Simipour", + "japanese": "ヒヤッキー", + "chinese": "冷水猿" + }, + "type": [ + "Water" + ], + "base": { + "HP": 75, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 98, + "Sp. Defense": 63, + "Speed": 101 + } + }, + { + "id": 516, + "name": { + "english": "Simipour", + "japanese": "ヒヤッキー", + "chinese": "冷水猿" + }, + "type": [ + "Water" + ], + "base": { + "HP": 75, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 98, + "Sp. Defense": 63, + "Speed": 101 + } + }, + { + "id": 517, + "name": { + "english": "Munna", + "japanese": "ムンナ", + "chinese": "食梦梦" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 76, + "Attack": 25, + "Defense": 45, + "Sp. Attack": 67, + "Sp. Defense": 55, + "Speed": 24 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 517, + "name": { + "english": "Munna", + "japanese": "ムンナ", + "chinese": "食梦梦" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 76, + "Attack": 25, + "Defense": 45, + "Sp. Attack": 67, + "Sp. Defense": 55, + "Speed": 24 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 518, + "name": { + "english": "Musharna", + "japanese": "ムシャーナ", + "chinese": "梦梦蚀" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 116, + "Attack": 55, + "Defense": 85, + "Sp. Attack": 107, + "Sp. Defense": 95, + "Speed": 29 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 518, + "name": { + "english": "Musharna", + "japanese": "ムシャーナ", + "chinese": "梦梦蚀" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 116, + "Attack": 55, + "Defense": 85, + "Sp. Attack": 107, + "Sp. Defense": 95, + "Speed": 29 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 519, + "name": { + "english": "Pidove", + "japanese": "マメパト", + "chinese": "豆豆鸽" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 50, + "Attack": 55, + "Defense": 50, + "Sp. Attack": 36, + "Sp. Defense": 30, + "Speed": 43 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 519, + "name": { + "english": "Pidove", + "japanese": "マメパト", + "chinese": "豆豆鸽" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 50, + "Attack": 55, + "Defense": 50, + "Sp. Attack": 36, + "Sp. Defense": 30, + "Speed": 43 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 520, + "name": { + "english": "Tranquill", + "japanese": "ハトーボー", + "chinese": "咕咕鸽" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 62, + "Attack": 77, + "Defense": 62, + "Sp. Attack": 50, + "Sp. Defense": 42, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 520, + "name": { + "english": "Tranquill", + "japanese": "ハトーボー", + "chinese": "咕咕鸽" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 62, + "Attack": 77, + "Defense": 62, + "Sp. Attack": 50, + "Sp. Defense": 42, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 521, + "name": { + "english": "Unfezant", + "japanese": "ケンホロウ", + "chinese": "高傲雉鸡" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 80, + "Attack": 115, + "Defense": 80, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 93 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 521, + "name": { + "english": "Unfezant", + "japanese": "ケンホロウ", + "chinese": "高傲雉鸡" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 80, + "Attack": 115, + "Defense": 80, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 93 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 522, + "name": { + "english": "Blitzle", + "japanese": "シママ", + "chinese": "斑斑马" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 32, + "Sp. Attack": 50, + "Sp. Defense": 32, + "Speed": 76 + } + }, + { + "id": 522, + "name": { + "english": "Blitzle", + "japanese": "シママ", + "chinese": "斑斑马" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 45, + "Attack": 60, + "Defense": 32, + "Sp. Attack": 50, + "Sp. Defense": 32, + "Speed": 76 + } + }, + { + "id": 523, + "name": { + "english": "Zebstrika", + "japanese": "ゼブライカ", + "chinese": "雷电斑马" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 75, + "Attack": 100, + "Defense": 63, + "Sp. Attack": 80, + "Sp. Defense": 63, + "Speed": 116 + } + }, + { + "id": 523, + "name": { + "english": "Zebstrika", + "japanese": "ゼブライカ", + "chinese": "雷电斑马" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 75, + "Attack": 100, + "Defense": 63, + "Sp. Attack": 80, + "Sp. Defense": 63, + "Speed": 116 + } + }, + { + "id": 524, + "name": { + "english": "Roggenrola", + "japanese": "ダンゴロ", + "chinese": "石丸子" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 55, + "Attack": 75, + "Defense": 85, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 524, + "name": { + "english": "Roggenrola", + "japanese": "ダンゴロ", + "chinese": "石丸子" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 55, + "Attack": 75, + "Defense": 85, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 15 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 525, + "name": { + "english": "Boldore", + "japanese": "ガントル", + "chinese": "地幔岩" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 70, + "Attack": 105, + "Defense": 105, + "Sp. Attack": 50, + "Sp. Defense": 40, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 525, + "name": { + "english": "Boldore", + "japanese": "ガントル", + "chinese": "地幔岩" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 70, + "Attack": 105, + "Defense": 105, + "Sp. Attack": 50, + "Sp. Defense": 40, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 526, + "name": { + "english": "Gigalith", + "japanese": "ギガイアス", + "chinese": "庞岩怪" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 85, + "Attack": 135, + "Defense": 130, + "Sp. Attack": 60, + "Sp. Defense": 80, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 526, + "name": { + "english": "Gigalith", + "japanese": "ギガイアス", + "chinese": "庞岩怪" + }, + "type": [ + "Rock" + ], + "base": { + "HP": 85, + "Attack": 135, + "Defense": 130, + "Sp. Attack": 60, + "Sp. Defense": 80, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 527, + "name": { + "english": "Woobat", + "japanese": "コロモリ", + "chinese": "滚滚蝙蝠" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 45, + "Defense": 43, + "Sp. Attack": 55, + "Sp. Defense": 43, + "Speed": 72 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 527, + "name": { + "english": "Woobat", + "japanese": "コロモリ", + "chinese": "滚滚蝙蝠" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 65, + "Attack": 45, + "Defense": 43, + "Sp. Attack": 55, + "Sp. Defense": 43, + "Speed": 72 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 528, + "name": { + "english": "Swoobat", + "japanese": "ココロモリ", + "chinese": "心蝙蝠" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 67, + "Attack": 57, + "Defense": 55, + "Sp. Attack": 77, + "Sp. Defense": 55, + "Speed": 114 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 528, + "name": { + "english": "Swoobat", + "japanese": "ココロモリ", + "chinese": "心蝙蝠" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 67, + "Attack": 57, + "Defense": 55, + "Sp. Attack": 77, + "Sp. Defense": 55, + "Speed": 114 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 529, + "name": { + "english": "Drilbur", + "japanese": "モグリュー", + "chinese": "螺钉地鼠" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 45, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 529, + "name": { + "english": "Drilbur", + "japanese": "モグリュー", + "chinese": "螺钉地鼠" + }, + "type": [ + "Ground" + ], + "base": { + "HP": 60, + "Attack": 85, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 45, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 530, + "name": { + "english": "Excadrill", + "japanese": "ドリュウズ", + "chinese": "龙头地鼠" + }, + "type": [ + "Ground", + "Steel" + ], + "base": { + "HP": 110, + "Attack": 135, + "Defense": 60, + "Sp. Attack": 50, + "Sp. Defense": 65, + "Speed": 88 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 530, + "name": { + "english": "Excadrill", + "japanese": "ドリュウズ", + "chinese": "龙头地鼠" + }, + "type": [ + "Ground", + "Steel" + ], + "base": { + "HP": 110, + "Attack": 135, + "Defense": 60, + "Sp. Attack": 50, + "Sp. Defense": 65, + "Speed": 88 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 531, + "name": { + "english": "Audino", + "japanese": "タブンネ", + "chinese": "差不多娃娃" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 103, + "Attack": 60, + "Defense": 86, + "Sp. Attack": 60, + "Sp. Defense": 86, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 531, + "name": { + "english": "Audino", + "japanese": "タブンネ", + "chinese": "差不多娃娃" + }, + "type": [ + "Normal", + "Fairy" + ], + "base": { + "HP": 103, + "Attack": 60, + "Defense": 126, + "Sp. Attack": 80, + "Sp. Defense": 126, + "Speed": 50 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } + }, + { + "id": 531, + "name": { + "english": "Audino", + "japanese": "タブンネ", + "chinese": "差不多娃娃" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 103, + "Attack": 60, + "Defense": 86, + "Sp. Attack": 60, + "Sp. Defense": 86, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 532, + "name": { + "english": "Timburr", + "japanese": "ドッコラー", + "chinese": "搬运小匠" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 75, + "Attack": 80, + "Defense": 55, + "Sp. Attack": 25, + "Sp. Defense": 35, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 532, + "name": { + "english": "Timburr", + "japanese": "ドッコラー", + "chinese": "搬运小匠" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 75, + "Attack": 80, + "Defense": 55, + "Sp. Attack": 25, + "Sp. Defense": 35, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 533, + "name": { + "english": "Gurdurr", + "japanese": "ドテッコツ", + "chinese": "铁骨土人" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 85, + "Attack": 105, + "Defense": 85, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 533, + "name": { + "english": "Gurdurr", + "japanese": "ドテッコツ", + "chinese": "铁骨土人" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 85, + "Attack": 105, + "Defense": 85, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 534, + "name": { + "english": "Conkeldurr", + "japanese": "ローブシン", + "chinese": "修建老匠" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 105, + "Attack": 140, + "Defense": 95, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 534, + "name": { + "english": "Conkeldurr", + "japanese": "ローブシン", + "chinese": "修建老匠" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 105, + "Attack": 140, + "Defense": 95, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 535, + "name": { + "english": "Tympole", + "japanese": "オタマロ", + "chinese": "圆蝌蚪" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 40, + "Speed": 64 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 535, + "name": { + "english": "Tympole", + "japanese": "オタマロ", + "chinese": "圆蝌蚪" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 40, + "Speed": 64 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 536, + "name": { + "english": "Palpitoad", + "japanese": "ガマガル", + "chinese": "蓝蟾蜍" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 75, + "Attack": 65, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 69 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 536, + "name": { + "english": "Palpitoad", + "japanese": "ガマガル", + "chinese": "蓝蟾蜍" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 75, + "Attack": 65, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 69 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 537, + "name": { + "english": "Seismitoad", + "japanese": "ガマゲロゲ", + "chinese": "蟾蜍王" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 105, + "Attack": 95, + "Defense": 75, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 74 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 537, + "name": { + "english": "Seismitoad", + "japanese": "ガマゲロゲ", + "chinese": "蟾蜍王" + }, + "type": [ + "Water", + "Ground" + ], + "base": { + "HP": 105, + "Attack": 95, + "Defense": 75, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 74 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 538, + "name": { + "english": "Throh", + "japanese": "ナゲキ", + "chinese": "投摔鬼" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 120, + "Attack": 100, + "Defense": 85, + "Sp. Attack": 30, + "Sp. Defense": 85, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 538, + "name": { + "english": "Throh", + "japanese": "ナゲキ", + "chinese": "投摔鬼" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 120, + "Attack": 100, + "Defense": 85, + "Sp. Attack": 30, + "Sp. Defense": 85, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 539, + "name": { + "english": "Sawk", + "japanese": "ダゲキ", + "chinese": "打击鬼" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 75, + "Attack": 125, + "Defense": 75, + "Sp. Attack": 30, + "Sp. Defense": 75, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 539, + "name": { + "english": "Sawk", + "japanese": "ダゲキ", + "chinese": "打击鬼" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 75, + "Attack": 125, + "Defense": 75, + "Sp. Attack": 30, + "Sp. Defense": 75, + "Speed": 85 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 540, + "name": { + "english": "Sewaddle", + "japanese": "クルミル", + "chinese": "虫宝包" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 45, + "Attack": 53, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 42 + } + }, + { + "id": 540, + "name": { + "english": "Sewaddle", + "japanese": "クルミル", + "chinese": "虫宝包" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 45, + "Attack": 53, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 42 + } + }, + { + "id": 541, + "name": { + "english": "Swadloon", + "japanese": "クルマユ", + "chinese": "宝包茧" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 55, + "Attack": 63, + "Defense": 90, + "Sp. Attack": 50, + "Sp. Defense": 80, + "Speed": 42 + } + }, + { + "id": 541, + "name": { + "english": "Swadloon", + "japanese": "クルマユ", + "chinese": "宝包茧" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 55, + "Attack": 63, + "Defense": 90, + "Sp. Attack": 50, + "Sp. Defense": 80, + "Speed": 42 + } + }, + { + "id": 542, + "name": { + "english": "Leavanny", + "japanese": "ハハコモリ", + "chinese": "保姆虫" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 75, + "Attack": 103, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 92 + } + }, + { + "id": 542, + "name": { + "english": "Leavanny", + "japanese": "ハハコモリ", + "chinese": "保姆虫" + }, + "type": [ + "Bug", + "Grass" + ], + "base": { + "HP": 75, + "Attack": 103, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 92 + } + }, + { + "id": 543, + "name": { + "english": "Venipede", + "japanese": "フシデ", + "chinese": "百足蜈蚣" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 30, + "Attack": 45, + "Defense": 59, + "Sp. Attack": 30, + "Sp. Defense": 39, + "Speed": 57 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 543, + "name": { + "english": "Venipede", + "japanese": "フシデ", + "chinese": "百足蜈蚣" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 30, + "Attack": 45, + "Defense": 59, + "Sp. Attack": 30, + "Sp. Defense": 39, + "Speed": 57 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 544, + "name": { + "english": "Whirlipede", + "japanese": "ホイーガ", + "chinese": "车轮球" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 99, + "Sp. Attack": 40, + "Sp. Defense": 79, + "Speed": 47 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 544, + "name": { + "english": "Whirlipede", + "japanese": "ホイーガ", + "chinese": "车轮球" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 99, + "Sp. Attack": 40, + "Sp. Defense": 79, + "Speed": 47 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 545, + "name": { + "english": "Scolipede", + "japanese": "ペンドラー", + "chinese": "蜈蚣王" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 60, + "Attack": 100, + "Defense": 89, + "Sp. Attack": 55, + "Sp. Defense": 69, + "Speed": 112 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 545, + "name": { + "english": "Scolipede", + "japanese": "ペンドラー", + "chinese": "蜈蚣王" + }, + "type": [ + "Bug", + "Poison" + ], + "base": { + "HP": 60, + "Attack": 100, + "Defense": 89, + "Sp. Attack": 55, + "Sp. Defense": 69, + "Speed": 112 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 546, + "name": { + "english": "Cottonee", + "japanese": "モンメン", + "chinese": "木棉球" + }, + "type": [ + "Grass", + "Fairy" + ], + "base": { + "HP": 40, + "Attack": 27, + "Defense": 60, + "Sp. Attack": 37, + "Sp. Defense": 50, + "Speed": 66 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 546, + "name": { + "english": "Cottonee", + "japanese": "モンメン", + "chinese": "木棉球" + }, + "type": [ + "Grass", + "Fairy" + ], + "base": { + "HP": 40, + "Attack": 27, + "Defense": 60, + "Sp. Attack": 37, + "Sp. Defense": 50, + "Speed": 66 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 547, + "name": { + "english": "Whimsicott", + "japanese": "エルフーン", + "chinese": "风妖精" + }, + "type": [ + "Grass", + "Fairy" + ], + "base": { + "HP": 60, + "Attack": 67, + "Defense": 85, + "Sp. Attack": 77, + "Sp. Defense": 75, + "Speed": 116 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 547, + "name": { + "english": "Whimsicott", + "japanese": "エルフーン", + "chinese": "风妖精" + }, + "type": [ + "Grass", + "Fairy" + ], + "base": { + "HP": 60, + "Attack": 67, + "Defense": 85, + "Sp. Attack": 77, + "Sp. Defense": 75, + "Speed": 116 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 548, + "name": { + "english": "Petilil", + "japanese": "チュリネ", + "chinese": "百合根娃娃" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 45, + "Attack": 35, + "Defense": 50, + "Sp. Attack": 70, + "Sp. Defense": 50, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 548, + "name": { + "english": "Petilil", + "japanese": "チュリネ", + "chinese": "百合根娃娃" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 45, + "Attack": 35, + "Defense": 50, + "Sp. Attack": 70, + "Sp. Defense": 50, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 549, + "name": { + "english": "Lilligant", + "japanese": "ドレディア", + "chinese": "裙儿小姐" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 70, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 110, + "Sp. Defense": 75, + "Speed": 90 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 549, + "name": { + "english": "Lilligant", + "japanese": "ドレディア", + "chinese": "裙儿小姐" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 70, + "Attack": 105, + "Defense": 75, + "Sp. Attack": 50, + "Sp. Defense": 75, + "Speed": 105 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 549, + "name": { + "english": "Lilligant", + "japanese": "ドレディア", + "chinese": "裙儿小姐" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 70, + "Attack": 105, + "Defense": 75, + "Sp. Attack": 50, + "Sp. Defense": 75, + "Speed": 105 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 549, + "name": { + "english": "Lilligant", + "japanese": "ドレディア", + "chinese": "裙儿小姐" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 70, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 110, + "Sp. Defense": 75, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 550, + "name": { + "english": "Basculin", + "japanese": "バスラオ", + "chinese": "野蛮鲈鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 70, + "Attack": 92, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 55, + "Speed": 98 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 550, + "name": { + "english": "Basculin", + "japanese": "バスラオ", + "chinese": "野蛮鲈鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 70, + "Attack": 92, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 55, + "Speed": 98 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "blue-striped" + } + }, + { + "id": 550, + "name": { + "english": "Basculin", + "japanese": "バスラオ", + "chinese": "野蛮鲈鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 70, + "Attack": 92, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 55, + "Speed": 98 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "white-striped" + } + }, + { + "id": 550, + "name": { + "english": "Basculin", + "japanese": "バスラオ", + "chinese": "野蛮鲈鱼" + }, + "type": [ + "Water" + ], + "base": { + "HP": 70, + "Attack": 92, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 55, + "Speed": 98 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 551, + "name": { + "english": "Sandile", + "japanese": "メグロコ", + "chinese": "黑眼鳄" + }, + "type": [ + "Ground", + "Dark" + ], + "base": { + "HP": 50, + "Attack": 72, + "Defense": 35, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 551, + "name": { + "english": "Sandile", + "japanese": "メグロコ", + "chinese": "黑眼鳄" + }, + "type": [ + "Ground", + "Dark" + ], + "base": { + "HP": 50, + "Attack": 72, + "Defense": 35, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 552, + "name": { + "english": "Krokorok", + "japanese": "ワルビル", + "chinese": "混混鳄" + }, + "type": [ + "Ground", + "Dark" + ], + "base": { + "HP": 60, + "Attack": 82, + "Defense": 45, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 74 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 552, + "name": { + "english": "Krokorok", + "japanese": "ワルビル", + "chinese": "混混鳄" + }, + "type": [ + "Ground", + "Dark" + ], + "base": { + "HP": 60, + "Attack": 82, + "Defense": 45, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 74 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 553, + "name": { + "english": "Krookodile", + "japanese": "ワルビアル", + "chinese": "流氓鳄" + }, + "type": [ + "Ground", + "Dark" + ], + "base": { + "HP": 95, + "Attack": 117, + "Defense": 80, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 92 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 553, + "name": { + "english": "Krookodile", + "japanese": "ワルビアル", + "chinese": "流氓鳄" + }, + "type": [ + "Ground", + "Dark" + ], + "base": { + "HP": 95, + "Attack": 117, + "Defense": 80, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 92 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 554, + "name": { + "english": "Darumaka", + "japanese": "ダルマッカ", + "chinese": "火红不倒翁" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 15, + "Sp. Defense": 45, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 554, + "name": { + "english": "Darumaka", + "japanese": "ダルマッカ", + "chinese": "火红不倒翁" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 15, + "Sp. Defense": 45, + "Speed": 50 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 554, + "name": { + "english": "Darumaka", + "japanese": "ダルマッカ", + "chinese": "火红不倒翁" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 70, + "Attack": 90, + "Defense": 45, + "Sp. Attack": 15, + "Sp. Defense": 45, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 555, + "name": { + "english": "Darmanitan", + "japanese": "ヒヒダルマ", + "chinese": "达摩狒狒" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 105, + "Attack": 140, + "Defense": 55, + "Sp. Attack": 30, + "Sp. Defense": 55, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 555, + "name": { + "english": "Darmanitan", + "japanese": "ヒヒダルマ", + "chinese": "达摩狒狒" + }, + "type": [ + "Fire", + "Psychic" + ], + "base": { + "HP": 105, + "Attack": 30, + "Defense": 105, + "Sp. Attack": 140, + "Sp. Defense": 105, + "Speed": 55 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "zen" + } + }, + { + "id": 555, + "name": { + "english": "Darmanitan", + "japanese": "ヒヒダルマ", + "chinese": "达摩狒狒" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 105, + "Attack": 140, + "Defense": 55, + "Sp. Attack": 30, + "Sp. Defense": 55, + "Speed": 95 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 555, + "name": { + "english": "Darmanitan", + "japanese": "ヒヒダルマ", + "chinese": "达摩狒狒" + }, + "type": [ + "Ice", + "Fire" + ], + "base": { + "HP": 105, + "Attack": 160, + "Defense": 55, + "Sp. Attack": 30, + "Sp. Defense": 55, + "Speed": 135 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar-zen" + } + }, + { + "id": 555, + "name": { + "english": "Darmanitan", + "japanese": "ヒヒダルマ", + "chinese": "达摩狒狒" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 105, + "Attack": 140, + "Defense": 55, + "Sp. Attack": 30, + "Sp. Defense": 55, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 556, + "name": { + "english": "Maractus", + "japanese": "マラカッチ", + "chinese": "沙铃仙人掌" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 86, + "Defense": 67, + "Sp. Attack": 106, + "Sp. Defense": 67, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 556, + "name": { + "english": "Maractus", + "japanese": "マラカッチ", + "chinese": "沙铃仙人掌" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 75, + "Attack": 86, + "Defense": 67, + "Sp. Attack": 106, + "Sp. Defense": 67, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 557, + "name": { + "english": "Dwebble", + "japanese": "イシズマイ", + "chinese": "石居蟹" + }, + "type": [ + "Bug", + "Rock" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 85, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 557, + "name": { + "english": "Dwebble", + "japanese": "イシズマイ", + "chinese": "石居蟹" + }, + "type": [ + "Bug", + "Rock" + ], + "base": { + "HP": 50, + "Attack": 65, + "Defense": 85, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 558, + "name": { + "english": "Crustle", + "japanese": "イワパレス", + "chinese": "岩殿居蟹" + }, + "type": [ + "Bug", + "Rock" + ], + "base": { + "HP": 70, + "Attack": 105, + "Defense": 125, + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 558, + "name": { + "english": "Crustle", + "japanese": "イワパレス", + "chinese": "岩殿居蟹" + }, + "type": [ + "Bug", + "Rock" + ], + "base": { + "HP": 70, + "Attack": 105, + "Defense": 125, + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 559, + "name": { + "english": "Scraggy", + "japanese": "ズルッグ", + "chinese": "滑滑小子" + }, + "type": [ + "Dark", + "Fighting" + ], + "base": { + "HP": 50, + "Attack": 75, + "Defense": 70, + "Sp. Attack": 35, + "Sp. Defense": 70, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 559, + "name": { + "english": "Scraggy", + "japanese": "ズルッグ", + "chinese": "滑滑小子" + }, + "type": [ + "Dark", + "Fighting" + ], + "base": { + "HP": 50, + "Attack": 75, + "Defense": 70, + "Sp. Attack": 35, + "Sp. Defense": 70, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 560, + "name": { + "english": "Scrafty", + "japanese": "ズルズキン", + "chinese": "头巾混混" + }, + "type": [ + "Dark", + "Fighting" + ], + "base": { + "HP": 65, + "Attack": 90, + "Defense": 115, + "Sp. Attack": 45, + "Sp. Defense": 115, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 560, + "name": { + "english": "Scrafty", + "japanese": "ズルズキン", + "chinese": "头巾混混" + }, + "type": [ + "Dark", + "Fighting" + ], + "base": { + "HP": 65, + "Attack": 90, + "Defense": 115, + "Sp. Attack": 45, + "Sp. Defense": 115, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 561, + "name": { + "english": "Sigilyph", + "japanese": "シンボラー", + "chinese": "象征鸟" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 72, + "Attack": 58, + "Defense": 80, + "Sp. Attack": 103, + "Sp. Defense": 80, + "Speed": 97 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 561, + "name": { + "english": "Sigilyph", + "japanese": "シンボラー", + "chinese": "象征鸟" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 72, + "Attack": 58, + "Defense": 80, + "Sp. Attack": 103, + "Sp. Defense": 80, + "Speed": 97 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 562, + "name": { + "english": "Yamask", + "japanese": "デスマス", + "chinese": "哭哭面具" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 38, + "Attack": 30, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 562, + "name": { + "english": "Yamask", + "japanese": "デスマス", + "chinese": "哭哭面具" + }, + "type": [ + "Ground", + "Ghost" + ], + "base": { + "HP": 38, + "Attack": 55, + "Defense": 85, + "Sp. Attack": 30, + "Sp. Defense": 65, + "Speed": 30 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 562, + "name": { + "english": "Yamask", + "japanese": "デスマス", + "chinese": "哭哭面具" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 38, + "Attack": 30, + "Defense": 85, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 563, + "name": { + "english": "Cofagrigus", + "japanese": "デスカーン", + "chinese": "死神棺" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 58, + "Attack": 50, + "Defense": 145, + "Sp. Attack": 95, + "Sp. Defense": 105, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 563, + "name": { + "english": "Cofagrigus", + "japanese": "デスカーン", + "chinese": "死神棺" + }, + "type": [ + "Ghost" + ], + "base": { + "HP": 58, + "Attack": 50, + "Defense": 145, + "Sp. Attack": 95, + "Sp. Defense": 105, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 564, + "name": { + "english": "Tirtouga", + "japanese": "プロトーガ", + "chinese": "原盖海龟" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 54, + "Attack": 78, + "Defense": 103, + "Sp. Attack": 53, + "Sp. Defense": 45, + "Speed": 22 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 564, + "name": { + "english": "Tirtouga", + "japanese": "プロトーガ", + "chinese": "原盖海龟" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 54, + "Attack": 78, + "Defense": 103, + "Sp. Attack": 53, + "Sp. Defense": 45, + "Speed": 22 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 565, + "name": { + "english": "Carracosta", + "japanese": "アバゴーラ", + "chinese": "肋骨海龟" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 74, + "Attack": 108, + "Defense": 133, + "Sp. Attack": 83, + "Sp. Defense": 65, + "Speed": 32 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 565, + "name": { + "english": "Carracosta", + "japanese": "アバゴーラ", + "chinese": "肋骨海龟" + }, + "type": [ + "Water", + "Rock" + ], + "base": { + "HP": 74, + "Attack": 108, + "Defense": 133, + "Sp. Attack": 83, + "Sp. Defense": 65, + "Speed": 32 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 566, + "name": { + "english": "Archen", + "japanese": "アーケン", + "chinese": "始祖小鸟" + }, + "type": [ + "Rock", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 112, + "Defense": 45, + "Sp. Attack": 74, + "Sp. Defense": 45, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 566, + "name": { + "english": "Archen", + "japanese": "アーケン", + "chinese": "始祖小鸟" + }, + "type": [ + "Rock", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 112, + "Defense": 45, + "Sp. Attack": 74, + "Sp. Defense": 45, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 567, + "name": { + "english": "Archeops", + "japanese": "アーケオス", + "chinese": "始祖大鸟" + }, + "type": [ + "Rock", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 140, + "Defense": 65, + "Sp. Attack": 112, + "Sp. Defense": 65, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 567, + "name": { + "english": "Archeops", + "japanese": "アーケオス", + "chinese": "始祖大鸟" + }, + "type": [ + "Rock", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 140, + "Defense": 65, + "Sp. Attack": 112, + "Sp. Defense": 65, + "Speed": 110 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 568, + "name": { + "english": "Trubbish", + "japanese": "ヤブクロン", + "chinese": "破破袋" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 62, + "Sp. Attack": 40, + "Sp. Defense": 62, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 568, + "name": { + "english": "Trubbish", + "japanese": "ヤブクロン", + "chinese": "破破袋" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 62, + "Sp. Attack": 40, + "Sp. Defense": 62, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 569, + "name": { + "english": "Garbodor", + "japanese": "ダストダス", + "chinese": "灰尘山" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 80, + "Attack": 95, + "Defense": 82, + "Sp. Attack": 60, + "Sp. Defense": 82, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 569, + "name": { + "english": "Garbodor", + "japanese": "ダストダス", + "chinese": "灰尘山" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 80, + "Attack": 95, + "Defense": 82, + "Sp. Attack": 60, + "Sp. Defense": 82, + "Speed": 75 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } + }, + { + "id": 569, + "name": { + "english": "Garbodor", + "japanese": "ダストダス", + "chinese": "灰尘山" + }, + "type": [ + "Poison" + ], + "base": { + "HP": 80, + "Attack": 95, + "Defense": 82, + "Sp. Attack": 60, + "Sp. Defense": 82, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 570, + "name": { + "english": "Zorua", + "japanese": "ゾロア", + "chinese": "索罗亚" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 40, + "Attack": 65, + "Defense": 40, + "Sp. Attack": 80, + "Sp. Defense": 40, + "Speed": 65 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 570, + "name": { + "english": "Zorua", + "japanese": "ゾロア", + "chinese": "索罗亚" + }, + "type": [ + "Normal", + "Ghost" + ], + "base": { + "HP": 35, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 85, + "Sp. Defense": 40, + "Speed": 70 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 570, + "name": { + "english": "Zorua", + "japanese": "ゾロア", + "chinese": "索罗亚" + }, + "type": [ + "Normal", + "Ghost" + ], + "base": { + "HP": 35, + "Attack": 60, + "Defense": 40, + "Sp. Attack": 85, + "Sp. Defense": 40, + "Speed": 70 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 570, + "name": { + "english": "Zorua", + "japanese": "ゾロア", + "chinese": "索罗亚" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 40, + "Attack": 65, + "Defense": 40, + "Sp. Attack": 80, + "Sp. Defense": 40, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 571, + "name": { + "english": "Zoroark", + "japanese": "ゾロアーク", + "chinese": "索罗亚克" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 60, + "Attack": 105, + "Defense": 60, + "Sp. Attack": 120, + "Sp. Defense": 60, + "Speed": 105 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 571, + "name": { + "english": "Zoroark", + "japanese": "ゾロアーク", + "chinese": "索罗亚克" + }, + "type": [ + "Normal", + "Ghost" + ], + "base": { + "HP": 55, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 125, + "Sp. Defense": 60, + "Speed": 110 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 571, + "name": { + "english": "Zoroark", + "japanese": "ゾロアーク", + "chinese": "索罗亚克" + }, + "type": [ + "Normal", + "Ghost" + ], + "base": { + "HP": 55, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 125, + "Sp. Defense": 60, + "Speed": 110 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 571, + "name": { + "english": "Zoroark", + "japanese": "ゾロアーク", + "chinese": "索罗亚克" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 60, + "Attack": 105, + "Defense": 60, + "Sp. Attack": 120, + "Sp. Defense": 60, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 572, + "name": { + "english": "Minccino", + "japanese": "チラーミィ", + "chinese": "泡沫栗鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 572, + "name": { + "english": "Minccino", + "japanese": "チラーミィ", + "chinese": "泡沫栗鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 55, + "Attack": 50, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 573, + "name": { + "english": "Cinccino", + "japanese": "チラチーノ", + "chinese": "奇诺栗鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 60, + "Speed": 115 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 573, + "name": { + "english": "Cinccino", + "japanese": "チラチーノ", + "chinese": "奇诺栗鼠" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 75, + "Attack": 95, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 60, + "Speed": 115 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 574, + "name": { + "english": "Gothita", + "japanese": "ゴチム", + "chinese": "哥德宝宝" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 574, + "name": { + "english": "Gothita", + "japanese": "ゴチム", + "chinese": "哥德宝宝" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 575, + "name": { + "english": "Gothorita", + "japanese": "ゴチミル", + "chinese": "哥德小童" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 45, + "Defense": 70, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 575, + "name": { + "english": "Gothorita", + "japanese": "ゴチミル", + "chinese": "哥德小童" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 60, + "Attack": 45, + "Defense": 70, + "Sp. Attack": 75, + "Sp. Defense": 85, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 576, + "name": { + "english": "Gothitelle", + "japanese": "ゴチルゼル", + "chinese": "哥德小姐" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 70, + "Attack": 55, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 110, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 576, + "name": { + "english": "Gothitelle", + "japanese": "ゴチルゼル", + "chinese": "哥德小姐" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 70, + "Attack": 55, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 110, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 577, + "name": { + "english": "Solosis", + "japanese": "ユニラン", + "chinese": "单卵细胞球" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 40, + "Sp. Attack": 105, + "Sp. Defense": 50, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 577, + "name": { + "english": "Solosis", + "japanese": "ユニラン", + "chinese": "单卵细胞球" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 45, + "Attack": 30, + "Defense": 40, + "Sp. Attack": 105, + "Sp. Defense": 50, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 578, + "name": { + "english": "Duosion", + "japanese": "ダブラン", + "chinese": "双卵细胞球" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 65, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 125, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 578, + "name": { + "english": "Duosion", + "japanese": "ダブラン", + "chinese": "双卵细胞球" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 65, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 125, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 579, + "name": { + "english": "Reuniclus", + "japanese": "ランクルス", + "chinese": "人造细胞卵" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 110, + "Attack": 65, + "Defense": 75, + "Sp. Attack": 125, + "Sp. Defense": 85, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 579, + "name": { + "english": "Reuniclus", + "japanese": "ランクルス", + "chinese": "人造细胞卵" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 110, + "Attack": 65, + "Defense": 75, + "Sp. Attack": 125, + "Sp. Defense": 85, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 580, + "name": { + "english": "Ducklett", + "japanese": "コアルヒー", + "chinese": "鸭宝宝" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 62, + "Attack": 44, + "Defense": 50, + "Sp. Attack": 44, + "Sp. Defense": 50, + "Speed": 55 + } + }, + { + "id": 580, + "name": { + "english": "Ducklett", + "japanese": "コアルヒー", + "chinese": "鸭宝宝" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 62, + "Attack": 44, + "Defense": 50, + "Sp. Attack": 44, + "Sp. Defense": 50, + "Speed": 55 + } + }, + { + "id": 581, + "name": { + "english": "Swanna", + "japanese": "スワンナ", + "chinese": "舞天鹅" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 87, + "Defense": 63, + "Sp. Attack": 87, + "Sp. Defense": 63, + "Speed": 98 + } + }, + { + "id": 581, + "name": { + "english": "Swanna", + "japanese": "スワンナ", + "chinese": "舞天鹅" + }, + "type": [ + "Water", + "Flying" + ], + "base": { + "HP": 75, + "Attack": 87, + "Defense": 63, + "Sp. Attack": 87, + "Sp. Defense": 63, + "Speed": 98 + } + }, + { + "id": 582, + "name": { + "english": "Vanillite", + "japanese": "バニプッチ", + "chinese": "迷你冰" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 36, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 65, + "Sp. Defense": 60, + "Speed": 44 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 582, + "name": { + "english": "Vanillite", + "japanese": "バニプッチ", + "chinese": "迷你冰" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 36, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 65, + "Sp. Defense": 60, + "Speed": 44 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 583, + "name": { + "english": "Vanillish", + "japanese": "バニリッチ", + "chinese": "多多冰" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 51, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 75, + "Speed": 59 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 583, + "name": { + "english": "Vanillish", + "japanese": "バニリッチ", + "chinese": "多多冰" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 51, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 75, + "Speed": 59 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 584, + "name": { + "english": "Vanilluxe", + "japanese": "バイバニラ", + "chinese": "双倍多多冰" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 71, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 110, + "Sp. Defense": 95, + "Speed": 79 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 584, + "name": { + "english": "Vanilluxe", + "japanese": "バイバニラ", + "chinese": "双倍多多冰" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 71, + "Attack": 95, + "Defense": 85, + "Sp. Attack": 110, + "Sp. Defense": 95, + "Speed": 79 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 585, + "name": { + "english": "Deerling", + "japanese": "シキジカ", + "chinese": "四季鹿" + }, + "type": [ + "Normal", + "Grass" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 75 + } + }, + { + "id": 585, + "name": { + "english": "Deerling", + "japanese": "シキジカ", + "chinese": "四季鹿" + }, + "type": [ + "Normal", + "Grass" + ], + "base": { + "HP": 60, + "Attack": 60, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 75 + } + }, + { + "id": 586, + "name": { + "english": "Sawsbuck", + "japanese": "メブキジカ", + "chinese": "萌芽鹿" + }, + "type": [ + "Normal", + "Grass" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 95 + } + }, + { + "id": 586, + "name": { + "english": "Sawsbuck", + "japanese": "メブキジカ", + "chinese": "萌芽鹿" + }, + "type": [ + "Normal", + "Grass" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 95 + } + }, + { + "id": 587, + "name": { + "english": "Emolga", + "japanese": "エモンガ", + "chinese": "电飞鼠" + }, + "type": [ + "Electric", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 75, + "Sp. Defense": 60, + "Speed": 103 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 587, + "name": { + "english": "Emolga", + "japanese": "エモンガ", + "chinese": "电飞鼠" + }, + "type": [ + "Electric", + "Flying" + ], + "base": { + "HP": 55, + "Attack": 75, + "Defense": 60, + "Sp. Attack": 75, + "Sp. Defense": 60, + "Speed": 103 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 588, + "name": { + "english": "Karrablast", + "japanese": "カブルモ", + "chinese": "盖盖虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 75, + "Defense": 45, + "Sp. Attack": 40, + "Sp. Defense": 45, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 588, + "name": { + "english": "Karrablast", + "japanese": "カブルモ", + "chinese": "盖盖虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 75, + "Defense": 45, + "Sp. Attack": 40, + "Sp. Defense": 45, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 589, + "name": { + "english": "Escavalier", + "japanese": "シュバルゴ", + "chinese": "骑士蜗牛" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 135, + "Defense": 105, + "Sp. Attack": 60, + "Sp. Defense": 105, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 589, + "name": { + "english": "Escavalier", + "japanese": "シュバルゴ", + "chinese": "骑士蜗牛" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 70, + "Attack": 135, + "Defense": 105, + "Sp. Attack": 60, + "Sp. Defense": 105, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 590, + "name": { + "english": "Foongus", + "japanese": "タマゲタケ", + "chinese": "哎呀球菇" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 69, + "Attack": 55, + "Defense": 45, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 15 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 590, + "name": { + "english": "Foongus", + "japanese": "タマゲタケ", + "chinese": "哎呀球菇" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 69, + "Attack": 55, + "Defense": 45, + "Sp. Attack": 55, + "Sp. Defense": 55, + "Speed": 15 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 591, + "name": { + "english": "Amoonguss", + "japanese": "モロバレル", + "chinese": "败露球菇" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 114, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 85, + "Sp. Defense": 80, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 591, + "name": { + "english": "Amoonguss", + "japanese": "モロバレル", + "chinese": "败露球菇" + }, + "type": [ + "Grass", + "Poison" + ], + "base": { + "HP": 114, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 85, + "Sp. Defense": 80, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 592, + "name": { + "english": "Frillish", + "japanese": "プルリル", + "chinese": "轻飘飘" + }, + "type": [ + "Water", + "Ghost" + ], + "base": { + "HP": 55, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 65, + "Sp. Defense": 85, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 592, + "name": { + "english": "Frillish", + "japanese": "プルリル", + "chinese": "轻飘飘" + }, + "type": [ + "Water", + "Ghost" + ], + "base": { + "HP": 55, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 65, + "Sp. Defense": 85, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 593, + "name": { + "english": "Jellicent", + "japanese": "ブルンゲル", + "chinese": "胖嘟嘟" + }, + "type": [ + "Water", + "Ghost" + ], + "base": { + "HP": 100, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 85, + "Sp. Defense": 105, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 593, + "name": { + "english": "Jellicent", + "japanese": "ブルンゲル", + "chinese": "胖嘟嘟" + }, + "type": [ + "Water", + "Ghost" + ], + "base": { + "HP": 100, + "Attack": 60, + "Defense": 70, + "Sp. Attack": 85, + "Sp. Defense": 105, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 594, + "name": { + "english": "Alomomola", + "japanese": "ママンボウ", + "chinese": "保姆曼波" + }, + "type": [ + "Water" + ], + "base": { + "HP": 165, + "Attack": 75, + "Defense": 80, + "Sp. Attack": 40, + "Sp. Defense": 45, + "Speed": 65 + } + }, + { + "id": 594, + "name": { + "english": "Alomomola", + "japanese": "ママンボウ", + "chinese": "保姆曼波" + }, + "type": [ + "Water" + ], + "base": { + "HP": 165, + "Attack": 75, + "Defense": 80, + "Sp. Attack": 40, + "Sp. Defense": 45, + "Speed": 65 + } + }, + { + "id": 595, + "name": { + "english": "Joltik", + "japanese": "バチュル", + "chinese": "电电虫" + }, + "type": [ + "Bug", + "Electric" + ], + "base": { + "HP": 50, + "Attack": 47, + "Defense": 50, + "Sp. Attack": 57, + "Sp. Defense": 50, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 595, + "name": { + "english": "Joltik", + "japanese": "バチュル", + "chinese": "电电虫" + }, + "type": [ + "Bug", + "Electric" + ], + "base": { + "HP": 50, + "Attack": 47, + "Defense": 50, + "Sp. Attack": 57, + "Sp. Defense": 50, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 596, + "name": { + "english": "Galvantula", + "japanese": "デンチュラ", + "chinese": "电蜘蛛" + }, + "type": [ + "Bug", + "Electric" + ], + "base": { + "HP": 70, + "Attack": 77, + "Defense": 60, + "Sp. Attack": 97, + "Sp. Defense": 60, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 596, + "name": { + "english": "Galvantula", + "japanese": "デンチュラ", + "chinese": "电蜘蛛" + }, + "type": [ + "Bug", + "Electric" + ], + "base": { + "HP": 70, + "Attack": 77, + "Defense": 60, + "Sp. Attack": 97, + "Sp. Defense": 60, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 597, + "name": { + "english": "Ferroseed", + "japanese": "テッシード", + "chinese": "种子铁球" + }, + "type": [ + "Grass", + "Steel" + ], + "base": { + "HP": 44, + "Attack": 50, + "Defense": 91, + "Sp. Attack": 24, + "Sp. Defense": 86, + "Speed": 10 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 597, + "name": { + "english": "Ferroseed", + "japanese": "テッシード", + "chinese": "种子铁球" + }, + "type": [ + "Grass", + "Steel" + ], + "base": { + "HP": 44, + "Attack": 50, + "Defense": 91, + "Sp. Attack": 24, + "Sp. Defense": 86, + "Speed": 10 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 598, + "name": { + "english": "Ferrothorn", + "japanese": "ナットレイ", + "chinese": "坚果哑铃" + }, + "type": [ + "Grass", + "Steel" + ], + "base": { + "HP": 74, + "Attack": 94, + "Defense": 131, + "Sp. Attack": 54, + "Sp. Defense": 116, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 598, + "name": { + "english": "Ferrothorn", + "japanese": "ナットレイ", + "chinese": "坚果哑铃" + }, + "type": [ + "Grass", + "Steel" + ], + "base": { + "HP": 74, + "Attack": 94, + "Defense": 131, + "Sp. Attack": 54, + "Sp. Defense": 116, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 599, + "name": { + "english": "Klink", + "japanese": "ギアル", + "chinese": "齿轮儿" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 70, + "Sp. Attack": 45, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 599, + "name": { + "english": "Klink", + "japanese": "ギアル", + "chinese": "齿轮儿" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 40, + "Attack": 55, + "Defense": 70, + "Sp. Attack": 45, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 600, + "name": { + "english": "Klang", + "japanese": "ギギアル", + "chinese": "齿轮组" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 60, + "Attack": 80, + "Defense": 95, + "Sp. Attack": 70, + "Sp. Defense": 85, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 600, + "name": { + "english": "Klang", + "japanese": "ギギアル", + "chinese": "齿轮组" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 60, + "Attack": 80, + "Defense": 95, + "Sp. Attack": 70, + "Sp. Defense": 85, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 601, + "name": { + "english": "Klinklang", + "japanese": "ギギギアル", + "chinese": "齿轮怪" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 60, + "Attack": 100, + "Defense": 115, + "Sp. Attack": 70, + "Sp. Defense": 85, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 601, + "name": { + "english": "Klinklang", + "japanese": "ギギギアル", + "chinese": "齿轮怪" + }, + "type": [ + "Steel" + ], + "base": { + "HP": 60, + "Attack": 100, + "Defense": 115, + "Sp. Attack": 70, + "Sp. Defense": 85, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 602, + "name": { + "english": "Tynamo", + "japanese": "シビシラス", + "chinese": "麻麻小鱼" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 45, + "Sp. Defense": 40, + "Speed": 60 + } + }, + { + "id": 602, + "name": { + "english": "Tynamo", + "japanese": "シビシラス", + "chinese": "麻麻小鱼" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 35, + "Attack": 55, + "Defense": 40, + "Sp. Attack": 45, + "Sp. Defense": 40, + "Speed": 60 + } + }, + { + "id": 603, + "name": { + "english": "Eelektrik", + "japanese": "シビビール", + "chinese": "麻麻鳗" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 65, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 75, + "Sp. Defense": 70, + "Speed": 40 + } + }, + { + "id": 603, + "name": { + "english": "Eelektrik", + "japanese": "シビビール", + "chinese": "麻麻鳗" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 65, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 75, + "Sp. Defense": 70, + "Speed": 40 + } + }, + { + "id": 604, + "name": { + "english": "Eelektross", + "japanese": "シビルドン", + "chinese": "麻麻鳗鱼王" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 85, + "Attack": 115, + "Defense": 80, + "Sp. Attack": 105, + "Sp. Defense": 80, + "Speed": 50 + } + }, + { + "id": 604, + "name": { + "english": "Eelektross", + "japanese": "シビルドン", + "chinese": "麻麻鳗鱼王" + }, + "type": [ + "Electric" + ], + "base": { + "HP": 85, + "Attack": 115, + "Defense": 80, + "Sp. Attack": 105, + "Sp. Defense": 80, + "Speed": 50 + } + }, + { + "id": 605, + "name": { + "english": "Elgyem", + "japanese": "リグレー", + "chinese": "小灰怪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 55, + "Attack": 55, + "Defense": 55, + "Sp. Attack": 85, + "Sp. Defense": 55, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 605, + "name": { + "english": "Elgyem", + "japanese": "リグレー", + "chinese": "小灰怪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 55, + "Attack": 55, + "Defense": 55, + "Sp. Attack": 85, + "Sp. Defense": 55, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 606, + "name": { + "english": "Beheeyem", + "japanese": "オーベム", + "chinese": "大宇怪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 125, + "Sp. Defense": 95, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 606, + "name": { + "english": "Beheeyem", + "japanese": "オーベム", + "chinese": "大宇怪" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 125, + "Sp. Defense": 95, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 607, + "name": { + "english": "Litwick", + "japanese": "ヒトモシ", + "chinese": "烛光灵" + }, + "type": [ + "Ghost", + "Fire" + ], + "base": { + "HP": 50, + "Attack": 30, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 607, + "name": { + "english": "Litwick", + "japanese": "ヒトモシ", + "chinese": "烛光灵" + }, + "type": [ + "Ghost", + "Fire" + ], + "base": { + "HP": 50, + "Attack": 30, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 55, + "Speed": 20 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 608, + "name": { + "english": "Lampent", + "japanese": "ランプラー", + "chinese": "灯火幽灵" + }, + "type": [ + "Ghost", + "Fire" + ], + "base": { + "HP": 60, + "Attack": 40, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 60, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 608, + "name": { + "english": "Lampent", + "japanese": "ランプラー", + "chinese": "灯火幽灵" + }, + "type": [ + "Ghost", + "Fire" + ], + "base": { + "HP": 60, + "Attack": 40, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 60, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 609, + "name": { + "english": "Chandelure", + "japanese": "シャンデラ", + "chinese": "水晶灯火灵" + }, + "type": [ + "Ghost", + "Fire" + ], + "base": { + "HP": 60, + "Attack": 55, + "Defense": 90, + "Sp. Attack": 145, + "Sp. Defense": 90, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 609, + "name": { + "english": "Chandelure", + "japanese": "シャンデラ", + "chinese": "水晶灯火灵" + }, + "type": [ + "Ghost", + "Fire" + ], + "base": { + "HP": 60, + "Attack": 55, + "Defense": 90, + "Sp. Attack": 145, + "Sp. Defense": 90, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 610, + "name": { + "english": "Axew", + "japanese": "キバゴ", + "chinese": "牙牙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 46, + "Attack": 87, + "Defense": 60, + "Sp. Attack": 30, + "Sp. Defense": 40, + "Speed": 57 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 610, + "name": { + "english": "Axew", + "japanese": "キバゴ", + "chinese": "牙牙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 46, + "Attack": 87, + "Defense": 60, + "Sp. Attack": 30, + "Sp. Defense": 40, + "Speed": 57 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 611, + "name": { + "english": "Fraxure", + "japanese": "オノンド", + "chinese": "斧牙龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 66, + "Attack": 117, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 67 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 611, + "name": { + "english": "Fraxure", + "japanese": "オノンド", + "chinese": "斧牙龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 66, + "Attack": 117, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 67 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 612, + "name": { + "english": "Haxorus", + "japanese": "オノノクス", + "chinese": "双斧战龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 76, + "Attack": 147, + "Defense": 90, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 97 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 612, + "name": { + "english": "Haxorus", + "japanese": "オノノクス", + "chinese": "双斧战龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 76, + "Attack": 147, + "Defense": 90, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 97 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 613, + "name": { + "english": "Cubchoo", + "japanese": "クマシュン", + "chinese": "喷嚏熊" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 55, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 60, + "Sp. Defense": 40, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 613, + "name": { + "english": "Cubchoo", + "japanese": "クマシュン", + "chinese": "喷嚏熊" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 55, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 60, + "Sp. Defense": 40, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 614, + "name": { + "english": "Beartic", + "japanese": "ツンベアー", + "chinese": "冻原熊" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 95, + "Attack": 130, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 614, + "name": { + "english": "Beartic", + "japanese": "ツンベアー", + "chinese": "冻原熊" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 95, + "Attack": 130, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 615, + "name": { + "english": "Cryogonal", + "japanese": "フリージオ", + "chinese": "几何雪花" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 80, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 95, + "Sp. Defense": 135, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 615, + "name": { + "english": "Cryogonal", + "japanese": "フリージオ", + "chinese": "几何雪花" + }, + "type": [ + "Ice" + ], + "base": { + "HP": 80, + "Attack": 50, + "Defense": 50, + "Sp. Attack": 95, + "Sp. Defense": 135, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 616, + "name": { + "english": "Shelmet", + "japanese": "チョボマキ", + "chinese": "小嘴蜗" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 40, + "Defense": 85, + "Sp. Attack": 40, + "Sp. Defense": 65, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 616, + "name": { + "english": "Shelmet", + "japanese": "チョボマキ", + "chinese": "小嘴蜗" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 50, + "Attack": 40, + "Defense": 85, + "Sp. Attack": 40, + "Sp. Defense": 65, + "Speed": 25 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 617, + "name": { + "english": "Accelgor", + "japanese": "アギルダー", + "chinese": "敏捷虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 80, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 100, + "Sp. Defense": 60, + "Speed": 145 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 617, + "name": { + "english": "Accelgor", + "japanese": "アギルダー", + "chinese": "敏捷虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 80, + "Attack": 70, + "Defense": 40, + "Sp. Attack": 100, + "Sp. Defense": 60, + "Speed": 145 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 618, + "name": { + "english": "Stunfisk", + "japanese": "マッギョ", + "chinese": "泥巴鱼" + }, + "type": [ + "Ground", + "Electric" + ], + "base": { + "HP": 109, + "Attack": 66, + "Defense": 84, + "Sp. Attack": 81, + "Sp. Defense": 99, + "Speed": 32 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 618, + "name": { + "english": "Stunfisk", + "japanese": "マッギョ", + "chinese": "泥巴鱼" + }, + "type": [ + "Ground", + "Steel" + ], + "base": { + "HP": 109, + "Attack": 81, + "Defense": 99, + "Sp. Attack": 66, + "Sp. Defense": 84, + "Speed": 32 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "galar" + } + }, + { + "id": 618, + "name": { + "english": "Stunfisk", + "japanese": "マッギョ", + "chinese": "泥巴鱼" + }, + "type": [ + "Ground", + "Electric" + ], + "base": { + "HP": 109, + "Attack": 66, + "Defense": 84, + "Sp. Attack": 81, + "Sp. Defense": 99, + "Speed": 32 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 619, + "name": { + "english": "Mienfoo", + "japanese": "コジョフー", + "chinese": "功夫鼬" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 45, + "Attack": 85, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 50, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 619, + "name": { + "english": "Mienfoo", + "japanese": "コジョフー", + "chinese": "功夫鼬" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 45, + "Attack": 85, + "Defense": 50, + "Sp. Attack": 55, + "Sp. Defense": 50, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 620, + "name": { + "english": "Mienshao", + "japanese": "コジョンド", + "chinese": "师父鼬" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 65, + "Attack": 125, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 60, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 620, + "name": { + "english": "Mienshao", + "japanese": "コジョンド", + "chinese": "师父鼬" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 65, + "Attack": 125, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 60, + "Speed": 105 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 621, + "name": { + "english": "Druddigon", + "japanese": "クリムガン", + "chinese": "赤面龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 77, + "Attack": 120, + "Defense": 90, + "Sp. Attack": 60, + "Sp. Defense": 90, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 621, + "name": { + "english": "Druddigon", + "japanese": "クリムガン", + "chinese": "赤面龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 77, + "Attack": 120, + "Defense": 90, + "Sp. Attack": 60, + "Sp. Defense": 90, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 622, + "name": { + "english": "Golett", + "japanese": "ゴビット", + "chinese": "泥偶小人" + }, + "type": [ + "Ground", + "Ghost" + ], + "base": { + "HP": 59, + "Attack": 74, + "Defense": 50, + "Sp. Attack": 35, + "Sp. Defense": 50, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 622, + "name": { + "english": "Golett", + "japanese": "ゴビット", + "chinese": "泥偶小人" + }, + "type": [ + "Ground", + "Ghost" + ], + "base": { + "HP": 59, + "Attack": 74, + "Defense": 50, + "Sp. Attack": 35, + "Sp. Defense": 50, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 623, + "name": { + "english": "Golurk", + "japanese": "ゴルーグ", + "chinese": "泥偶巨人" + }, + "type": [ + "Ground", + "Ghost" + ], + "base": { + "HP": 89, + "Attack": 124, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 623, + "name": { + "english": "Golurk", + "japanese": "ゴルーグ", + "chinese": "泥偶巨人" + }, + "type": [ + "Ground", + "Ghost" + ], + "base": { + "HP": 89, + "Attack": 124, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 80, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 624, + "name": { + "english": "Pawniard", + "japanese": "コマタナ", + "chinese": "驹刀小兵" + }, + "type": [ + "Dark", + "Steel" + ], + "base": { + "HP": 45, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 624, + "name": { + "english": "Pawniard", + "japanese": "コマタナ", + "chinese": "驹刀小兵" + }, + "type": [ + "Dark", + "Steel" + ], + "base": { + "HP": 45, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 625, + "name": { + "english": "Bisharp", + "japanese": "キリキザン", + "chinese": "劈斩司令" + }, + "type": [ + "Dark", + "Steel" + ], + "base": { + "HP": 65, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 625, + "name": { + "english": "Bisharp", + "japanese": "キリキザン", + "chinese": "劈斩司令" + }, + "type": [ + "Dark", + "Steel" + ], + "base": { + "HP": 65, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 626, + "name": { + "english": "Bouffalant", + "japanese": "バッフロン", + "chinese": "爆炸头水牛" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 95, + "Attack": 110, + "Defense": 95, + "Sp. Attack": 40, + "Sp. Defense": 95, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 626, + "name": { + "english": "Bouffalant", + "japanese": "バッフロン", + "chinese": "爆炸头水牛" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 95, + "Attack": 110, + "Defense": 95, + "Sp. Attack": 40, + "Sp. Defense": 95, + "Speed": 55 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 627, + "name": { + "english": "Rufflet", + "japanese": "ワシボン", + "chinese": "毛头小鹰" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 83, + "Defense": 50, + "Sp. Attack": 37, + "Sp. Defense": 50, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 627, + "name": { + "english": "Rufflet", + "japanese": "ワシボン", + "chinese": "毛头小鹰" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 83, + "Defense": 50, + "Sp. Attack": 37, + "Sp. Defense": 50, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 628, + "name": { + "english": "Braviary", + "japanese": "ウォーグル", + "chinese": "勇士雄鹰" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 100, + "Attack": 123, + "Defense": 75, + "Sp. Attack": 57, + "Sp. Defense": 75, + "Speed": 80 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 628, + "name": { + "english": "Braviary", + "japanese": "ウォーグル", + "chinese": "勇士雄鹰" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 110, + "Attack": 83, + "Defense": 70, + "Sp. Attack": 112, + "Sp. Defense": 70, + "Speed": 65 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 628, + "name": { + "english": "Braviary", + "japanese": "ウォーグル", + "chinese": "勇士雄鹰" + }, + "type": [ + "Psychic", + "Flying" + ], + "base": { + "HP": 110, + "Attack": 83, + "Defense": 70, + "Sp. Attack": 112, + "Sp. Defense": 70, + "Speed": 65 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 628, + "name": { + "english": "Braviary", + "japanese": "ウォーグル", + "chinese": "勇士雄鹰" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 100, + "Attack": 123, + "Defense": 75, + "Sp. Attack": 57, + "Sp. Defense": 75, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 629, + "name": { + "english": "Vullaby", + "japanese": "バルチャイ", + "chinese": "秃鹰丫头" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 55, + "Defense": 75, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 629, + "name": { + "english": "Vullaby", + "japanese": "バルチャイ", + "chinese": "秃鹰丫头" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 70, + "Attack": 55, + "Defense": 75, + "Sp. Attack": 45, + "Sp. Defense": 65, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 630, + "name": { + "english": "Mandibuzz", + "japanese": "バルジーナ", + "chinese": "秃鹰娜" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 110, + "Attack": 65, + "Defense": 105, + "Sp. Attack": 55, + "Sp. Defense": 95, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 630, + "name": { + "english": "Mandibuzz", + "japanese": "バルジーナ", + "chinese": "秃鹰娜" + }, + "type": [ + "Dark", + "Flying" + ], + "base": { + "HP": 110, + "Attack": 65, + "Defense": 105, + "Sp. Attack": 55, + "Sp. Defense": 95, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 631, + "name": { + "english": "Heatmor", + "japanese": "クイタラン", + "chinese": "熔蚁兽" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 85, + "Attack": 97, + "Defense": 66, + "Sp. Attack": 105, + "Sp. Defense": 66, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 631, + "name": { + "english": "Heatmor", + "japanese": "クイタラン", + "chinese": "熔蚁兽" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 85, + "Attack": 97, + "Defense": 66, + "Sp. Attack": 105, + "Sp. Defense": 66, + "Speed": 65 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 632, + "name": { + "english": "Durant", + "japanese": "アイアント", + "chinese": "铁蚁" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 58, + "Attack": 109, + "Defense": 112, + "Sp. Attack": 48, + "Sp. Defense": 48, + "Speed": 109 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 632, + "name": { + "english": "Durant", + "japanese": "アイアント", + "chinese": "铁蚁" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 58, + "Attack": 109, + "Defense": 112, + "Sp. Attack": 48, + "Sp. Defense": 48, + "Speed": 109 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 633, + "name": { + "english": "Deino", + "japanese": "モノズ", + "chinese": "单首龙" + }, + "type": [ + "Dark", + "Dragon" + ], + "base": { + "HP": 52, + "Attack": 65, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 50, + "Speed": 38 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 633, + "name": { + "english": "Deino", + "japanese": "モノズ", + "chinese": "单首龙" + }, + "type": [ + "Dark", + "Dragon" + ], + "base": { + "HP": 52, + "Attack": 65, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 50, + "Speed": 38 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 634, + "name": { + "english": "Zweilous", + "japanese": "ジヘッド", + "chinese": "双首暴龙" + }, + "type": [ + "Dark", + "Dragon" + ], + "base": { + "HP": 72, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 634, + "name": { + "english": "Zweilous", + "japanese": "ジヘッド", + "chinese": "双首暴龙" + }, + "type": [ + "Dark", + "Dragon" + ], + "base": { + "HP": 72, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 635, + "name": { + "english": "Hydreigon", + "japanese": "サザンドラ", + "chinese": "三首恶龙" + }, + "type": [ + "Dark", + "Dragon" + ], + "base": { + "HP": 92, + "Attack": 105, + "Defense": 90, + "Sp. Attack": 125, + "Sp. Defense": 90, + "Speed": 98 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 635, + "name": { + "english": "Hydreigon", + "japanese": "サザンドラ", + "chinese": "三首恶龙" + }, + "type": [ + "Dark", + "Dragon" + ], + "base": { + "HP": 92, + "Attack": 105, + "Defense": 90, + "Sp. Attack": 125, + "Sp. Defense": 90, + "Speed": 98 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 636, + "name": { + "english": "Larvesta", + "japanese": "メラルバ", + "chinese": "燃烧虫" + }, + "type": [ + "Bug", + "Fire" + ], + "base": { + "HP": 55, + "Attack": 85, + "Defense": 55, + "Sp. Attack": 50, + "Sp. Defense": 55, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 636, + "name": { + "english": "Larvesta", + "japanese": "メラルバ", + "chinese": "燃烧虫" + }, + "type": [ + "Bug", + "Fire" + ], + "base": { + "HP": 55, + "Attack": 85, + "Defense": 55, + "Sp. Attack": 50, + "Sp. Defense": 55, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 637, + "name": { + "english": "Volcarona", + "japanese": "ウルガモス", + "chinese": "火神蛾" + }, + "type": [ + "Bug", + "Fire" + ], + "base": { + "HP": 85, + "Attack": 60, + "Defense": 65, + "Sp. Attack": 135, + "Sp. Defense": 105, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 637, + "name": { + "english": "Volcarona", + "japanese": "ウルガモス", + "chinese": "火神蛾" + }, + "type": [ + "Bug", + "Fire" + ], + "base": { + "HP": 85, + "Attack": 60, + "Defense": 65, + "Sp. Attack": 135, + "Sp. Defense": 105, + "Speed": 100 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 638, + "name": { + "english": "Cobalion", + "japanese": "コバルオン", + "chinese": "勾帕路翁" + }, + "type": [ + "Steel", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 90, + "Defense": 129, + "Sp. Attack": 90, + "Sp. Defense": 72, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 638, + "name": { + "english": "Cobalion", + "japanese": "コバルオン", + "chinese": "勾帕路翁" + }, + "type": [ + "Steel", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 90, + "Defense": 129, + "Sp. Attack": 90, + "Sp. Defense": 72, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 639, + "name": { + "english": "Terrakion", + "japanese": "テラキオン", + "chinese": "代拉基翁" + }, + "type": [ + "Rock", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 129, + "Defense": 90, + "Sp. Attack": 72, + "Sp. Defense": 90, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 639, + "name": { + "english": "Terrakion", + "japanese": "テラキオン", + "chinese": "代拉基翁" + }, + "type": [ + "Rock", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 129, + "Defense": 90, + "Sp. Attack": 72, + "Sp. Defense": 90, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 640, + "name": { + "english": "Virizion", + "japanese": "ビリジオン", + "chinese": "毕力吉翁" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 90, + "Defense": 72, + "Sp. Attack": 90, + "Sp. Defense": 129, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 640, + "name": { + "english": "Virizion", + "japanese": "ビリジオン", + "chinese": "毕力吉翁" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 90, + "Defense": 72, + "Sp. Attack": 90, + "Sp. Defense": 129, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 641, + "name": { + "english": "Tornadus", + "japanese": "トルネロス", + "chinese": "龙卷云" + }, + "type": [ + "Flying" + ], + "base": { + "HP": 79, + "Attack": 115, + "Defense": 70, + "Sp. Attack": 125, + "Sp. Defense": 80, + "Speed": 111 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 641, + "name": { + "english": "Tornadus", + "japanese": "トルネロス", + "chinese": "龙卷云" + }, + "type": [ + "Flying" + ], + "base": { + "HP": 79, + "Attack": 100, + "Defense": 80, + "Sp. Attack": 110, + "Sp. Defense": 90, + "Speed": 121 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "therian" + } + }, + { + "id": 641, + "name": { + "english": "Tornadus", + "japanese": "トルネロス", + "chinese": "龙卷云" + }, + "type": [ + "Flying" + ], + "base": { + "HP": 79, + "Attack": 115, + "Defense": 70, + "Sp. Attack": 125, + "Sp. Defense": 80, + "Speed": 111 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 642, + "name": { + "english": "Thundurus", + "japanese": "ボルトロス", + "chinese": "雷电云" + }, + "type": [ + "Electric", + "Flying" + ], + "base": { + "HP": 79, + "Attack": 115, + "Defense": 70, + "Sp. Attack": 125, + "Sp. Defense": 80, + "Speed": 111 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 642, + "name": { + "english": "Thundurus", + "japanese": "ボルトロス", + "chinese": "雷电云" + }, + "type": [ + "Electric", + "Flying" + ], + "base": { + "HP": 79, + "Attack": 105, + "Defense": 70, + "Sp. Attack": 145, + "Sp. Defense": 80, + "Speed": 101 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "therian" + } + }, + { + "id": 642, + "name": { + "english": "Thundurus", + "japanese": "ボルトロス", + "chinese": "雷电云" + }, + "type": [ + "Electric", + "Flying" + ], + "base": { + "HP": 79, + "Attack": 115, + "Defense": 70, + "Sp. Attack": 125, + "Sp. Defense": 80, + "Speed": 111 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 643, + "name": { + "english": "Reshiram", + "japanese": "レシラム", + "chinese": "莱希拉姆" + }, + "type": [ + "Dragon", + "Fire" + ], + "base": { + "HP": 100, + "Attack": 120, + "Defense": 100, + "Sp. Attack": 150, + "Sp. Defense": 120, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 643, + "name": { + "english": "Reshiram", + "japanese": "レシラム", + "chinese": "莱希拉姆" + }, + "type": [ + "Dragon", + "Fire" + ], + "base": { + "HP": 100, + "Attack": 120, + "Defense": 100, + "Sp. Attack": 150, + "Sp. Defense": 120, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 644, + "name": { + "english": "Zekrom", + "japanese": "ゼクロム", + "chinese": "捷克罗姆" + }, + "type": [ + "Dragon", + "Electric" + ], + "base": { + "HP": 100, + "Attack": 150, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 100, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 644, + "name": { + "english": "Zekrom", + "japanese": "ゼクロム", + "chinese": "捷克罗姆" + }, + "type": [ + "Dragon", + "Electric" + ], + "base": { + "HP": 100, + "Attack": 150, + "Defense": 120, + "Sp. Attack": 120, + "Sp. Defense": 100, + "Speed": 90 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 645, + "name": { + "english": "Landorus", + "japanese": "ランドロス", + "chinese": "土地云" + }, + "type": [ + "Ground", + "Flying" + ], + "base": { + "HP": 89, + "Attack": 125, + "Defense": 90, + "Sp. Attack": 115, + "Sp. Defense": 80, + "Speed": 101 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 645, + "name": { + "english": "Landorus", + "japanese": "ランドロス", + "chinese": "土地云" + }, + "type": [ + "Ground", + "Flying" + ], + "base": { + "HP": 89, + "Attack": 145, + "Defense": 90, + "Sp. Attack": 105, + "Sp. Defense": 80, + "Speed": 91 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "therian" + } + }, + { + "id": 645, + "name": { + "english": "Landorus", + "japanese": "ランドロス", + "chinese": "土地云" + }, + "type": [ + "Ground", + "Flying" + ], + "base": { + "HP": 89, + "Attack": 125, + "Defense": 90, + "Sp. Attack": 115, + "Sp. Defense": 80, + "Speed": 101 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 646, + "name": { + "english": "Kyurem", + "japanese": "キュレム", + "chinese": "酋雷姆" + }, + "type": [ + "Dragon", + "Ice" + ], + "base": { + "HP": 125, + "Attack": 130, + "Defense": 90, + "Sp. Attack": 130, + "Sp. Defense": 90, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 646, + "name": { + "english": "Kyurem", + "japanese": "キュレム", + "chinese": "酋雷姆" + }, + "type": [ + "Dragon", + "Ice" + ], + "base": { + "HP": 125, + "Attack": 170, + "Defense": 100, + "Sp. Attack": 120, + "Sp. Defense": 90, + "Speed": 95 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "black" + } + }, + { + "id": 646, + "name": { + "english": "Kyurem", + "japanese": "キュレム", + "chinese": "酋雷姆" + }, + "type": [ + "Dragon", + "Ice" + ], + "base": { + "HP": 125, + "Attack": 120, + "Defense": 90, + "Sp. Attack": 170, + "Sp. Defense": 100, + "Speed": 95 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "white" + } + }, + { + "id": 646, + "name": { + "english": "Kyurem", + "japanese": "キュレム", + "chinese": "酋雷姆" + }, + "type": [ + "Dragon", + "Ice" + ], + "base": { + "HP": 125, + "Attack": 130, + "Defense": 90, + "Sp. Attack": 130, + "Sp. Defense": 90, + "Speed": 95 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 647, + "name": { + "english": "Keldeo", + "japanese": "ケルディオ", + "chinese": "凯路迪欧" + }, + "type": [ + "Water", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 72, + "Defense": 90, + "Sp. Attack": 129, + "Sp. Defense": 90, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 647, + "name": { + "english": "Keldeo", + "japanese": "ケルディオ", + "chinese": "凯路迪欧" + }, + "type": [ + "Water", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 72, + "Defense": 90, + "Sp. Attack": 129, + "Sp. Defense": 90, + "Speed": 108 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "resolute" + } + }, + { + "id": 647, + "name": { + "english": "Keldeo", + "japanese": "ケルディオ", + "chinese": "凯路迪欧" + }, + "type": [ + "Water", + "Fighting" + ], + "base": { + "HP": 91, + "Attack": 72, + "Defense": 90, + "Sp. Attack": 129, + "Sp. Defense": 90, + "Speed": 108 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 648, + "name": { + "english": "Meloetta", + "japanese": "メロエッタ", + "chinese": "美洛耶塔" + }, + "type": [ + "Normal", + "Psychic" + ], + "base": { + "HP": 100, + "Attack": 77, + "Defense": 77, + "Sp. Attack": 128, + "Sp. Defense": 128, + "Speed": 90 + } + }, + { + "id": 648, + "name": { + "english": "Meloetta", + "japanese": "メロエッタ", + "chinese": "美洛耶塔" + }, + "type": [ + "Normal", + "Fighting" + ], + "base": { + "HP": 100, + "Attack": 128, + "Defense": 90, + "Sp. Attack": 77, + "Sp. Defense": 77, + "Speed": 128 + }, + "form": { + "key": "pirouette" + } + }, + { + "id": 648, + "name": { + "english": "Meloetta", + "japanese": "メロエッタ", + "chinese": "美洛耶塔" + }, + "type": [ + "Normal", + "Psychic" + ], + "base": { + "HP": 100, + "Attack": 77, + "Defense": 77, + "Sp. Attack": 128, + "Sp. Defense": 128, + "Speed": 90 + } + }, + { + "id": 649, + "name": { + "english": "Genesect", + "japanese": "ゲノセクト", + "chinese": "盖诺赛克特" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 71, + "Attack": 120, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 95, + "Speed": 99 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 649, + "name": { + "english": "Genesect", + "japanese": "ゲノセクト", + "chinese": "盖诺赛克特" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 71, + "Attack": 120, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 95, + "Speed": 99 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "douse" + } + }, + { + "id": 649, + "name": { + "english": "Genesect", + "japanese": "ゲノセクト", + "chinese": "盖诺赛克特" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 71, + "Attack": 120, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 95, + "Speed": 99 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "shock" + } + }, + { + "id": 649, + "name": { + "english": "Genesect", + "japanese": "ゲノセクト", + "chinese": "盖诺赛克特" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 71, + "Attack": 120, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 95, + "Speed": 99 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "burn" + } + }, + { + "id": 649, + "name": { + "english": "Genesect", + "japanese": "ゲノセクト", + "chinese": "盖诺赛克特" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 71, + "Attack": 120, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 95, + "Speed": 99 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "chill" + } + }, + { + "id": 649, + "name": { + "english": "Genesect", + "japanese": "ゲノセクト", + "chinese": "盖诺赛克特" + }, + "type": [ + "Bug", + "Steel" + ], + "base": { + "HP": 71, + "Attack": 120, + "Defense": 95, + "Sp. Attack": 120, + "Sp. Defense": 95, + "Speed": 99 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 650, + "name": { + "english": "Chespin", + "japanese": "ハリマロン", + "chinese": "哈力栗" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 56, + "Attack": 61, + "Defense": 65, + "Sp. Attack": 48, + "Sp. Defense": 45, + "Speed": 38 + } + }, + { + "id": 650, + "name": { + "english": "Chespin", + "japanese": "ハリマロン", + "chinese": "哈力栗" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 56, + "Attack": 61, + "Defense": 65, + "Sp. Attack": 48, + "Sp. Defense": 45, + "Speed": 38 + } + }, + { + "id": 651, + "name": { + "english": "Quilladin", + "japanese": "ハリボーグ", + "chinese": "胖胖哈力" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 61, + "Attack": 78, + "Defense": 95, + "Sp. Attack": 56, + "Sp. Defense": 58, + "Speed": 57 + } + }, + { + "id": 651, + "name": { + "english": "Quilladin", + "japanese": "ハリボーグ", + "chinese": "胖胖哈力" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 61, + "Attack": 78, + "Defense": 95, + "Sp. Attack": 56, + "Sp. Defense": 58, + "Speed": 57 + } + }, + { + "id": 652, + "name": { + "english": "Chesnaught", + "japanese": "ブリガロン", + "chinese": "布里卡隆" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 88, + "Attack": 107, + "Defense": 122, + "Sp. Attack": 74, + "Sp. Defense": 75, + "Speed": 64 + } + }, + { + "id": 652, + "name": { + "english": "Chesnaught", + "japanese": "ブリガロン", + "chinese": "布里卡隆" + }, + "type": [ + "Grass", + "Fighting" + ], + "base": { + "HP": 88, + "Attack": 107, + "Defense": 122, + "Sp. Attack": 74, + "Sp. Defense": 75, + "Speed": 64 + } + }, + { + "id": 653, + "name": { + "english": "Fennekin", + "japanese": "フォッコ", + "chinese": "火狐狸" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 40, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 62, + "Sp. Defense": 60, + "Speed": 60 + } + }, + { + "id": 653, + "name": { + "english": "Fennekin", + "japanese": "フォッコ", + "chinese": "火狐狸" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 40, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 62, + "Sp. Defense": 60, + "Speed": 60 + } + }, + { + "id": 654, + "name": { + "english": "Braixen", + "japanese": "テールナー", + "chinese": "长尾火狐" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 59, + "Attack": 59, + "Defense": 58, + "Sp. Attack": 90, + "Sp. Defense": 70, + "Speed": 73 + } + }, + { + "id": 654, + "name": { + "english": "Braixen", + "japanese": "テールナー", + "chinese": "长尾火狐" + }, + "type": [ + "Fire" + ], + "base": { + "HP": 59, + "Attack": 59, + "Defense": 58, + "Sp. Attack": 90, + "Sp. Defense": 70, + "Speed": 73 + } + }, + { + "id": 655, + "name": { + "english": "Delphox", + "japanese": "マフォクシー", + "chinese": "妖火红狐" + }, + "type": [ + "Fire", + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 69, + "Defense": 72, + "Sp. Attack": 114, + "Sp. Defense": 100, + "Speed": 104 + } + }, + { + "id": 655, + "name": { + "english": "Delphox", + "japanese": "マフォクシー", + "chinese": "妖火红狐" + }, + "type": [ + "Fire", + "Psychic" + ], + "base": { + "HP": 75, + "Attack": 69, + "Defense": 72, + "Sp. Attack": 114, + "Sp. Defense": 100, + "Speed": 104 + } + }, + { + "id": 656, + "name": { + "english": "Froakie", + "japanese": "ケロマツ", + "chinese": "呱呱泡蛙" + }, + "type": [ + "Water" + ], + "base": { + "HP": 41, + "Attack": 56, + "Defense": 40, + "Sp. Attack": 62, + "Sp. Defense": 44, + "Speed": 71 + } + }, + { + "id": 656, + "name": { + "english": "Froakie", + "japanese": "ケロマツ", + "chinese": "呱呱泡蛙" + }, + "type": [ + "Water" + ], + "base": { + "HP": 41, + "Attack": 56, + "Defense": 40, + "Sp. Attack": 62, + "Sp. Defense": 44, + "Speed": 71 + } + }, + { + "id": 657, + "name": { + "english": "Frogadier", + "japanese": "ゲコガシラ", + "chinese": "呱头蛙" + }, + "type": [ + "Water" + ], + "base": { + "HP": 54, + "Attack": 63, + "Defense": 52, + "Sp. Attack": 83, + "Sp. Defense": 56, + "Speed": 97 + } + }, + { + "id": 657, + "name": { + "english": "Frogadier", + "japanese": "ゲコガシラ", + "chinese": "呱头蛙" + }, + "type": [ + "Water" + ], + "base": { + "HP": 54, + "Attack": 63, + "Defense": 52, + "Sp. Attack": 83, + "Sp. Defense": 56, + "Speed": 97 + } + }, + { + "id": 658, + "name": { + "english": "Greninja", + "japanese": "ゲッコウガ", + "chinese": "甲贺忍蛙" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 72, + "Attack": 95, + "Defense": 67, + "Sp. Attack": 103, + "Sp. Defense": 71, + "Speed": 122 + } + }, + { + "id": 658, + "name": { + "english": "Greninja", + "japanese": "ゲッコウガ", + "chinese": "甲贺忍蛙" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 72, + "Attack": 145, + "Defense": 67, + "Sp. Attack": 153, + "Sp. Defense": 71, + "Speed": 132 + }, + "form": { + "key": "ash" + } + }, + { + "id": 658, + "name": { + "english": "Greninja", + "japanese": "ゲッコウガ", + "chinese": "甲贺忍蛙" + }, + "type": [ + "Water", + "Dark" + ], + "base": { + "HP": 72, + "Attack": 95, + "Defense": 67, + "Sp. Attack": 103, + "Sp. Defense": 71, + "Speed": 122 + } + }, + { + "id": 659, + "name": { + "english": "Bunnelby", + "japanese": "ホルビー", + "chinese": "掘掘兔" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 38, + "Attack": 36, + "Defense": 38, + "Sp. Attack": 32, + "Sp. Defense": 36, + "Speed": 57 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 659, + "name": { + "english": "Bunnelby", + "japanese": "ホルビー", + "chinese": "掘掘兔" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 38, + "Attack": 36, + "Defense": 38, + "Sp. Attack": 32, + "Sp. Defense": 36, + "Speed": 57 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 660, + "name": { + "english": "Diggersby", + "japanese": "ホルード", + "chinese": "掘地兔" + }, + "type": [ + "Normal", + "Ground" + ], + "base": { + "HP": 85, + "Attack": 56, + "Defense": 77, + "Sp. Attack": 50, + "Sp. Defense": 77, + "Speed": 78 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 660, + "name": { + "english": "Diggersby", + "japanese": "ホルード", + "chinese": "掘地兔" + }, + "type": [ + "Normal", + "Ground" + ], + "base": { + "HP": 85, + "Attack": 56, + "Defense": 77, + "Sp. Attack": 50, + "Sp. Defense": 77, + "Speed": 78 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 661, + "name": { + "english": "Fletchling", + "japanese": "ヤヤコマ", + "chinese": "小箭雀" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 50, + "Defense": 43, + "Sp. Attack": 40, + "Sp. Defense": 38, + "Speed": 62 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 661, + "name": { + "english": "Fletchling", + "japanese": "ヤヤコマ", + "chinese": "小箭雀" + }, + "type": [ + "Normal", + "Flying" + ], + "base": { + "HP": 45, + "Attack": 50, + "Defense": 43, + "Sp. Attack": 40, + "Sp. Defense": 38, + "Speed": 62 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 662, + "name": { + "english": "Fletchinder", + "japanese": "ヒノヤコマ", + "chinese": "火箭雀" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 62, + "Attack": 73, + "Defense": 55, + "Sp. Attack": 56, + "Sp. Defense": 52, + "Speed": 84 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 662, + "name": { + "english": "Fletchinder", + "japanese": "ヒノヤコマ", + "chinese": "火箭雀" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 62, + "Attack": 73, + "Defense": 55, + "Sp. Attack": 56, + "Sp. Defense": 52, + "Speed": 84 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 663, + "name": { + "english": "Talonflame", + "japanese": "ファイアロー", + "chinese": "烈箭鹰" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 78, + "Attack": 81, + "Defense": 71, + "Sp. Attack": 74, + "Sp. Defense": 69, + "Speed": 126 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 663, + "name": { + "english": "Talonflame", + "japanese": "ファイアロー", + "chinese": "烈箭鹰" + }, + "type": [ + "Fire", + "Flying" + ], + "base": { + "HP": 78, + "Attack": 81, + "Defense": 71, + "Sp. Attack": 74, + "Sp. Defense": 69, + "Speed": 126 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 664, + "name": { + "english": "Scatterbug", + "japanese": "コフキムシ", + "chinese": "粉蝶虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 38, + "Attack": 35, + "Defense": 40, + "Sp. Attack": 27, + "Sp. Defense": 25, + "Speed": 35 + } + }, + { + "id": 664, + "name": { + "english": "Scatterbug", + "japanese": "コフキムシ", + "chinese": "粉蝶虫" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 38, + "Attack": 35, + "Defense": 40, + "Sp. Attack": 27, + "Sp. Defense": 25, + "Speed": 35 + } + }, + { + "id": 665, + "name": { + "english": "Spewpa", + "japanese": "コフーライ", + "chinese": "粉蝶蛹" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 45, + "Attack": 22, + "Defense": 60, + "Sp. Attack": 27, + "Sp. Defense": 30, + "Speed": 29 + } + }, + { + "id": 665, + "name": { + "english": "Spewpa", + "japanese": "コフーライ", + "chinese": "粉蝶蛹" + }, + "type": [ + "Bug" + ], + "base": { + "HP": 45, + "Attack": 22, + "Defense": 60, + "Sp. Attack": 27, + "Sp. Defense": 30, + "Speed": 29 + } + }, + { + "id": 666, + "name": { + "english": "Vivillon", + "japanese": "ビビヨン", + "chinese": "彩粉蝶" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 80, + "Attack": 52, + "Defense": 50, + "Sp. Attack": 90, + "Sp. Defense": 50, + "Speed": 89 + } + }, + { + "id": 666, + "name": { + "english": "Vivillon", + "japanese": "ビビヨン", + "chinese": "彩粉蝶" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 80, + "Attack": 52, + "Defense": 50, + "Sp. Attack": 90, + "Sp. Defense": 50, + "Speed": 89 + }, + "form": { + "key": "fancy" + } + }, + { + "id": 666, + "name": { + "english": "Vivillon", + "japanese": "ビビヨン", + "chinese": "彩粉蝶" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 80, + "Attack": 52, + "Defense": 50, + "Sp. Attack": 90, + "Sp. Defense": 50, + "Speed": 89 + }, + "form": { + "key": "pokeball" + } + }, + { + "id": 666, + "name": { + "english": "Vivillon", + "japanese": "ビビヨン", + "chinese": "彩粉蝶" + }, + "type": [ + "Bug", + "Flying" + ], + "base": { + "HP": 80, + "Attack": 52, + "Defense": 50, + "Sp. Attack": 90, + "Sp. Defense": 50, + "Speed": 89 + } + }, + { + "id": 667, + "name": { + "english": "Litleo", + "japanese": "シシコ", + "chinese": "小狮狮" + }, + "type": [ + "Fire", + "Normal" + ], + "base": { + "HP": 62, + "Attack": 50, + "Defense": 58, + "Sp. Attack": 73, + "Sp. Defense": 54, + "Speed": 72 + } + }, + { + "id": 667, + "name": { + "english": "Litleo", + "japanese": "シシコ", + "chinese": "小狮狮" + }, + "type": [ + "Fire", + "Normal" + ], + "base": { + "HP": 62, + "Attack": 50, + "Defense": 58, + "Sp. Attack": 73, + "Sp. Defense": 54, + "Speed": 72 + } + }, + { + "id": 668, + "name": { + "english": "Pyroar", + "japanese": "カエンジシ", + "chinese": "火炎狮" + }, + "type": [ + "Fire", + "Normal" + ], + "base": { + "HP": 86, + "Attack": 68, + "Defense": 72, + "Sp. Attack": 109, + "Sp. Defense": 66, + "Speed": 106 + } + }, + { + "id": 668, + "name": { + "english": "Pyroar", + "japanese": "カエンジシ", + "chinese": "火炎狮" + }, + "type": [ + "Fire", + "Normal" + ], + "base": { + "HP": 86, + "Attack": 68, + "Defense": 72, + "Sp. Attack": 109, + "Sp. Defense": 66, + "Speed": 106 + } + }, + { + "id": 669, + "name": { + "english": "Flabébé", + "japanese": "フラベベ", + "chinese": "花蓓蓓" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 44, + "Attack": 38, + "Defense": 39, + "Sp. Attack": 61, + "Sp. Defense": 79, + "Speed": 42 + } + }, + { + "id": 669, + "name": { + "english": "Flabébé", + "japanese": "フラベベ", + "chinese": "花蓓蓓" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 44, + "Attack": 38, + "Defense": 39, + "Sp. Attack": 61, + "Sp. Defense": 79, + "Speed": 42 + } + }, + { + "id": 670, + "name": { + "english": "Floette", + "japanese": "フラエッテ", + "chinese": "花叶蒂" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 54, + "Attack": 45, + "Defense": 47, + "Sp. Attack": 75, + "Sp. Defense": 98, + "Speed": 52 + } + }, + { + "id": 670, + "name": { + "english": "Floette", + "japanese": "フラエッテ", + "chinese": "花叶蒂" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 74, + "Attack": 65, + "Defense": 67, + "Sp. Attack": 125, + "Sp. Defense": 128, + "Speed": 92 + }, + "form": { + "key": "eternal" + } + }, + { + "id": 670, + "name": { + "english": "Floette", + "japanese": "フラエッテ", + "chinese": "花叶蒂" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 54, + "Attack": 45, + "Defense": 47, + "Sp. Attack": 75, + "Sp. Defense": 98, + "Speed": 52 + } + }, + { + "id": 671, + "name": { + "english": "Florges", + "japanese": "フラージェス", + "chinese": "花洁夫人" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 78, + "Attack": 65, + "Defense": 68, + "Sp. Attack": 112, + "Sp. Defense": 154, + "Speed": 75 + } + }, + { + "id": 671, + "name": { + "english": "Florges", + "japanese": "フラージェス", + "chinese": "花洁夫人" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 78, + "Attack": 65, + "Defense": 68, + "Sp. Attack": 112, + "Sp. Defense": 154, + "Speed": 75 + } + }, + { + "id": 672, + "name": { + "english": "Skiddo", + "japanese": "メェークル", + "chinese": "坐骑小羊" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 66, + "Attack": 65, + "Defense": 48, + "Sp. Attack": 62, + "Sp. Defense": 57, + "Speed": 52 + } + }, + { + "id": 672, + "name": { + "english": "Skiddo", + "japanese": "メェークル", + "chinese": "坐骑小羊" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 66, + "Attack": 65, + "Defense": 48, + "Sp. Attack": 62, + "Sp. Defense": 57, + "Speed": 52 + } + }, + { + "id": 673, + "name": { + "english": "Gogoat", + "japanese": "ゴーゴート", + "chinese": "坐骑山羊" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 123, + "Attack": 100, + "Defense": 62, + "Sp. Attack": 97, + "Sp. Defense": 81, + "Speed": 68 + } + }, + { + "id": 673, + "name": { + "english": "Gogoat", + "japanese": "ゴーゴート", + "chinese": "坐骑山羊" + }, + "type": [ + "Grass" + ], + "base": { + "HP": 123, + "Attack": 100, + "Defense": 62, + "Sp. Attack": 97, + "Sp. Defense": 81, + "Speed": 68 + } + }, + { + "id": 674, + "name": { + "english": "Pancham", + "japanese": "ヤンチャム", + "chinese": "顽皮熊猫" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 67, + "Attack": 82, + "Defense": 62, + "Sp. Attack": 46, + "Sp. Defense": 48, + "Speed": 43 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 674, + "name": { + "english": "Pancham", + "japanese": "ヤンチャム", + "chinese": "顽皮熊猫" + }, + "type": [ + "Fighting" + ], + "base": { + "HP": 67, + "Attack": 82, + "Defense": 62, + "Sp. Attack": 46, + "Sp. Defense": 48, + "Speed": 43 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 675, + "name": { + "english": "Pangoro", + "japanese": "ゴロンダ", + "chinese": "流氓熊猫" + }, + "type": [ + "Fighting", + "Dark" + ], + "base": { + "HP": 95, + "Attack": 124, + "Defense": 78, + "Sp. Attack": 69, + "Sp. Defense": 71, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 675, + "name": { + "english": "Pangoro", + "japanese": "ゴロンダ", + "chinese": "流氓熊猫" + }, + "type": [ + "Fighting", + "Dark" + ], + "base": { + "HP": 95, + "Attack": 124, + "Defense": 78, + "Sp. Attack": 69, + "Sp. Defense": 71, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 676, + "name": { + "english": "Furfrou", + "japanese": "トリミアン", + "chinese": "多丽米亚" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 75, + "Attack": 80, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 90, + "Speed": 102 + } + }, + { + "id": 676, + "name": { + "english": "Furfrou", + "japanese": "トリミアン", + "chinese": "多丽米亚" + }, + "type": [ + "Normal" + ], + "base": { + "HP": 75, + "Attack": 80, + "Defense": 60, + "Sp. Attack": 65, + "Sp. Defense": 90, + "Speed": 102 + } + }, + { + "id": 677, + "name": { + "english": "Espurr", + "japanese": "ニャスパー", + "chinese": "妙喵" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 62, + "Attack": 48, + "Defense": 54, + "Sp. Attack": 63, + "Sp. Defense": 60, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 677, + "name": { + "english": "Espurr", + "japanese": "ニャスパー", + "chinese": "妙喵" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 62, + "Attack": 48, + "Defense": 54, + "Sp. Attack": 63, + "Sp. Defense": 60, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 678, + "name": { + "english": "Meowstic", + "japanese": "ニャオニクス", + "chinese": "超能妙喵" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 74, + "Attack": 48, + "Defense": 76, + "Sp. Attack": 83, + "Sp. Defense": 81, + "Speed": 104 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 678, + "name": { + "english": "Meowstic", + "japanese": "ニャオニクス", + "chinese": "超能妙喵" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 74, + "Attack": 48, + "Defense": 76, + "Sp. Attack": 83, + "Sp. Defense": 81, + "Speed": 104 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "f" + } + }, + { + "id": 678, + "name": { + "english": "Meowstic", + "japanese": "ニャオニクス", + "chinese": "超能妙喵" + }, + "type": [ + "Psychic" + ], + "base": { + "HP": 74, + "Attack": 48, + "Defense": 76, + "Sp. Attack": 83, + "Sp. Defense": 81, + "Speed": 104 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 679, + "name": { + "english": "Honedge", + "japanese": "ヒトツキ", + "chinese": "独剑鞘" + }, + "type": [ + "Steel", + "Ghost" + ], + "base": { + "HP": 45, + "Attack": 80, + "Defense": 100, + "Sp. Attack": 35, + "Sp. Defense": 37, + "Speed": 28 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 679, + "name": { + "english": "Honedge", + "japanese": "ヒトツキ", + "chinese": "独剑鞘" + }, + "type": [ + "Steel", + "Ghost" + ], + "base": { + "HP": 45, + "Attack": 80, + "Defense": 100, + "Sp. Attack": 35, + "Sp. Defense": 37, + "Speed": 28 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 680, + "name": { + "english": "Doublade", + "japanese": "ニダンギル", + "chinese": "双剑鞘" + }, + "type": [ + "Steel", + "Ghost" + ], + "base": { + "HP": 59, + "Attack": 110, + "Defense": 150, + "Sp. Attack": 45, + "Sp. Defense": 49, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 680, + "name": { + "english": "Doublade", + "japanese": "ニダンギル", + "chinese": "双剑鞘" + }, + "type": [ + "Steel", + "Ghost" + ], + "base": { + "HP": 59, + "Attack": 110, + "Defense": 150, + "Sp. Attack": 45, + "Sp. Defense": 49, + "Speed": 35 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 681, + "name": { + "english": "Aegislash", + "japanese": "ギルガルド", + "chinese": "坚盾剑怪" + }, + "type": [ + "Steel", + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 140, + "Sp. Attack": 50, + "Sp. Defense": 140, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 681, + "name": { + "english": "Aegislash", + "japanese": "ギルガルド", + "chinese": "坚盾剑怪" + }, + "type": [ + "Steel", + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 140, + "Defense": 50, + "Sp. Attack": 140, + "Sp. Defense": 50, + "Speed": 60 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "blade" + } + }, + { + "id": 681, + "name": { + "english": "Aegislash", + "japanese": "ギルガルド", + "chinese": "坚盾剑怪" + }, + "type": [ + "Steel", + "Ghost" + ], + "base": { + "HP": 60, + "Attack": 50, + "Defense": 150, + "Sp. Attack": 50, + "Sp. Defense": 150, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 682, + "name": { + "english": "Spritzee", + "japanese": "シュシュプ", + "chinese": "粉香香" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 78, + "Attack": 52, + "Defense": 60, + "Sp. Attack": 63, + "Sp. Defense": 65, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 682, + "name": { + "english": "Spritzee", + "japanese": "シュシュプ", + "chinese": "粉香香" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 78, + "Attack": 52, + "Defense": 60, + "Sp. Attack": 63, + "Sp. Defense": 65, + "Speed": 23 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 683, + "name": { + "english": "Aromatisse", + "japanese": "フレフワン", + "chinese": "芳香精" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 101, + "Attack": 72, + "Defense": 72, + "Sp. Attack": 99, + "Sp. Defense": 89, + "Speed": 29 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 683, + "name": { + "english": "Aromatisse", + "japanese": "フレフワン", + "chinese": "芳香精" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 101, + "Attack": 72, + "Defense": 72, + "Sp. Attack": 99, + "Sp. Defense": 89, + "Speed": 29 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 684, + "name": { + "english": "Swirlix", + "japanese": "ペロッパフ", + "chinese": "绵绵泡芙" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 62, + "Attack": 48, + "Defense": 66, + "Sp. Attack": 59, + "Sp. Defense": 57, + "Speed": 49 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 684, + "name": { + "english": "Swirlix", + "japanese": "ペロッパフ", + "chinese": "绵绵泡芙" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 62, + "Attack": 48, + "Defense": 66, + "Sp. Attack": 59, + "Sp. Defense": 57, + "Speed": 49 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 685, + "name": { + "english": "Slurpuff", + "japanese": "ペロリーム", + "chinese": "胖甜妮" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 82, + "Attack": 80, + "Defense": 86, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 72 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 685, + "name": { + "english": "Slurpuff", + "japanese": "ペロリーム", + "chinese": "胖甜妮" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 82, + "Attack": 80, + "Defense": 86, + "Sp. Attack": 85, + "Sp. Defense": 75, + "Speed": 72 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 686, + "name": { + "english": "Inkay", + "japanese": "マーイーカ", + "chinese": "好啦鱿" + }, + "type": [ + "Dark", + "Psychic" + ], + "base": { + "HP": 53, + "Attack": 54, + "Defense": 53, + "Sp. Attack": 37, + "Sp. Defense": 46, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 686, + "name": { + "english": "Inkay", + "japanese": "マーイーカ", + "chinese": "好啦鱿" + }, + "type": [ + "Dark", + "Psychic" + ], + "base": { + "HP": 53, + "Attack": 54, + "Defense": 53, + "Sp. Attack": 37, + "Sp. Defense": 46, + "Speed": 45 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 687, + "name": { + "english": "Malamar", + "japanese": "カラマネロ", + "chinese": "乌贼王" + }, + "type": [ + "Dark", + "Psychic" + ], + "base": { + "HP": 86, + "Attack": 92, + "Defense": 88, + "Sp. Attack": 68, + "Sp. Defense": 75, + "Speed": 73 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 687, + "name": { + "english": "Malamar", + "japanese": "カラマネロ", + "chinese": "乌贼王" + }, + "type": [ + "Dark", + "Psychic" + ], + "base": { + "HP": 86, + "Attack": 92, + "Defense": 88, + "Sp. Attack": 68, + "Sp. Defense": 75, + "Speed": 73 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 688, + "name": { + "english": "Binacle", + "japanese": "カメテテ", + "chinese": "龟脚脚" + }, + "type": [ + "Rock", + "Water" + ], + "base": { + "HP": 42, + "Attack": 52, + "Defense": 67, + "Sp. Attack": 39, + "Sp. Defense": 56, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 688, + "name": { + "english": "Binacle", + "japanese": "カメテテ", + "chinese": "龟脚脚" + }, + "type": [ + "Rock", + "Water" + ], + "base": { + "HP": 42, + "Attack": 52, + "Defense": 67, + "Sp. Attack": 39, + "Sp. Defense": 56, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 689, + "name": { + "english": "Barbaracle", + "japanese": "ガメノデス", + "chinese": "龟足巨铠" + }, + "type": [ + "Rock", + "Water" + ], + "base": { + "HP": 72, + "Attack": 105, + "Defense": 115, + "Sp. Attack": 54, + "Sp. Defense": 86, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 689, + "name": { + "english": "Barbaracle", + "japanese": "ガメノデス", + "chinese": "龟足巨铠" + }, + "type": [ + "Rock", + "Water" + ], + "base": { + "HP": 72, + "Attack": 105, + "Defense": 115, + "Sp. Attack": 54, + "Sp. Defense": 86, + "Speed": 68 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 690, + "name": { + "english": "Skrelp", + "japanese": "クズモー", + "chinese": "垃垃藻" + }, + "type": [ + "Poison", + "Water" + ], + "base": { + "HP": 50, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 690, + "name": { + "english": "Skrelp", + "japanese": "クズモー", + "chinese": "垃垃藻" + }, + "type": [ + "Poison", + "Water" + ], + "base": { + "HP": 50, + "Attack": 60, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 60, + "Speed": 30 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 691, + "name": { + "english": "Dragalge", + "japanese": "ドラミドロ", + "chinese": "毒藻龙" + }, + "type": [ + "Poison", + "Dragon" + ], + "base": { + "HP": 65, + "Attack": 75, + "Defense": 90, + "Sp. Attack": 97, + "Sp. Defense": 123, + "Speed": 44 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 691, + "name": { + "english": "Dragalge", + "japanese": "ドラミドロ", + "chinese": "毒藻龙" + }, + "type": [ + "Poison", + "Dragon" + ], + "base": { + "HP": 65, + "Attack": 75, + "Defense": 90, + "Sp. Attack": 97, + "Sp. Defense": 123, + "Speed": 44 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 692, + "name": { + "english": "Clauncher", + "japanese": "ウデッポウ", + "chinese": "铁臂枪虾" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 62, + "Sp. Attack": 58, + "Sp. Defense": 63, + "Speed": 44 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 692, + "name": { + "english": "Clauncher", + "japanese": "ウデッポウ", + "chinese": "铁臂枪虾" + }, + "type": [ + "Water" + ], + "base": { + "HP": 50, + "Attack": 53, + "Defense": 62, + "Sp. Attack": 58, + "Sp. Defense": 63, + "Speed": 44 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 693, + "name": { + "english": "Clawitzer", + "japanese": "ブロスター", + "chinese": "钢炮臂虾" + }, + "type": [ + "Water" + ], + "base": { + "HP": 71, + "Attack": 73, + "Defense": 88, + "Sp. Attack": 120, + "Sp. Defense": 89, + "Speed": 59 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 693, + "name": { + "english": "Clawitzer", + "japanese": "ブロスター", + "chinese": "钢炮臂虾" + }, + "type": [ + "Water" + ], + "base": { + "HP": 71, + "Attack": 73, + "Defense": 88, + "Sp. Attack": 120, + "Sp. Defense": 89, + "Speed": 59 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 694, + "name": { + "english": "Helioptile", + "japanese": "エリキテル", + "chinese": "伞电蜥" + }, + "type": [ + "Electric", + "Normal" + ], + "base": { + "HP": 44, + "Attack": 38, + "Defense": 33, + "Sp. Attack": 61, + "Sp. Defense": 43, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 694, + "name": { + "english": "Helioptile", + "japanese": "エリキテル", + "chinese": "伞电蜥" + }, + "type": [ + "Electric", + "Normal" + ], + "base": { + "HP": 44, + "Attack": 38, + "Defense": 33, + "Sp. Attack": 61, + "Sp. Defense": 43, + "Speed": 70 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 695, + "name": { + "english": "Heliolisk", + "japanese": "エレザード", + "chinese": "光电伞蜥" + }, + "type": [ + "Electric", + "Normal" + ], + "base": { + "HP": 62, + "Attack": 55, + "Defense": 52, + "Sp. Attack": 109, + "Sp. Defense": 94, + "Speed": 109 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 695, + "name": { + "english": "Heliolisk", + "japanese": "エレザード", + "chinese": "光电伞蜥" + }, + "type": [ + "Electric", + "Normal" + ], + "base": { + "HP": 62, + "Attack": 55, + "Defense": 52, + "Sp. Attack": 109, + "Sp. Defense": 94, + "Speed": 109 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 696, + "name": { + "english": "Tyrunt", + "japanese": "チゴラス", + "chinese": "宝宝暴龙" + }, + "type": [ + "Rock", + "Dragon" + ], + "base": { + "HP": 58, + "Attack": 89, + "Defense": 77, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 696, + "name": { + "english": "Tyrunt", + "japanese": "チゴラス", + "chinese": "宝宝暴龙" + }, + "type": [ + "Rock", + "Dragon" + ], + "base": { + "HP": 58, + "Attack": 89, + "Defense": 77, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 48 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 697, + "name": { + "english": "Tyrantrum", + "japanese": "ガチゴラス", + "chinese": "怪颚龙" + }, + "type": [ + "Rock", + "Dragon" + ], + "base": { + "HP": 82, + "Attack": 121, + "Defense": 119, + "Sp. Attack": 69, + "Sp. Defense": 59, + "Speed": 71 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 697, + "name": { + "english": "Tyrantrum", + "japanese": "ガチゴラス", + "chinese": "怪颚龙" + }, + "type": [ + "Rock", + "Dragon" + ], + "base": { + "HP": 82, + "Attack": 121, + "Defense": 119, + "Sp. Attack": 69, + "Sp. Defense": 59, + "Speed": 71 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 698, + "name": { + "english": "Amaura", + "japanese": "アマルス", + "chinese": "冰雪龙" + }, + "type": [ + "Rock", + "Ice" + ], + "base": { + "HP": 77, + "Attack": 59, + "Defense": 50, + "Sp. Attack": 67, + "Sp. Defense": 63, + "Speed": 46 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 698, + "name": { + "english": "Amaura", + "japanese": "アマルス", + "chinese": "冰雪龙" + }, + "type": [ + "Rock", + "Ice" + ], + "base": { + "HP": 77, + "Attack": 59, + "Defense": 50, + "Sp. Attack": 67, + "Sp. Defense": 63, + "Speed": 46 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 699, + "name": { + "english": "Aurorus", + "japanese": "アマルルガ", + "chinese": "冰雪巨龙" + }, + "type": [ + "Rock", + "Ice" + ], + "base": { + "HP": 123, + "Attack": 77, + "Defense": 72, + "Sp. Attack": 99, + "Sp. Defense": 92, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 699, + "name": { + "english": "Aurorus", + "japanese": "アマルルガ", + "chinese": "冰雪巨龙" + }, + "type": [ + "Rock", + "Ice" + ], + "base": { + "HP": 123, + "Attack": 77, + "Defense": 72, + "Sp. Attack": 99, + "Sp. Defense": 92, + "Speed": 58 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 700, + "name": { + "english": "Sylveon", + "japanese": "ニンフィア", + "chinese": "仙子伊布" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 95, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 110, + "Sp. Defense": 130, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 700, + "name": { + "english": "Sylveon", + "japanese": "ニンフィア", + "chinese": "仙子伊布" + }, + "type": [ + "Fairy" + ], + "base": { + "HP": 95, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 110, + "Sp. Defense": 130, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 701, + "name": { + "english": "Hawlucha", + "japanese": "ルチャブル", + "chinese": "摔角鹰人" + }, + "type": [ + "Fighting", + "Flying" + ], + "base": { + "HP": 78, + "Attack": 92, + "Defense": 75, + "Sp. Attack": 74, + "Sp. Defense": 63, + "Speed": 118 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 701, + "name": { + "english": "Hawlucha", + "japanese": "ルチャブル", + "chinese": "摔角鹰人" + }, + "type": [ + "Fighting", + "Flying" + ], + "base": { + "HP": 78, + "Attack": 92, + "Defense": 75, + "Sp. Attack": 74, + "Sp. Defense": 63, + "Speed": 118 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 702, + "name": { + "english": "Dedenne", + "japanese": "デデンネ", + "chinese": "咚咚鼠" + }, + "type": [ + "Electric", + "Fairy" + ], + "base": { + "HP": 67, + "Attack": 58, + "Defense": 57, + "Sp. Attack": 81, + "Sp. Defense": 67, + "Speed": 101 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 702, + "name": { + "english": "Dedenne", + "japanese": "デデンネ", + "chinese": "咚咚鼠" + }, + "type": [ + "Electric", + "Fairy" + ], + "base": { + "HP": 67, + "Attack": 58, + "Defense": 57, + "Sp. Attack": 81, + "Sp. Defense": 67, + "Speed": 101 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 703, + "name": { + "english": "Carbink", + "japanese": "メレシー", + "chinese": "小碎钻" + }, + "type": [ + "Rock", + "Fairy" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 150, + "Sp. Attack": 50, + "Sp. Defense": 150, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 703, + "name": { + "english": "Carbink", + "japanese": "メレシー", + "chinese": "小碎钻" + }, + "type": [ + "Rock", + "Fairy" + ], + "base": { + "HP": 50, + "Attack": 50, + "Defense": 150, + "Sp. Attack": 50, + "Sp. Defense": 150, + "Speed": 50 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 704, + "name": { + "english": "Goomy", + "japanese": "ヌメラ", + "chinese": "黏黏宝" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 45, + "Attack": 50, + "Defense": 35, + "Sp. Attack": 55, + "Sp. Defense": 75, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 704, + "name": { + "english": "Goomy", + "japanese": "ヌメラ", + "chinese": "黏黏宝" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 45, + "Attack": 50, + "Defense": 35, + "Sp. Attack": 55, + "Sp. Defense": 75, + "Speed": 40 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 705, + "name": { + "english": "Sliggoo", + "japanese": "ヌメイル", + "chinese": "黏美儿" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 68, + "Attack": 75, + "Defense": 53, + "Sp. Attack": 83, + "Sp. Defense": 113, + "Speed": 60 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 705, + "name": { + "english": "Sliggoo", + "japanese": "ヌメイル", + "chinese": "黏美儿" + }, + "type": [ + "Steel", + "Dragon" + ], + "base": { + "HP": 58, + "Attack": 75, + "Defense": 83, + "Sp. Attack": 83, + "Sp. Defense": 113, + "Speed": 40 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 705, + "name": { + "english": "Sliggoo", + "japanese": "ヌメイル", + "chinese": "黏美儿" + }, + "type": [ + "Steel", + "Dragon" + ], + "base": { + "HP": 58, + "Attack": 75, + "Defense": 83, + "Sp. Attack": 83, + "Sp. Defense": 113, + "Speed": 40 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 705, + "name": { + "english": "Sliggoo", + "japanese": "ヌメイル", + "chinese": "黏美儿" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 68, + "Attack": 75, + "Defense": 53, + "Sp. Attack": 83, + "Sp. Defense": 113, + "Speed": 60 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 706, + "name": { + "english": "Goodra", + "japanese": "ヌメルゴン", + "chinese": "黏美龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 90, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 110, + "Sp. Defense": 150, + "Speed": 80 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 706, + "name": { + "english": "Goodra", + "japanese": "ヌメルゴン", + "chinese": "黏美龙" + }, + "type": [ + "Steel", + "Dragon" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 110, + "Sp. Defense": 150, + "Speed": 60 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } + }, + { + "id": 706, + "name": { + "english": "Goodra", + "japanese": "ヌメルゴン", + "chinese": "黏美龙" + }, + "type": [ + "Steel", + "Dragon" + ], + "base": { + "HP": 80, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 110, + "Sp. Defense": 150, + "Speed": 60 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } + }, + { + "id": 706, + "name": { + "english": "Goodra", + "japanese": "ヌメルゴン", + "chinese": "黏美龙" + }, + "type": [ + "Dragon" + ], + "base": { + "HP": 90, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 110, + "Sp. Defense": 150, + "Speed": 80 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 707, + "name": { + "english": "Klefki", + "japanese": "クレッフィ", + "chinese": "钥圈儿" + }, + "type": [ + "Steel", + "Fairy" + ], + "base": { + "HP": 57, + "Attack": 80, + "Defense": 91, + "Sp. Attack": 80, + "Sp. Defense": 87, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 707, + "name": { + "english": "Klefki", + "japanese": "クレッフィ", + "chinese": "钥圈儿" + }, + "type": [ + "Steel", + "Fairy" + ], + "base": { + "HP": 57, + "Attack": 80, + "Defense": 91, + "Sp. Attack": 80, + "Sp. Defense": 87, + "Speed": 75 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 708, + "name": { + "english": "Phantump", + "japanese": "ボクレー", + "chinese": "小木灵" + }, + "type": [ + "Ghost", + "Grass" + ], + "base": { + "HP": 43, + "Attack": 70, + "Defense": 48, + "Sp. Attack": 50, + "Sp. Defense": 60, + "Speed": 38 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 708, + "name": { + "english": "Phantump", + "japanese": "ボクレー", + "chinese": "小木灵" + }, + "type": [ + "Ghost", + "Grass" + ], + "base": { + "HP": 43, + "Attack": 70, + "Defense": 48, + "Sp. Attack": 50, + "Sp. Defense": 60, + "Speed": 38 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 709, + "name": { + "english": "Trevenant", + "japanese": "オーロット", + "chinese": "朽木妖" + }, + "type": [ + "Ghost", + "Grass" + ], + "base": { + "HP": 85, + "Attack": 110, + "Defense": 76, + "Sp. Attack": 65, + "Sp. Defense": 82, + "Speed": 56 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 709, + "name": { + "english": "Trevenant", + "japanese": "オーロット", + "chinese": "朽木妖" + }, + "type": [ + "Ghost", + "Grass" + ], + "base": { + "HP": 85, + "Attack": 110, + "Defense": 76, + "Sp. Attack": 65, + "Sp. Defense": 82, + "Speed": 56 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 710, + "name": { + "english": "Pumpkaboo", + "japanese": "バケッチャ", + "chinese": "南瓜精" + }, + "type": [ + "Ghost", + "Grass" + ], + "base": { + "HP": 49, + "Attack": 66, + "Defense": 70, + "Sp. Attack": 44, + "Sp. Defense": 55, + "Speed": 51 + }, + "includedInGens": [ + 8 + ] + }, + { + "id": 710, + "name": { + "english": "Pumpkaboo", + "japanese": "バケッチャ", + "chinese": "南瓜精" + }, + "type": [ + "Ghost", + "Grass" + ], + "base": { + "HP": 44, + "Attack": 66, + "Defense": 70, + "Sp. Attack": 44, + "Sp. Defense": 55, + "Speed": 56 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "small" + } + }, + { + "id": 710, + "name": { + "english": "Pumpkaboo", + "japanese": "バケッチャ", + "chinese": "南瓜精" + }, + "type": [ + "Ghost", + "Grass" + ], + "base": { + "HP": 54, + "Attack": 66, + "Defense": 70, + "Sp. Attack": 44, + "Sp. Defense": 55, + "Speed": 46 + }, + "includedInGens": [ + 8 + ], + "form": { + "key": "large" + } + }, + { + "id": 710, + "name": { + "english": "Pumpkaboo", + "japanese": "バケッチャ", + "chinese": "南瓜精" }, "type": [ - "Dark", - "Flying" + "Ghost", + "Grass" ], "base": { - "HP": 100, - "Attack": 125, - "Defense": 52, - "Sp. Attack": 105, - "Sp. Defense": 52, - "Speed": 71 + "HP": 59, + "Attack": 66, + "Defense": 70, + "Sp. Attack": 44, + "Sp. Defense": 55, + "Speed": 41 }, - "color": "black" + "includedInGens": [ + 8 + ], + "form": { + "key": "super" + } }, { - "id": 431, + "id": 710, "name": { - "english": "Glameow", - "japanese": "ニャルマー", - "chinese": "魅力喵" + "english": "Pumpkaboo", + "japanese": "バケッチャ", + "chinese": "南瓜精" }, "type": [ - "Normal" + "Ghost", + "Grass" ], "base": { - "HP": 49, - "Attack": 55, - "Defense": 42, - "Sp. Attack": 42, - "Sp. Defense": 37, - "Speed": 85 + "HP": 59, + "Attack": 66, + "Defense": 70, + "Sp. Attack": 44, + "Sp. Defense": 55, + "Speed": 41 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 432, + "id": 711, "name": { - "english": "Purugly", - "japanese": "ブニャット", - "chinese": "东施喵" + "english": "Gourgeist", + "japanese": "パンプジン", + "chinese": "南瓜怪人" }, "type": [ - "Normal" + "Ghost", + "Grass" ], "base": { - "HP": 71, - "Attack": 82, - "Defense": 64, - "Sp. Attack": 64, - "Sp. Defense": 59, - "Speed": 112 + "HP": 65, + "Attack": 90, + "Defense": 122, + "Sp. Attack": 58, + "Sp. Defense": 75, + "Speed": 84 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 433, + "id": 711, "name": { - "english": "Chingling", - "japanese": "リーシャン", - "chinese": "铃铛响" + "english": "Gourgeist", + "japanese": "パンプジン", + "chinese": "南瓜怪人" }, "type": [ - "Psychic" + "Ghost", + "Grass" ], "base": { - "HP": 45, - "Attack": 30, - "Defense": 50, - "Sp. Attack": 65, - "Sp. Defense": 50, - "Speed": 45 + "HP": 55, + "Attack": 85, + "Defense": 122, + "Sp. Attack": 58, + "Sp. Defense": 75, + "Speed": 99 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "small" + } }, { - "id": 434, + "id": 711, "name": { - "english": "Stunky", - "japanese": "スカンプー", - "chinese": "臭鼬噗" + "english": "Gourgeist", + "japanese": "パンプジン", + "chinese": "南瓜怪人" }, "type": [ - "Poison", - "Dark" + "Ghost", + "Grass" ], "base": { - "HP": 63, - "Attack": 63, - "Defense": 47, - "Sp. Attack": 41, - "Sp. Defense": 41, - "Speed": 74 + "HP": 75, + "Attack": 95, + "Defense": 122, + "Sp. Attack": 58, + "Sp. Defense": 75, + "Speed": 69 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "large" + } }, { - "id": 435, + "id": 711, "name": { - "english": "Skuntank", - "japanese": "スカタンク", - "chinese": "坦克臭鼬" + "english": "Gourgeist", + "japanese": "パンプジン", + "chinese": "南瓜怪人" }, "type": [ - "Poison", - "Dark" + "Ghost", + "Grass" ], "base": { - "HP": 103, - "Attack": 93, - "Defense": 67, - "Sp. Attack": 71, - "Sp. Defense": 61, - "Speed": 84 + "HP": 85, + "Attack": 100, + "Defense": 122, + "Sp. Attack": 58, + "Sp. Defense": 75, + "Speed": 54 }, - "color": "purple" + "includedInGens": [ + 8 + ], + "form": { + "key": "super" + } }, { - "id": 436, + "id": 711, "name": { - "english": "Bronzor", - "japanese": "ドーミラー", - "chinese": "铜镜怪" + "english": "Gourgeist", + "japanese": "パンプジン", + "chinese": "南瓜怪人" }, "type": [ - "Steel", - "Psychic" + "Ghost", + "Grass" ], "base": { - "HP": 57, - "Attack": 24, - "Defense": 86, - "Sp. Attack": 24, - "Sp. Defense": 86, - "Speed": 23 + "HP": 85, + "Attack": 100, + "Defense": 122, + "Sp. Attack": 58, + "Sp. Defense": 75, + "Speed": 54 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 437, + "id": 712, "name": { - "english": "Bronzong", - "japanese": "ドータクン", - "chinese": "青铜钟" + "english": "Bergmite", + "japanese": "カチコール", + "chinese": "冰宝" }, "type": [ - "Steel", - "Psychic" + "Ice" ], "base": { - "HP": 67, - "Attack": 89, - "Defense": 116, - "Sp. Attack": 79, - "Sp. Defense": 116, - "Speed": 33 + "HP": 55, + "Attack": 69, + "Defense": 85, + "Sp. Attack": 32, + "Sp. Defense": 35, + "Speed": 28 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 438, + "id": 712, "name": { - "english": "Bonsly", - "japanese": "ウソハチ", - "chinese": "盆才怪" + "english": "Bergmite", + "japanese": "カチコール", + "chinese": "冰宝" }, "type": [ - "Rock" + "Ice" ], "base": { - "HP": 50, - "Attack": 80, - "Defense": 95, - "Sp. Attack": 10, - "Sp. Defense": 45, - "Speed": 10 + "HP": 55, + "Attack": 69, + "Defense": 85, + "Sp. Attack": 32, + "Sp. Defense": 35, + "Speed": 28 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 439, + "id": 713, "name": { - "english": "Mime Jr.", - "japanese": "マネネ", - "chinese": "魔尼尼" + "english": "Avalugg", + "japanese": "クレベース", + "chinese": "冰岩怪" }, "type": [ - "Psychic", - "Fairy" + "Ice" ], "base": { - "HP": 20, - "Attack": 25, - "Defense": 45, - "Sp. Attack": 70, - "Sp. Defense": 90, - "Speed": 60 + "HP": 95, + "Attack": 117, + "Defense": 184, + "Sp. Attack": 44, + "Sp. Defense": 46, + "Speed": 28 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 440, + "id": 713, "name": { - "english": "Happiny", - "japanese": "ピンプク", - "chinese": "小福蛋" + "english": "Avalugg", + "japanese": "クレベース", + "chinese": "冰岩怪" }, "type": [ - "Normal" + "Ice", + "Rock" ], "base": { - "HP": 100, - "Attack": 5, - "Defense": 5, - "Sp. Attack": 15, - "Sp. Defense": 65, - "Speed": 30 + "HP": 95, + "Attack": 127, + "Defense": 184, + "Sp. Attack": 34, + "Sp. Defense": 36, + "Speed": 38 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } }, { - "id": 441, + "id": 713, "name": { - "english": "Chatot", - "japanese": "ペラップ", - "chinese": "聒噪鸟" + "english": "Avalugg", + "japanese": "クレベース", + "chinese": "冰岩怪" }, "type": [ - "Normal", - "Flying" + "Ice", + "Rock" ], "base": { - "HP": 76, - "Attack": 65, - "Defense": 45, - "Sp. Attack": 92, - "Sp. Defense": 42, - "Speed": 91 + "HP": 95, + "Attack": 127, + "Defense": 184, + "Sp. Attack": 34, + "Sp. Defense": 36, + "Speed": 38 }, - "color": "black" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 442, + "id": 713, "name": { - "english": "Spiritomb", - "japanese": "ミカルゲ", - "chinese": "花岩怪" + "english": "Avalugg", + "japanese": "クレベース", + "chinese": "冰岩怪" }, "type": [ - "Ghost", - "Dark" + "Ice" ], "base": { - "HP": 50, - "Attack": 92, - "Defense": 108, - "Sp. Attack": 92, - "Sp. Defense": 108, - "Speed": 35 + "HP": 95, + "Attack": 117, + "Defense": 184, + "Sp. Attack": 44, + "Sp. Defense": 46, + "Speed": 28 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 443, + "id": 714, "name": { - "english": "Gible", - "japanese": "フカマル", - "chinese": "圆陆鲨" + "english": "Noibat", + "japanese": "オンバット", + "chinese": "嗡蝠" }, "type": [ - "Dragon", - "Ground" + "Flying", + "Dragon" ], "base": { - "HP": 58, - "Attack": 70, - "Defense": 45, - "Sp. Attack": 40, - "Sp. Defense": 45, - "Speed": 42 + "HP": 40, + "Attack": 30, + "Defense": 35, + "Sp. Attack": 45, + "Sp. Defense": 40, + "Speed": 55 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 444, + "id": 714, "name": { - "english": "Gabite", - "japanese": "ガバイト", - "chinese": "尖牙陆鲨" + "english": "Noibat", + "japanese": "オンバット", + "chinese": "嗡蝠" }, "type": [ - "Dragon", - "Ground" + "Flying", + "Dragon" ], "base": { - "HP": 68, - "Attack": 90, - "Defense": 65, - "Sp. Attack": 50, - "Sp. Defense": 55, - "Speed": 82 + "HP": 40, + "Attack": 30, + "Defense": 35, + "Sp. Attack": 45, + "Sp. Defense": 40, + "Speed": 55 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 445, + "id": 715, "name": { - "english": "Garchomp", - "japanese": "ガブリアス", - "chinese": "烈咬陆鲨" + "english": "Noivern", + "japanese": "オンバーン", + "chinese": "音波龙" }, "type": [ - "Dragon", - "Ground" + "Flying", + "Dragon" ], "base": { - "HP": 108, - "Attack": 130, - "Defense": 95, - "Sp. Attack": 80, - "Sp. Defense": 85, - "Speed": 102 + "HP": 85, + "Attack": 70, + "Defense": 80, + "Sp. Attack": 97, + "Sp. Defense": 80, + "Speed": 123 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 446, + "id": 715, "name": { - "english": "Munchlax", - "japanese": "ゴンベ", - "chinese": "小卡比兽" + "english": "Noivern", + "japanese": "オンバーン", + "chinese": "音波龙" }, "type": [ - "Normal" + "Flying", + "Dragon" ], "base": { - "HP": 135, - "Attack": 85, - "Defense": 40, - "Sp. Attack": 40, - "Sp. Defense": 85, - "Speed": 5 + "HP": 85, + "Attack": 70, + "Defense": 80, + "Sp. Attack": 97, + "Sp. Defense": 80, + "Speed": 123 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 447, + "id": 716, "name": { - "english": "Riolu", - "japanese": "リオル", - "chinese": "利欧路" + "english": "Xerneas", + "japanese": "ゼルネアス", + "chinese": "哲尔尼亚斯" }, "type": [ - "Fighting" + "Fairy" ], "base": { - "HP": 40, - "Attack": 70, - "Defense": 40, - "Sp. Attack": 35, - "Sp. Defense": 40, - "Speed": 60 + "HP": 126, + "Attack": 131, + "Defense": 95, + "Sp. Attack": 131, + "Sp. Defense": 98, + "Speed": 99 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 448, + "id": 716, "name": { - "english": "Lucario", - "japanese": "ルカリオ", - "chinese": "路卡利欧" + "english": "Xerneas", + "japanese": "ゼルネアス", + "chinese": "哲尔尼亚斯" }, "type": [ - "Fighting", - "Steel" + "Fairy" ], "base": { - "HP": 70, - "Attack": 110, - "Defense": 70, - "Sp. Attack": 115, - "Sp. Defense": 70, - "Speed": 90 + "HP": 126, + "Attack": 131, + "Defense": 95, + "Sp. Attack": 131, + "Sp. Defense": 98, + "Speed": 99 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "neutral" + } }, { - "id": 449, + "id": 716, "name": { - "english": "Hippopotas", - "japanese": "ヒポポタス", - "chinese": "沙河马" + "english": "Xerneas", + "japanese": "ゼルネアス", + "chinese": "哲尔尼亚斯" }, "type": [ - "Ground" + "Fairy" ], "base": { - "HP": 68, - "Attack": 72, - "Defense": 78, - "Sp. Attack": 38, - "Sp. Defense": 42, - "Speed": 32 + "HP": 126, + "Attack": 131, + "Defense": 95, + "Sp. Attack": 131, + "Sp. Defense": 98, + "Speed": 99 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 450, + "id": 717, "name": { - "english": "Hippowdon", - "japanese": "カバルドン", - "chinese": "河马兽" + "english": "Yveltal", + "japanese": "イベルタル", + "chinese": "伊裴尔塔尔" }, "type": [ - "Ground" + "Dark", + "Flying" ], "base": { - "HP": 108, - "Attack": 112, - "Defense": 118, - "Sp. Attack": 68, - "Sp. Defense": 72, - "Speed": 47 + "HP": 126, + "Attack": 131, + "Defense": 95, + "Sp. Attack": 131, + "Sp. Defense": 98, + "Speed": 99 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 451, + "id": 717, "name": { - "english": "Skorupi", - "japanese": "スコルピ", - "chinese": "钳尾蝎" + "english": "Yveltal", + "japanese": "イベルタル", + "chinese": "伊裴尔塔尔" }, "type": [ - "Poison", - "Bug" + "Dark", + "Flying" ], "base": { - "HP": 40, - "Attack": 50, - "Defense": 90, - "Sp. Attack": 30, - "Sp. Defense": 55, - "Speed": 65 + "HP": 126, + "Attack": 131, + "Defense": 95, + "Sp. Attack": 131, + "Sp. Defense": 98, + "Speed": 99 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 452, + "id": 718, "name": { - "english": "Drapion", - "japanese": "ドラピオン", - "chinese": "龙王蝎" + "english": "Zygarde", + "japanese": "ジガルデ", + "chinese": "基格尔德" }, "type": [ - "Poison", - "Dark" + "Dragon", + "Ground" ], "base": { - "HP": 70, - "Attack": 90, - "Defense": 110, - "Sp. Attack": 60, - "Sp. Defense": 75, + "HP": 108, + "Attack": 100, + "Defense": 121, + "Sp. Attack": 81, + "Sp. Defense": 95, "Speed": 95 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 453, + "id": 718, "name": { - "english": "Croagunk", - "japanese": "グレッグル", - "chinese": "不良蛙" + "english": "Zygarde", + "japanese": "ジガルデ", + "chinese": "基格尔德" }, "type": [ - "Poison", - "Fighting" + "Dragon", + "Ground" ], "base": { - "HP": 48, - "Attack": 61, - "Defense": 40, + "HP": 54, + "Attack": 100, + "Defense": 71, "Sp. Attack": 61, - "Sp. Defense": 40, - "Speed": 50 + "Sp. Defense": 85, + "Speed": 115 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "10%" + } }, { - "id": 454, + "id": 718, "name": { - "english": "Toxicroak", - "japanese": "ドクロッグ", - "chinese": "毒骷蛙" + "english": "Zygarde", + "japanese": "ジガルデ", + "chinese": "基格尔德" }, "type": [ - "Poison", - "Fighting" + "Dragon", + "Ground" ], "base": { - "HP": 83, - "Attack": 106, - "Defense": 65, - "Sp. Attack": 86, - "Sp. Defense": 65, + "HP": 216, + "Attack": 100, + "Defense": 121, + "Sp. Attack": 91, + "Sp. Defense": 95, "Speed": 85 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "complete" + } }, { - "id": 455, + "id": 718, "name": { - "english": "Carnivine", - "japanese": "マスキッパ", - "chinese": "尖牙笼" + "english": "Zygarde", + "japanese": "ジガルデ", + "chinese": "基格尔德" }, "type": [ - "Grass" + "Dragon", + "Ground" ], "base": { - "HP": 74, + "HP": 108, "Attack": 100, - "Defense": 72, - "Sp. Attack": 90, - "Sp. Defense": 72, - "Speed": 46 + "Defense": 121, + "Sp. Attack": 81, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 456, + "id": 719, "name": { - "english": "Finneon", - "japanese": "ケイコウオ", - "chinese": "荧光鱼" + "english": "Diancie", + "japanese": "ディアンシー", + "chinese": "蒂安希" }, "type": [ - "Water" + "Rock", + "Fairy" ], "base": { - "HP": 49, - "Attack": 49, - "Defense": 56, - "Sp. Attack": 49, - "Sp. Defense": 61, - "Speed": 66 + "HP": 50, + "Attack": 100, + "Defense": 150, + "Sp. Attack": 100, + "Sp. Defense": 150, + "Speed": 50 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 457, + "id": 719, "name": { - "english": "Lumineon", - "japanese": "ネオラント", - "chinese": "霓虹鱼" + "english": "Diancie", + "japanese": "ディアンシー", + "chinese": "蒂安希" }, "type": [ - "Water" + "Rock", + "Fairy" ], "base": { - "HP": 69, - "Attack": 69, - "Defense": 76, - "Sp. Attack": 69, - "Sp. Defense": 86, - "Speed": 91 + "HP": 50, + "Attack": 160, + "Defense": 110, + "Sp. Attack": 160, + "Sp. Defense": 110, + "Speed": 110 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "mega" + } }, { - "id": 458, + "id": 719, "name": { - "english": "Mantyke", - "japanese": "タマンタ", - "chinese": "小球飞鱼" + "english": "Diancie", + "japanese": "ディアンシー", + "chinese": "蒂安希" }, "type": [ - "Water", - "Flying" + "Rock", + "Fairy" ], "base": { - "HP": 45, - "Attack": 20, - "Defense": 50, - "Sp. Attack": 60, - "Sp. Defense": 120, + "HP": 50, + "Attack": 100, + "Defense": 150, + "Sp. Attack": 100, + "Sp. Defense": 150, "Speed": 50 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 459, + "id": 720, "name": { - "english": "Snover", - "japanese": "ユキカブリ", - "chinese": "雪笠怪" + "english": "Hoopa", + "japanese": "フーパ", + "chinese": "胡帕" }, "type": [ - "Grass", - "Ice" + "Psychic", + "Ghost" ], "base": { - "HP": 60, - "Attack": 62, - "Defense": 50, - "Sp. Attack": 62, - "Sp. Defense": 60, - "Speed": 40 - }, - "color": "white" + "HP": 80, + "Attack": 110, + "Defense": 60, + "Sp. Attack": 150, + "Sp. Defense": 130, + "Speed": 70 + } }, { - "id": 460, + "id": 720, "name": { - "english": "Abomasnow", - "japanese": "ユキノオー", - "chinese": "暴雪王" + "english": "Hoopa", + "japanese": "フーパ", + "chinese": "胡帕" }, "type": [ - "Grass", - "Ice" + "Psychic", + "Dark" ], "base": { - "HP": 90, - "Attack": 92, - "Defense": 75, - "Sp. Attack": 92, - "Sp. Defense": 85, - "Speed": 60 + "HP": 80, + "Attack": 160, + "Defense": 60, + "Sp. Attack": 170, + "Sp. Defense": 130, + "Speed": 80 }, - "color": "white" + "form": { + "key": "unbound" + } }, { - "id": 461, + "id": 720, "name": { - "english": "Weavile", - "japanese": "マニューラ", - "chinese": "玛狃拉" - }, - "type": [ - "Dark", - "Ice" - ], - "base": { - "HP": 70, - "Attack": 120, - "Defense": 65, - "Sp. Attack": 45, - "Sp. Defense": 85, - "Speed": 125 + "english": "Hoopa", + "japanese": "フーパ", + "chinese": "胡帕" }, - "color": "black" + "type": [ + "Psychic", + "Ghost" + ], + "base": { + "HP": 80, + "Attack": 110, + "Defense": 60, + "Sp. Attack": 150, + "Sp. Defense": 130, + "Speed": 70 + } }, { - "id": 462, + "id": 721, "name": { - "english": "Magnezone", - "japanese": "ジバコイル", - "chinese": "自爆磁怪" + "english": "Volcanion", + "japanese": "ボルケニオン", + "chinese": "波尔凯尼恩" }, "type": [ - "Electric", - "Steel" + "Fire", + "Water" ], "base": { - "HP": 70, - "Attack": 70, - "Defense": 115, + "HP": 80, + "Attack": 110, + "Defense": 120, "Sp. Attack": 130, "Sp. Defense": 90, - "Speed": 60 + "Speed": 70 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 463, + "id": 721, "name": { - "english": "Lickilicky", - "japanese": "ベロベルト", - "chinese": "大舌舔" + "english": "Volcanion", + "japanese": "ボルケニオン", + "chinese": "波尔凯尼恩" }, "type": [ - "Normal" + "Fire", + "Water" ], "base": { - "HP": 110, - "Attack": 85, - "Defense": 95, - "Sp. Attack": 80, - "Sp. Defense": 95, - "Speed": 50 + "HP": 80, + "Attack": 110, + "Defense": 120, + "Sp. Attack": 130, + "Sp. Defense": 90, + "Speed": 70 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 464, + "id": 722, "name": { - "english": "Rhyperior", - "japanese": "ドサイドン", - "chinese": "超甲狂犀" + "english": "Rowlet", + "japanese": "モクロー", + "chinese": "木木枭" }, "type": [ - "Ground", - "Rock" + "Grass", + "Flying" ], "base": { - "HP": 115, - "Attack": 140, - "Defense": 130, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 40 + "HP": 68, + "Attack": 55, + "Defense": 55, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 42 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 465, + "id": 722, "name": { - "english": "Tangrowth", - "japanese": "モジャンボ", - "chinese": "巨蔓藤" + "english": "Rowlet", + "japanese": "モクロー", + "chinese": "木木枭" }, "type": [ - "Grass" + "Grass", + "Flying" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 125, - "Sp. Attack": 110, + "HP": 68, + "Attack": 55, + "Defense": 55, + "Sp. Attack": 50, "Sp. Defense": 50, - "Speed": 50 + "Speed": 42 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 466, + "id": 723, "name": { - "english": "Electivire", - "japanese": "エレキブル", - "chinese": "电击魔兽" + "english": "Dartrix", + "japanese": "フクスロー", + "chinese": "投羽枭" }, "type": [ - "Electric" + "Grass", + "Flying" ], "base": { - "HP": 75, - "Attack": 123, - "Defense": 67, - "Sp. Attack": 95, - "Sp. Defense": 85, - "Speed": 95 + "HP": 78, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 52 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 467, + "id": 723, "name": { - "english": "Magmortar", - "japanese": "ブーバーン", - "chinese": "鸭嘴炎兽" + "english": "Dartrix", + "japanese": "フクスロー", + "chinese": "投羽枭" }, "type": [ - "Fire" + "Grass", + "Flying" ], "base": { - "HP": 75, - "Attack": 95, - "Defense": 67, - "Sp. Attack": 125, - "Sp. Defense": 95, - "Speed": 83 + "HP": 78, + "Attack": 75, + "Defense": 75, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 52 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 468, + "id": 724, "name": { - "english": "Togekiss", - "japanese": "トゲキッス", - "chinese": "波克基斯" + "english": "Decidueye", + "japanese": "ジュナイパー", + "chinese": "狙射树枭" }, "type": [ - "Fairy", - "Flying" + "Grass", + "Ghost" ], "base": { - "HP": 85, - "Attack": 50, - "Defense": 95, - "Sp. Attack": 120, - "Sp. Defense": 115, - "Speed": 80 + "HP": 78, + "Attack": 107, + "Defense": 75, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 70 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 469, + "id": 724, "name": { - "english": "Yanmega", - "japanese": "メガヤンマ", - "chinese": "远古巨蜓" + "english": "Decidueye", + "japanese": "ジュナイパー", + "chinese": "狙射树枭" }, "type": [ - "Bug", - "Flying" + "Grass", + "Fighting" ], "base": { - "HP": 86, - "Attack": 76, - "Defense": 86, - "Sp. Attack": 116, - "Sp. Defense": 56, - "Speed": 95 + "HP": 88, + "Attack": 112, + "Defense": 80, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 60 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisui" + } }, { - "id": 470, + "id": 724, "name": { - "english": "Leafeon", - "japanese": "リーフィア", - "chinese": "叶伊布" + "english": "Decidueye", + "japanese": "ジュナイパー", + "chinese": "狙射树枭" }, "type": [ - "Grass" + "Grass", + "Fighting" ], "base": { - "HP": 65, - "Attack": 110, - "Defense": 130, - "Sp. Attack": 60, - "Sp. Defense": 65, - "Speed": 95 + "HP": 88, + "Attack": 112, + "Defense": 80, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 60 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "hisuian" + } }, { - "id": 471, + "id": 724, "name": { - "english": "Glaceon", - "japanese": "グレイシア", - "chinese": "冰伊布" + "english": "Decidueye", + "japanese": "ジュナイパー", + "chinese": "狙射树枭" }, "type": [ - "Ice" + "Grass", + "Ghost" ], "base": { - "HP": 65, - "Attack": 60, - "Defense": 110, - "Sp. Attack": 130, - "Sp. Defense": 95, - "Speed": 65 + "HP": 78, + "Attack": 107, + "Defense": 75, + "Sp. Attack": 100, + "Sp. Defense": 100, + "Speed": 70 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 472, + "id": 725, "name": { - "english": "Gliscor", - "japanese": "グライオン", - "chinese": "天蝎王" + "english": "Litten", + "japanese": "ニャビー", + "chinese": "火斑喵" }, "type": [ - "Ground", - "Flying" + "Fire" ], "base": { - "HP": 75, - "Attack": 95, - "Defense": 125, - "Sp. Attack": 45, - "Sp. Defense": 75, - "Speed": 95 + "HP": 45, + "Attack": 65, + "Defense": 40, + "Sp. Attack": 60, + "Sp. Defense": 40, + "Speed": 70 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 473, + "id": 725, "name": { - "english": "Mamoswine", - "japanese": "マンムー", - "chinese": "象牙猪" + "english": "Litten", + "japanese": "ニャビー", + "chinese": "火斑喵" }, "type": [ - "Ice", - "Ground" + "Fire" ], "base": { - "HP": 110, - "Attack": 130, - "Defense": 80, - "Sp. Attack": 70, - "Sp. Defense": 60, - "Speed": 80 + "HP": 45, + "Attack": 65, + "Defense": 40, + "Sp. Attack": 60, + "Sp. Defense": 40, + "Speed": 70 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 474, + "id": 726, "name": { - "english": "Porygon-Z", - "japanese": "ポリゴンZ", - "chinese": "多边兽Z" + "english": "Torracat", + "japanese": "ニャヒート", + "chinese": "炎热喵" }, "type": [ - "Normal" + "Fire" ], "base": { - "HP": 85, - "Attack": 80, - "Defense": 70, - "Sp. Attack": 135, - "Sp. Defense": 75, + "HP": 65, + "Attack": 85, + "Defense": 50, + "Sp. Attack": 80, + "Sp. Defense": 50, "Speed": 90 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 475, + "id": 726, "name": { - "english": "Gallade", - "japanese": "エルレイド", - "chinese": "艾路雷朵" + "english": "Torracat", + "japanese": "ニャヒート", + "chinese": "炎热喵" }, "type": [ - "Psychic", - "Fighting" + "Fire" ], "base": { - "HP": 68, - "Attack": 125, - "Defense": 65, - "Sp. Attack": 65, - "Sp. Defense": 115, - "Speed": 80 + "HP": 65, + "Attack": 85, + "Defense": 50, + "Sp. Attack": 80, + "Sp. Defense": 50, + "Speed": 90 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 476, + "id": 727, "name": { - "english": "Probopass", - "japanese": "ダイノーズ", - "chinese": "大朝北鼻" + "english": "Incineroar", + "japanese": "ガオガエン", + "chinese": "炽焰咆哮虎" }, "type": [ - "Rock", - "Steel" + "Fire", + "Dark" ], "base": { - "HP": 60, - "Attack": 55, - "Defense": 145, - "Sp. Attack": 75, - "Sp. Defense": 150, - "Speed": 40 + "HP": 95, + "Attack": 115, + "Defense": 90, + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 60 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 477, + "id": 727, "name": { - "english": "Dusknoir", - "japanese": "ヨノワール", - "chinese": "黑夜魔灵" + "english": "Incineroar", + "japanese": "ガオガエン", + "chinese": "炽焰咆哮虎" }, "type": [ - "Ghost" + "Fire", + "Dark" ], "base": { - "HP": 45, - "Attack": 100, - "Defense": 135, - "Sp. Attack": 65, - "Sp. Defense": 135, - "Speed": 45 + "HP": 95, + "Attack": 115, + "Defense": 90, + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 60 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 478, + "id": 728, "name": { - "english": "Froslass", - "japanese": "ユキメノコ", - "chinese": "雪妖女" + "english": "Popplio", + "japanese": "アシマリ", + "chinese": "球球海狮" }, "type": [ - "Ice", - "Ghost" + "Water" ], "base": { - "HP": 70, - "Attack": 80, - "Defense": 70, - "Sp. Attack": 80, - "Sp. Defense": 70, - "Speed": 110 + "HP": 50, + "Attack": 54, + "Defense": 54, + "Sp. Attack": 66, + "Sp. Defense": 56, + "Speed": 40 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 479, + "id": 728, "name": { - "english": "Rotom", - "japanese": "ロトム", - "chinese": "洛托姆" + "english": "Popplio", + "japanese": "アシマリ", + "chinese": "球球海狮" }, "type": [ - "Electric", - "Ghost" + "Water" ], "base": { "HP": 50, - "Attack": 50, - "Defense": 77, - "Sp. Attack": 95, - "Sp. Defense": 77, - "Speed": 91 + "Attack": 54, + "Defense": 54, + "Sp. Attack": 66, + "Sp. Defense": 56, + "Speed": 40 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 480, + "id": 729, "name": { - "english": "Uxie", - "japanese": "ユクシー", - "chinese": "由克希" + "english": "Brionne", + "japanese": "オシャマリ", + "chinese": "花漾海狮" }, "type": [ - "Psychic" + "Water" ], "base": { - "HP": 75, - "Attack": 75, - "Defense": 130, - "Sp. Attack": 75, - "Sp. Defense": 130, - "Speed": 95 + "HP": 60, + "Attack": 69, + "Defense": 69, + "Sp. Attack": 91, + "Sp. Defense": 81, + "Speed": 50 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 481, + "id": 729, "name": { - "english": "Mesprit", - "japanese": "エムリット", - "chinese": "艾姆利多" + "english": "Brionne", + "japanese": "オシャマリ", + "chinese": "花漾海狮" }, "type": [ - "Psychic" + "Water" ], "base": { - "HP": 80, - "Attack": 105, - "Defense": 105, - "Sp. Attack": 105, - "Sp. Defense": 105, - "Speed": 80 + "HP": 60, + "Attack": 69, + "Defense": 69, + "Sp. Attack": 91, + "Sp. Defense": 81, + "Speed": 50 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 482, + "id": 730, "name": { - "english": "Azelf", - "japanese": "アグノム", - "chinese": "亚克诺姆" + "english": "Primarina", + "japanese": "アシレーヌ", + "chinese": "西狮海壬" }, "type": [ - "Psychic" + "Water", + "Fairy" ], "base": { - "HP": 75, - "Attack": 125, - "Defense": 70, - "Sp. Attack": 125, - "Sp. Defense": 70, - "Speed": 115 + "HP": 80, + "Attack": 74, + "Defense": 74, + "Sp. Attack": 126, + "Sp. Defense": 116, + "Speed": 60 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 483, + "id": 730, "name": { - "english": "Dialga", - "japanese": "ディアルガ", - "chinese": "帝牙卢卡" + "english": "Primarina", + "japanese": "アシレーヌ", + "chinese": "西狮海壬" }, "type": [ - "Steel", - "Dragon" + "Water", + "Fairy" ], "base": { - "HP": 100, - "Attack": 120, - "Defense": 120, - "Sp. Attack": 150, - "Sp. Defense": 100, - "Speed": 90 + "HP": 80, + "Attack": 74, + "Defense": 74, + "Sp. Attack": 126, + "Sp. Defense": 116, + "Speed": 60 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 484, + "id": 731, "name": { - "english": "Palkia", - "japanese": "パルキア", - "chinese": "帕路奇亚" + "english": "Pikipek", + "japanese": "ツツケラ", + "chinese": "小笃儿" }, "type": [ - "Water", - "Dragon" + "Normal", + "Flying" ], "base": { - "HP": 90, - "Attack": 120, - "Defense": 100, - "Sp. Attack": 150, - "Sp. Defense": 120, - "Speed": 100 - }, - "color": "purple" + "HP": 35, + "Attack": 75, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 65 + } }, { - "id": 485, + "id": 731, "name": { - "english": "Heatran", - "japanese": "ヒードラン", - "chinese": "席多蓝恩" + "english": "Pikipek", + "japanese": "ツツケラ", + "chinese": "小笃儿" }, "type": [ - "Fire", - "Steel" + "Normal", + "Flying" ], "base": { - "HP": 91, - "Attack": 90, - "Defense": 106, - "Sp. Attack": 130, - "Sp. Defense": 106, - "Speed": 77 - }, - "color": "brown" + "HP": 35, + "Attack": 75, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 65 + } }, { - "id": 486, + "id": 732, "name": { - "english": "Regigigas", - "japanese": "レジギガス", - "chinese": "雷吉奇卡斯" + "english": "Trumbeak", + "japanese": "ケララッパ", + "chinese": "喇叭啄鸟" }, "type": [ - "Normal" + "Normal", + "Flying" ], "base": { - "HP": 110, - "Attack": 160, - "Defense": 110, - "Sp. Attack": 80, - "Sp. Defense": 110, - "Speed": 100 - }, - "color": "white" + "HP": 55, + "Attack": 85, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 75 + } }, { - "id": 487, + "id": 732, "name": { - "english": "Giratina", - "japanese": "ギラティナ", - "chinese": "骑拉帝纳" + "english": "Trumbeak", + "japanese": "ケララッパ", + "chinese": "喇叭啄鸟" }, "type": [ - "Ghost", - "Dragon" + "Normal", + "Flying" ], "base": { - "HP": 150, - "Attack": 100, - "Defense": 120, - "Sp. Attack": 100, - "Sp. Defense": 120, - "Speed": 90 - }, - "color": "black" + "HP": 55, + "Attack": 85, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 75 + } }, { - "id": 488, + "id": 733, "name": { - "english": "Cresselia", - "japanese": "クレセリア", - "chinese": "克雷色利亚" + "english": "Toucannon", + "japanese": "ドデカバシ", + "chinese": "铳嘴大鸟" }, "type": [ - "Psychic" + "Normal", + "Flying" ], "base": { - "HP": 120, - "Attack": 70, - "Defense": 120, + "HP": 80, + "Attack": 120, + "Defense": 75, "Sp. Attack": 75, - "Sp. Defense": 130, - "Speed": 85 - }, - "color": "yellow" + "Sp. Defense": 75, + "Speed": 60 + } }, { - "id": 489, + "id": 733, "name": { - "english": "Phione", - "japanese": "フィオネ", - "chinese": "霏欧纳" + "english": "Toucannon", + "japanese": "ドデカバシ", + "chinese": "铳嘴大鸟" }, "type": [ - "Water" + "Normal", + "Flying" ], "base": { "HP": 80, - "Attack": 80, - "Defense": 80, - "Sp. Attack": 80, - "Sp. Defense": 80, - "Speed": 80 - }, - "color": "blue" + "Attack": 120, + "Defense": 75, + "Sp. Attack": 75, + "Sp. Defense": 75, + "Speed": 60 + } }, { - "id": 490, + "id": 734, "name": { - "english": "Manaphy", - "japanese": "マナフィ", - "chinese": "玛纳霏" + "english": "Yungoos", + "japanese": "ヤングース", + "chinese": "猫鼬少" }, "type": [ - "Water" + "Normal" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 100, - "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 100 - }, - "color": "blue" + "HP": 48, + "Attack": 70, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 45 + } }, { - "id": 491, + "id": 734, "name": { - "english": "Darkrai", - "japanese": "ダークライ", - "chinese": "达克莱伊" + "english": "Yungoos", + "japanese": "ヤングース", + "chinese": "猫鼬少" }, "type": [ - "Dark" + "Normal" ], "base": { - "HP": 70, - "Attack": 90, - "Defense": 90, - "Sp. Attack": 135, - "Sp. Defense": 90, - "Speed": 125 - }, - "color": "black" + "HP": 48, + "Attack": 70, + "Defense": 30, + "Sp. Attack": 30, + "Sp. Defense": 30, + "Speed": 45 + } }, { - "id": 492, + "id": 735, "name": { - "english": "Shaymin", - "japanese": "シェイミ", - "chinese": "谢米" + "english": "Gumshoos", + "japanese": "デカグース", + "chinese": "猫鼬探长" }, "type": [ - "Grass" + "Normal" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 100, - "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 100 - }, - "color": "green" + "HP": 88, + "Attack": 110, + "Defense": 60, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 45 + } }, { - "id": 493, + "id": 735, "name": { - "english": "Arceus", - "japanese": "アルセウス", - "chinese": "阿尔宙斯" + "english": "Gumshoos", + "japanese": "デカグース", + "chinese": "猫鼬探长" }, "type": [ "Normal" ], "base": { - "HP": 120, - "Attack": 120, - "Defense": 120, - "Sp. Attack": 120, - "Sp. Defense": 120, - "Speed": 120 + "HP": 88, + "Attack": 110, + "Defense": 60, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 45 }, - "color": "white" + "form": { + "key": "totem" + } }, { - "id": 494, + "id": 735, "name": { - "english": "Victini", - "japanese": "ビクティニ", - "chinese": "比克提尼" + "english": "Gumshoos", + "japanese": "デカグース", + "chinese": "猫鼬探长" }, "type": [ - "Psychic", - "Fire" + "Normal" ], "base": { - "HP": 100, - "Attack": 100, - "Defense": 100, - "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 100 - }, - "color": "yellow" + "HP": 88, + "Attack": 110, + "Defense": 60, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 45 + } }, { - "id": 495, + "id": 736, "name": { - "english": "Snivy", - "japanese": "ツタージャ", - "chinese": "藤藤蛇" + "english": "Grubbin", + "japanese": "アゴジムシ", + "chinese": "强颚鸡母虫" }, "type": [ - "Grass" + "Bug" ], "base": { - "HP": 45, - "Attack": 45, - "Defense": 55, - "Sp. Attack": 45, - "Sp. Defense": 55, - "Speed": 63 + "HP": 47, + "Attack": 62, + "Defense": 45, + "Sp. Attack": 55, + "Sp. Defense": 45, + "Speed": 46 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 496, + "id": 736, "name": { - "english": "Servine", - "japanese": "ジャノビー", - "chinese": "青藤蛇" + "english": "Grubbin", + "japanese": "アゴジムシ", + "chinese": "强颚鸡母虫" }, "type": [ - "Grass" + "Bug" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 75, - "Sp. Attack": 60, - "Sp. Defense": 75, - "Speed": 83 + "HP": 47, + "Attack": 62, + "Defense": 45, + "Sp. Attack": 55, + "Sp. Defense": 45, + "Speed": 46 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 497, + "id": 737, "name": { - "english": "Serperior", - "japanese": "ジャローダ", - "chinese": "君主蛇" + "english": "Charjabug", + "japanese": "デンヂムシ", + "chinese": "虫电宝" }, "type": [ - "Grass" + "Bug", + "Electric" ], "base": { - "HP": 75, - "Attack": 75, + "HP": 57, + "Attack": 82, "Defense": 95, - "Sp. Attack": 75, - "Sp. Defense": 95, - "Speed": 113 + "Sp. Attack": 55, + "Sp. Defense": 75, + "Speed": 36 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 498, + "id": 737, "name": { - "english": "Tepig", - "japanese": "ポカブ", - "chinese": "暖暖猪" + "english": "Charjabug", + "japanese": "デンヂムシ", + "chinese": "虫电宝" }, "type": [ - "Fire" + "Bug", + "Electric" ], "base": { - "HP": 65, - "Attack": 63, - "Defense": 45, - "Sp. Attack": 45, - "Sp. Defense": 45, - "Speed": 45 + "HP": 57, + "Attack": 82, + "Defense": 95, + "Sp. Attack": 55, + "Sp. Defense": 75, + "Speed": 36 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 499, + "id": 738, "name": { - "english": "Pignite", - "japanese": "チャオブー", - "chinese": "炒炒猪" + "english": "Vikavolt", + "japanese": "クワガノン", + "chinese": "锹农炮虫" }, "type": [ - "Fire", - "Fighting" + "Bug", + "Electric" ], "base": { - "HP": 90, - "Attack": 93, - "Defense": 55, - "Sp. Attack": 70, - "Sp. Defense": 55, - "Speed": 55 + "HP": 77, + "Attack": 70, + "Defense": 90, + "Sp. Attack": 145, + "Sp. Defense": 75, + "Speed": 43 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 500, + "id": 738, "name": { - "english": "Emboar", - "japanese": "エンブオー", - "chinese": "炎武王" + "english": "Vikavolt", + "japanese": "クワガノン", + "chinese": "锹农炮虫" }, "type": [ - "Fire", - "Fighting" + "Bug", + "Electric" ], "base": { - "HP": 110, - "Attack": 123, - "Defense": 65, - "Sp. Attack": 100, - "Sp. Defense": 65, - "Speed": 65 + "HP": 77, + "Attack": 70, + "Defense": 90, + "Sp. Attack": 145, + "Sp. Defense": 75, + "Speed": 43 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 501, + "id": 738, "name": { - "english": "Oshawott", - "japanese": "ミジュマル", - "chinese": "水水獭" + "english": "Vikavolt", + "japanese": "クワガノン", + "chinese": "锹农炮虫" }, "type": [ - "Water" + "Bug", + "Electric" ], "base": { - "HP": 55, - "Attack": 55, - "Defense": 45, - "Sp. Attack": 63, - "Sp. Defense": 45, - "Speed": 45 + "HP": 77, + "Attack": 70, + "Defense": 90, + "Sp. Attack": 145, + "Sp. Defense": 75, + "Speed": 43 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 502, + "id": 739, "name": { - "english": "Dewott", - "japanese": "フタチマル", - "chinese": "双刃丸" + "english": "Crabrawler", + "japanese": "マケンカニ", + "chinese": "好胜蟹" }, "type": [ - "Water" + "Fighting" ], "base": { - "HP": 75, - "Attack": 75, - "Defense": 60, - "Sp. Attack": 83, - "Sp. Defense": 60, - "Speed": 60 - }, - "color": "blue" + "HP": 47, + "Attack": 82, + "Defense": 57, + "Sp. Attack": 42, + "Sp. Defense": 47, + "Speed": 63 + } }, { - "id": 503, + "id": 739, "name": { - "english": "Samurott", - "japanese": "ダイケンキ", - "chinese": "大剑鬼" + "english": "Crabrawler", + "japanese": "マケンカニ", + "chinese": "好胜蟹" }, "type": [ - "Water" + "Fighting" ], "base": { - "HP": 95, - "Attack": 100, - "Defense": 85, - "Sp. Attack": 108, - "Sp. Defense": 70, - "Speed": 70 - }, - "color": "blue" + "HP": 47, + "Attack": 82, + "Defense": 57, + "Sp. Attack": 42, + "Sp. Defense": 47, + "Speed": 63 + } }, { - "id": 504, + "id": 740, "name": { - "english": "Patrat", - "japanese": "ミネズミ", - "chinese": "探探鼠" + "english": "Crabominable", + "japanese": "ケケンカニ", + "chinese": "好胜毛蟹" }, "type": [ - "Normal" + "Fighting", + "Ice" ], "base": { - "HP": 45, - "Attack": 55, - "Defense": 39, - "Sp. Attack": 35, - "Sp. Defense": 39, - "Speed": 42 - }, - "color": "brown" + "HP": 97, + "Attack": 132, + "Defense": 77, + "Sp. Attack": 62, + "Sp. Defense": 67, + "Speed": 43 + } }, { - "id": 505, + "id": 740, "name": { - "english": "Watchog", - "japanese": "ミルホッグ", - "chinese": "步哨鼠" + "english": "Crabominable", + "japanese": "ケケンカニ", + "chinese": "好胜毛蟹" }, "type": [ - "Normal" + "Fighting", + "Ice" ], "base": { - "HP": 60, - "Attack": 85, - "Defense": 69, - "Sp. Attack": 60, - "Sp. Defense": 69, - "Speed": 77 - }, - "color": "brown" + "HP": 97, + "Attack": 132, + "Defense": 77, + "Sp. Attack": 62, + "Sp. Defense": 67, + "Speed": 43 + } }, { - "id": 506, + "id": 741, "name": { - "english": "Lillipup", - "japanese": "ヨーテリー", - "chinese": "小约克" + "english": "Oricorio", + "japanese": "オドリドリ", + "chinese": "花舞鸟" }, "type": [ - "Normal" + "Fire", + "Flying" ], "base": { - "HP": 45, - "Attack": 60, - "Defense": 45, - "Sp. Attack": 25, - "Sp. Defense": 45, - "Speed": 55 - }, - "color": "brown" + "HP": 75, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 98, + "Sp. Defense": 70, + "Speed": 93 + } }, { - "id": 507, + "id": 741, "name": { - "english": "Herdier", - "japanese": "ハーデリア", - "chinese": "哈约克" + "english": "Oricorio", + "japanese": "オドリドリ", + "chinese": "花舞鸟" }, "type": [ - "Normal" + "Electric", + "Flying" ], "base": { - "HP": 65, - "Attack": 80, - "Defense": 65, - "Sp. Attack": 35, - "Sp. Defense": 65, - "Speed": 60 + "HP": 75, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 98, + "Sp. Defense": 70, + "Speed": 93 }, - "color": "gray" + "form": { + "key": "pom-pom" + } }, { - "id": 508, + "id": 741, "name": { - "english": "Stoutland", - "japanese": "ムーランド", - "chinese": "长毛狗" + "english": "Oricorio", + "japanese": "オドリドリ", + "chinese": "花舞鸟" }, "type": [ - "Normal" + "Psychic", + "Flying" ], "base": { - "HP": 85, - "Attack": 110, - "Defense": 90, - "Sp. Attack": 45, - "Sp. Defense": 90, - "Speed": 80 + "HP": 75, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 98, + "Sp. Defense": 70, + "Speed": 93 }, - "color": "gray" + "form": { + "key": "pa'u" + } }, { - "id": 509, + "id": 741, "name": { - "english": "Purrloin", - "japanese": "チョロネコ", - "chinese": "扒手猫" + "english": "Oricorio", + "japanese": "オドリドリ", + "chinese": "花舞鸟" }, "type": [ - "Dark" + "Ghost", + "Flying" ], "base": { - "HP": 41, - "Attack": 50, - "Defense": 37, - "Sp. Attack": 50, - "Sp. Defense": 37, - "Speed": 66 + "HP": 75, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 98, + "Sp. Defense": 70, + "Speed": 93 }, - "color": "purple" + "form": { + "key": "sensu" + } }, { - "id": 510, + "id": 741, "name": { - "english": "Liepard", - "japanese": "レパルダス", - "chinese": "酷豹" + "english": "Oricorio", + "japanese": "オドリドリ", + "chinese": "花舞鸟" }, "type": [ - "Dark" + "Fire", + "Flying" ], "base": { - "HP": 64, - "Attack": 88, - "Defense": 50, - "Sp. Attack": 88, - "Sp. Defense": 50, - "Speed": 106 - }, - "color": "purple" + "HP": 75, + "Attack": 70, + "Defense": 70, + "Sp. Attack": 98, + "Sp. Defense": 70, + "Speed": 93 + } }, { - "id": 511, + "id": 742, "name": { - "english": "Pansage", - "japanese": "ヤナップ", - "chinese": "花椰猴" + "english": "Cutiefly", + "japanese": "アブリー", + "chinese": "萌虻" }, "type": [ - "Grass" + "Bug", + "Fairy" ], "base": { - "HP": 50, - "Attack": 53, - "Defense": 48, - "Sp. Attack": 53, - "Sp. Defense": 48, - "Speed": 64 + "HP": 40, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 55, + "Sp. Defense": 40, + "Speed": 84 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 512, + "id": 742, "name": { - "english": "Simisage", - "japanese": "ヤナッキー", - "chinese": "花椰猿" + "english": "Cutiefly", + "japanese": "アブリー", + "chinese": "萌虻" }, "type": [ - "Grass" + "Bug", + "Fairy" ], "base": { - "HP": 75, - "Attack": 98, - "Defense": 63, - "Sp. Attack": 98, - "Sp. Defense": 63, - "Speed": 101 + "HP": 40, + "Attack": 45, + "Defense": 40, + "Sp. Attack": 55, + "Sp. Defense": 40, + "Speed": 84 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 513, + "id": 743, "name": { - "english": "Pansear", - "japanese": "バオップ", - "chinese": "爆香猴" + "english": "Ribombee", + "japanese": "アブリボン", + "chinese": "蝶结萌虻" }, "type": [ - "Fire" + "Bug", + "Fairy" ], "base": { - "HP": 50, - "Attack": 53, - "Defense": 48, - "Sp. Attack": 53, - "Sp. Defense": 48, - "Speed": 64 + "HP": 60, + "Attack": 55, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 70, + "Speed": 124 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 514, + "id": 743, "name": { - "english": "Simisear", - "japanese": "バオッキー", - "chinese": "爆香猿" + "english": "Ribombee", + "japanese": "アブリボン", + "chinese": "蝶结萌虻" }, "type": [ - "Fire" + "Bug", + "Fairy" ], "base": { - "HP": 75, - "Attack": 98, - "Defense": 63, - "Sp. Attack": 98, - "Sp. Defense": 63, - "Speed": 101 + "HP": 60, + "Attack": 55, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 70, + "Speed": 124 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 515, + "id": 743, "name": { - "english": "Panpour", - "japanese": "ヒヤップ", - "chinese": "冷水猴" + "english": "Ribombee", + "japanese": "アブリボン", + "chinese": "蝶结萌虻" }, "type": [ - "Water" + "Bug", + "Fairy" ], "base": { - "HP": 50, - "Attack": 53, - "Defense": 48, - "Sp. Attack": 53, - "Sp. Defense": 48, - "Speed": 64 + "HP": 60, + "Attack": 55, + "Defense": 60, + "Sp. Attack": 95, + "Sp. Defense": 70, + "Speed": 124 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 516, + "id": 744, "name": { - "english": "Simipour", - "japanese": "ヒヤッキー", - "chinese": "冷水猿" + "english": "Rockruff", + "japanese": "イワンコ", + "chinese": "岩狗狗" }, "type": [ - "Water" + "Rock" ], "base": { - "HP": 75, - "Attack": 98, - "Defense": 63, - "Sp. Attack": 98, - "Sp. Defense": 63, - "Speed": 101 + "HP": 45, + "Attack": 65, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 40, + "Speed": 60 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 517, + "id": 744, "name": { - "english": "Munna", - "japanese": "ムンナ", - "chinese": "食梦梦" + "english": "Rockruff", + "japanese": "イワンコ", + "chinese": "岩狗狗" }, "type": [ - "Psychic" + "Rock" ], "base": { - "HP": 76, - "Attack": 25, - "Defense": 45, - "Sp. Attack": 67, - "Sp. Defense": 55, - "Speed": 24 + "HP": 45, + "Attack": 65, + "Defense": 40, + "Sp. Attack": 30, + "Sp. Defense": 40, + "Speed": 60 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 518, + "id": 745, "name": { - "english": "Musharna", - "japanese": "ムシャーナ", - "chinese": "梦梦蚀" + "english": "Lycanroc", + "japanese": "ルガルガン", + "chinese": "鬃岩狼人" }, "type": [ - "Psychic" + "Rock" ], "base": { - "HP": 116, - "Attack": 55, - "Defense": 85, - "Sp. Attack": 107, - "Sp. Defense": 95, - "Speed": 29 + "HP": 75, + "Attack": 115, + "Defense": 65, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 112 }, - "color": "pink" + "includedInGens": [ + 8 + ] }, { - "id": 519, + "id": 745, "name": { - "english": "Pidove", - "japanese": "マメパト", - "chinese": "豆豆鸽" + "english": "Lycanroc", + "japanese": "ルガルガン", + "chinese": "鬃岩狼人" }, "type": [ - "Normal", - "Flying" + "Rock" ], "base": { - "HP": 50, - "Attack": 55, - "Defense": 50, - "Sp. Attack": 36, - "Sp. Defense": 30, - "Speed": 43 + "HP": 85, + "Attack": 115, + "Defense": 75, + "Sp. Attack": 55, + "Sp. Defense": 75, + "Speed": 82 }, - "color": "gray" + "includedInGens": [ + 8 + ], + "form": { + "key": "midnight" + } }, { - "id": 520, + "id": 745, "name": { - "english": "Tranquill", - "japanese": "ハトーボー", - "chinese": "咕咕鸽" + "english": "Lycanroc", + "japanese": "ルガルガン", + "chinese": "鬃岩狼人" }, "type": [ - "Normal", - "Flying" + "Rock" ], "base": { - "HP": 62, - "Attack": 77, - "Defense": 62, - "Sp. Attack": 50, - "Sp. Defense": 42, - "Speed": 65 + "HP": 75, + "Attack": 117, + "Defense": 65, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 110 }, - "color": "gray" + "includedInGens": [ + 8 + ], + "form": { + "key": "dusk" + } }, { - "id": 521, + "id": 745, "name": { - "english": "Unfezant", - "japanese": "ケンホロウ", - "chinese": "高傲雉鸡" + "english": "Lycanroc", + "japanese": "ルガルガン", + "chinese": "鬃岩狼人" }, "type": [ - "Normal", - "Flying" + "Rock" ], "base": { - "HP": 80, + "HP": 75, "Attack": 115, - "Defense": 80, - "Sp. Attack": 65, - "Sp. Defense": 55, - "Speed": 93 + "Defense": 65, + "Sp. Attack": 55, + "Sp. Defense": 65, + "Speed": 112 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 522, + "id": 746, "name": { - "english": "Blitzle", - "japanese": "シママ", - "chinese": "斑斑马" + "english": "Wishiwashi", + "japanese": "ヨワシ", + "chinese": "弱丁鱼" }, "type": [ - "Electric" + "Water" ], "base": { "HP": 45, - "Attack": 60, - "Defense": 32, - "Sp. Attack": 50, - "Sp. Defense": 32, - "Speed": 76 + "Attack": 20, + "Defense": 20, + "Sp. Attack": 25, + "Sp. Defense": 25, + "Speed": 40 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 523, + "id": 746, "name": { - "english": "Zebstrika", - "japanese": "ゼブライカ", - "chinese": "雷电斑马" + "english": "Wishiwashi", + "japanese": "ヨワシ", + "chinese": "弱丁鱼" }, "type": [ - "Electric" + "Water" ], "base": { - "HP": 75, - "Attack": 100, - "Defense": 63, - "Sp. Attack": 80, - "Sp. Defense": 63, - "Speed": 116 + "HP": 45, + "Attack": 140, + "Defense": 130, + "Sp. Attack": 140, + "Sp. Defense": 135, + "Speed": 30 }, - "color": "black" + "includedInGens": [ + 8 + ], + "form": { + "key": "school" + } }, { - "id": 524, + "id": 746, "name": { - "english": "Roggenrola", - "japanese": "ダンゴロ", - "chinese": "石丸子" + "english": "Wishiwashi", + "japanese": "ヨワシ", + "chinese": "弱丁鱼" }, "type": [ - "Rock" + "Water" ], "base": { - "HP": 55, - "Attack": 75, - "Defense": 85, + "HP": 45, + "Attack": 20, + "Defense": 20, "Sp. Attack": 25, "Sp. Defense": 25, - "Speed": 15 + "Speed": 40 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 525, + "id": 747, "name": { - "english": "Boldore", - "japanese": "ガントル", - "chinese": "地幔岩" + "english": "Mareanie", + "japanese": "ヒドイデ", + "chinese": "好坏星" }, "type": [ - "Rock" + "Poison", + "Water" ], "base": { - "HP": 70, - "Attack": 105, - "Defense": 105, - "Sp. Attack": 50, - "Sp. Defense": 40, - "Speed": 20 + "HP": 50, + "Attack": 53, + "Defense": 62, + "Sp. Attack": 43, + "Sp. Defense": 52, + "Speed": 45 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 526, + "id": 747, "name": { - "english": "Gigalith", - "japanese": "ギガイアス", - "chinese": "庞岩怪" + "english": "Mareanie", + "japanese": "ヒドイデ", + "chinese": "好坏星" }, "type": [ - "Rock" + "Poison", + "Water" ], "base": { - "HP": 85, - "Attack": 135, - "Defense": 130, - "Sp. Attack": 60, - "Sp. Defense": 80, - "Speed": 25 + "HP": 50, + "Attack": 53, + "Defense": 62, + "Sp. Attack": 43, + "Sp. Defense": 52, + "Speed": 45 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 527, - "name": { - "english": "Woobat", - "japanese": "コロモリ", - "chinese": "滚滚蝙蝠" + "id": 748, + "name": { + "english": "Toxapex", + "japanese": "ドヒドイデ", + "chinese": "超坏星" }, "type": [ - "Psychic", - "Flying" + "Poison", + "Water" ], "base": { - "HP": 65, - "Attack": 45, - "Defense": 43, - "Sp. Attack": 55, - "Sp. Defense": 43, - "Speed": 72 + "HP": 50, + "Attack": 63, + "Defense": 152, + "Sp. Attack": 53, + "Sp. Defense": 142, + "Speed": 35 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 528, + "id": 748, "name": { - "english": "Swoobat", - "japanese": "ココロモリ", - "chinese": "心蝙蝠" + "english": "Toxapex", + "japanese": "ドヒドイデ", + "chinese": "超坏星" }, "type": [ - "Psychic", - "Flying" + "Poison", + "Water" ], "base": { - "HP": 67, - "Attack": 57, - "Defense": 55, - "Sp. Attack": 77, - "Sp. Defense": 55, - "Speed": 114 + "HP": 50, + "Attack": 63, + "Defense": 152, + "Sp. Attack": 53, + "Sp. Defense": 142, + "Speed": 35 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 529, + "id": 749, "name": { - "english": "Drilbur", - "japanese": "モグリュー", - "chinese": "螺钉地鼠" + "english": "Mudbray", + "japanese": "ドロバンコ", + "chinese": "泥驴仔" }, "type": [ "Ground" ], "base": { - "HP": 60, - "Attack": 85, - "Defense": 40, - "Sp. Attack": 30, - "Sp. Defense": 45, - "Speed": 68 + "HP": 70, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 45 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 530, + "id": 749, "name": { - "english": "Excadrill", - "japanese": "ドリュウズ", - "chinese": "龙头地鼠" + "english": "Mudbray", + "japanese": "ドロバンコ", + "chinese": "泥驴仔" }, "type": [ - "Ground", - "Steel" + "Ground" ], "base": { - "HP": 110, - "Attack": 135, - "Defense": 60, - "Sp. Attack": 50, - "Sp. Defense": 65, - "Speed": 88 + "HP": 70, + "Attack": 100, + "Defense": 70, + "Sp. Attack": 45, + "Sp. Defense": 55, + "Speed": 45 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 531, + "id": 750, "name": { - "english": "Audino", - "japanese": "タブンネ", - "chinese": "差不多娃娃" + "english": "Mudsdale", + "japanese": "バンバドロ", + "chinese": "重泥挽马" }, "type": [ - "Normal" + "Ground" ], "base": { - "HP": 103, - "Attack": 60, - "Defense": 86, - "Sp. Attack": 60, - "Sp. Defense": 86, - "Speed": 50 + "HP": 100, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 85, + "Speed": 35 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 532, + "id": 750, "name": { - "english": "Timburr", - "japanese": "ドッコラー", - "chinese": "搬运小匠" + "english": "Mudsdale", + "japanese": "バンバドロ", + "chinese": "重泥挽马" }, "type": [ - "Fighting" + "Ground" ], "base": { - "HP": 75, - "Attack": 80, - "Defense": 55, - "Sp. Attack": 25, - "Sp. Defense": 35, + "HP": 100, + "Attack": 125, + "Defense": 100, + "Sp. Attack": 55, + "Sp. Defense": 85, "Speed": 35 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 533, + "id": 751, "name": { - "english": "Gurdurr", - "japanese": "ドテッコツ", - "chinese": "铁骨土人" + "english": "Dewpider", + "japanese": "シズクモ", + "chinese": "滴蛛" }, "type": [ - "Fighting" + "Water", + "Bug" ], "base": { - "HP": 85, - "Attack": 105, - "Defense": 85, + "HP": 38, + "Attack": 40, + "Defense": 52, "Sp. Attack": 40, - "Sp. Defense": 50, - "Speed": 40 + "Sp. Defense": 72, + "Speed": 27 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 534, + "id": 751, "name": { - "english": "Conkeldurr", - "japanese": "ローブシン", - "chinese": "修建老匠" + "english": "Dewpider", + "japanese": "シズクモ", + "chinese": "滴蛛" }, "type": [ - "Fighting" + "Water", + "Bug" ], "base": { - "HP": 105, - "Attack": 140, - "Defense": 95, - "Sp. Attack": 55, - "Sp. Defense": 65, - "Speed": 45 + "HP": 38, + "Attack": 40, + "Defense": 52, + "Sp. Attack": 40, + "Sp. Defense": 72, + "Speed": 27 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 535, + "id": 752, "name": { - "english": "Tympole", - "japanese": "オタマロ", - "chinese": "圆蝌蚪" + "english": "Araquanid", + "japanese": "オニシズクモ", + "chinese": "滴蛛霸" }, "type": [ - "Water" + "Water", + "Bug" ], "base": { - "HP": 50, - "Attack": 50, - "Defense": 40, + "HP": 68, + "Attack": 70, + "Defense": 92, "Sp. Attack": 50, - "Sp. Defense": 40, - "Speed": 64 + "Sp. Defense": 132, + "Speed": 42 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 536, + "id": 752, "name": { - "english": "Palpitoad", - "japanese": "ガマガル", - "chinese": "蓝蟾蜍" + "english": "Araquanid", + "japanese": "オニシズクモ", + "chinese": "滴蛛霸" }, "type": [ "Water", - "Ground" + "Bug" ], "base": { - "HP": 75, - "Attack": 65, - "Defense": 55, - "Sp. Attack": 65, - "Sp. Defense": 55, - "Speed": 69 + "HP": 68, + "Attack": 70, + "Defense": 92, + "Sp. Attack": 50, + "Sp. Defense": 132, + "Speed": 42 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 537, + "id": 752, "name": { - "english": "Seismitoad", - "japanese": "ガマゲロゲ", - "chinese": "蟾蜍王" + "english": "Araquanid", + "japanese": "オニシズクモ", + "chinese": "滴蛛霸" }, "type": [ "Water", - "Ground" + "Bug" ], "base": { - "HP": 105, - "Attack": 95, - "Defense": 75, - "Sp. Attack": 85, - "Sp. Defense": 75, - "Speed": 74 + "HP": 68, + "Attack": 70, + "Defense": 92, + "Sp. Attack": 50, + "Sp. Defense": 132, + "Speed": 42 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 538, + "id": 753, "name": { - "english": "Throh", - "japanese": "ナゲキ", - "chinese": "投摔鬼" + "english": "Fomantis", + "japanese": "カリキリ", + "chinese": "伪螳草" }, "type": [ - "Fighting" + "Grass" ], "base": { - "HP": 120, - "Attack": 100, - "Defense": 85, - "Sp. Attack": 30, - "Sp. Defense": 85, - "Speed": 45 + "HP": 40, + "Attack": 55, + "Defense": 35, + "Sp. Attack": 50, + "Sp. Defense": 35, + "Speed": 35 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 539, + "id": 753, "name": { - "english": "Sawk", - "japanese": "ダゲキ", - "chinese": "打击鬼" + "english": "Fomantis", + "japanese": "カリキリ", + "chinese": "伪螳草" }, "type": [ - "Fighting" + "Grass" ], "base": { - "HP": 75, - "Attack": 125, - "Defense": 75, - "Sp. Attack": 30, - "Sp. Defense": 75, - "Speed": 85 + "HP": 40, + "Attack": 55, + "Defense": 35, + "Sp. Attack": 50, + "Sp. Defense": 35, + "Speed": 35 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 540, + "id": 754, "name": { - "english": "Sewaddle", - "japanese": "クルミル", - "chinese": "虫宝包" + "english": "Lurantis", + "japanese": "ラランテス", + "chinese": "兰螳花" }, "type": [ - "Bug", "Grass" ], "base": { - "HP": 45, - "Attack": 53, - "Defense": 70, - "Sp. Attack": 40, - "Sp. Defense": 60, - "Speed": 42 + "HP": 70, + "Attack": 105, + "Defense": 90, + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 45 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 541, + "id": 754, "name": { - "english": "Swadloon", - "japanese": "クルマユ", - "chinese": "宝包茧" + "english": "Lurantis", + "japanese": "ラランテス", + "chinese": "兰螳花" }, "type": [ - "Bug", "Grass" ], "base": { - "HP": 55, - "Attack": 63, + "HP": 70, + "Attack": 105, "Defense": 90, - "Sp. Attack": 50, - "Sp. Defense": 80, - "Speed": 42 + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 45 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 542, + "id": 754, "name": { - "english": "Leavanny", - "japanese": "ハハコモリ", - "chinese": "保姆虫" + "english": "Lurantis", + "japanese": "ラランテス", + "chinese": "兰螳花" }, "type": [ - "Bug", "Grass" ], "base": { - "HP": 75, - "Attack": 103, - "Defense": 80, - "Sp. Attack": 70, - "Sp. Defense": 80, - "Speed": 92 + "HP": 70, + "Attack": 105, + "Defense": 90, + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 45 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 543, + "id": 755, "name": { - "english": "Venipede", - "japanese": "フシデ", - "chinese": "百足蜈蚣" + "english": "Morelull", + "japanese": "ネマシュ", + "chinese": "睡睡菇" }, "type": [ - "Bug", - "Poison" + "Grass", + "Fairy" ], "base": { - "HP": 30, - "Attack": 45, - "Defense": 59, - "Sp. Attack": 30, - "Sp. Defense": 39, - "Speed": 57 + "HP": 40, + "Attack": 35, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 15 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 544, + "id": 755, "name": { - "english": "Whirlipede", - "japanese": "ホイーガ", - "chinese": "车轮球" + "english": "Morelull", + "japanese": "ネマシュ", + "chinese": "睡睡菇" }, "type": [ - "Bug", - "Poison" + "Grass", + "Fairy" ], "base": { "HP": 40, - "Attack": 55, - "Defense": 99, - "Sp. Attack": 40, - "Sp. Defense": 79, - "Speed": 47 + "Attack": 35, + "Defense": 55, + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 15 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 545, + "id": 756, "name": { - "english": "Scolipede", - "japanese": "ペンドラー", - "chinese": "蜈蚣王" + "english": "Shiinotic", + "japanese": "マシェード", + "chinese": "灯罩夜菇" }, "type": [ - "Bug", - "Poison" + "Grass", + "Fairy" ], "base": { "HP": 60, - "Attack": 100, - "Defense": 89, - "Sp. Attack": 55, - "Sp. Defense": 69, - "Speed": 112 + "Attack": 45, + "Defense": 80, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 30 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 546, + "id": 756, "name": { - "english": "Cottonee", - "japanese": "モンメン", - "chinese": "木棉球" + "english": "Shiinotic", + "japanese": "マシェード", + "chinese": "灯罩夜菇" }, "type": [ "Grass", "Fairy" ], "base": { - "HP": 40, - "Attack": 27, - "Defense": 60, - "Sp. Attack": 37, - "Sp. Defense": 50, - "Speed": 66 + "HP": 60, + "Attack": 45, + "Defense": 80, + "Sp. Attack": 90, + "Sp. Defense": 100, + "Speed": 30 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 547, + "id": 757, "name": { - "english": "Whimsicott", - "japanese": "エルフーン", - "chinese": "风妖精" + "english": "Salandit", + "japanese": "ヤトウモリ", + "chinese": "夜盗火蜥" }, "type": [ - "Grass", - "Fairy" + "Poison", + "Fire" ], "base": { - "HP": 60, - "Attack": 67, - "Defense": 85, - "Sp. Attack": 77, - "Sp. Defense": 75, - "Speed": 116 + "HP": 48, + "Attack": 44, + "Defense": 40, + "Sp. Attack": 71, + "Sp. Defense": 40, + "Speed": 77 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 548, + "id": 757, "name": { - "english": "Petilil", - "japanese": "チュリネ", - "chinese": "百合根娃娃" + "english": "Salandit", + "japanese": "ヤトウモリ", + "chinese": "夜盗火蜥" }, "type": [ - "Grass" + "Poison", + "Fire" ], "base": { - "HP": 45, - "Attack": 35, - "Defense": 50, - "Sp. Attack": 70, - "Sp. Defense": 50, - "Speed": 30 + "HP": 48, + "Attack": 44, + "Defense": 40, + "Sp. Attack": 71, + "Sp. Defense": 40, + "Speed": 77 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 549, + "id": 758, "name": { - "english": "Lilligant", - "japanese": "ドレディア", - "chinese": "裙儿小姐" + "english": "Salazzle", + "japanese": "エンニュート", + "chinese": "焰后蜥" }, "type": [ - "Grass" + "Poison", + "Fire" ], "base": { - "HP": 70, - "Attack": 60, - "Defense": 75, - "Sp. Attack": 110, - "Sp. Defense": 75, - "Speed": 90 + "HP": 68, + "Attack": 64, + "Defense": 60, + "Sp. Attack": 111, + "Sp. Defense": 60, + "Speed": 117 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 550, + "id": 758, "name": { - "english": "Basculin", - "japanese": "バスラオ", - "chinese": "野蛮鲈鱼" + "english": "Salazzle", + "japanese": "エンニュート", + "chinese": "焰后蜥" }, "type": [ - "Water" + "Poison", + "Fire" ], "base": { - "HP": 70, - "Attack": 92, - "Defense": 65, - "Sp. Attack": 80, - "Sp. Defense": 55, - "Speed": 98 + "HP": 68, + "Attack": 64, + "Defense": 60, + "Sp. Attack": 111, + "Sp. Defense": 60, + "Speed": 117 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 551, + "id": 758, "name": { - "english": "Sandile", - "japanese": "メグロコ", - "chinese": "黑眼鳄" + "english": "Salazzle", + "japanese": "エンニュート", + "chinese": "焰后蜥" }, "type": [ - "Ground", - "Dark" + "Poison", + "Fire" ], "base": { - "HP": 50, - "Attack": 72, - "Defense": 35, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 65 + "HP": 68, + "Attack": 64, + "Defense": 60, + "Sp. Attack": 111, + "Sp. Defense": 60, + "Speed": 117 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 552, + "id": 759, "name": { - "english": "Krokorok", - "japanese": "ワルビル", - "chinese": "混混鳄" + "english": "Stufful", + "japanese": "ヌイコグマ", + "chinese": "童偶熊" }, "type": [ - "Ground", - "Dark" + "Normal", + "Fighting" ], "base": { - "HP": 60, - "Attack": 82, - "Defense": 45, + "HP": 70, + "Attack": 75, + "Defense": 50, "Sp. Attack": 45, - "Sp. Defense": 45, - "Speed": 74 + "Sp. Defense": 50, + "Speed": 50 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 553, + "id": 759, "name": { - "english": "Krookodile", - "japanese": "ワルビアル", - "chinese": "流氓鳄" + "english": "Stufful", + "japanese": "ヌイコグマ", + "chinese": "童偶熊" }, "type": [ - "Ground", - "Dark" + "Normal", + "Fighting" ], "base": { - "HP": 95, - "Attack": 117, - "Defense": 80, - "Sp. Attack": 65, - "Sp. Defense": 70, - "Speed": 92 + "HP": 70, + "Attack": 75, + "Defense": 50, + "Sp. Attack": 45, + "Sp. Defense": 50, + "Speed": 50 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 554, + "id": 760, "name": { - "english": "Darumaka", - "japanese": "ダルマッカ", - "chinese": "火红不倒翁" + "english": "Bewear", + "japanese": "キテルグマ", + "chinese": "穿着熊" }, "type": [ - "Fire" + "Normal", + "Fighting" ], "base": { - "HP": 70, - "Attack": 90, - "Defense": 45, - "Sp. Attack": 15, - "Sp. Defense": 45, - "Speed": 50 + "HP": 120, + "Attack": 125, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 60 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 555, + "id": 760, "name": { - "english": "Darmanitan", - "japanese": "ヒヒダルマ", - "chinese": "达摩狒狒" + "english": "Bewear", + "japanese": "キテルグマ", + "chinese": "穿着熊" }, "type": [ - "Fire" + "Normal", + "Fighting" ], "base": { - "HP": 105, - "Attack": 140, - "Defense": 55, - "Sp. Attack": 30, - "Sp. Defense": 55, - "Speed": 95 + "HP": 120, + "Attack": 125, + "Defense": 80, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 60 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 556, + "id": 761, "name": { - "english": "Maractus", - "japanese": "マラカッチ", - "chinese": "沙铃仙人掌" + "english": "Bounsweet", + "japanese": "アマカジ", + "chinese": "甜竹竹" }, "type": [ "Grass" ], "base": { - "HP": 75, - "Attack": 86, - "Defense": 67, - "Sp. Attack": 106, - "Sp. Defense": 67, - "Speed": 60 + "HP": 42, + "Attack": 30, + "Defense": 38, + "Sp. Attack": 30, + "Sp. Defense": 38, + "Speed": 32 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 557, + "id": 761, "name": { - "english": "Dwebble", - "japanese": "イシズマイ", - "chinese": "石居蟹" + "english": "Bounsweet", + "japanese": "アマカジ", + "chinese": "甜竹竹" }, "type": [ - "Bug", - "Rock" + "Grass" ], "base": { - "HP": 50, - "Attack": 65, - "Defense": 85, - "Sp. Attack": 35, - "Sp. Defense": 35, - "Speed": 55 + "HP": 42, + "Attack": 30, + "Defense": 38, + "Sp. Attack": 30, + "Sp. Defense": 38, + "Speed": 32 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 558, + "id": 762, "name": { - "english": "Crustle", - "japanese": "イワパレス", - "chinese": "岩殿居蟹" + "english": "Steenee", + "japanese": "アママイコ", + "chinese": "甜舞妮" }, "type": [ - "Bug", - "Rock" + "Grass" ], "base": { - "HP": 70, - "Attack": 105, - "Defense": 125, - "Sp. Attack": 65, - "Sp. Defense": 75, - "Speed": 45 + "HP": 52, + "Attack": 40, + "Defense": 48, + "Sp. Attack": 40, + "Sp. Defense": 48, + "Speed": 62 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 559, + "id": 762, "name": { - "english": "Scraggy", - "japanese": "ズルッグ", - "chinese": "滑滑小子" + "english": "Steenee", + "japanese": "アママイコ", + "chinese": "甜舞妮" }, "type": [ - "Dark", - "Fighting" + "Grass" ], "base": { - "HP": 50, - "Attack": 75, - "Defense": 70, - "Sp. Attack": 35, - "Sp. Defense": 70, - "Speed": 48 + "HP": 52, + "Attack": 40, + "Defense": 48, + "Sp. Attack": 40, + "Sp. Defense": 48, + "Speed": 62 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 560, + "id": 763, "name": { - "english": "Scrafty", - "japanese": "ズルズキン", - "chinese": "头巾混混" + "english": "Tsareena", + "japanese": "アマージョ", + "chinese": "甜冷美后" }, "type": [ - "Dark", - "Fighting" - ], - "base": { - "HP": 65, - "Attack": 90, - "Defense": 115, - "Sp. Attack": 45, - "Sp. Defense": 115, - "Speed": 58 + "Grass" + ], + "base": { + "HP": 72, + "Attack": 120, + "Defense": 98, + "Sp. Attack": 50, + "Sp. Defense": 98, + "Speed": 72 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 561, + "id": 763, "name": { - "english": "Sigilyph", - "japanese": "シンボラー", - "chinese": "象征鸟" + "english": "Tsareena", + "japanese": "アマージョ", + "chinese": "甜冷美后" }, "type": [ - "Psychic", - "Flying" + "Grass" ], "base": { "HP": 72, - "Attack": 58, - "Defense": 80, - "Sp. Attack": 103, - "Sp. Defense": 80, - "Speed": 97 + "Attack": 120, + "Defense": 98, + "Sp. Attack": 50, + "Sp. Defense": 98, + "Speed": 72 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 562, + "id": 764, "name": { - "english": "Yamask", - "japanese": "デスマス", - "chinese": "哭哭面具" + "english": "Comfey", + "japanese": "キュワワー", + "chinese": "花疗环环" }, "type": [ - "Ghost" + "Fairy" ], "base": { - "HP": 38, - "Attack": 30, - "Defense": 85, - "Sp. Attack": 55, - "Sp. Defense": 65, - "Speed": 30 + "HP": 51, + "Attack": 52, + "Defense": 90, + "Sp. Attack": 82, + "Sp. Defense": 110, + "Speed": 100 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 563, + "id": 764, "name": { - "english": "Cofagrigus", - "japanese": "デスカーン", - "chinese": "死神棺" + "english": "Comfey", + "japanese": "キュワワー", + "chinese": "花疗环环" }, "type": [ - "Ghost" + "Fairy" ], "base": { - "HP": 58, - "Attack": 50, - "Defense": 145, - "Sp. Attack": 95, - "Sp. Defense": 105, - "Speed": 30 + "HP": 51, + "Attack": 52, + "Defense": 90, + "Sp. Attack": 82, + "Sp. Defense": 110, + "Speed": 100 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 564, + "id": 765, "name": { - "english": "Tirtouga", - "japanese": "プロトーガ", - "chinese": "原盖海龟" + "english": "Oranguru", + "japanese": "ヤレユータン", + "chinese": "智挥猩" }, "type": [ - "Water", - "Rock" + "Normal", + "Psychic" ], "base": { - "HP": 54, - "Attack": 78, - "Defense": 103, - "Sp. Attack": 53, - "Sp. Defense": 45, - "Speed": 22 + "HP": 90, + "Attack": 60, + "Defense": 80, + "Sp. Attack": 90, + "Sp. Defense": 110, + "Speed": 60 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 565, + "id": 765, "name": { - "english": "Carracosta", - "japanese": "アバゴーラ", - "chinese": "肋骨海龟" + "english": "Oranguru", + "japanese": "ヤレユータン", + "chinese": "智挥猩" }, "type": [ - "Water", - "Rock" + "Normal", + "Psychic" ], "base": { - "HP": 74, - "Attack": 108, - "Defense": 133, - "Sp. Attack": 83, - "Sp. Defense": 65, - "Speed": 32 + "HP": 90, + "Attack": 60, + "Defense": 80, + "Sp. Attack": 90, + "Sp. Defense": 110, + "Speed": 60 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 566, + "id": 766, "name": { - "english": "Archen", - "japanese": "アーケン", - "chinese": "始祖小鸟" + "english": "Passimian", + "japanese": "ナゲツケサル", + "chinese": "投掷猴" }, "type": [ - "Rock", - "Flying" + "Fighting" ], "base": { - "HP": 55, - "Attack": 112, - "Defense": 45, - "Sp. Attack": 74, - "Sp. Defense": 45, - "Speed": 70 + "HP": 100, + "Attack": 120, + "Defense": 90, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 80 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 567, + "id": 766, "name": { - "english": "Archeops", - "japanese": "アーケオス", - "chinese": "始祖大鸟" + "english": "Passimian", + "japanese": "ナゲツケサル", + "chinese": "投掷猴" }, "type": [ - "Rock", - "Flying" + "Fighting" ], "base": { - "HP": 75, - "Attack": 140, - "Defense": 65, - "Sp. Attack": 112, - "Sp. Defense": 65, - "Speed": 110 + "HP": 100, + "Attack": 120, + "Defense": 90, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 80 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 568, + "id": 767, "name": { - "english": "Trubbish", - "japanese": "ヤブクロン", - "chinese": "破破袋" + "english": "Wimpod", + "japanese": "コソクムシ", + "chinese": "胆小虫" }, "type": [ - "Poison" + "Bug", + "Water" ], "base": { - "HP": 50, - "Attack": 50, - "Defense": 62, - "Sp. Attack": 40, - "Sp. Defense": 62, - "Speed": 65 + "HP": 25, + "Attack": 35, + "Defense": 40, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 80 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 569, + "id": 767, "name": { - "english": "Garbodor", - "japanese": "ダストダス", - "chinese": "灰尘山" + "english": "Wimpod", + "japanese": "コソクムシ", + "chinese": "胆小虫" }, "type": [ - "Poison" + "Bug", + "Water" ], "base": { - "HP": 80, - "Attack": 95, - "Defense": 82, - "Sp. Attack": 60, - "Sp. Defense": 82, - "Speed": 75 + "HP": 25, + "Attack": 35, + "Defense": 40, + "Sp. Attack": 20, + "Sp. Defense": 30, + "Speed": 80 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 570, + "id": 768, "name": { - "english": "Zorua", - "japanese": "ゾロア", - "chinese": "索罗亚" + "english": "Golisopod", + "japanese": "グソクムシャ", + "chinese": "具甲武者" }, "type": [ - "Dark" + "Bug", + "Water" ], "base": { - "HP": 40, - "Attack": 65, - "Defense": 40, - "Sp. Attack": 80, - "Sp. Defense": 40, - "Speed": 65 + "HP": 75, + "Attack": 125, + "Defense": 140, + "Sp. Attack": 60, + "Sp. Defense": 90, + "Speed": 40 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 571, + "id": 768, "name": { - "english": "Zoroark", - "japanese": "ゾロアーク", - "chinese": "索罗亚克" + "english": "Golisopod", + "japanese": "グソクムシャ", + "chinese": "具甲武者" }, "type": [ - "Dark" + "Bug", + "Water" ], "base": { - "HP": 60, - "Attack": 105, - "Defense": 60, - "Sp. Attack": 120, - "Sp. Defense": 60, - "Speed": 105 + "HP": 75, + "Attack": 125, + "Defense": 140, + "Sp. Attack": 60, + "Sp. Defense": 90, + "Speed": 40 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 572, + "id": 769, "name": { - "english": "Minccino", - "japanese": "チラーミィ", - "chinese": "泡沫栗鼠" + "english": "Sandygast", + "japanese": "スナバァ", + "chinese": "沙丘娃" }, "type": [ - "Normal" + "Ghost", + "Ground" ], "base": { "HP": 55, - "Attack": 50, - "Defense": 40, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 75 + "Attack": 55, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 45, + "Speed": 15 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 573, + "id": 769, "name": { - "english": "Cinccino", - "japanese": "チラチーノ", - "chinese": "奇诺栗鼠" + "english": "Sandygast", + "japanese": "スナバァ", + "chinese": "沙丘娃" }, "type": [ - "Normal" + "Ghost", + "Ground" ], "base": { - "HP": 75, - "Attack": 95, - "Defense": 60, - "Sp. Attack": 65, - "Sp. Defense": 60, - "Speed": 115 + "HP": 55, + "Attack": 55, + "Defense": 80, + "Sp. Attack": 70, + "Sp. Defense": 45, + "Speed": 15 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 574, + "id": 770, "name": { - "english": "Gothita", - "japanese": "ゴチム", - "chinese": "哥德宝宝" + "english": "Palossand", + "japanese": "シロデスナ", + "chinese": "噬沙堡爷" }, "type": [ - "Psychic" + "Ghost", + "Ground" ], "base": { - "HP": 45, - "Attack": 30, - "Defense": 50, - "Sp. Attack": 55, - "Sp. Defense": 65, - "Speed": 45 + "HP": 85, + "Attack": 75, + "Defense": 110, + "Sp. Attack": 100, + "Sp. Defense": 75, + "Speed": 35 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 575, + "id": 770, "name": { - "english": "Gothorita", - "japanese": "ゴチミル", - "chinese": "哥德小童" + "english": "Palossand", + "japanese": "シロデスナ", + "chinese": "噬沙堡爷" }, "type": [ - "Psychic" + "Ghost", + "Ground" ], "base": { - "HP": 60, - "Attack": 45, - "Defense": 70, - "Sp. Attack": 75, - "Sp. Defense": 85, - "Speed": 55 + "HP": 85, + "Attack": 75, + "Defense": 110, + "Sp. Attack": 100, + "Sp. Defense": 75, + "Speed": 35 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 576, + "id": 771, "name": { - "english": "Gothitelle", - "japanese": "ゴチルゼル", - "chinese": "哥德小姐" + "english": "Pyukumuku", + "japanese": "ナマコブシ", + "chinese": "拳海参" }, "type": [ - "Psychic" + "Water" ], "base": { - "HP": 70, - "Attack": 55, - "Defense": 95, - "Sp. Attack": 95, - "Sp. Defense": 110, - "Speed": 65 + "HP": 55, + "Attack": 60, + "Defense": 130, + "Sp. Attack": 30, + "Sp. Defense": 130, + "Speed": 5 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 577, + "id": 771, "name": { - "english": "Solosis", - "japanese": "ユニラン", - "chinese": "单卵细胞球" + "english": "Pyukumuku", + "japanese": "ナマコブシ", + "chinese": "拳海参" }, "type": [ - "Psychic" + "Water" ], "base": { - "HP": 45, - "Attack": 30, - "Defense": 40, - "Sp. Attack": 105, - "Sp. Defense": 50, - "Speed": 20 + "HP": 55, + "Attack": 60, + "Defense": 130, + "Sp. Attack": 30, + "Sp. Defense": 130, + "Speed": 5 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 578, + "id": 772, "name": { - "english": "Duosion", - "japanese": "ダブラン", - "chinese": "双卵细胞球" + "english": "Type: Null", + "japanese": "タイプ:ヌル", + "chinese": "属性:空" }, "type": [ - "Psychic" + "Normal" ], "base": { - "HP": 65, - "Attack": 40, - "Defense": 50, - "Sp. Attack": 125, - "Sp. Defense": 60, - "Speed": 30 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 59 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 579, + "id": 772, "name": { - "english": "Reuniclus", - "japanese": "ランクルス", - "chinese": "人造细胞卵" + "english": "Type: Null", + "japanese": "タイプ:ヌル", + "chinese": "属性:空" }, "type": [ - "Psychic" + "Normal" ], "base": { - "HP": 110, - "Attack": 65, - "Defense": 75, - "Sp. Attack": 125, - "Sp. Defense": 85, - "Speed": 30 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 59 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 580, + "id": 773, "name": { - "english": "Ducklett", - "japanese": "コアルヒー", - "chinese": "鸭宝宝" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Water", - "Flying" + "Normal" ], "base": { - "HP": 62, - "Attack": 44, - "Defense": 50, - "Sp. Attack": 44, - "Sp. Defense": 50, - "Speed": 55 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 581, + "id": 773, "name": { - "english": "Swanna", - "japanese": "スワンナ", - "chinese": "舞天鹅" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Water", - "Flying" + "Bug" ], "base": { - "HP": 75, - "Attack": 87, - "Defense": 63, - "Sp. Attack": 87, - "Sp. Defense": 63, - "Speed": 98 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "bug" + } }, { - "id": 582, + "id": 773, "name": { - "english": "Vanillite", - "japanese": "バニプッチ", - "chinese": "迷你冰" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" + }, + "type": [ + "Dark" + ], + "base": { + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "type": [ - "Ice" + "includedInGens": [ + 8 ], - "base": { - "HP": 36, - "Attack": 50, - "Defense": 50, - "Sp. Attack": 65, - "Sp. Defense": 60, - "Speed": 44 - }, - "color": "white" + "form": { + "key": "dark" + } }, { - "id": 583, + "id": 773, "name": { - "english": "Vanillish", - "japanese": "バニリッチ", - "chinese": "多多冰" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Ice" + "Dragon" ], "base": { - "HP": 51, - "Attack": 65, - "Defense": 65, - "Sp. Attack": 80, - "Sp. Defense": 75, - "Speed": 59 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "dragon" + } }, { - "id": 584, + "id": 773, "name": { - "english": "Vanilluxe", - "japanese": "バイバニラ", - "chinese": "双倍多多冰" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Ice" + "Electric" ], "base": { - "HP": 71, + "HP": 95, "Attack": 95, - "Defense": 85, - "Sp. Attack": 110, + "Defense": 95, + "Sp. Attack": 95, "Sp. Defense": 95, - "Speed": 79 + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "electric" + } }, { - "id": 585, + "id": 773, "name": { - "english": "Deerling", - "japanese": "シキジカ", - "chinese": "四季鹿" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Normal", - "Grass" + "Fairy" ], "base": { - "HP": 60, - "Attack": 60, - "Defense": 50, - "Sp. Attack": 40, - "Sp. Defense": 50, - "Speed": 75 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "fairy" + } }, { - "id": 586, + "id": 773, "name": { - "english": "Sawsbuck", - "japanese": "メブキジカ", - "chinese": "萌芽鹿" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Normal", - "Grass" + "Fighting" ], "base": { - "HP": 80, - "Attack": 100, - "Defense": 70, - "Sp. Attack": 60, - "Sp. Defense": 70, + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, "Speed": 95 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "fighting" + } }, { - "id": 587, + "id": 773, "name": { - "english": "Emolga", - "japanese": "エモンガ", - "chinese": "电飞鼠" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Electric", - "Flying" + "Fire" ], "base": { - "HP": 55, - "Attack": 75, - "Defense": 60, - "Sp. Attack": 75, - "Sp. Defense": 60, - "Speed": 103 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "fire" + } }, { - "id": 588, + "id": 773, "name": { - "english": "Karrablast", - "japanese": "カブルモ", - "chinese": "盖盖虫" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Bug" + "Flying" ], "base": { - "HP": 50, - "Attack": 75, - "Defense": 45, - "Sp. Attack": 40, - "Sp. Defense": 45, - "Speed": 60 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "flying" + } }, { - "id": 589, + "id": 773, "name": { - "english": "Escavalier", - "japanese": "シュバルゴ", - "chinese": "骑士蜗牛" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Bug", - "Steel" + "Ghost" ], "base": { - "HP": 70, - "Attack": 135, - "Defense": 105, - "Sp. Attack": 60, - "Sp. Defense": 105, - "Speed": 20 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "gray" + "includedInGens": [ + 8 + ], + "form": { + "key": "ghost" + } }, { - "id": 590, + "id": 773, "name": { - "english": "Foongus", - "japanese": "タマゲタケ", - "chinese": "哎呀球菇" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Grass", - "Poison" + "Grass" ], "base": { - "HP": 69, - "Attack": 55, - "Defense": 45, - "Sp. Attack": 55, - "Sp. Defense": 55, - "Speed": 15 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "grass" + } }, { - "id": 591, + "id": 773, "name": { - "english": "Amoonguss", - "japanese": "モロバレル", - "chinese": "败露球菇" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Grass", - "Poison" + "Ground" ], "base": { - "HP": 114, - "Attack": 85, - "Defense": 70, - "Sp. Attack": 85, - "Sp. Defense": 80, - "Speed": 30 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "ground" + } }, { - "id": 592, + "id": 773, "name": { - "english": "Frillish", - "japanese": "プルリル", - "chinese": "轻飘飘" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Water", - "Ghost" + "Ice" ], "base": { - "HP": 55, - "Attack": 40, - "Defense": 50, - "Sp. Attack": 65, - "Sp. Defense": 85, - "Speed": 40 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "ice" + } }, { - "id": 593, + "id": 773, "name": { - "english": "Jellicent", - "japanese": "ブルンゲル", - "chinese": "胖嘟嘟" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Water", - "Ghost" + "Poison" ], "base": { - "HP": 100, - "Attack": 60, - "Defense": 70, - "Sp. Attack": 85, - "Sp. Defense": 105, - "Speed": 60 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "white" + "includedInGens": [ + 8 + ], + "form": { + "key": "poison" + } }, { - "id": 594, + "id": 773, "name": { - "english": "Alomomola", - "japanese": "ママンボウ", - "chinese": "保姆曼波" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Water" + "Psychic" ], "base": { - "HP": 165, - "Attack": 75, - "Defense": 80, - "Sp. Attack": 40, - "Sp. Defense": 45, - "Speed": 65 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "pink" + "includedInGens": [ + 8 + ], + "form": { + "key": "psychic" + } }, { - "id": 595, + "id": 773, "name": { - "english": "Joltik", - "japanese": "バチュル", - "chinese": "电电虫" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Bug", - "Electric" + "Rock" ], "base": { - "HP": 50, - "Attack": 47, - "Defense": 50, - "Sp. Attack": 57, - "Sp. Defense": 50, - "Speed": 65 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "rock" + } }, { - "id": 596, + "id": 773, "name": { - "english": "Galvantula", - "japanese": "デンチュラ", - "chinese": "电蜘蛛" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Bug", - "Electric" + "Steel" ], "base": { - "HP": 70, - "Attack": 77, - "Defense": 60, - "Sp. Attack": 97, - "Sp. Defense": 60, - "Speed": 108 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "yellow" + "includedInGens": [ + 8 + ], + "form": { + "key": "steel" + } }, { - "id": 597, + "id": 773, "name": { - "english": "Ferroseed", - "japanese": "テッシード", - "chinese": "种子铁球" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Grass", - "Steel" + "Water" ], "base": { - "HP": 44, - "Attack": 50, - "Defense": 91, - "Sp. Attack": 24, - "Sp. Defense": 86, - "Speed": 10 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "gray" + "includedInGens": [ + 8 + ], + "form": { + "key": "water" + } }, { - "id": 598, + "id": 773, "name": { - "english": "Ferrothorn", - "japanese": "ナットレイ", - "chinese": "坚果哑铃" + "english": "Silvally", + "japanese": "シルヴァディ", + "chinese": "银伴战兽" }, "type": [ - "Grass", - "Steel" + "Normal" ], "base": { - "HP": 74, - "Attack": 94, - "Defense": 131, - "Sp. Attack": 54, - "Sp. Defense": 116, - "Speed": 20 + "HP": 95, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 95, + "Sp. Defense": 95, + "Speed": 95 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 599, + "id": 774, "name": { - "english": "Klink", - "japanese": "ギアル", - "chinese": "齿轮儿" + "english": "Minior", + "japanese": "メテノ", + "chinese": "小陨星" }, "type": [ - "Steel" + "Rock", + "Flying" ], "base": { - "HP": 40, - "Attack": 55, - "Defense": 70, - "Sp. Attack": 45, + "HP": 60, + "Attack": 100, + "Defense": 60, + "Sp. Attack": 100, "Sp. Defense": 60, - "Speed": 30 - }, - "color": "gray" + "Speed": 120 + } }, { - "id": 600, + "id": 774, "name": { - "english": "Klang", - "japanese": "ギギアル", - "chinese": "齿轮组" + "english": "Minior", + "japanese": "メテノ", + "chinese": "小陨星" }, "type": [ - "Steel" + "Rock", + "Flying" ], "base": { "HP": 60, - "Attack": 80, - "Defense": 95, - "Sp. Attack": 70, - "Sp. Defense": 85, - "Speed": 50 + "Attack": 60, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 100, + "Speed": 60 }, - "color": "gray" + "form": { + "key": "meteor" + } }, { - "id": 601, + "id": 774, "name": { - "english": "Klinklang", - "japanese": "ギギギアル", - "chinese": "齿轮怪" + "english": "Minior", + "japanese": "メテノ", + "chinese": "小陨星" }, "type": [ - "Steel" + "Rock", + "Flying" ], "base": { "HP": 60, - "Attack": 100, - "Defense": 115, - "Sp. Attack": 70, - "Sp. Defense": 85, - "Speed": 90 - }, - "color": "gray" + "Attack": 60, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 100, + "Speed": 60 + } }, { - "id": 602, + "id": 775, "name": { - "english": "Tynamo", - "japanese": "シビシラス", - "chinese": "麻麻小鱼" + "english": "Komala", + "japanese": "ネッコアラ", + "chinese": "树枕尾熊" }, "type": [ - "Electric" + "Normal" ], "base": { - "HP": 35, - "Attack": 55, - "Defense": 40, - "Sp. Attack": 45, - "Sp. Defense": 40, - "Speed": 60 + "HP": 65, + "Attack": 115, + "Defense": 65, + "Sp. Attack": 75, + "Sp. Defense": 95, + "Speed": 65 + } + }, + { + "id": 775, + "name": { + "english": "Komala", + "japanese": "ネッコアラ", + "chinese": "树枕尾熊" }, - "color": "white" + "type": [ + "Normal" + ], + "base": { + "HP": 65, + "Attack": 115, + "Defense": 65, + "Sp. Attack": 75, + "Sp. Defense": 95, + "Speed": 65 + } }, { - "id": 603, + "id": 776, "name": { - "english": "Eelektrik", - "japanese": "シビビール", - "chinese": "麻麻鳗" + "english": "Turtonator", + "japanese": "バクガメス", + "chinese": "爆焰龟兽" }, "type": [ - "Electric" + "Fire", + "Dragon" ], "base": { - "HP": 65, - "Attack": 85, - "Defense": 70, - "Sp. Attack": 75, - "Sp. Defense": 70, - "Speed": 40 + "HP": 60, + "Attack": 78, + "Defense": 135, + "Sp. Attack": 91, + "Sp. Defense": 85, + "Speed": 36 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 604, + "id": 776, "name": { - "english": "Eelektross", - "japanese": "シビルドン", - "chinese": "麻麻鳗鱼王" + "english": "Turtonator", + "japanese": "バクガメス", + "chinese": "爆焰龟兽" }, "type": [ - "Electric" + "Fire", + "Dragon" ], "base": { - "HP": 85, - "Attack": 115, - "Defense": 80, - "Sp. Attack": 105, - "Sp. Defense": 80, - "Speed": 50 + "HP": 60, + "Attack": 78, + "Defense": 135, + "Sp. Attack": 91, + "Sp. Defense": 85, + "Speed": 36 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 605, + "id": 777, "name": { - "english": "Elgyem", - "japanese": "リグレー", - "chinese": "小灰怪" + "english": "Togedemaru", + "japanese": "トゲデマル", + "chinese": "托戈德玛尔" }, "type": [ - "Psychic" + "Electric", + "Steel" ], "base": { - "HP": 55, - "Attack": 55, - "Defense": 55, - "Sp. Attack": 85, - "Sp. Defense": 55, - "Speed": 30 + "HP": 65, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 40, + "Sp. Defense": 73, + "Speed": 96 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 606, + "id": 777, "name": { - "english": "Beheeyem", - "japanese": "オーベム", - "chinese": "大宇怪" + "english": "Togedemaru", + "japanese": "トゲデマル", + "chinese": "托戈德玛尔" }, "type": [ - "Psychic" + "Electric", + "Steel" ], "base": { - "HP": 75, - "Attack": 75, - "Defense": 75, - "Sp. Attack": 125, - "Sp. Defense": 95, - "Speed": 40 + "HP": 65, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 40, + "Sp. Defense": 73, + "Speed": 96 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 607, + "id": 777, "name": { - "english": "Litwick", - "japanese": "ヒトモシ", - "chinese": "烛光灵" + "english": "Togedemaru", + "japanese": "トゲデマル", + "chinese": "托戈德玛尔" }, "type": [ - "Ghost", - "Fire" + "Electric", + "Steel" ], "base": { - "HP": 50, - "Attack": 30, - "Defense": 55, - "Sp. Attack": 65, - "Sp. Defense": 55, - "Speed": 20 + "HP": 65, + "Attack": 98, + "Defense": 63, + "Sp. Attack": 40, + "Sp. Defense": 73, + "Speed": 96 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 608, + "id": 778, "name": { - "english": "Lampent", - "japanese": "ランプラー", - "chinese": "灯火幽灵" + "english": "Mimikyu", + "japanese": "ミミッキュ", + "chinese": "谜拟Q" }, "type": [ "Ghost", - "Fire" + "Fairy" ], "base": { - "HP": 60, - "Attack": 40, - "Defense": 60, - "Sp. Attack": 95, - "Sp. Defense": 60, - "Speed": 55 + "HP": 55, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 50, + "Sp. Defense": 105, + "Speed": 96 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 609, + "id": 778, "name": { - "english": "Chandelure", - "japanese": "シャンデラ", - "chinese": "水晶灯火灵" + "english": "Mimikyu", + "japanese": "ミミッキュ", + "chinese": "谜拟Q" }, "type": [ "Ghost", - "Fire" + "Fairy" ], "base": { - "HP": 60, - "Attack": 55, - "Defense": 90, - "Sp. Attack": 145, - "Sp. Defense": 90, - "Speed": 80 + "HP": 55, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 50, + "Sp. Defense": 105, + "Speed": 96 }, - "color": "black" + "includedInGens": [ + 8 + ], + "form": { + "key": "busted" + } }, { - "id": 610, + "id": 778, "name": { - "english": "Axew", - "japanese": "キバゴ", - "chinese": "牙牙" + "english": "Mimikyu", + "japanese": "ミミッキュ", + "chinese": "谜拟Q" }, "type": [ - "Dragon" + "Ghost", + "Fairy" ], "base": { - "HP": 46, - "Attack": 87, - "Defense": 60, - "Sp. Attack": 30, - "Sp. Defense": 40, - "Speed": 57 + "HP": 55, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 50, + "Sp. Defense": 105, + "Speed": 96 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 611, + "id": 778, "name": { - "english": "Fraxure", - "japanese": "オノンド", - "chinese": "斧牙龙" + "english": "Mimikyu", + "japanese": "ミミッキュ", + "chinese": "谜拟Q" }, "type": [ - "Dragon" + "Ghost", + "Fairy" ], "base": { - "HP": 66, - "Attack": 117, - "Defense": 70, - "Sp. Attack": 40, - "Sp. Defense": 50, - "Speed": 67 + "HP": 55, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 50, + "Sp. Defense": 105, + "Speed": 96 }, - "color": "green" + "includedInGens": [ + 8 + ], + "form": { + "key": "busted-totem" + } }, { - "id": 612, + "id": 778, "name": { - "english": "Haxorus", - "japanese": "オノノクス", - "chinese": "双斧战龙" + "english": "Mimikyu", + "japanese": "ミミッキュ", + "chinese": "谜拟Q" }, "type": [ - "Dragon" + "Ghost", + "Fairy" ], "base": { - "HP": 76, - "Attack": 147, - "Defense": 90, - "Sp. Attack": 60, - "Sp. Defense": 70, - "Speed": 97 + "HP": 55, + "Attack": 90, + "Defense": 80, + "Sp. Attack": 50, + "Sp. Defense": 105, + "Speed": 96 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 613, + "id": 779, "name": { - "english": "Cubchoo", - "japanese": "クマシュン", - "chinese": "喷嚏熊" + "english": "Bruxish", + "japanese": "ハギギシリ", + "chinese": "磨牙彩皮鱼" }, "type": [ - "Ice" + "Water", + "Psychic" ], "base": { - "HP": 55, - "Attack": 70, - "Defense": 40, - "Sp. Attack": 60, - "Sp. Defense": 40, - "Speed": 40 - }, - "color": "white" + "HP": 68, + "Attack": 105, + "Defense": 70, + "Sp. Attack": 70, + "Sp. Defense": 70, + "Speed": 92 + } }, { - "id": 614, + "id": 779, "name": { - "english": "Beartic", - "japanese": "ツンベアー", - "chinese": "冻原熊" + "english": "Bruxish", + "japanese": "ハギギシリ", + "chinese": "磨牙彩皮鱼" }, "type": [ - "Ice" + "Water", + "Psychic" ], "base": { - "HP": 95, - "Attack": 130, - "Defense": 80, + "HP": 68, + "Attack": 105, + "Defense": 70, "Sp. Attack": 70, - "Sp. Defense": 80, - "Speed": 50 - }, - "color": "white" + "Sp. Defense": 70, + "Speed": 92 + } }, { - "id": 615, + "id": 780, "name": { - "english": "Cryogonal", - "japanese": "フリージオ", - "chinese": "几何雪花" + "english": "Drampa", + "japanese": "ジジーロン", + "chinese": "老翁龙" }, "type": [ - "Ice" + "Normal", + "Dragon" ], "base": { - "HP": 80, - "Attack": 50, - "Defense": 50, - "Sp. Attack": 95, - "Sp. Defense": 135, - "Speed": 105 + "HP": 78, + "Attack": 60, + "Defense": 85, + "Sp. Attack": 135, + "Sp. Defense": 91, + "Speed": 36 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 616, + "id": 780, "name": { - "english": "Shelmet", - "japanese": "チョボマキ", - "chinese": "小嘴蜗" + "english": "Drampa", + "japanese": "ジジーロン", + "chinese": "老翁龙" }, "type": [ - "Bug" + "Normal", + "Dragon" ], "base": { - "HP": 50, - "Attack": 40, + "HP": 78, + "Attack": 60, "Defense": 85, - "Sp. Attack": 40, - "Sp. Defense": 65, - "Speed": 25 + "Sp. Attack": 135, + "Sp. Defense": 91, + "Speed": 36 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 617, + "id": 781, "name": { - "english": "Accelgor", - "japanese": "アギルダー", - "chinese": "敏捷虫" + "english": "Dhelmise", + "japanese": "ダダリン", + "chinese": "破破舵轮" }, "type": [ - "Bug" + "Ghost", + "Grass" ], "base": { - "HP": 80, - "Attack": 70, - "Defense": 40, - "Sp. Attack": 100, - "Sp. Defense": 60, - "Speed": 145 + "HP": 70, + "Attack": 131, + "Defense": 100, + "Sp. Attack": 86, + "Sp. Defense": 90, + "Speed": 40 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 618, + "id": 781, "name": { - "english": "Stunfisk", - "japanese": "マッギョ", - "chinese": "泥巴鱼" + "english": "Dhelmise", + "japanese": "ダダリン", + "chinese": "破破舵轮" }, "type": [ - "Ground", - "Electric" + "Ghost", + "Grass" ], "base": { - "HP": 109, - "Attack": 66, - "Defense": 84, - "Sp. Attack": 81, - "Sp. Defense": 99, - "Speed": 32 + "HP": 70, + "Attack": 131, + "Defense": 100, + "Sp. Attack": 86, + "Sp. Defense": 90, + "Speed": 40 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 619, + "id": 782, "name": { - "english": "Mienfoo", - "japanese": "コジョフー", - "chinese": "功夫鼬" + "english": "Jangmo-o", + "japanese": "ジャラコ", + "chinese": "心鳞宝" }, "type": [ - "Fighting" + "Dragon" ], "base": { "HP": 45, - "Attack": 85, - "Defense": 50, - "Sp. Attack": 55, - "Sp. Defense": 50, - "Speed": 65 + "Attack": 55, + "Defense": 65, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 45 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 620, + "id": 782, "name": { - "english": "Mienshao", - "japanese": "コジョンド", - "chinese": "师父鼬" + "english": "Jangmo-o", + "japanese": "ジャラコ", + "chinese": "心鳞宝" }, "type": [ - "Fighting" + "Dragon" ], "base": { - "HP": 65, - "Attack": 125, - "Defense": 60, - "Sp. Attack": 95, - "Sp. Defense": 60, - "Speed": 105 + "HP": 45, + "Attack": 55, + "Defense": 65, + "Sp. Attack": 45, + "Sp. Defense": 45, + "Speed": 45 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 621, + "id": 783, "name": { - "english": "Druddigon", - "japanese": "クリムガン", - "chinese": "赤面龙" + "english": "Hakamo-o", + "japanese": "ジャランゴ", + "chinese": "鳞甲龙" }, "type": [ - "Dragon" + "Dragon", + "Fighting" ], "base": { - "HP": 77, - "Attack": 120, + "HP": 55, + "Attack": 75, "Defense": 90, - "Sp. Attack": 60, - "Sp. Defense": 90, - "Speed": 48 + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 65 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 622, + "id": 783, "name": { - "english": "Golett", - "japanese": "ゴビット", - "chinese": "泥偶小人" + "english": "Hakamo-o", + "japanese": "ジャランゴ", + "chinese": "鳞甲龙" }, "type": [ - "Ground", - "Ghost" + "Dragon", + "Fighting" ], "base": { - "HP": 59, - "Attack": 74, - "Defense": 50, - "Sp. Attack": 35, - "Sp. Defense": 50, - "Speed": 35 + "HP": 55, + "Attack": 75, + "Defense": 90, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 65 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 623, + "id": 784, "name": { - "english": "Golurk", - "japanese": "ゴルーグ", - "chinese": "泥偶巨人" + "english": "Kommo-o", + "japanese": "ジャラランガ", + "chinese": "杖尾鳞甲龙" }, "type": [ - "Ground", - "Ghost" + "Dragon", + "Fighting" ], "base": { - "HP": 89, - "Attack": 124, - "Defense": 80, - "Sp. Attack": 55, - "Sp. Defense": 80, - "Speed": 55 + "HP": 75, + "Attack": 110, + "Defense": 125, + "Sp. Attack": 100, + "Sp. Defense": 105, + "Speed": 85 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 624, + "id": 784, "name": { - "english": "Pawniard", - "japanese": "コマタナ", - "chinese": "驹刀小兵" + "english": "Kommo-o", + "japanese": "ジャラランガ", + "chinese": "杖尾鳞甲龙" }, - "type": [ - "Dark", - "Steel" + "type": [ + "Dragon", + "Fighting" ], "base": { - "HP": 45, - "Attack": 85, - "Defense": 70, - "Sp. Attack": 40, - "Sp. Defense": 40, - "Speed": 60 + "HP": 75, + "Attack": 110, + "Defense": 125, + "Sp. Attack": 100, + "Sp. Defense": 105, + "Speed": 85 }, - "color": "red" + "includedInGens": [ + 8 + ], + "form": { + "key": "totem" + } }, { - "id": 625, + "id": 784, "name": { - "english": "Bisharp", - "japanese": "キリキザン", - "chinese": "劈斩司令" + "english": "Kommo-o", + "japanese": "ジャラランガ", + "chinese": "杖尾鳞甲龙" }, "type": [ - "Dark", - "Steel" + "Dragon", + "Fighting" ], "base": { - "HP": 65, - "Attack": 125, - "Defense": 100, - "Sp. Attack": 60, - "Sp. Defense": 70, - "Speed": 70 + "HP": 75, + "Attack": 110, + "Defense": 125, + "Sp. Attack": 100, + "Sp. Defense": 105, + "Speed": 85 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 626, + "id": 785, "name": { - "english": "Bouffalant", - "japanese": "バッフロン", - "chinese": "爆炸头水牛" + "english": "Tapu Koko", + "japanese": "カプ・コケコ", + "chinese": "卡璞・鸣鸣" }, "type": [ - "Normal" + "Electric", + "Fairy" ], "base": { - "HP": 95, - "Attack": 110, - "Defense": 95, - "Sp. Attack": 40, - "Sp. Defense": 95, - "Speed": 55 + "HP": 70, + "Attack": 115, + "Defense": 85, + "Sp. Attack": 95, + "Sp. Defense": 75, + "Speed": 130 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 627, + "id": 785, "name": { - "english": "Rufflet", - "japanese": "ワシボン", - "chinese": "毛头小鹰" + "english": "Tapu Koko", + "japanese": "カプ・コケコ", + "chinese": "卡璞・鸣鸣" }, "type": [ - "Normal", - "Flying" + "Electric", + "Fairy" ], "base": { "HP": 70, - "Attack": 83, - "Defense": 50, - "Sp. Attack": 37, - "Sp. Defense": 50, - "Speed": 60 + "Attack": 115, + "Defense": 85, + "Sp. Attack": 95, + "Sp. Defense": 75, + "Speed": 130 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 628, + "id": 786, "name": { - "english": "Braviary", - "japanese": "ウォーグル", - "chinese": "勇士雄鹰" + "english": "Tapu Lele", + "japanese": "カプ・テテフ", + "chinese": "卡璞・蝶蝶" }, "type": [ - "Normal", - "Flying" + "Psychic", + "Fairy" ], "base": { - "HP": 100, - "Attack": 123, + "HP": 70, + "Attack": 85, "Defense": 75, - "Sp. Attack": 57, - "Sp. Defense": 75, - "Speed": 80 + "Sp. Attack": 130, + "Sp. Defense": 115, + "Speed": 95 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 629, + "id": 786, "name": { - "english": "Vullaby", - "japanese": "バルチャイ", - "chinese": "秃鹰丫头" + "english": "Tapu Lele", + "japanese": "カプ・テテフ", + "chinese": "卡璞・蝶蝶" }, "type": [ - "Dark", - "Flying" + "Psychic", + "Fairy" ], "base": { "HP": 70, - "Attack": 55, + "Attack": 85, "Defense": 75, - "Sp. Attack": 45, - "Sp. Defense": 65, - "Speed": 60 + "Sp. Attack": 130, + "Sp. Defense": 115, + "Speed": 95 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 630, + "id": 787, "name": { - "english": "Mandibuzz", - "japanese": "バルジーナ", - "chinese": "秃鹰娜" + "english": "Tapu Bulu", + "japanese": "カプ・ブルル", + "chinese": "卡璞・哞哞" }, "type": [ - "Dark", - "Flying" + "Grass", + "Fairy" ], "base": { - "HP": 110, - "Attack": 65, - "Defense": 105, - "Sp. Attack": 55, + "HP": 70, + "Attack": 130, + "Defense": 115, + "Sp. Attack": 85, "Sp. Defense": 95, - "Speed": 80 + "Speed": 75 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 631, + "id": 787, "name": { - "english": "Heatmor", - "japanese": "クイタラン", - "chinese": "熔蚁兽" + "english": "Tapu Bulu", + "japanese": "カプ・ブルル", + "chinese": "卡璞・哞哞" }, "type": [ - "Fire" + "Grass", + "Fairy" ], "base": { - "HP": 85, - "Attack": 97, - "Defense": 66, - "Sp. Attack": 105, - "Sp. Defense": 66, - "Speed": 65 + "HP": 70, + "Attack": 130, + "Defense": 115, + "Sp. Attack": 85, + "Sp. Defense": 95, + "Speed": 75 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 632, + "id": 788, "name": { - "english": "Durant", - "japanese": "アイアント", - "chinese": "铁蚁" + "english": "Tapu Fini", + "japanese": "カプ・レヒレ", + "chinese": "卡璞・鳍鳍" }, "type": [ - "Bug", - "Steel" + "Water", + "Fairy" ], "base": { - "HP": 58, - "Attack": 109, - "Defense": 112, - "Sp. Attack": 48, - "Sp. Defense": 48, - "Speed": 109 + "HP": 70, + "Attack": 75, + "Defense": 115, + "Sp. Attack": 95, + "Sp. Defense": 130, + "Speed": 85 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 633, + "id": 788, "name": { - "english": "Deino", - "japanese": "モノズ", - "chinese": "单首龙" + "english": "Tapu Fini", + "japanese": "カプ・レヒレ", + "chinese": "卡璞・鳍鳍" }, "type": [ - "Dark", - "Dragon" + "Water", + "Fairy" ], "base": { - "HP": 52, - "Attack": 65, - "Defense": 50, - "Sp. Attack": 45, - "Sp. Defense": 50, - "Speed": 38 + "HP": 70, + "Attack": 75, + "Defense": 115, + "Sp. Attack": 95, + "Sp. Defense": 130, + "Speed": 85 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 634, + "id": 789, "name": { - "english": "Zweilous", - "japanese": "ジヘッド", - "chinese": "双首暴龙" + "english": "Cosmog", + "japanese": "コスモッグ", + "chinese": "科斯莫古" }, "type": [ - "Dark", - "Dragon" + "Psychic" ], "base": { - "HP": 72, - "Attack": 85, - "Defense": 70, - "Sp. Attack": 65, - "Sp. Defense": 70, - "Speed": 58 + "HP": 43, + "Attack": 29, + "Defense": 31, + "Sp. Attack": 29, + "Sp. Defense": 31, + "Speed": 37 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 635, + "id": 789, "name": { - "english": "Hydreigon", - "japanese": "サザンドラ", - "chinese": "三首恶龙" + "english": "Cosmog", + "japanese": "コスモッグ", + "chinese": "科斯莫古" }, "type": [ - "Dark", - "Dragon" + "Psychic" ], "base": { - "HP": 92, - "Attack": 105, - "Defense": 90, - "Sp. Attack": 125, - "Sp. Defense": 90, - "Speed": 98 + "HP": 43, + "Attack": 29, + "Defense": 31, + "Sp. Attack": 29, + "Sp. Defense": 31, + "Speed": 37 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 636, + "id": 790, "name": { - "english": "Larvesta", - "japanese": "メラルバ", - "chinese": "燃烧虫" + "english": "Cosmoem", + "japanese": "コスモウム", + "chinese": "科斯莫姆" }, "type": [ - "Bug", - "Fire" + "Psychic" ], "base": { - "HP": 55, - "Attack": 85, - "Defense": 55, - "Sp. Attack": 50, - "Sp. Defense": 55, - "Speed": 60 + "HP": 43, + "Attack": 29, + "Defense": 131, + "Sp. Attack": 29, + "Sp. Defense": 131, + "Speed": 37 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 637, + "id": 790, "name": { - "english": "Volcarona", - "japanese": "ウルガモス", - "chinese": "火神蛾" + "english": "Cosmoem", + "japanese": "コスモウム", + "chinese": "科斯莫姆" }, "type": [ - "Bug", - "Fire" + "Psychic" ], "base": { - "HP": 85, - "Attack": 60, - "Defense": 65, - "Sp. Attack": 135, - "Sp. Defense": 105, - "Speed": 100 + "HP": 43, + "Attack": 29, + "Defense": 131, + "Sp. Attack": 29, + "Sp. Defense": 131, + "Speed": 37 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 638, + "id": 791, "name": { - "english": "Cobalion", - "japanese": "コバルオン", - "chinese": "勾帕路翁" + "english": "Solgaleo", + "japanese": "ソルガレオ", + "chinese": "索尔迦雷欧" }, "type": [ - "Steel", - "Fighting" + "Psychic", + "Steel" ], "base": { - "HP": 91, - "Attack": 90, - "Defense": 129, - "Sp. Attack": 90, - "Sp. Defense": 72, - "Speed": 108 + "HP": 137, + "Attack": 137, + "Defense": 107, + "Sp. Attack": 113, + "Sp. Defense": 89, + "Speed": 97 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 639, + "id": 791, "name": { - "english": "Terrakion", - "japanese": "テラキオン", - "chinese": "代拉基翁" + "english": "Solgaleo", + "japanese": "ソルガレオ", + "chinese": "索尔迦雷欧" }, "type": [ - "Rock", - "Fighting" + "Psychic", + "Steel" ], "base": { - "HP": 91, - "Attack": 129, - "Defense": 90, - "Sp. Attack": 72, - "Sp. Defense": 90, - "Speed": 108 + "HP": 137, + "Attack": 137, + "Defense": 107, + "Sp. Attack": 113, + "Sp. Defense": 89, + "Speed": 97 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 640, + "id": 792, "name": { - "english": "Virizion", - "japanese": "ビリジオン", - "chinese": "毕力吉翁" + "english": "Lunala", + "japanese": "ルナアーラ", + "chinese": "露奈雅拉" }, "type": [ - "Grass", - "Fighting" + "Psychic", + "Ghost" ], "base": { - "HP": 91, - "Attack": 90, - "Defense": 72, - "Sp. Attack": 90, - "Sp. Defense": 129, - "Speed": 108 + "HP": 137, + "Attack": 113, + "Defense": 89, + "Sp. Attack": 137, + "Sp. Defense": 107, + "Speed": 97 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 641, + "id": 792, "name": { - "english": "Tornadus", - "japanese": "トルネロス", - "chinese": "龙卷云" + "english": "Lunala", + "japanese": "ルナアーラ", + "chinese": "露奈雅拉" }, "type": [ - "Flying" + "Psychic", + "Ghost" ], "base": { - "HP": 79, - "Attack": 115, - "Defense": 70, - "Sp. Attack": 125, - "Sp. Defense": 80, - "Speed": 111 + "HP": 137, + "Attack": 113, + "Defense": 89, + "Sp. Attack": 137, + "Sp. Defense": 107, + "Speed": 97 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 642, + "id": 793, "name": { - "english": "Thundurus", - "japanese": "ボルトロス", - "chinese": "雷电云" + "english": "Nihilego", + "japanese": "ウツロイド", + "chinese": "虚吾伊德" }, "type": [ - "Electric", - "Flying" + "Rock", + "Poison" ], "base": { - "HP": 79, - "Attack": 115, - "Defense": 70, - "Sp. Attack": 125, - "Sp. Defense": 80, - "Speed": 111 + "HP": 109, + "Attack": 53, + "Defense": 47, + "Sp. Attack": 127, + "Sp. Defense": 131, + "Speed": 103 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 643, + "id": 793, "name": { - "english": "Reshiram", - "japanese": "レシラム", - "chinese": "莱希拉姆" + "english": "Nihilego", + "japanese": "ウツロイド", + "chinese": "虚吾伊德" }, "type": [ - "Dragon", - "Fire" + "Rock", + "Poison" ], "base": { - "HP": 100, - "Attack": 120, - "Defense": 100, - "Sp. Attack": 150, - "Sp. Defense": 120, - "Speed": 90 + "HP": 109, + "Attack": 53, + "Defense": 47, + "Sp. Attack": 127, + "Sp. Defense": 131, + "Speed": 103 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 644, + "id": 794, "name": { - "english": "Zekrom ", - "japanese": "ゼクロム", - "chinese": "捷克罗姆" + "english": "Buzzwole", + "japanese": "マッシブーン", + "chinese": "爆肌蚊" }, "type": [ - "Dragon", - "Electric" + "Bug", + "Fighting" ], "base": { - "HP": 100, - "Attack": 150, - "Defense": 120, - "Sp. Attack": 120, - "Sp. Defense": 100, - "Speed": 90 + "HP": 107, + "Attack": 139, + "Defense": 139, + "Sp. Attack": 53, + "Sp. Defense": 53, + "Speed": 79 }, - "color": null + "includedInGens": [ + 8 + ] }, { - "id": 645, + "id": 794, "name": { - "english": "Landorus", - "japanese": "ランドロス", - "chinese": "土地云" + "english": "Buzzwole", + "japanese": "マッシブーン", + "chinese": "爆肌蚊" }, "type": [ - "Ground", - "Flying" + "Bug", + "Fighting" ], "base": { - "HP": 89, - "Attack": 125, - "Defense": 90, - "Sp. Attack": 115, - "Sp. Defense": 80, - "Speed": 101 + "HP": 107, + "Attack": 139, + "Defense": 139, + "Sp. Attack": 53, + "Sp. Defense": 53, + "Speed": 79 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 646, + "id": 795, "name": { - "english": "Kyurem", - "japanese": "キュレム", - "chinese": "酋雷姆" + "english": "Pheromosa", + "japanese": "フェローチェ", + "chinese": "费洛美螂" }, "type": [ - "Dragon", - "Ice" + "Bug", + "Fighting" ], "base": { - "HP": 125, - "Attack": 130, - "Defense": 90, - "Sp. Attack": 130, - "Sp. Defense": 90, - "Speed": 95 + "HP": 71, + "Attack": 137, + "Defense": 37, + "Sp. Attack": 137, + "Sp. Defense": 37, + "Speed": 151 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 647, + "id": 795, "name": { - "english": "Keldeo", - "japanese": "ケルディオ", - "chinese": "凯路迪欧" + "english": "Pheromosa", + "japanese": "フェローチェ", + "chinese": "费洛美螂" }, "type": [ - "Water", + "Bug", "Fighting" ], "base": { - "HP": 91, - "Attack": 72, - "Defense": 90, - "Sp. Attack": 129, - "Sp. Defense": 90, - "Speed": 108 + "HP": 71, + "Attack": 137, + "Defense": 37, + "Sp. Attack": 137, + "Sp. Defense": 37, + "Speed": 151 }, - "color": "yellow" + "includedInGens": [ + 8 + ] }, { - "id": 648, + "id": 796, "name": { - "english": "Meloetta", - "japanese": "メロエッタ", - "chinese": "美洛耶塔" + "english": "Xurkitree", + "japanese": "デンジュモク", + "chinese": "电束木" }, "type": [ - "Normal", - "Psychic" + "Electric" ], "base": { - "HP": 100, - "Attack": 77, - "Defense": 77, - "Sp. Attack": 128, - "Sp. Defense": 128, - "Speed": 90 + "HP": 83, + "Attack": 89, + "Defense": 71, + "Sp. Attack": 173, + "Sp. Defense": 71, + "Speed": 83 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 649, + "id": 796, "name": { - "english": "Genesect", - "japanese": "ゲノセクト", - "chinese": "盖诺赛克特" + "english": "Xurkitree", + "japanese": "デンジュモク", + "chinese": "电束木" }, "type": [ - "Bug", - "Steel" + "Electric" ], "base": { - "HP": 71, - "Attack": 120, - "Defense": 95, - "Sp. Attack": 120, - "Sp. Defense": 95, - "Speed": 99 + "HP": 83, + "Attack": 89, + "Defense": 71, + "Sp. Attack": 173, + "Sp. Defense": 71, + "Speed": 83 }, - "color": "purple" + "includedInGens": [ + 8 + ] }, { - "id": 650, + "id": 797, "name": { - "english": "Chespin", - "japanese": "ハリマロン", - "chinese": "哈力栗" + "english": "Celesteela", + "japanese": "テッカグヤ", + "chinese": "铁火辉夜" }, "type": [ - "Grass" + "Steel", + "Flying" ], "base": { - "HP": 56, - "Attack": 61, - "Defense": 65, - "Sp. Attack": 48, - "Sp. Defense": 45, - "Speed": 38 + "HP": 97, + "Attack": 101, + "Defense": 103, + "Sp. Attack": 107, + "Sp. Defense": 101, + "Speed": 61 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 651, + "id": 797, "name": { - "english": "Quilladin", - "japanese": "ハリボーグ", - "chinese": "胖胖哈力" + "english": "Celesteela", + "japanese": "テッカグヤ", + "chinese": "铁火辉夜" }, "type": [ - "Grass" + "Steel", + "Flying" ], "base": { - "HP": 61, - "Attack": 78, - "Defense": 95, - "Sp. Attack": 56, - "Sp. Defense": 58, - "Speed": 57 + "HP": 97, + "Attack": 101, + "Defense": 103, + "Sp. Attack": 107, + "Sp. Defense": 101, + "Speed": 61 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 652, + "id": 798, "name": { - "english": "Chesnaught", - "japanese": "ブリガロン", - "chinese": "布里卡隆" + "english": "Kartana", + "japanese": "カミツルギ", + "chinese": "纸御剑" }, "type": [ "Grass", - "Fighting" + "Steel" ], "base": { - "HP": 88, - "Attack": 107, - "Defense": 122, - "Sp. Attack": 74, - "Sp. Defense": 75, - "Speed": 64 + "HP": 59, + "Attack": 181, + "Defense": 131, + "Sp. Attack": 59, + "Sp. Defense": 31, + "Speed": 109 }, - "color": "green" + "includedInGens": [ + 8 + ] }, { - "id": 653, + "id": 798, "name": { - "english": "Fennekin", - "japanese": "フォッコ", - "chinese": "火狐狸" + "english": "Kartana", + "japanese": "カミツルギ", + "chinese": "纸御剑" }, "type": [ - "Fire" + "Grass", + "Steel" ], "base": { - "HP": 40, - "Attack": 45, - "Defense": 40, - "Sp. Attack": 62, - "Sp. Defense": 60, - "Speed": 60 + "HP": 59, + "Attack": 181, + "Defense": 131, + "Sp. Attack": 59, + "Sp. Defense": 31, + "Speed": 109 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 654, + "id": 799, "name": { - "english": "Braixen", - "japanese": "テールナー", - "chinese": "长尾火狐" + "english": "Guzzlord", + "japanese": "アクジキング", + "chinese": "恶食大王" }, "type": [ - "Fire" + "Dark", + "Dragon" ], "base": { - "HP": 59, - "Attack": 59, - "Defense": 58, - "Sp. Attack": 90, - "Sp. Defense": 70, - "Speed": 73 + "HP": 223, + "Attack": 101, + "Defense": 53, + "Sp. Attack": 97, + "Sp. Defense": 53, + "Speed": 43 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 655, + "id": 799, "name": { - "english": "Delphox", - "japanese": "マフォクシー", - "chinese": "妖火红狐" + "english": "Guzzlord", + "japanese": "アクジキング", + "chinese": "恶食大王" }, "type": [ - "Fire", - "Psychic" + "Dark", + "Dragon" ], "base": { - "HP": 75, - "Attack": 69, - "Defense": 72, - "Sp. Attack": 114, - "Sp. Defense": 100, - "Speed": 104 + "HP": 223, + "Attack": 101, + "Defense": 53, + "Sp. Attack": 97, + "Sp. Defense": 53, + "Speed": 43 }, - "color": "red" + "includedInGens": [ + 8 + ] }, { - "id": 656, + "id": 800, "name": { - "english": "Froakie", - "japanese": "ケロマツ", - "chinese": "呱呱泡蛙" + "english": "Necrozma", + "japanese": "ネクロズマ", + "chinese": "奈克洛兹玛" }, "type": [ - "Water" + "Psychic" ], "base": { - "HP": 41, - "Attack": 56, - "Defense": 40, - "Sp. Attack": 62, - "Sp. Defense": 44, - "Speed": 71 + "HP": 97, + "Attack": 107, + "Defense": 101, + "Sp. Attack": 127, + "Sp. Defense": 89, + "Speed": 79 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 657, + "id": 800, "name": { - "english": "Frogadier", - "japanese": "ゲコガシラ", - "chinese": "呱头蛙" + "english": "Necrozma", + "japanese": "ネクロズマ", + "chinese": "奈克洛兹玛" }, "type": [ - "Water" + "Psychic", + "Steel" ], "base": { - "HP": 54, - "Attack": 63, - "Defense": 52, - "Sp. Attack": 83, - "Sp. Defense": 56, - "Speed": 97 + "HP": 97, + "Attack": 157, + "Defense": 127, + "Sp. Attack": 113, + "Sp. Defense": 109, + "Speed": 77 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "dusk-mane" + } }, { - "id": 658, + "id": 800, "name": { - "english": "Greninja", - "japanese": "ゲッコウガ", - "chinese": "甲贺忍蛙" + "english": "Necrozma", + "japanese": "ネクロズマ", + "chinese": "奈克洛兹玛" }, "type": [ - "Water", - "Dark" + "Psychic", + "Ghost" ], "base": { - "HP": 72, - "Attack": 95, - "Defense": 67, - "Sp. Attack": 103, - "Sp. Defense": 71, - "Speed": 122 + "HP": 97, + "Attack": 113, + "Defense": 109, + "Sp. Attack": 157, + "Sp. Defense": 127, + "Speed": 77 }, - "color": "blue" + "includedInGens": [ + 8 + ], + "form": { + "key": "dawn-wings" + } }, { - "id": 659, + "id": 800, "name": { - "english": "Bunnelby", - "japanese": "ホルビー", - "chinese": "掘掘兔" + "english": "Necrozma", + "japanese": "ネクロズマ", + "chinese": "奈克洛兹玛" }, "type": [ - "Normal" + "Psychic", + "Dragon" ], "base": { - "HP": 38, - "Attack": 36, - "Defense": 38, - "Sp. Attack": 32, - "Sp. Defense": 36, - "Speed": 57 + "HP": 97, + "Attack": 167, + "Defense": 97, + "Sp. Attack": 167, + "Sp. Defense": 97, + "Speed": 129 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "ultra" + } }, { - "id": 660, + "id": 800, "name": { - "english": "Diggersby", - "japanese": "ホルード", - "chinese": "掘地兔" + "english": "Necrozma", + "japanese": "ネクロズマ", + "chinese": "奈克洛兹玛" }, "type": [ - "Normal", - "Ground" + "Psychic" ], "base": { - "HP": 85, - "Attack": 56, - "Defense": 77, - "Sp. Attack": 50, - "Sp. Defense": 77, - "Speed": 78 + "HP": 97, + "Attack": 107, + "Defense": 101, + "Sp. Attack": 127, + "Sp. Defense": 89, + "Speed": 79 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 661, + "id": 801, "name": { - "english": "Fletchling", - "japanese": "ヤヤコマ", - "chinese": "小箭雀" + "english": "Magearna", + "japanese": "マギアナ", + "chinese": "玛机雅娜" }, "type": [ - "Normal", - "Flying" + "Steel", + "Fairy" ], "base": { - "HP": 45, - "Attack": 50, - "Defense": 43, - "Sp. Attack": 40, - "Sp. Defense": 38, - "Speed": 62 - }, - "color": "red" + "HP": 80, + "Attack": 95, + "Defense": 115, + "Sp. Attack": 130, + "Sp. Defense": 115, + "Speed": 65 + } }, { - "id": 662, + "id": 801, "name": { - "english": "Fletchinder", - "japanese": "ヒノヤコマ", - "chinese": "火箭雀" + "english": "Magearna", + "japanese": "マギアナ", + "chinese": "玛机雅娜" }, "type": [ - "Fire", - "Flying" + "Steel", + "Fairy" ], "base": { - "HP": 62, - "Attack": 73, - "Defense": 55, - "Sp. Attack": 56, - "Sp. Defense": 52, - "Speed": 84 + "HP": 80, + "Attack": 95, + "Defense": 115, + "Sp. Attack": 130, + "Sp. Defense": 115, + "Speed": 65 }, - "color": "red" + "form": { + "key": "original" + } }, { - "id": 663, + "id": 801, "name": { - "english": "Talonflame", - "japanese": "ファイアロー", - "chinese": "烈箭鹰" + "english": "Magearna", + "japanese": "マギアナ", + "chinese": "玛机雅娜" }, "type": [ - "Fire", - "Flying" + "Steel", + "Fairy" ], "base": { - "HP": 78, - "Attack": 81, - "Defense": 71, - "Sp. Attack": 74, - "Sp. Defense": 69, - "Speed": 126 - }, - "color": "red" + "HP": 80, + "Attack": 95, + "Defense": 115, + "Sp. Attack": 130, + "Sp. Defense": 115, + "Speed": 65 + } }, { - "id": 664, + "id": 802, "name": { - "english": "Scatterbug", - "japanese": "コフキムシ", - "chinese": "粉蝶虫" + "english": "Marshadow", + "japanese": "マーシャドー", + "chinese": "玛夏多" }, "type": [ - "Bug" + "Fighting", + "Ghost" ], "base": { - "HP": 38, - "Attack": 35, - "Defense": 40, - "Sp. Attack": 27, - "Sp. Defense": 25, - "Speed": 35 + "HP": 90, + "Attack": 125, + "Defense": 80, + "Sp. Attack": 90, + "Sp. Defense": 90, + "Speed": 125 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 665, + "id": 802, "name": { - "english": "Spewpa", - "japanese": "コフーライ", - "chinese": "粉蝶蛹" + "english": "Marshadow", + "japanese": "マーシャドー", + "chinese": "玛夏多" }, "type": [ - "Bug" + "Fighting", + "Ghost" ], "base": { - "HP": 45, - "Attack": 22, - "Defense": 60, - "Sp. Attack": 27, - "Sp. Defense": 30, - "Speed": 29 + "HP": 90, + "Attack": 125, + "Defense": 80, + "Sp. Attack": 90, + "Sp. Defense": 90, + "Speed": 125 }, - "color": "black" + "includedInGens": [ + 8 + ] }, { - "id": 666, + "id": 803, "name": { - "english": "Vivillon", - "japanese": "ビビヨン", - "chinese": "彩粉蝶" + "english": "Poipole", + "japanese": "ベベノム", + "chinese": "毒贝比" }, "type": [ - "Bug", - "Flying" + "Poison" ], "base": { - "HP": 80, - "Attack": 52, - "Defense": 50, - "Sp. Attack": 90, - "Sp. Defense": 50, - "Speed": 89 + "HP": 67, + "Attack": 73, + "Defense": 67, + "Sp. Attack": 73, + "Sp. Defense": 67, + "Speed": 73 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 667, + "id": 803, "name": { - "english": "Litleo", - "japanese": "シシコ", - "chinese": "小狮狮" + "english": "Poipole", + "japanese": "ベベノム", + "chinese": "毒贝比" }, "type": [ - "Fire", - "Normal" + "Poison" ], "base": { - "HP": 62, - "Attack": 50, - "Defense": 58, + "HP": 67, + "Attack": 73, + "Defense": 67, "Sp. Attack": 73, - "Sp. Defense": 54, - "Speed": 72 + "Sp. Defense": 67, + "Speed": 73 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 668, + "id": 804, "name": { - "english": "Pyroar", - "japanese": "カエンジシ", - "chinese": "火炎狮" + "english": "Naganadel", + "japanese": "アーゴヨン", + "chinese": "四颚针龙" }, "type": [ - "Fire", - "Normal" + "Poison", + "Dragon" ], "base": { - "HP": 86, - "Attack": 68, - "Defense": 72, - "Sp. Attack": 109, - "Sp. Defense": 66, - "Speed": 106 + "HP": 73, + "Attack": 73, + "Defense": 73, + "Sp. Attack": 127, + "Sp. Defense": 73, + "Speed": 121 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 669, + "id": 804, "name": { - "english": "Flabébé", - "japanese": "フラベベ", - "chinese": "花蓓蓓" + "english": "Naganadel", + "japanese": "アーゴヨン", + "chinese": "四颚针龙" }, "type": [ - "Fairy" + "Poison", + "Dragon" ], "base": { - "HP": 44, - "Attack": 38, - "Defense": 39, - "Sp. Attack": 61, - "Sp. Defense": 79, - "Speed": 42 + "HP": 73, + "Attack": 73, + "Defense": 73, + "Sp. Attack": 127, + "Sp. Defense": 73, + "Speed": 121 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 670, + "id": 805, "name": { - "english": "Floette", - "japanese": "フラエッテ", - "chinese": "花叶蒂" + "english": "Stakataka", + "japanese": "ツンデツンデ", + "chinese": "垒磊石" }, "type": [ - "Fairy" + "Rock", + "Steel" ], "base": { - "HP": 54, - "Attack": 45, - "Defense": 47, - "Sp. Attack": 75, - "Sp. Defense": 98, - "Speed": 52 + "HP": 61, + "Attack": 131, + "Defense": 211, + "Sp. Attack": 53, + "Sp. Defense": 101, + "Speed": 13 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 671, + "id": 805, "name": { - "english": "Florges", - "japanese": "フラージェス", - "chinese": "花洁夫人" + "english": "Stakataka", + "japanese": "ツンデツンデ", + "chinese": "垒磊石" }, "type": [ - "Fairy" + "Rock", + "Steel" ], "base": { - "HP": 78, - "Attack": 65, - "Defense": 68, - "Sp. Attack": 112, - "Sp. Defense": 154, - "Speed": 75 + "HP": 61, + "Attack": 131, + "Defense": 211, + "Sp. Attack": 53, + "Sp. Defense": 101, + "Speed": 13 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 672, + "id": 806, "name": { - "english": "Skiddo", - "japanese": "メェークル", - "chinese": "坐骑小羊" + "english": "Blacephalon", + "japanese": "ズガドーン", + "chinese": "砰头小丑" }, "type": [ - "Grass" + "Fire", + "Ghost" ], "base": { - "HP": 66, - "Attack": 65, - "Defense": 48, - "Sp. Attack": 62, - "Sp. Defense": 57, - "Speed": 52 + "HP": 53, + "Attack": 127, + "Defense": 53, + "Sp. Attack": 151, + "Sp. Defense": 79, + "Speed": 107 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 673, + "id": 806, "name": { - "english": "Gogoat", - "japanese": "ゴーゴート", - "chinese": "坐骑山羊" + "english": "Blacephalon", + "japanese": "ズガドーン", + "chinese": "砰头小丑" }, "type": [ - "Grass" + "Fire", + "Ghost" ], "base": { - "HP": 123, - "Attack": 100, - "Defense": 62, - "Sp. Attack": 97, - "Sp. Defense": 81, - "Speed": 68 + "HP": 53, + "Attack": 127, + "Defense": 53, + "Sp. Attack": 151, + "Sp. Defense": 79, + "Speed": 107 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 674, + "id": 807, "name": { - "english": "Pancham", - "japanese": "ヤンチャム", - "chinese": "顽皮熊猫" + "english": "Zeraora", + "japanese": "ゼラオラ", + "chinese": "捷拉奥拉" }, "type": [ - "Fighting" + "Electric" ], "base": { - "HP": 67, - "Attack": 82, - "Defense": 62, - "Sp. Attack": 46, - "Sp. Defense": 48, - "Speed": 43 + "HP": 88, + "Attack": 112, + "Defense": 75, + "Sp. Attack": 102, + "Sp. Defense": 80, + "Speed": 143 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 675, + "id": 807, "name": { - "english": "Pangoro", - "japanese": "ゴロンダ", - "chinese": "流氓熊猫" + "english": "Zeraora", + "japanese": "ゼラオラ", + "chinese": "捷拉奥拉" }, "type": [ - "Fighting", - "Dark" + "Electric" ], "base": { - "HP": 95, - "Attack": 124, - "Defense": 78, - "Sp. Attack": 69, - "Sp. Defense": 71, - "Speed": 58 + "HP": 88, + "Attack": 112, + "Defense": 75, + "Sp. Attack": 102, + "Sp. Defense": 80, + "Speed": 143 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 676, + "id": 808, "name": { - "english": "Furfrou", - "japanese": "トリミアン", - "chinese": "多丽米亚" + "english": "Meltan", + "japanese": "メルタン", + "chinese": "美录坦" }, "type": [ - "Normal" + "Steel" ], "base": { - "HP": 75, - "Attack": 80, - "Defense": 60, - "Sp. Attack": 65, - "Sp. Defense": 90, - "Speed": 102 + "HP": 46, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 55, + "Sp. Defense": 35, + "Speed": 34 }, - "color": "white" + "includedInGens": [ + 8 + ] }, { - "id": 677, + "id": 808, "name": { - "english": "Espurr", - "japanese": "ニャスパー", - "chinese": "妙喵" + "english": "Meltan", + "japanese": "メルタン", + "chinese": "美录坦" }, "type": [ - "Psychic" + "Steel" ], "base": { - "HP": 62, - "Attack": 48, - "Defense": 54, - "Sp. Attack": 63, - "Sp. Defense": 60, - "Speed": 68 + "HP": 46, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 55, + "Sp. Defense": 35, + "Speed": 34 }, - "color": "gray" + "includedInGens": [ + 8 + ] }, { - "id": 678, + "id": 809, "name": { - "english": "Meowstic", - "japanese": "ニャオニクス", - "chinese": "超能妙喵" + "english": "Melmetal", + "japanese": "メルメタル", + "chinese": "美录梅塔" }, "type": [ - "Psychic" + "Steel" ], "base": { - "HP": 74, - "Attack": 48, - "Defense": 76, - "Sp. Attack": 83, - "Sp. Defense": 81, - "Speed": 104 + "HP": 135, + "Attack": 143, + "Defense": 143, + "Sp. Attack": 80, + "Sp. Defense": 65, + "Speed": 34 }, - "color": "blue" + "includedInGens": [ + 8 + ] }, { - "id": 679, + "id": 809, "name": { - "english": "Honedge", - "japanese": "ヒトツキ", - "chinese": "独剑鞘" + "english": "Melmetal", + "japanese": "メルメタル", + "chinese": "美录梅塔" }, "type": [ - "Steel", - "Ghost" + "Steel" ], "base": { - "HP": 45, - "Attack": 80, - "Defense": 100, - "Sp. Attack": 35, - "Sp. Defense": 37, - "Speed": 28 + "HP": 135, + "Attack": 143, + "Defense": 143, + "Sp. Attack": 80, + "Sp. Defense": 65, + "Speed": 34 }, - "color": "brown" + "includedInGens": [ + 8 + ], + "form": { + "key": "gmax" + } }, { - "id": 680, + "id": 809, "name": { - "english": "Doublade", - "japanese": "ニダンギル", - "chinese": "双剑鞘" + "english": "Melmetal", + "japanese": "メルメタル", + "chinese": "美录梅塔" }, "type": [ - "Steel", - "Ghost" + "Steel" ], "base": { - "HP": 59, - "Attack": 110, - "Defense": 150, - "Sp. Attack": 45, - "Sp. Defense": 49, - "Speed": 35 + "HP": 135, + "Attack": 143, + "Defense": 143, + "Sp. Attack": 80, + "Sp. Defense": 65, + "Speed": 34 }, - "color": "brown" + "includedInGens": [ + 8 + ] }, { - "id": 681, + "id": 810, "name": { - "english": "Aegislash", - "japanese": "ギルガルド", - "chinese": "坚盾剑怪" + "english": "Grookey" }, "type": [ - "Steel", - "Ghost" + "Grass" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 60, - "Attack": 50, - "Defense": 150, - "Sp. Attack": 50, - "Sp. Defense": 150, - "Speed": 60 - }, - "color": "brown" + "HP": 50, + "Attack": 65, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 65 + } }, { - "id": 682, + "id": 810, "name": { - "english": "Spritzee", - "japanese": "シュシュプ", - "chinese": "粉香香" + "english": "Grookey" }, "type": [ - "Fairy" + "Grass" ], - "base": { - "HP": 78, - "Attack": 52, - "Defense": 60, - "Sp. Attack": 63, - "Sp. Defense": 65, - "Speed": 23 - }, - "color": "pink" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 683, + "id": 811, "name": { - "english": "Aromatisse", - "japanese": "フレフワン", - "chinese": "芳香精" + "english": "Thwackey" }, "type": [ - "Fairy" + "Grass" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 101, - "Attack": 72, - "Defense": 72, - "Sp. Attack": 99, - "Sp. Defense": 89, - "Speed": 29 - }, - "color": "pink" + "HP": 70, + "Attack": 85, + "Defense": 70, + "Sp. Attack": 55, + "Sp. Defense": 60, + "Speed": 80 + } }, { - "id": 684, + "id": 811, "name": { - "english": "Swirlix", - "japanese": "ペロッパフ", - "chinese": "绵绵泡芙" + "english": "Thwackey" }, "type": [ - "Fairy" + "Grass" ], - "base": { - "HP": 62, - "Attack": 48, - "Defense": 66, - "Sp. Attack": 59, - "Sp. Defense": 57, - "Speed": 49 - }, - "color": "white" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 685, + "id": 812, "name": { - "english": "Slurpuff", - "japanese": "ペロリーム", - "chinese": "胖甜妮" + "english": "Rillaboom" }, "type": [ - "Fairy" + "Grass" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 82, - "Attack": 80, - "Defense": 86, - "Sp. Attack": 85, - "Sp. Defense": 75, - "Speed": 72 - }, - "color": "white" + "HP": 100, + "Attack": 125, + "Defense": 90, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 85 + } }, { - "id": 686, + "id": 812, "name": { - "english": "Inkay", - "japanese": "マーイーカ", - "chinese": "好啦鱿" + "english": "Rillaboom" }, "type": [ - "Dark", - "Psychic" + "Grass" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 53, - "Attack": 54, - "Defense": 53, - "Sp. Attack": 37, - "Sp. Defense": 46, - "Speed": 45 + "HP": 100, + "Attack": 125, + "Defense": 90, + "Sp. Attack": 60, + "Sp. Defense": 70, + "Speed": 85 }, - "color": "blue" + "form": { + "key": "gmax" + } }, { - "id": 687, + "id": 812, "name": { - "english": "Malamar", - "japanese": "カラマネロ", - "chinese": "乌贼王" + "english": "Rillaboom" }, "type": [ - "Dark", - "Psychic" + "Grass" ], - "base": { - "HP": 86, - "Attack": 92, - "Defense": 88, - "Sp. Attack": 68, - "Sp. Defense": 75, - "Speed": 73 - }, - "color": "blue" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 688, + "id": 813, "name": { - "english": "Binacle", - "japanese": "カメテテ", - "chinese": "龟脚脚" + "english": "Scorbunny" }, "type": [ - "Rock", - "Water" + "Fire" + ], + "color": "white", + "includedInGens": [ + 8 ], "base": { - "HP": 42, - "Attack": 52, - "Defense": 67, - "Sp. Attack": 39, - "Sp. Defense": 56, - "Speed": 50 - }, - "color": "brown" + "HP": 50, + "Attack": 71, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 69 + } }, { - "id": 689, + "id": 813, "name": { - "english": "Barbaracle", - "japanese": "ガメノデス", - "chinese": "龟足巨铠" + "english": "Scorbunny" }, "type": [ - "Rock", - "Water" + "Fire" ], - "base": { - "HP": 72, - "Attack": 105, - "Defense": 115, - "Sp. Attack": 54, - "Sp. Defense": 86, - "Speed": 68 - }, - "color": "brown" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 690, + "id": 814, "name": { - "english": "Skrelp", - "japanese": "クズモー", - "chinese": "垃垃藻" + "english": "Raboot" }, "type": [ - "Poison", - "Water" + "Fire" + ], + "color": "gray", + "includedInGens": [ + 8 ], "base": { - "HP": 50, - "Attack": 60, + "HP": 65, + "Attack": 86, "Defense": 60, - "Sp. Attack": 60, + "Sp. Attack": 55, "Sp. Defense": 60, - "Speed": 30 + "Speed": 94 + } + }, + { + "id": 814, + "name": { + "english": "Raboot" }, - "color": "brown" + "type": [ + "Fire" + ], + "color": "gray", + "includedInGens": [ + 8 + ] }, { - "id": 691, + "id": 815, "name": { - "english": "Dragalge", - "japanese": "ドラミドロ", - "chinese": "毒藻龙" + "english": "Cinderace" }, "type": [ - "Poison", - "Dragon" + "Fire" + ], + "color": "white", + "includedInGens": [ + 8 ], "base": { - "HP": 65, - "Attack": 75, - "Defense": 90, - "Sp. Attack": 97, - "Sp. Defense": 123, - "Speed": 44 - }, - "color": "brown" + "HP": 80, + "Attack": 116, + "Defense": 75, + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 119 + } }, { - "id": 692, + "id": 815, "name": { - "english": "Clauncher", - "japanese": "ウデッポウ", - "chinese": "铁臂枪虾" + "english": "Cinderace" }, "type": [ - "Water" + "Fire" + ], + "color": "white", + "includedInGens": [ + 8 ], "base": { - "HP": 50, - "Attack": 53, - "Defense": 62, - "Sp. Attack": 58, - "Sp. Defense": 63, - "Speed": 44 + "HP": 80, + "Attack": 116, + "Defense": 75, + "Sp. Attack": 65, + "Sp. Defense": 75, + "Speed": 119 }, - "color": "blue" + "form": { + "key": "gmax" + } }, { - "id": 693, + "id": 815, "name": { - "english": "Clawitzer", - "japanese": "ブロスター", - "chinese": "钢炮臂虾" + "english": "Cinderace" }, "type": [ - "Water" + "Fire" ], - "base": { - "HP": 71, - "Attack": 73, - "Defense": 88, - "Sp. Attack": 120, - "Sp. Defense": 89, - "Speed": 59 - }, - "color": "blue" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 694, + "id": 816, "name": { - "english": "Helioptile", - "japanese": "エリキテル", - "chinese": "伞电蜥" + "english": "Sobble" }, "type": [ - "Electric", - "Normal" + "Water" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 44, - "Attack": 38, - "Defense": 33, - "Sp. Attack": 61, - "Sp. Defense": 43, + "HP": 50, + "Attack": 40, + "Defense": 40, + "Sp. Attack": 70, + "Sp. Defense": 40, "Speed": 70 - }, - "color": "yellow" + } }, { - "id": 695, + "id": 816, "name": { - "english": "Heliolisk", - "japanese": "エレザード", - "chinese": "光电伞蜥" + "english": "Sobble" }, "type": [ - "Electric", - "Normal" + "Water" ], - "base": { - "HP": 62, - "Attack": 55, - "Defense": 52, - "Sp. Attack": 109, - "Sp. Defense": 94, - "Speed": 109 - }, - "color": "yellow" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 696, + "id": 817, "name": { - "english": "Tyrunt", - "japanese": "チゴラス", - "chinese": "宝宝暴龙" + "english": "Drizzile" }, "type": [ - "Rock", - "Dragon" + "Water" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 58, - "Attack": 89, - "Defense": 77, - "Sp. Attack": 45, - "Sp. Defense": 45, - "Speed": 48 - }, - "color": "brown" + "HP": 65, + "Attack": 60, + "Defense": 55, + "Sp. Attack": 95, + "Sp. Defense": 55, + "Speed": 90 + } }, { - "id": 697, + "id": 817, "name": { - "english": "Tyrantrum", - "japanese": "ガチゴラス", - "chinese": "怪颚龙" + "english": "Drizzile" }, "type": [ - "Rock", - "Dragon" + "Water" ], - "base": { - "HP": 82, - "Attack": 121, - "Defense": 119, - "Sp. Attack": 69, - "Sp. Defense": 59, - "Speed": 71 - }, - "color": "red" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 698, + "id": 818, "name": { - "english": "Amaura", - "japanese": "アマルス", - "chinese": "冰雪龙" + "english": "Inteleon" }, "type": [ - "Rock", - "Ice" + "Water" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 77, - "Attack": 59, - "Defense": 50, - "Sp. Attack": 67, - "Sp. Defense": 63, - "Speed": 46 - }, - "color": "blue" + "HP": 70, + "Attack": 85, + "Defense": 65, + "Sp. Attack": 125, + "Sp. Defense": 65, + "Speed": 120 + } }, { - "id": 699, + "id": 818, "name": { - "english": "Aurorus", - "japanese": "アマルルガ", - "chinese": "冰雪巨龙" + "english": "Inteleon" }, "type": [ - "Rock", - "Ice" + "Water" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 123, - "Attack": 77, - "Defense": 72, - "Sp. Attack": 99, - "Sp. Defense": 92, - "Speed": 58 + "HP": 70, + "Attack": 85, + "Defense": 65, + "Sp. Attack": 125, + "Sp. Defense": 65, + "Speed": 120 }, - "color": "blue" + "form": { + "key": "gmax" + } }, { - "id": 700, + "id": 818, "name": { - "english": "Sylveon", - "japanese": "ニンフィア", - "chinese": "仙子伊布" + "english": "Inteleon" }, "type": [ - "Fairy" + "Water" ], - "base": { - "HP": 95, - "Attack": 65, - "Defense": 65, - "Sp. Attack": 110, - "Sp. Defense": 130, - "Speed": 60 - }, - "color": "pink" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 701, + "id": 819, "name": { - "english": "Hawlucha", - "japanese": "ルチャブル", - "chinese": "摔角鹰人" + "english": "Skwovet" }, "type": [ - "Fighting", - "Flying" + "Normal" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 78, - "Attack": 92, - "Defense": 75, - "Sp. Attack": 74, - "Sp. Defense": 63, - "Speed": 118 - }, - "color": "green" + "HP": 70, + "Attack": 55, + "Defense": 55, + "Sp. Attack": 35, + "Sp. Defense": 35, + "Speed": 25 + } }, { - "id": 702, + "id": 819, "name": { - "english": "Dedenne", - "japanese": "デデンネ", - "chinese": "咚咚鼠" + "english": "Skwovet" }, "type": [ - "Electric", - "Fairy" + "Normal" ], - "base": { - "HP": 67, - "Attack": 58, - "Defense": 57, - "Sp. Attack": 81, - "Sp. Defense": 67, - "Speed": 101 - }, - "color": "yellow" + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 703, + "id": 820, "name": { - "english": "Carbink", - "japanese": "メレシー", - "chinese": "小碎钻" + "english": "Greedent" }, "type": [ - "Rock", - "Fairy" + "Normal" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 50, - "Attack": 50, - "Defense": 150, - "Sp. Attack": 50, - "Sp. Defense": 150, - "Speed": 50 + "HP": 120, + "Attack": 95, + "Defense": 95, + "Sp. Attack": 55, + "Sp. Defense": 75, + "Speed": 20 + } + }, + { + "id": 820, + "name": { + "english": "Greedent" }, - "color": "gray" + "type": [ + "Normal" + ], + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 704, + "id": 821, "name": { - "english": "Goomy", - "japanese": "ヌメラ", - "chinese": "黏黏宝" + "english": "Rookidee" }, "type": [ - "Dragon" + "Flying" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 45, - "Attack": 50, + "HP": 38, + "Attack": 47, "Defense": 35, - "Sp. Attack": 55, - "Sp. Defense": 75, - "Speed": 40 - }, - "color": "purple" + "Sp. Attack": 33, + "Sp. Defense": 35, + "Speed": 57 + } }, { - "id": 705, + "id": 821, "name": { - "english": "Sliggoo", - "japanese": "ヌメイル", - "chinese": "黏美儿" + "english": "Rookidee" }, "type": [ - "Dragon" + "Flying" ], - "base": { - "HP": 68, - "Attack": 75, - "Defense": 53, - "Sp. Attack": 83, - "Sp. Defense": 113, - "Speed": 60 - }, - "color": "purple" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 706, + "id": 822, "name": { - "english": "Goodra", - "japanese": "ヌメルゴン", - "chinese": "黏美龙" + "english": "Corvisquire" }, "type": [ - "Dragon" + "Flying" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 90, - "Attack": 100, - "Defense": 70, - "Sp. Attack": 110, - "Sp. Defense": 150, - "Speed": 80 - }, - "color": "purple" + "HP": 68, + "Attack": 67, + "Defense": 55, + "Sp. Attack": 43, + "Sp. Defense": 55, + "Speed": 77 + } }, { - "id": 707, + "id": 822, "name": { - "english": "Klefki", - "japanese": "クレッフィ", - "chinese": "钥圈儿" + "english": "Corvisquire" }, "type": [ - "Steel", - "Fairy" + "Flying" ], - "base": { - "HP": 57, - "Attack": 80, - "Defense": 91, - "Sp. Attack": 80, - "Sp. Defense": 87, - "Speed": 75 - }, - "color": "gray" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 708, + "id": 823, "name": { - "english": "Phantump", - "japanese": "ボクレー", - "chinese": "小木灵" + "english": "Corviknight" }, "type": [ - "Ghost", - "Grass" + "Flying", + "Steel" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 43, - "Attack": 70, - "Defense": 48, - "Sp. Attack": 50, - "Sp. Defense": 60, - "Speed": 38 - }, - "color": "brown" + "HP": 98, + "Attack": 87, + "Defense": 105, + "Sp. Attack": 53, + "Sp. Defense": 85, + "Speed": 67 + } }, { - "id": 709, + "id": 823, "name": { - "english": "Trevenant", - "japanese": "オーロット", - "chinese": "朽木妖" + "english": "Corviknight" }, "type": [ - "Ghost", - "Grass" + "Flying", + "Steel" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 85, - "Attack": 110, - "Defense": 76, - "Sp. Attack": 65, - "Sp. Defense": 82, - "Speed": 56 + "HP": 98, + "Attack": 87, + "Defense": 105, + "Sp. Attack": 53, + "Sp. Defense": 85, + "Speed": 67 }, - "color": "brown" + "form": { + "key": "gmax" + } }, { - "id": 710, + "id": 823, "name": { - "english": "Pumpkaboo", - "japanese": "バケッチャ", - "chinese": "南瓜精" + "english": "Corviknight" }, "type": [ - "Ghost", - "Grass" + "Flying", + "Steel" ], - "base": { - "HP": 59, - "Attack": 66, - "Defense": 70, - "Sp. Attack": 44, - "Sp. Defense": 55, - "Speed": 41 - }, - "color": "brown" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 711, + "id": 824, "name": { - "english": "Gourgeist", - "japanese": "パンプジン", - "chinese": "南瓜怪人" + "english": "Blipbug" }, "type": [ - "Ghost", - "Grass" + "Bug" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 85, - "Attack": 100, - "Defense": 122, - "Sp. Attack": 58, - "Sp. Defense": 75, - "Speed": 54 - }, - "color": "brown" + "HP": 25, + "Attack": 20, + "Defense": 20, + "Sp. Attack": 25, + "Sp. Defense": 45, + "Speed": 45 + } }, { - "id": 712, + "id": 824, "name": { - "english": "Bergmite", - "japanese": "カチコール", - "chinese": "冰宝" + "english": "Blipbug" }, "type": [ - "Ice" + "Bug" ], - "base": { - "HP": 55, - "Attack": 69, - "Defense": 85, - "Sp. Attack": 32, - "Sp. Defense": 35, - "Speed": 28 - }, - "color": "blue" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 713, + "id": 825, "name": { - "english": "Avalugg", - "japanese": "クレベース", - "chinese": "冰岩怪" + "english": "Dottler" }, "type": [ - "Ice" + "Bug", + "Psychic" + ], + "color": "yellow", + "includedInGens": [ + 8 ], "base": { - "HP": 95, - "Attack": 117, - "Defense": 184, - "Sp. Attack": 44, - "Sp. Defense": 46, - "Speed": 28 - }, - "color": "blue" + "HP": 50, + "Attack": 35, + "Defense": 80, + "Sp. Attack": 50, + "Sp. Defense": 90, + "Speed": 30 + } }, { - "id": 714, + "id": 825, "name": { - "english": "Noibat", - "japanese": "オンバット", - "chinese": "嗡蝠" + "english": "Dottler" }, "type": [ - "Flying", - "Dragon" + "Bug", + "Psychic" ], - "base": { - "HP": 40, - "Attack": 30, - "Defense": 35, - "Sp. Attack": 45, - "Sp. Defense": 40, - "Speed": 55 - }, - "color": "purple" + "color": "yellow", + "includedInGens": [ + 8 + ] }, { - "id": 715, + "id": 826, "name": { - "english": "Noivern", - "japanese": "オンバーン", - "chinese": "音波龙" + "english": "Orbeetle" }, "type": [ - "Flying", - "Dragon" + "Bug", + "Psychic" + ], + "color": "red", + "includedInGens": [ + 8 ], "base": { - "HP": 85, - "Attack": 70, - "Defense": 80, - "Sp. Attack": 97, - "Sp. Defense": 80, - "Speed": 123 - }, - "color": "purple" + "HP": 60, + "Attack": 45, + "Defense": 110, + "Sp. Attack": 80, + "Sp. Defense": 120, + "Speed": 90 + } }, { - "id": 716, + "id": 826, "name": { - "english": "Xerneas", - "japanese": "ゼルネアス", - "chinese": "哲尔尼亚斯" + "english": "Orbeetle" }, "type": [ - "Fairy" + "Bug", + "Psychic" + ], + "color": "red", + "includedInGens": [ + 8 ], "base": { - "HP": 126, - "Attack": 131, - "Defense": 95, - "Sp. Attack": 131, - "Sp. Defense": 98, - "Speed": 99 + "HP": 60, + "Attack": 45, + "Defense": 110, + "Sp. Attack": 80, + "Sp. Defense": 120, + "Speed": 90 }, - "color": "blue" + "form": { + "key": "gmax" + } }, { - "id": 717, + "id": 826, "name": { - "english": "Yveltal", - "japanese": "イベルタル", - "chinese": "伊裴尔塔尔" + "english": "Orbeetle" }, "type": [ - "Dark", - "Flying" + "Bug", + "Psychic" ], - "base": { - "HP": 126, - "Attack": 131, - "Defense": 95, - "Sp. Attack": 131, - "Sp. Defense": 98, - "Speed": 99 - }, - "color": "red" + "color": "red", + "includedInGens": [ + 8 + ] }, { - "id": 718, + "id": 827, "name": { - "english": "Zygarde", - "japanese": "ジガルデ", - "chinese": "基格尔德" + "english": "Nickit" }, "type": [ - "Dragon", - "Ground" + "Dark" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 108, - "Attack": 100, - "Defense": 121, - "Sp. Attack": 81, - "Sp. Defense": 95, - "Speed": 95 - }, - "color": "green" + "HP": 40, + "Attack": 28, + "Defense": 28, + "Sp. Attack": 47, + "Sp. Defense": 52, + "Speed": 50 + } }, { - "id": 719, + "id": 827, "name": { - "english": "Diancie", - "japanese": "ディアンシー", - "chinese": "蒂安希" + "english": "Nickit" }, "type": [ - "Rock", - "Fairy" + "Dark" ], - "base": { - "HP": 50, - "Attack": 100, - "Defense": 150, - "Sp. Attack": 100, - "Sp. Defense": 150, - "Speed": 50 - }, - "color": "pink" + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 720, + "id": 828, "name": { - "english": "Hoopa", - "japanese": "フーパ", - "chinese": "胡帕" + "english": "Thievul" }, "type": [ - "Psychic", - "Ghost" + "Dark" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 80, - "Attack": 110, - "Defense": 60, - "Sp. Attack": 150, - "Sp. Defense": 130, - "Speed": 70 - }, - "color": "purple" + "HP": 70, + "Attack": 58, + "Defense": 58, + "Sp. Attack": 87, + "Sp. Defense": 92, + "Speed": 90 + } }, { - "id": 721, + "id": 828, "name": { - "english": "Volcanion", - "japanese": "ボルケニオン", - "chinese": "波尔凯尼恩" + "english": "Thievul" }, "type": [ - "Fire", - "Water" + "Dark" ], - "base": { - "HP": 80, - "Attack": 110, - "Defense": 120, - "Sp. Attack": 130, - "Sp. Defense": 90, - "Speed": 70 - }, - "color": "brown" + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 722, + "id": 829, "name": { - "english": "Rowlet", - "japanese": "モクロー", - "chinese": "木木枭" + "english": "Gossifleur" }, "type": [ - "Grass", - "Flying" + "Grass" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 68, - "Attack": 55, - "Defense": 55, - "Sp. Attack": 50, - "Sp. Defense": 50, - "Speed": 42 - }, - "color": "brown" + "HP": 40, + "Attack": 40, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 60, + "Speed": 10 + } }, { - "id": 723, + "id": 829, "name": { - "english": "Dartrix", - "japanese": "フクスロー", - "chinese": "投羽枭" + "english": "Gossifleur" }, "type": [ - "Grass", - "Flying" + "Grass" ], - "base": { - "HP": 78, - "Attack": 75, - "Defense": 75, - "Sp. Attack": 70, - "Sp. Defense": 70, - "Speed": 52 - }, - "color": "brown" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 724, + "id": 830, "name": { - "english": "Decidueye", - "japanese": "ジュナイパー", - "chinese": "狙射树枭" + "english": "Eldegoss" }, "type": [ - "Grass", - "Ghost" + "Grass" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 78, - "Attack": 107, - "Defense": 75, - "Sp. Attack": 100, - "Sp. Defense": 100, - "Speed": 70 - }, - "color": "brown" + "HP": 60, + "Attack": 50, + "Defense": 90, + "Sp. Attack": 80, + "Sp. Defense": 120, + "Speed": 60 + } }, { - "id": 725, + "id": 830, "name": { - "english": "Litten", - "japanese": "ニャビー", - "chinese": "火斑喵" + "english": "Eldegoss" }, "type": [ - "Fire" + "Grass" ], - "base": { - "HP": 45, - "Attack": 65, - "Defense": 40, - "Sp. Attack": 60, - "Sp. Defense": 40, - "Speed": 70 - }, - "color": "red" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 726, + "id": 831, "name": { - "english": "Torracat", - "japanese": "ニャヒート", - "chinese": "炎热喵" + "english": "Wooloo" }, "type": [ - "Fire" + "Normal" + ], + "color": "white", + "includedInGens": [ + 8 ], "base": { - "HP": 65, - "Attack": 85, - "Defense": 50, - "Sp. Attack": 80, - "Sp. Defense": 50, - "Speed": 90 - }, - "color": "red" + "HP": 42, + "Attack": 40, + "Defense": 55, + "Sp. Attack": 40, + "Sp. Defense": 45, + "Speed": 48 + } }, { - "id": 727, + "id": 831, "name": { - "english": "Incineroar", - "japanese": "ガオガエン", - "chinese": "炽焰咆哮虎" + "english": "Wooloo" }, "type": [ - "Fire", - "Dark" + "Normal" ], - "base": { - "HP": 95, - "Attack": 115, - "Defense": 90, - "Sp. Attack": 80, - "Sp. Defense": 90, - "Speed": 60 - }, - "color": "red" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 728, + "id": 832, "name": { - "english": "Popplio", - "japanese": "アシマリ", - "chinese": "球球海狮" + "english": "Dubwool" }, "type": [ - "Water" + "Normal" + ], + "color": "white", + "includedInGens": [ + 8 ], "base": { - "HP": 50, - "Attack": 54, - "Defense": 54, - "Sp. Attack": 66, - "Sp. Defense": 56, - "Speed": 40 - }, - "color": "blue" + "HP": 72, + "Attack": 80, + "Defense": 100, + "Sp. Attack": 60, + "Sp. Defense": 90, + "Speed": 88 + } }, { - "id": 729, + "id": 832, "name": { - "english": "Brionne", - "japanese": "オシャマリ", - "chinese": "花漾海狮" + "english": "Dubwool" }, "type": [ - "Water" + "Normal" ], - "base": { - "HP": 60, - "Attack": 69, - "Defense": 69, - "Sp. Attack": 91, - "Sp. Defense": 81, - "Speed": 50 - }, - "color": "blue" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 730, + "id": 833, "name": { - "english": "Primarina", - "japanese": "アシレーヌ", - "chinese": "西狮海壬" + "english": "Chewtle" }, "type": [ - "Water", - "Fairy" + "Water" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 80, - "Attack": 74, - "Defense": 74, - "Sp. Attack": 126, - "Sp. Defense": 116, - "Speed": 60 - }, - "color": "blue" + "HP": 50, + "Attack": 64, + "Defense": 50, + "Sp. Attack": 38, + "Sp. Defense": 38, + "Speed": 44 + } }, { - "id": 731, + "id": 833, "name": { - "english": "Pikipek", - "japanese": "ツツケラ", - "chinese": "小笃儿" + "english": "Chewtle" }, "type": [ - "Normal", - "Flying" + "Water" ], - "base": { - "HP": 35, - "Attack": 75, - "Defense": 30, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 65 - }, - "color": "black" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 732, + "id": 834, "name": { - "english": "Trumbeak", - "japanese": "ケララッパ", - "chinese": "喇叭啄鸟" + "english": "Drednaw" }, "type": [ - "Normal", - "Flying" + "Water", + "Rock" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 55, - "Attack": 85, - "Defense": 50, - "Sp. Attack": 40, - "Sp. Defense": 50, - "Speed": 75 - }, - "color": "black" + "HP": 90, + "Attack": 115, + "Defense": 90, + "Sp. Attack": 48, + "Sp. Defense": 68, + "Speed": 74 + } }, { - "id": 733, + "id": 834, "name": { - "english": "Toucannon", - "japanese": "ドデカバシ", - "chinese": "铳嘴大鸟" + "english": "Drednaw" }, "type": [ - "Normal", - "Flying" + "Water", + "Rock" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 80, - "Attack": 120, - "Defense": 75, - "Sp. Attack": 75, - "Sp. Defense": 75, - "Speed": 60 + "HP": 90, + "Attack": 115, + "Defense": 90, + "Sp. Attack": 48, + "Sp. Defense": 68, + "Speed": 74 }, - "color": "black" + "form": { + "key": "gmax" + } }, { - "id": 734, + "id": 834, "name": { - "english": "Yungoos", - "japanese": "ヤングース", - "chinese": "猫鼬少" + "english": "Drednaw" }, "type": [ - "Normal" + "Water", + "Rock" ], - "base": { - "HP": 48, - "Attack": 70, - "Defense": 30, - "Sp. Attack": 30, - "Sp. Defense": 30, - "Speed": 45 - }, - "color": "brown" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 735, + "id": 835, "name": { - "english": "Gumshoos", - "japanese": "デカグース", - "chinese": "猫鼬探长" + "english": "Yamper" }, "type": [ - "Normal" + "Electric" + ], + "color": "yellow", + "includedInGens": [ + 8 ], "base": { - "HP": 88, - "Attack": 110, - "Defense": 60, - "Sp. Attack": 55, - "Sp. Defense": 60, - "Speed": 45 - }, - "color": "brown" + "HP": 59, + "Attack": 45, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 26 + } }, { - "id": 736, + "id": 835, "name": { - "english": "Grubbin", - "japanese": "アゴジムシ", - "chinese": "强颚鸡母虫" + "english": "Yamper" }, "type": [ - "Bug" + "Electric" ], - "base": { - "HP": 47, - "Attack": 62, - "Defense": 45, - "Sp. Attack": 55, - "Sp. Defense": 45, - "Speed": 46 - }, - "color": "gray" + "color": "yellow", + "includedInGens": [ + 8 + ] }, { - "id": 737, + "id": 836, "name": { - "english": "Charjabug", - "japanese": "デンヂムシ", - "chinese": "虫电宝" + "english": "Boltund" }, "type": [ - "Bug", "Electric" ], + "color": "yellow", + "includedInGens": [ + 8 + ], "base": { - "HP": 57, - "Attack": 82, - "Defense": 95, - "Sp. Attack": 55, - "Sp. Defense": 75, - "Speed": 36 - }, - "color": "green" + "HP": 69, + "Attack": 90, + "Defense": 60, + "Sp. Attack": 90, + "Sp. Defense": 60, + "Speed": 121 + } }, { - "id": 738, + "id": 836, "name": { - "english": "Vikavolt", - "japanese": "クワガノン", - "chinese": "锹农炮虫" + "english": "Boltund" }, "type": [ - "Bug", "Electric" ], - "base": { - "HP": 77, - "Attack": 70, - "Defense": 90, - "Sp. Attack": 145, - "Sp. Defense": 75, - "Speed": 43 - }, - "color": "blue" + "color": "yellow", + "includedInGens": [ + 8 + ] }, { - "id": 739, + "id": 837, "name": { - "english": "Crabrawler", - "japanese": "マケンカニ", - "chinese": "好胜蟹" + "english": "Rolycoly" }, "type": [ - "Fighting" + "Rock" + ], + "color": "black", + "includedInGens": [ + 8 ], "base": { - "HP": 47, - "Attack": 82, - "Defense": 57, - "Sp. Attack": 42, - "Sp. Defense": 47, - "Speed": 63 - }, - "color": "purple" + "HP": 30, + "Attack": 40, + "Defense": 50, + "Sp. Attack": 40, + "Sp. Defense": 50, + "Speed": 30 + } }, { - "id": 740, + "id": 837, "name": { - "english": "Crabominable", - "japanese": "ケケンカニ", - "chinese": "好胜毛蟹" + "english": "Rolycoly" }, "type": [ - "Fighting", - "Ice" + "Rock" ], - "base": { - "HP": 97, - "Attack": 132, - "Defense": 77, - "Sp. Attack": 62, - "Sp. Defense": 67, - "Speed": 43 - }, - "color": "white" + "color": "black", + "includedInGens": [ + 8 + ] }, { - "id": 741, + "id": 838, "name": { - "english": "Oricorio", - "japanese": "オドリドリ", - "chinese": "花舞鸟" + "english": "Carkol" }, "type": [ - "Fire", - "Flying" + "Rock", + "Fire" + ], + "color": "black", + "includedInGens": [ + 8 ], "base": { - "HP": 75, - "Attack": 70, - "Defense": 70, - "Sp. Attack": 98, + "HP": 80, + "Attack": 60, + "Defense": 90, + "Sp. Attack": 60, "Sp. Defense": 70, - "Speed": 93 - }, - "color": "red" + "Speed": 50 + } }, { - "id": 742, + "id": 838, "name": { - "english": "Cutiefly", - "japanese": "アブリー", - "chinese": "萌虻" + "english": "Carkol" }, "type": [ - "Bug", - "Fairy" + "Rock", + "Fire" ], - "base": { - "HP": 40, - "Attack": 45, - "Defense": 40, - "Sp. Attack": 55, - "Sp. Defense": 40, - "Speed": 84 - }, - "color": "yellow" + "color": "black", + "includedInGens": [ + 8 + ] }, { - "id": 743, + "id": 839, "name": { - "english": "Ribombee", - "japanese": "アブリボン", - "chinese": "蝶结萌虻" + "english": "Coalossal" }, "type": [ - "Bug", - "Fairy" + "Rock", + "Fire" + ], + "color": "black", + "includedInGens": [ + 8 ], "base": { - "HP": 60, - "Attack": 55, - "Defense": 60, - "Sp. Attack": 95, - "Sp. Defense": 70, - "Speed": 124 - }, - "color": "yellow" + "HP": 110, + "Attack": 80, + "Defense": 120, + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 30 + } }, { - "id": 744, + "id": 839, "name": { - "english": "Rockruff", - "japanese": "イワンコ", - "chinese": "岩狗狗" + "english": "Coalossal" }, "type": [ - "Rock" + "Rock", + "Fire" + ], + "color": "black", + "includedInGens": [ + 8 ], "base": { - "HP": 45, - "Attack": 65, - "Defense": 40, - "Sp. Attack": 30, - "Sp. Defense": 40, - "Speed": 60 + "HP": 110, + "Attack": 80, + "Defense": 120, + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 30 }, - "color": "brown" + "form": { + "key": "gmax" + } }, { - "id": 745, + "id": 839, "name": { - "english": "Lycanroc", - "japanese": "ルガルガン", - "chinese": "鬃岩狼人" + "english": "Coalossal" }, "type": [ - "Rock" + "Rock", + "Fire" ], - "base": { - "HP": 75, - "Attack": 115, - "Defense": 65, - "Sp. Attack": 55, - "Sp. Defense": 65, - "Speed": 112 - }, - "color": "red" + "color": "black", + "includedInGens": [ + 8 + ] }, { - "id": 746, + "id": 840, "name": { - "english": "Wishiwashi", - "japanese": "ヨワシ", - "chinese": "弱丁鱼" + "english": "Applin" }, "type": [ - "Water" + "Grass", + "Dragon" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 45, - "Attack": 20, - "Defense": 20, - "Sp. Attack": 25, - "Sp. Defense": 25, - "Speed": 40 - }, - "color": "blue" + "HP": 40, + "Attack": 40, + "Defense": 80, + "Sp. Attack": 40, + "Sp. Defense": 40, + "Speed": 20 + } }, { - "id": 747, + "id": 840, "name": { - "english": "Mareanie", - "japanese": "ヒドイデ", - "chinese": "好坏星" + "english": "Applin" }, "type": [ - "Poison", - "Water" + "Grass", + "Dragon" ], - "base": { - "HP": 50, - "Attack": 53, - "Defense": 62, - "Sp. Attack": 43, - "Sp. Defense": 52, - "Speed": 45 - }, - "color": "blue" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 748, + "id": 841, "name": { - "english": "Toxapex", - "japanese": "ドヒドイデ", - "chinese": "超坏星" + "english": "Flapple" }, "type": [ - "Poison", - "Water" + "Grass", + "Dragon" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 50, - "Attack": 63, - "Defense": 152, - "Sp. Attack": 53, - "Sp. Defense": 142, - "Speed": 35 - }, - "color": "blue" + "HP": 70, + "Attack": 110, + "Defense": 80, + "Sp. Attack": 95, + "Sp. Defense": 60, + "Speed": 70 + } }, { - "id": 749, + "id": 841, "name": { - "english": "Mudbray", - "japanese": "ドロバンコ", - "chinese": "泥驴仔" + "english": "Flapple" }, "type": [ - "Ground" + "Grass", + "Dragon" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { "HP": 70, - "Attack": 100, - "Defense": 70, - "Sp. Attack": 45, - "Sp. Defense": 55, - "Speed": 45 + "Attack": 110, + "Defense": 80, + "Sp. Attack": 95, + "Sp. Defense": 60, + "Speed": 70 }, - "color": "brown" + "form": { + "key": "gmax" + } }, { - "id": 750, + "id": 841, "name": { - "english": "Mudsdale", - "japanese": "バンバドロ", - "chinese": "重泥挽马" + "english": "Flapple" }, "type": [ - "Ground" + "Grass", + "Dragon" ], - "base": { - "HP": 100, - "Attack": 125, - "Defense": 100, - "Sp. Attack": 55, - "Sp. Defense": 85, - "Speed": 35 - }, - "color": "brown" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 751, + "id": 842, "name": { - "english": "Dewpider", - "japanese": "シズクモ", - "chinese": "滴蛛" + "english": "Appletun" }, "type": [ - "Water", - "Bug" + "Grass", + "Dragon" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 38, - "Attack": 40, - "Defense": 52, - "Sp. Attack": 40, - "Sp. Defense": 72, - "Speed": 27 - }, - "color": "green" + "HP": 110, + "Attack": 85, + "Defense": 80, + "Sp. Attack": 100, + "Sp. Defense": 80, + "Speed": 30 + } }, { - "id": 752, + "id": 842, "name": { - "english": "Araquanid", - "japanese": "オニシズクモ", - "chinese": "滴蛛霸" + "english": "Appletun" }, "type": [ - "Water", - "Bug" + "Grass", + "Dragon" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 68, - "Attack": 70, - "Defense": 92, - "Sp. Attack": 50, - "Sp. Defense": 132, - "Speed": 42 + "HP": 110, + "Attack": 85, + "Defense": 80, + "Sp. Attack": 100, + "Sp. Defense": 80, + "Speed": 30 }, - "color": "green" + "form": { + "key": "gmax" + } }, { - "id": 753, + "id": 842, "name": { - "english": "Fomantis", - "japanese": "カリキリ", - "chinese": "伪螳草" + "english": "Appletun" }, "type": [ - "Grass" - ], - "base": { - "HP": 40, - "Attack": 55, - "Defense": 35, - "Sp. Attack": 50, - "Sp. Defense": 35, - "Speed": 35 - }, - "color": "pink" + "Grass", + "Dragon" + ], + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 754, + "id": 843, "name": { - "english": "Lurantis", - "japanese": "ラランテス", - "chinese": "兰螳花" + "english": "Silicobra" }, "type": [ - "Grass" + "Ground" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 70, - "Attack": 105, - "Defense": 90, - "Sp. Attack": 80, - "Sp. Defense": 90, - "Speed": 45 - }, - "color": "pink" + "HP": 52, + "Attack": 57, + "Defense": 75, + "Sp. Attack": 35, + "Sp. Defense": 50, + "Speed": 46 + } }, { - "id": 755, + "id": 843, "name": { - "english": "Morelull", - "japanese": "ネマシュ", - "chinese": "睡睡菇" + "english": "Silicobra" }, "type": [ - "Grass", - "Fairy" + "Ground" ], - "base": { - "HP": 40, - "Attack": 35, - "Defense": 55, - "Sp. Attack": 65, - "Sp. Defense": 75, - "Speed": 15 - }, - "color": "purple" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 756, + "id": 844, "name": { - "english": "Shiinotic", - "japanese": "マシェード", - "chinese": "灯罩夜菇" + "english": "Sandaconda" }, "type": [ - "Grass", - "Fairy" + "Ground" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 60, - "Attack": 45, - "Defense": 80, - "Sp. Attack": 90, - "Sp. Defense": 100, - "Speed": 30 - }, - "color": "purple" + "HP": 72, + "Attack": 107, + "Defense": 125, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 71 + } }, { - "id": 757, + "id": 844, "name": { - "english": "Salandit", - "japanese": "ヤトウモリ", - "chinese": "夜盗火蜥" + "english": "Sandaconda" }, "type": [ - "Poison", - "Fire" + "Ground" + ], + "color": "green", + "includedInGens": [ + 8 ], "base": { - "HP": 48, - "Attack": 44, - "Defense": 40, - "Sp. Attack": 71, - "Sp. Defense": 40, - "Speed": 77 + "HP": 72, + "Attack": 107, + "Defense": 125, + "Sp. Attack": 65, + "Sp. Defense": 70, + "Speed": 71 }, - "color": "black" + "form": { + "key": "gmax" + } }, { - "id": 758, + "id": 844, "name": { - "english": "Salazzle", - "japanese": "エンニュート", - "chinese": "焰后蜥" + "english": "Sandaconda" }, "type": [ - "Poison", - "Fire" + "Ground" ], - "base": { - "HP": 68, - "Attack": 64, - "Defense": 60, - "Sp. Attack": 111, - "Sp. Defense": 60, - "Speed": 117 - }, - "color": "black" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 759, + "id": 845, "name": { - "english": "Stufful", - "japanese": "ヌイコグマ", - "chinese": "童偶熊" + "english": "Cramorant" }, "type": [ - "Normal", - "Fighting" + "Flying", + "Water" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { "HP": 70, - "Attack": 75, - "Defense": 50, - "Sp. Attack": 45, - "Sp. Defense": 50, - "Speed": 50 - }, - "color": "pink" + "Attack": 85, + "Defense": 55, + "Sp. Attack": 85, + "Sp. Defense": 95, + "Speed": 85 + } }, { - "id": 760, + "id": 845, "name": { - "english": "Bewear", - "japanese": "キテルグマ", - "chinese": "穿着熊" + "english": "Cramorant" }, "type": [ - "Normal", - "Fighting" + "Flying", + "Water" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 120, - "Attack": 125, - "Defense": 80, - "Sp. Attack": 55, - "Sp. Defense": 60, - "Speed": 60 + "HP": 70, + "Attack": 85, + "Defense": 55, + "Sp. Attack": 85, + "Sp. Defense": 95, + "Speed": 85 }, - "color": "pink" + "form": { + "key": "gulping" + } }, { - "id": 761, + "id": 845, "name": { - "english": "Bounsweet", - "japanese": "アマカジ", - "chinese": "甜竹竹" + "english": "Cramorant" }, "type": [ - "Grass" + "Flying", + "Water" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 42, - "Attack": 30, - "Defense": 38, - "Sp. Attack": 30, - "Sp. Defense": 38, - "Speed": 32 + "HP": 70, + "Attack": 85, + "Defense": 55, + "Sp. Attack": 85, + "Sp. Defense": 95, + "Speed": 85 }, - "color": "purple" + "form": { + "key": "gorging" + } }, { - "id": 762, + "id": 845, "name": { - "english": "Steenee", - "japanese": "アママイコ", - "chinese": "甜舞妮" + "english": "Cramorant" }, "type": [ - "Grass" + "Flying", + "Water" ], - "base": { - "HP": 52, - "Attack": 40, - "Defense": 48, - "Sp. Attack": 40, - "Sp. Defense": 48, - "Speed": 62 - }, - "color": "purple" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 763, + "id": 846, "name": { - "english": "Tsareena", - "japanese": "アマージョ", - "chinese": "甜冷美后" + "english": "Arrokuda" }, "type": [ - "Grass" + "Water" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 72, - "Attack": 120, - "Defense": 98, - "Sp. Attack": 50, - "Sp. Defense": 98, - "Speed": 72 - }, - "color": "purple" + "HP": 41, + "Attack": 63, + "Defense": 40, + "Sp. Attack": 40, + "Sp. Defense": 30, + "Speed": 66 + } }, { - "id": 764, + "id": 846, "name": { - "english": "Comfey", - "japanese": "キュワワー", - "chinese": "花疗环环" + "english": "Arrokuda" }, "type": [ - "Fairy" + "Water" ], - "base": { - "HP": 51, - "Attack": 52, - "Defense": 90, - "Sp. Attack": 82, - "Sp. Defense": 110, - "Speed": 100 - }, - "color": "green" + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 765, + "id": 847, "name": { - "english": "Oranguru", - "japanese": "ヤレユータン", - "chinese": "智挥猩" + "english": "Barraskewda" }, "type": [ - "Normal", - "Psychic" + "Water" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 90, - "Attack": 60, - "Defense": 80, - "Sp. Attack": 90, - "Sp. Defense": 110, - "Speed": 60 + "HP": 61, + "Attack": 123, + "Defense": 60, + "Sp. Attack": 60, + "Sp. Defense": 50, + "Speed": 136 + } + }, + { + "id": 847, + "name": { + "english": "Barraskewda" }, - "color": "white" + "type": [ + "Water" + ], + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 766, + "id": 848, "name": { - "english": "Passimian", - "japanese": "ナゲツケサル", - "chinese": "投掷猴" + "english": "Toxel" }, "type": [ - "Fighting" + "Electric", + "Poison" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 100, - "Attack": 120, - "Defense": 90, - "Sp. Attack": 40, - "Sp. Defense": 60, - "Speed": 80 - }, - "color": "white" + "HP": 40, + "Attack": 38, + "Defense": 35, + "Sp. Attack": 54, + "Sp. Defense": 35, + "Speed": 40 + } }, { - "id": 767, + "id": 848, "name": { - "english": "Wimpod", - "japanese": "コソクムシ", - "chinese": "胆小虫" + "english": "Toxel" }, "type": [ - "Bug", - "Water" + "Electric", + "Poison" ], - "base": { - "HP": 25, - "Attack": 35, - "Defense": 40, - "Sp. Attack": 20, - "Sp. Defense": 30, - "Speed": 80 - }, - "color": "gray" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 768, + "id": 849, "name": { - "english": "Golisopod", - "japanese": "グソクムシャ", - "chinese": "具甲武者" + "english": "Toxtricity" }, "type": [ - "Bug", - "Water" + "Electric", + "Poison" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { "HP": 75, - "Attack": 125, - "Defense": 140, - "Sp. Attack": 60, - "Sp. Defense": 90, - "Speed": 40 - }, - "color": "gray" + "Attack": 98, + "Defense": 70, + "Sp. Attack": 114, + "Sp. Defense": 70, + "Speed": 75 + } }, { - "id": 769, + "id": 849, "name": { - "english": "Sandygast", - "japanese": "スナバァ", - "chinese": "沙丘娃" + "english": "Toxtricity" }, "type": [ - "Ghost", - "Ground" + "Electric", + "Poison" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 55, - "Attack": 55, - "Defense": 80, - "Sp. Attack": 70, - "Sp. Defense": 45, - "Speed": 15 + "HP": 75, + "Attack": 98, + "Defense": 70, + "Sp. Attack": 114, + "Sp. Defense": 70, + "Speed": 75 }, - "color": "brown" + "form": { + "key": "low-key" + } }, { - "id": 770, + "id": 849, "name": { - "english": "Palossand", - "japanese": "シロデスナ", - "chinese": "噬沙堡爷" + "english": "Toxtricity" }, "type": [ - "Ghost", - "Ground" + "Electric", + "Poison" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 85, - "Attack": 75, - "Defense": 110, - "Sp. Attack": 100, - "Sp. Defense": 75, - "Speed": 35 + "HP": 75, + "Attack": 98, + "Defense": 70, + "Sp. Attack": 114, + "Sp. Defense": 70, + "Speed": 75 }, - "color": "brown" + "form": { + "key": "gmax" + } }, { - "id": 771, + "id": 849, "name": { - "english": "Pyukumuku", - "japanese": "ナマコブシ", - "chinese": "拳海参" + "english": "Toxtricity" }, "type": [ - "Water" + "Electric", + "Poison" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 55, - "Attack": 60, - "Defense": 130, - "Sp. Attack": 30, - "Sp. Defense": 130, - "Speed": 5 + "HP": 75, + "Attack": 98, + "Defense": 70, + "Sp. Attack": 114, + "Sp. Defense": 70, + "Speed": 75 }, - "color": "black" + "form": { + "key": "low-key-gmax" + } }, { - "id": 772, + "id": 849, "name": { - "english": "Type: Null", - "japanese": "タイプ:ヌル", - "chinese": "属性:空" + "english": "Toxtricity" }, "type": [ - "Normal" + "Electric", + "Poison" ], - "base": { - "HP": 95, - "Attack": 95, - "Defense": 95, - "Sp. Attack": 95, - "Sp. Defense": 95, - "Speed": 59 - }, - "color": "gray" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 773, + "id": 850, "name": { - "english": "Silvally", - "japanese": "シルヴァディ", - "chinese": "银伴战兽" + "english": "Sizzlipede" }, "type": [ - "Normal" + "Fire", + "Bug" + ], + "color": "red", + "includedInGens": [ + 8 ], "base": { - "HP": 95, - "Attack": 95, - "Defense": 95, - "Sp. Attack": 95, - "Sp. Defense": 95, - "Speed": 95 - }, - "color": "gray" + "HP": 50, + "Attack": 65, + "Defense": 45, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 45 + } }, { - "id": 774, + "id": 850, "name": { - "english": "Minior", - "japanese": "メテノ", - "chinese": "小陨星" + "english": "Sizzlipede" }, "type": [ - "Rock", - "Flying" + "Fire", + "Bug" ], - "base": { - "HP": 60, - "Attack": 60, - "Defense": 100, - "Sp. Attack": 60, - "Sp. Defense": 100, - "Speed": 60 - }, - "color": "red" + "color": "red", + "includedInGens": [ + 8 + ] }, { - "id": 775, + "id": 851, "name": { - "english": "Komala", - "japanese": "ネッコアラ", - "chinese": "树枕尾熊" + "english": "Centiskorch" }, "type": [ - "Normal" + "Fire", + "Bug" + ], + "color": "red", + "includedInGens": [ + 8 ], "base": { - "HP": 65, + "HP": 100, "Attack": 115, "Defense": 65, - "Sp. Attack": 75, - "Sp. Defense": 95, + "Sp. Attack": 90, + "Sp. Defense": 90, "Speed": 65 - }, - "color": "blue" + } }, { - "id": 776, + "id": 851, "name": { - "english": "Turtonator", - "japanese": "バクガメス", - "chinese": "爆焰龟兽" + "english": "Centiskorch" }, "type": [ "Fire", - "Dragon" + "Bug" ], - "base": { - "HP": 60, - "Attack": 78, - "Defense": 135, - "Sp. Attack": 91, - "Sp. Defense": 85, - "Speed": 36 - }, - "color": "red" - }, - { - "id": 777, - "name": { - "english": "Togedemaru", - "japanese": "トゲデマル", - "chinese": "托戈德玛尔" - }, - "type": [ - "Electric", - "Steel" + "color": "red", + "includedInGens": [ + 8 ], "base": { - "HP": 65, - "Attack": 98, - "Defense": 63, - "Sp. Attack": 40, - "Sp. Defense": 73, - "Speed": 96 + "HP": 100, + "Attack": 115, + "Defense": 65, + "Sp. Attack": 90, + "Sp. Defense": 90, + "Speed": 65 }, - "color": "gray" + "form": { + "key": "gmax" + } }, { - "id": 778, + "id": 851, "name": { - "english": "Mimikyu", - "japanese": "ミミッキュ", - "chinese": "谜拟Q" + "english": "Centiskorch" }, "type": [ - "Ghost", - "Fairy" + "Fire", + "Bug" ], - "base": { - "HP": 55, - "Attack": 90, - "Defense": 80, - "Sp. Attack": 50, - "Sp. Defense": 105, - "Speed": 96 - }, - "color": "yellow" + "color": "red", + "includedInGens": [ + 8 + ] }, { - "id": 779, + "id": 852, "name": { - "english": "Bruxish", - "japanese": "ハギギシリ", - "chinese": "磨牙彩皮鱼" + "english": "Clobbopus" }, "type": [ - "Water", - "Psychic" + "Fighting" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 68, - "Attack": 105, - "Defense": 70, - "Sp. Attack": 70, - "Sp. Defense": 70, - "Speed": 92 - }, - "color": "pink" + "HP": 50, + "Attack": 68, + "Defense": 60, + "Sp. Attack": 50, + "Sp. Defense": 50, + "Speed": 32 + } }, { - "id": 780, + "id": 852, "name": { - "english": "Drampa", - "japanese": "ジジーロン", - "chinese": "老翁龙" + "english": "Clobbopus" }, "type": [ - "Normal", - "Dragon" + "Fighting" ], - "base": { - "HP": 78, - "Attack": 60, - "Defense": 85, - "Sp. Attack": 135, - "Sp. Defense": 91, - "Speed": 36 - }, - "color": "white" + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 781, + "id": 853, "name": { - "english": "Dhelmise", - "japanese": "ダダリン", - "chinese": "破破舵轮" + "english": "Grapploct" }, "type": [ - "Ghost", - "Grass" + "Fighting" + ], + "color": "blue", + "includedInGens": [ + 8 ], "base": { - "HP": 70, - "Attack": 131, - "Defense": 100, - "Sp. Attack": 86, - "Sp. Defense": 90, - "Speed": 40 + "HP": 80, + "Attack": 118, + "Defense": 90, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 42 + } + }, + { + "id": 853, + "name": { + "english": "Grapploct" }, - "color": "green" + "type": [ + "Fighting" + ], + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 782, + "id": 854, "name": { - "english": "Jangmo-o", - "japanese": "ジャラコ", - "chinese": "心鳞宝" + "english": "Sinistea" }, "type": [ - "Dragon" + "Ghost" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 45, - "Attack": 55, - "Defense": 65, - "Sp. Attack": 45, - "Sp. Defense": 45, - "Speed": 45 - }, - "color": "gray" + "HP": 40, + "Attack": 45, + "Defense": 45, + "Sp. Attack": 74, + "Sp. Defense": 54, + "Speed": 50 + } }, { - "id": 783, + "id": 854, "name": { - "english": "Hakamo-o", - "japanese": "ジャランゴ", - "chinese": "鳞甲龙" + "english": "Sinistea" }, "type": [ - "Dragon", - "Fighting" + "Ghost" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 55, - "Attack": 75, - "Defense": 90, - "Sp. Attack": 65, - "Sp. Defense": 70, - "Speed": 65 + "HP": 40, + "Attack": 45, + "Defense": 45, + "Sp. Attack": 74, + "Sp. Defense": 54, + "Speed": 50 }, - "color": "gray" + "form": { + "key": "antique" + } }, { - "id": 784, + "id": 854, "name": { - "english": "Kommo-o", - "japanese": "ジャラランガ", - "chinese": "杖尾鳞甲龙" + "english": "Sinistea" }, "type": [ - "Dragon", - "Fighting" + "Ghost" ], - "base": { - "HP": 75, - "Attack": 110, - "Defense": 125, - "Sp. Attack": 100, - "Sp. Defense": 105, - "Speed": 85 - }, - "color": "gray" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 785, + "id": 855, "name": { - "english": "Tapu Koko", - "japanese": "カプ・コケコ", - "chinese": "卡璞・鸣鸣" + "english": "Polteageist" }, "type": [ - "Electric", - "Fairy" + "Ghost" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 70, - "Attack": 115, - "Defense": 85, - "Sp. Attack": 95, - "Sp. Defense": 75, - "Speed": 130 - }, - "color": "yellow" + "HP": 60, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 134, + "Sp. Defense": 114, + "Speed": 70 + } }, { - "id": 786, + "id": 855, "name": { - "english": "Tapu Lele", - "japanese": "カプ・テテフ", - "chinese": "卡璞・蝶蝶" + "english": "Polteageist" }, "type": [ - "Psychic", - "Fairy" + "Ghost" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 70, - "Attack": 85, - "Defense": 75, - "Sp. Attack": 130, - "Sp. Defense": 115, - "Speed": 95 + "HP": 60, + "Attack": 65, + "Defense": 65, + "Sp. Attack": 134, + "Sp. Defense": 114, + "Speed": 70 }, - "color": "pink" + "form": { + "key": "antique" + } }, { - "id": 787, + "id": 855, "name": { - "english": "Tapu Bulu", - "japanese": "カプ・ブルル", - "chinese": "卡璞・哞哞" + "english": "Polteageist" }, "type": [ - "Grass", - "Fairy" + "Ghost" ], - "base": { - "HP": 70, - "Attack": 130, - "Defense": 115, - "Sp. Attack": 85, - "Sp. Defense": 95, - "Speed": 75 - }, - "color": "red" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 788, + "id": 856, "name": { - "english": "Tapu Fini", - "japanese": "カプ・レヒレ", - "chinese": "卡璞・鳍鳍" + "english": "Hatenna" }, "type": [ - "Water", - "Fairy" + "Psychic" + ], + "color": "pink", + "includedInGens": [ + 8 ], "base": { - "HP": 70, - "Attack": 75, - "Defense": 115, - "Sp. Attack": 95, - "Sp. Defense": 130, - "Speed": 85 - }, - "color": "purple" + "HP": 42, + "Attack": 30, + "Defense": 45, + "Sp. Attack": 56, + "Sp. Defense": 53, + "Speed": 39 + } }, { - "id": 789, + "id": 856, "name": { - "english": "Cosmog", - "japanese": "コスモッグ", - "chinese": "科斯莫古" + "english": "Hatenna" }, "type": [ "Psychic" ], - "base": { - "HP": 43, - "Attack": 29, - "Defense": 31, - "Sp. Attack": 29, - "Sp. Defense": 31, - "Speed": 37 + "color": "pink", + "includedInGens": [ + 8 + ] + }, + { + "id": 857, + "name": { + "english": "Hattrem" }, - "color": "blue" + "type": [ + "Psychic" + ], + "color": "pink", + "includedInGens": [ + 8 + ], + "base": { + "HP": 57, + "Attack": 40, + "Defense": 65, + "Sp. Attack": 86, + "Sp. Defense": 73, + "Speed": 49 + } }, { - "id": 790, + "id": 857, "name": { - "english": "Cosmoem", - "japanese": "コスモウム", - "chinese": "科斯莫姆" + "english": "Hattrem" }, "type": [ "Psychic" ], - "base": { - "HP": 43, - "Attack": 29, - "Defense": 131, - "Sp. Attack": 29, - "Sp. Defense": 131, - "Speed": 37 - }, - "color": "blue" + "color": "pink", + "includedInGens": [ + 8 + ] }, { - "id": 791, + "id": 858, "name": { - "english": "Solgaleo", - "japanese": "ソルガレオ", - "chinese": "索尔迦雷欧" + "english": "Hatterene" }, "type": [ "Psychic", - "Steel" + "Fairy" + ], + "color": "pink", + "includedInGens": [ + 8 ], "base": { - "HP": 137, - "Attack": 137, - "Defense": 107, - "Sp. Attack": 113, - "Sp. Defense": 89, - "Speed": 97 - }, - "color": "white" + "HP": 57, + "Attack": 90, + "Defense": 95, + "Sp. Attack": 136, + "Sp. Defense": 103, + "Speed": 29 + } }, { - "id": 792, + "id": 858, "name": { - "english": "Lunala", - "japanese": "ルナアーラ", - "chinese": "露奈雅拉" + "english": "Hatterene" }, "type": [ "Psychic", - "Ghost" + "Fairy" + ], + "color": "pink", + "includedInGens": [ + 8 ], "base": { - "HP": 137, - "Attack": 113, - "Defense": 89, - "Sp. Attack": 137, - "Sp. Defense": 107, - "Speed": 97 + "HP": 57, + "Attack": 90, + "Defense": 95, + "Sp. Attack": 136, + "Sp. Defense": 103, + "Speed": 29 }, - "color": "purple" + "form": { + "key": "gmax" + } }, { - "id": 793, + "id": 858, "name": { - "english": "Nihilego", - "japanese": "ウツロイド", - "chinese": "虚吾伊德" + "english": "Hatterene" }, "type": [ - "Rock", - "Poison" + "Psychic", + "Fairy" ], - "base": { - "HP": 109, - "Attack": 53, - "Defense": 47, - "Sp. Attack": 127, - "Sp. Defense": 131, - "Speed": 103 - }, - "color": "white" + "color": "pink", + "includedInGens": [ + 8 + ] }, { - "id": 794, + "id": 859, "name": { - "english": "Buzzwole", - "japanese": "マッシブーン", - "chinese": "爆肌蚊" + "english": "Impidimp" }, "type": [ - "Bug", - "Fighting" + "Dark", + "Fairy" + ], + "color": "pink", + "includedInGens": [ + 8 ], "base": { - "HP": 107, - "Attack": 139, - "Defense": 139, - "Sp. Attack": 53, - "Sp. Defense": 53, - "Speed": 79 - }, - "color": "red" + "HP": 45, + "Attack": 45, + "Defense": 30, + "Sp. Attack": 55, + "Sp. Defense": 40, + "Speed": 50 + } }, { - "id": 795, + "id": 859, "name": { - "english": "Pheromosa", - "japanese": "フェローチェ", - "chinese": "费洛美螂" + "english": "Impidimp" }, "type": [ - "Bug", - "Fighting" + "Dark", + "Fairy" ], - "base": { - "HP": 71, - "Attack": 137, - "Defense": 37, - "Sp. Attack": 137, - "Sp. Defense": 37, - "Speed": 151 - }, - "color": "white" + "color": "pink", + "includedInGens": [ + 8 + ] }, { - "id": 796, + "id": 860, "name": { - "english": "Xurkitree", - "japanese": "デンジュモク", - "chinese": "电束木" + "english": "Morgrem" }, "type": [ - "Electric" + "Dark", + "Fairy" + ], + "color": "pink", + "includedInGens": [ + 8 ], "base": { - "HP": 83, - "Attack": 89, - "Defense": 71, - "Sp. Attack": 173, - "Sp. Defense": 71, - "Speed": 83 - }, - "color": "black" + "HP": 65, + "Attack": 60, + "Defense": 45, + "Sp. Attack": 75, + "Sp. Defense": 55, + "Speed": 70 + } }, { - "id": 797, + "id": 860, "name": { - "english": "Celesteela", - "japanese": "テッカグヤ", - "chinese": "铁火辉夜" + "english": "Morgrem" }, "type": [ - "Steel", - "Flying" + "Dark", + "Fairy" ], - "base": { - "HP": 97, - "Attack": 101, - "Defense": 103, - "Sp. Attack": 107, - "Sp. Defense": 101, - "Speed": 61 - }, - "color": "green" + "color": "pink", + "includedInGens": [ + 8 + ] }, { - "id": 798, + "id": 861, "name": { - "english": "Kartana", - "japanese": "カミツルギ", - "chinese": "纸御剑" + "english": "Grimmsnarl" }, "type": [ - "Grass", - "Steel" + "Dark", + "Fairy" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 59, - "Attack": 181, - "Defense": 131, - "Sp. Attack": 59, - "Sp. Defense": 31, - "Speed": 109 - }, - "color": "white" + "HP": 95, + "Attack": 120, + "Defense": 65, + "Sp. Attack": 95, + "Sp. Defense": 75, + "Speed": 60 + } }, { - "id": 799, + "id": 861, "name": { - "english": "Guzzlord", - "japanese": "アクジキング", - "chinese": "恶食大王" + "english": "Grimmsnarl" }, "type": [ "Dark", - "Dragon" + "Fairy" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 223, - "Attack": 101, - "Defense": 53, - "Sp. Attack": 97, - "Sp. Defense": 53, - "Speed": 43 + "HP": 95, + "Attack": 120, + "Defense": 65, + "Sp. Attack": 95, + "Sp. Defense": 75, + "Speed": 60 }, - "color": "black" + "form": { + "key": "gmax" + } }, { - "id": 800, + "id": 861, "name": { - "english": "Necrozma", - "japanese": "ネクロズマ", - "chinese": "奈克洛兹玛" + "english": "Grimmsnarl" }, "type": [ - "Psychic" + "Dark", + "Fairy" ], - "base": { - "HP": 97, - "Attack": 107, - "Defense": 101, - "Sp. Attack": 127, - "Sp. Defense": 89, - "Speed": 79 - }, - "color": "blue" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 801, + "id": 862, "name": { - "english": "Magearna", - "japanese": "マギアナ", - "chinese": "玛机雅娜" + "english": "Obstagoon" }, "type": [ - "Steel", - "Fairy" + "Dark", + "Normal" + ], + "color": "gray", + "includedInGens": [ + 8 ], "base": { - "HP": 80, - "Attack": 95, - "Defense": 115, - "Sp. Attack": 130, - "Sp. Defense": 115, - "Speed": 65 - }, - "color": "red" + "HP": 93, + "Attack": 90, + "Defense": 101, + "Sp. Attack": 60, + "Sp. Defense": 81, + "Speed": 95 + } }, { - "id": 802, + "id": 862, "name": { - "english": "Marshadow", - "japanese": "マーシャドー", - "chinese": "玛夏多" + "english": "Obstagoon" }, "type": [ - "Fighting", - "Ghost" + "Dark", + "Normal" ], - "base": { - "HP": 90, - "Attack": 125, - "Defense": 80, - "Sp. Attack": 90, - "Sp. Defense": 90, - "Speed": 125 - }, - "color": "gray" + "color": "gray", + "includedInGens": [ + 8 + ] }, { - "id": 803, + "id": 863, "name": { - "english": "Poipole", - "japanese": "ベベノム", - "chinese": "毒贝比" + "english": "Perrserker" }, "type": [ - "Poison" + "Steel" + ], + "color": "brown", + "includedInGens": [ + 8 ], "base": { - "HP": 67, - "Attack": 73, - "Defense": 67, - "Sp. Attack": 73, - "Sp. Defense": 67, - "Speed": 73 - }, - "color": "purple" + "HP": 70, + "Attack": 110, + "Defense": 100, + "Sp. Attack": 50, + "Sp. Defense": 60, + "Speed": 50 + } }, { - "id": 804, + "id": 863, "name": { - "english": "Naganadel", - "japanese": "アーゴヨン", - "chinese": "四颚针龙" + "english": "Perrserker" }, "type": [ - "Poison", - "Dragon" + "Steel" ], - "base": { - "HP": 73, - "Attack": 73, - "Defense": 73, - "Sp. Attack": 127, - "Sp. Defense": 73, - "Speed": 121 - }, - "color": "purple" + "color": "brown", + "includedInGens": [ + 8 + ] }, { - "id": 805, + "id": 864, "name": { - "english": "Stakataka", - "japanese": "ツンデツンデ", - "chinese": "垒磊石" + "english": "Cursola" }, "type": [ - "Rock", - "Steel" + "Ghost" + ], + "color": "white", + "includedInGens": [ + 8 ], "base": { - "HP": 61, - "Attack": 131, - "Defense": 211, - "Sp. Attack": 53, - "Sp. Defense": 101, - "Speed": 13 - }, - "color": "gray" + "HP": 60, + "Attack": 95, + "Defense": 50, + "Sp. Attack": 145, + "Sp. Defense": 130, + "Speed": 30 + } }, { - "id": 806, + "id": 864, "name": { - "english": "Blacephalon", - "japanese": "ズガドーン", - "chinese": "砰头小丑" + "english": "Cursola" }, "type": [ - "Fire", "Ghost" ], - "base": { - "HP": 53, - "Attack": 127, - "Defense": 53, - "Sp. Attack": 151, - "Sp. Defense": 79, - "Speed": 107 - }, - "color": "white" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 807, + "id": 865, "name": { - "english": "Zeraora", - "japanese": "ゼラオラ", - "chinese": "捷拉奥拉" + "english": "Sirfetch'd" }, "type": [ - "Electric" + "Fighting" + ], + "color": "white", + "includedInGens": [ + 8 ], "base": { - "HP": 88, - "Attack": 112, - "Defense": 75, - "Sp. Attack": 102, - "Sp. Defense": 80, - "Speed": 143 - }, - "color": "yellow" + "HP": 62, + "Attack": 135, + "Defense": 95, + "Sp. Attack": 68, + "Sp. Defense": 82, + "Speed": 65 + } }, { - "id": 808, + "id": 865, "name": { - "english": "Meltan", - "japanese": "メルタン", - "chinese": "美录坦" + "english": "Sirfetch'd" }, "type": [ - "Steel" + "Fighting" ], - "base": { - "HP": 46, - "Attack": 65, - "Defense": 65, - "Sp. Attack": 55, - "Sp. Defense": 35, - "Speed": 34 - }, - "color": "gray" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 809, + "id": 866, "name": { - "english": "Melmetal", - "japanese": "メルメタル", - "chinese": "美录梅塔" + "english": "Mr.Rime" }, "type": [ - "Steel" + "Ice", + "Psychic" + ], + "color": "purple", + "includedInGens": [ + 8 ], "base": { - "HP": 135, - "Attack": 143, - "Defense": 143, - "Sp. Attack": 80, - "Sp. Defense": 65, - "Speed": 34 - }, - "color": "gray" + "HP": 80, + "Attack": 85, + "Defense": 75, + "Sp. Attack": 110, + "Sp. Defense": 100, + "Speed": 70 + } }, { - "id": 810, + "id": 866, "name": { - "english": "Grookey" + "english": "Mr.Rime" }, "type": [ - "Grass" + "Ice", + "Psychic" ], - "color": "green" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 811, + "id": 867, "name": { - "english": "Thwackey" + "english": "Runerigus" }, "type": [ - "Grass" + "Ground", + "Ghost" ], - "color": "green" + "color": "gray", + "includedInGens": [ + 8 + ], + "base": { + "HP": 58, + "Attack": 95, + "Defense": 145, + "Sp. Attack": 50, + "Sp. Defense": 105, + "Speed": 30 + } }, { - "id": 812, + "id": 867, "name": { - "english": "Rillaboom" + "english": "Runerigus" }, "type": [ - "Grass" + "Ground", + "Ghost" ], - "color": "green" + "color": "gray", + "includedInGens": [ + 8 + ] }, { - "id": 813, + "id": 868, "name": { - "english": "Scorbunny" + "english": "Milcery" }, "type": [ - "Fire" + "Fairy" ], - "color": "white" + "color": "white", + "includedInGens": [ + 8 + ], + "base": { + "HP": 45, + "Attack": 40, + "Defense": 40, + "Sp. Attack": 50, + "Sp. Defense": 61, + "Speed": 34 + } }, { - "id": 814, + "id": 868, "name": { - "english": "Raboot" + "english": "Milcery" }, "type": [ - "Fire" + "Fairy" ], - "color": "gray" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 815, + "id": 869, "name": { - "english": "Cinderace" + "english": "Alcremie" }, "type": [ - "Fire" + "Fairy" ], - "color": "white" + "color": "white", + "includedInGens": [ + 8 + ], + "base": { + "HP": 65, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 110, + "Sp. Defense": 121, + "Speed": 64 + } }, { - "id": 816, + "id": 869, "name": { - "english": "Sobble" + "english": "Alcremie" }, "type": [ - "Water" + "Fairy" ], - "color": "blue" + "color": "white", + "includedInGens": [ + 8 + ], + "base": { + "HP": 65, + "Attack": 60, + "Defense": 75, + "Sp. Attack": 110, + "Sp. Defense": 121, + "Speed": 64 + }, + "form": { + "key": "gmax" + } }, { - "id": 817, + "id": 869, "name": { - "english": "Drizzile" + "english": "Alcremie" }, "type": [ - "Water" + "Fairy" ], - "color": "blue" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 818, + "id": 870, "name": { - "english": "Inteleon" + "english": "Falinks" }, "type": [ - "Water" + "Fighting" + ], + "color": "yellow", + "includedInGens": [ + 8 ], - "color": "blue" + "base": { + "HP": 65, + "Attack": 100, + "Defense": 100, + "Sp. Attack": 70, + "Sp. Defense": 60, + "Speed": 75 + } }, { - "id": 819, + "id": 870, "name": { - "english": "Skwovet" + "english": "Falinks" }, "type": [ - "Normal" + "Fighting" ], - "color": "brown" + "color": "yellow", + "includedInGens": [ + 8 + ] }, { - "id": 820, + "id": 871, "name": { - "english": "Greedent" + "english": "Pincurchin" }, "type": [ - "Normal" + "Electric" + ], + "color": "purple", + "includedInGens": [ + 8 ], - "color": "brown" + "base": { + "HP": 48, + "Attack": 101, + "Defense": 95, + "Sp. Attack": 91, + "Sp. Defense": 85, + "Speed": 15 + } }, { - "id": 821, + "id": 871, "name": { - "english": "Rookidee" + "english": "Pincurchin" }, "type": [ - "Flying" + "Electric" ], - "color": "blue" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 822, + "id": 872, "name": { - "english": "Corvisquire" + "english": "Snom" }, "type": [ - "Flying" + "Ice", + "Bug" ], - "color": "blue" + "color": "white", + "includedInGens": [ + 8 + ], + "base": { + "HP": 30, + "Attack": 25, + "Defense": 35, + "Sp. Attack": 45, + "Sp. Defense": 30, + "Speed": 20 + } }, { - "id": 823, + "id": 872, "name": { - "english": "Corviknight" + "english": "Snom" }, "type": [ - "Flying", - "Steel" + "Ice", + "Bug" ], - "color": "purple" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 824, + "id": 873, "name": { - "english": "Blipbug" + "english": "Frosmoth" }, "type": [ + "Ice", "Bug" ], - "color": "blue" + "color": "white", + "includedInGens": [ + 8 + ], + "base": { + "HP": 70, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 125, + "Sp. Defense": 90, + "Speed": 65 + } }, { - "id": 825, + "id": 873, "name": { - "english": "Dottler" + "english": "Frosmoth" }, "type": [ - "Bug", - "Psychic" + "Ice", + "Bug" ], - "color": "yellow" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 826, + "id": 874, "name": { - "english": "Orbeetle" + "english": "Stonjourner" }, "type": [ - "Bug", - "Psychic" + "Rock" ], - "color": "red" + "color": "gray", + "includedInGens": [ + 8 + ], + "base": { + "HP": 100, + "Attack": 125, + "Defense": 135, + "Sp. Attack": 20, + "Sp. Defense": 20, + "Speed": 70 + } }, { - "id": 827, + "id": 874, "name": { - "english": "Nickit" + "english": "Stonjourner" }, "type": [ - "Dark" + "Rock" ], - "color": "brown" + "color": "gray", + "includedInGens": [ + 8 + ] }, { - "id": 828, + "id": 875, "name": { - "english": "Thievul" + "english": "Eiscue" }, "type": [ - "Dark" + "Ice" ], - "color": "brown" + "color": "blue", + "includedInGens": [ + 8 + ], + "base": { + "HP": 75, + "Attack": 80, + "Defense": 110, + "Sp. Attack": 65, + "Sp. Defense": 90, + "Speed": 50 + } }, { - "id": 829, + "id": 875, "name": { - "english": "Gossifleur" + "english": "Eiscue" }, "type": [ - "Grass" + "Ice" ], - "color": "green" + "color": "blue", + "includedInGens": [ + 8 + ], + "base": { + "HP": 75, + "Attack": 80, + "Defense": 70, + "Sp. Attack": 65, + "Sp. Defense": 50, + "Speed": 130 + }, + "form": { + "key": "noice" + } }, { - "id": 830, + "id": 875, "name": { - "english": "Eldegoss" + "english": "Eiscue" }, "type": [ - "Grass" + "Ice" ], - "color": "green" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 831, + "id": 876, "name": { - "english": "Wooloo" + "english": "Indeedee" }, "type": [ + "Psychic", "Normal" ], - "color": "white" + "color": "purple", + "includedInGens": [ + 8 + ], + "base": { + "HP": 60, + "Attack": 65, + "Defense": 55, + "Sp. Attack": 105, + "Sp. Defense": 95, + "Speed": 95 + } }, { - "id": 832, + "id": 876, "name": { - "english": "Dubwool" + "english": "Indeedee" }, "type": [ + "Psychic", "Normal" ], - "color": "white" + "color": "purple", + "includedInGens": [ + 8 + ], + "base": { + "HP": 70, + "Attack": 55, + "Defense": 65, + "Sp. Attack": 95, + "Sp. Defense": 105, + "Speed": 85 + }, + "form": { + "key": "f" + } }, { - "id": 833, + "id": 876, "name": { - "english": "Chewtle" + "english": "Indeedee" }, "type": [ - "Water" + "Psychic", + "Normal" ], - "color": "green" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 834, + "id": 877, "name": { - "english": "Drednaw" + "english": "Morpeko" }, "type": [ - "Water", - "Rock" + "Electric", + "Dark" ], - "color": "green" + "color": "yellow", + "includedInGens": [ + 8 + ], + "base": { + "HP": 58, + "Attack": 95, + "Defense": 58, + "Sp. Attack": 70, + "Sp. Defense": 58, + "Speed": 97 + } }, { - "id": 835, + "id": 877, "name": { - "english": "Yamper" + "english": "Morpeko" }, "type": [ - "Electric" + "Electric", + "Dark" ], - "color": "yellow" + "color": "yellow", + "includedInGens": [ + 8 + ], + "base": { + "HP": 58, + "Attack": 95, + "Defense": 58, + "Sp. Attack": 70, + "Sp. Defense": 58, + "Speed": 97 + }, + "form": { + "key": "hangry" + } }, { - "id": 836, + "id": 877, "name": { - "english": "Boltund" + "english": "Morpeko" }, "type": [ - "Electric" + "Electric", + "Dark" ], - "color": "yellow" + "color": "yellow", + "includedInGens": [ + 8 + ] }, { - "id": 837, + "id": 878, "name": { - "english": "Rolycoly" + "english": "Cufant" }, "type": [ - "Rock" + "Steel" + ], + "color": "yellow", + "includedInGens": [ + 8 ], - "color": "black" + "base": { + "HP": 72, + "Attack": 80, + "Defense": 49, + "Sp. Attack": 40, + "Sp. Defense": 49, + "Speed": 40 + } }, { - "id": 838, + "id": 878, "name": { - "english": "Carkol" + "english": "Cufant" }, "type": [ - "Rock", - "Fire" + "Steel" ], - "color": "black" + "color": "yellow", + "includedInGens": [ + 8 + ] }, { - "id": 839, + "id": 879, "name": { - "english": "Coalossal" + "english": "Copperajah" }, "type": [ - "Rock", - "Fire" + "Steel" + ], + "color": "green", + "includedInGens": [ + 8 ], - "color": "black" + "base": { + "HP": 122, + "Attack": 130, + "Defense": 69, + "Sp. Attack": 80, + "Sp. Defense": 69, + "Speed": 30 + } }, { - "id": 840, + "id": 879, "name": { - "english": "Applin" + "english": "Copperajah" }, "type": [ - "Grass", - "Dragon" + "Steel" ], - "color": "green" + "color": "green", + "includedInGens": [ + 8 + ], + "base": { + "HP": 122, + "Attack": 130, + "Defense": 69, + "Sp. Attack": 80, + "Sp. Defense": 69, + "Speed": 30 + }, + "form": { + "key": "gmax" + } }, { - "id": 841, + "id": 879, "name": { - "english": "Flapple" + "english": "Copperajah" }, "type": [ - "Grass", - "Dragon" + "Steel" ], - "color": "green" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 842, + "id": 880, "name": { - "english": "Appletun" + "english": "Dracozolt" }, "type": [ - "Grass", + "Electric", "Dragon" ], - "color": "green" + "color": "green", + "includedInGens": [ + 8 + ], + "base": { + "HP": 90, + "Attack": 100, + "Defense": 90, + "Sp. Attack": 80, + "Sp. Defense": 70, + "Speed": 75 + } }, { - "id": 843, + "id": 880, "name": { - "english": "Silicobra" + "english": "Dracozolt" }, "type": [ - "Ground" + "Electric", + "Dragon" ], - "color": "green" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 844, + "id": 881, "name": { - "english": "Sandaconda" + "english": "Arctozolt" }, "type": [ - "Ground" + "Electric", + "Ice" ], - "color": "green" + "color": "blue", + "includedInGens": [ + 8 + ], + "base": { + "HP": 90, + "Attack": 100, + "Defense": 90, + "Sp. Attack": 90, + "Sp. Defense": 80, + "Speed": 55 + } }, { - "id": 845, + "id": 881, "name": { - "english": "Cramorant" + "english": "Arctozolt" }, "type": [ - "Flying", - "Water" + "Electric", + "Ice" ], - "color": "blue" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 846, + "id": 882, "name": { - "english": "Arrokuda" + "english": "Dracovish" }, "type": [ - "Water" + "Water", + "Dragon" + ], + "color": "green", + "includedInGens": [ + 8 ], - "color": "brown" + "base": { + "HP": 90, + "Attack": 90, + "Defense": 100, + "Sp. Attack": 70, + "Sp. Defense": 80, + "Speed": 75 + } }, { - "id": 847, + "id": 882, "name": { - "english": "Barraskewda" + "english": "Dracovish" }, "type": [ - "Water" + "Water", + "Dragon" ], - "color": "brown" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 848, + "id": 883, "name": { - "english": "Toxel" + "english": "Arctovish" }, "type": [ - "Electric", - "Poison" + "Water", + "Ice" ], - "color": "purple" + "color": "blue", + "includedInGens": [ + 8 + ], + "base": { + "HP": 90, + "Attack": 90, + "Defense": 100, + "Sp. Attack": 80, + "Sp. Defense": 90, + "Speed": 55 + } }, { - "id": 849, + "id": 883, "name": { - "english": "Toxtricity" + "english": "Arctovish" }, "type": [ - "Electric", - "Poison" + "Water", + "Ice" ], - "color": "purple" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 850, + "id": 884, "name": { - "english": "Sizzlipede" + "english": "Duraludon" }, "type": [ - "Fire", - "Bug" + "Steel", + "Dragon" ], - "color": "red" + "color": "white", + "includedInGens": [ + 8 + ], + "base": { + "HP": 70, + "Attack": 95, + "Defense": 115, + "Sp. Attack": 120, + "Sp. Defense": 50, + "Speed": 85 + } }, { - "id": 851, + "id": 884, "name": { - "english": "Centiskorch" + "english": "Duraludon" }, "type": [ - "Fire", - "Bug" + "Steel", + "Dragon" ], - "color": "red" + "color": "white", + "includedInGens": [ + 8 + ], + "base": { + "HP": 70, + "Attack": 95, + "Defense": 115, + "Sp. Attack": 120, + "Sp. Defense": 50, + "Speed": 85 + }, + "form": { + "key": "gmax" + } }, { - "id": 852, + "id": 884, "name": { - "english": "Clobbopus" + "english": "Duraludon" }, "type": [ - "Fighting" + "Steel", + "Dragon" ], - "color": "brown" + "color": "white", + "includedInGens": [ + 8 + ] }, { - "id": 853, + "id": 885, "name": { - "english": "Grapploct" + "english": "Dreepy" }, "type": [ - "Fighting" + "Dragon", + "Ghost" ], - "color": "blue" + "color": "green", + "includedInGens": [ + 8 + ], + "base": { + "HP": 28, + "Attack": 60, + "Defense": 30, + "Sp. Attack": 40, + "Sp. Defense": 30, + "Speed": 82 + } }, { - "id": 854, + "id": 885, "name": { - "english": "Sinistea" + "english": "Dreepy" }, "type": [ + "Dragon", "Ghost" ], - "color": "purple" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 855, + "id": 886, "name": { - "english": "Polteageist" + "english": "Drakloak" }, "type": [ + "Dragon", "Ghost" ], - "color": "purple" + "color": "green", + "includedInGens": [ + 8 + ], + "base": { + "HP": 68, + "Attack": 80, + "Defense": 50, + "Sp. Attack": 60, + "Sp. Defense": 50, + "Speed": 102 + } }, { - "id": 856, + "id": 886, "name": { - "english": "Hatenna" + "english": "Drakloak" }, "type": [ - "Psychic" + "Dragon", + "Ghost" ], - "color": "pink" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 857, + "id": 887, "name": { - "english": "Hattrem" + "english": "Dragapult" }, "type": [ - "Psychic" + "Dragon", + "Ghost" ], - "color": "pink" + "color": "green", + "includedInGens": [ + 8 + ], + "base": { + "HP": 88, + "Attack": 120, + "Defense": 75, + "Sp. Attack": 100, + "Sp. Defense": 75, + "Speed": 142 + } }, { - "id": 858, + "id": 887, "name": { - "english": "Hatterene" + "english": "Dragapult" }, "type": [ - "Psychic", - "Fairy" + "Dragon", + "Ghost" ], - "color": "pink" + "color": "green", + "includedInGens": [ + 8 + ] }, { - "id": 859, + "id": 888, "name": { - "english": "Impidimp" + "english": "Zacian" }, "type": [ - "Dark", "Fairy" ], - "color": "pink" + "color": "blue", + "includedInGens": [ + 8 + ], + "base": { + "HP": 92, + "Attack": 130, + "Defense": 115, + "Sp. Attack": 80, + "Sp. Defense": 115, + "Speed": 138 + } }, { - "id": 860, + "id": 888, "name": { - "english": "Morgrem" + "english": "Zacian" }, "type": [ - "Dark", - "Fairy" + "Fairy", + "Steel" + ], + "color": "blue", + "includedInGens": [ + 8 ], - "color": "pink" + "base": { + "HP": 92, + "Attack": 170, + "Defense": 115, + "Sp. Attack": 80, + "Sp. Defense": 115, + "Speed": 148 + }, + "form": { + "key": "crowned" + } }, { - "id": 861, + "id": 888, "name": { - "english": "Grimmsnarl" + "english": "Zacian" }, "type": [ - "Dark", "Fairy" ], - "color": "purple" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 862, + "id": 888, "name": { - "english": "Obstagoon" + "english": "Zacian" }, "type": [ - "Dark", - "Normal" + "Fairy", + "Steel" ], - "color": "gray" + "color": "blue", + "includedInGens": [ + 8 + ] }, { - "id": 863, + "id": 889, "name": { - "english": "Perrserker" + "english": "Zamazenta" }, "type": [ - "Steel" + "Fighting" + ], + "color": "red", + "includedInGens": [ + 8 ], - "color": "brown" + "base": { + "HP": 92, + "Attack": 130, + "Defense": 115, + "Sp. Attack": 80, + "Sp. Defense": 115, + "Speed": 138 + } }, { - "id": 864, + "id": 889, "name": { - "english": "Cursola" + "english": "Zamazenta" }, "type": [ - "Ghost" + "Fighting", + "Steel" ], - "color": "white" + "color": "red", + "includedInGens": [ + 8 + ], + "base": { + "HP": 92, + "Attack": 130, + "Defense": 145, + "Sp. Attack": 80, + "Sp. Defense": 145, + "Speed": 128 + }, + "form": { + "key": "crowned" + } }, { - "id": 865, + "id": 889, "name": { - "english": "Sirfetch'd" + "english": "Zamazenta" }, "type": [ "Fighting" ], - "color": "white" + "color": "red", + "includedInGens": [ + 8 + ] }, { - "id": 866, + "id": 889, "name": { - "english": "Mr.Rime" + "english": "Zamazenta" }, "type": [ - "Ice", - "Psychic" + "Fighting", + "Steel" ], - "color": "purple" + "color": "red", + "includedInGens": [ + 8 + ] }, { - "id": 867, + "id": 890, "name": { - "english": "Runerigus" + "english": "Eternatus" }, "type": [ - "Ground", - "Ghost" + "Poison", + "Dragon" ], - "color": "gray" + "color": "purple", + "includedInGens": [ + 8 + ], + "base": { + "HP": 140, + "Attack": 85, + "Defense": 95, + "Sp. Attack": 145, + "Sp. Defense": 95, + "Speed": 130 + } }, { - "id": 868, + "id": 890, "name": { - "english": "Milcery" + "english": "Eternatus" }, "type": [ - "Fairy" + "Poison", + "Dragon" ], - "color": "white" + "color": "purple", + "includedInGens": [ + 8 + ], + "base": { + "HP": 255, + "Attack": 115, + "Defense": 250, + "Sp. Attack": 125, + "Sp. Defense": 250, + "Speed": 130 + }, + "form": { + "key": "eternamax" + } }, { - "id": 869, + "id": 890, "name": { - "english": "Alcremie" + "english": "Eternatus" }, "type": [ - "Fairy" + "Poison", + "Dragon" ], - "color": "white" + "color": "purple", + "includedInGens": [ + 8 + ] }, { - "id": 870, + "id": 891, "name": { - "english": "Falinks" + "english": "Kubfu" }, "type": [ "Fighting" ], - "color": "yellow" + "color": "gray", + "base": { + "HP": 60, + "Attack": 90, + "Defense": 60, + "Sp. Attack": 53, + "Sp. Defense": 50, + "Speed": 72 + } }, { - "id": 871, + "id": 891, "name": { - "english": "Pincurchin" + "english": "Kubfu" }, "type": [ - "Electric" + "Fighting" ], - "color": "purple" + "color": "gray" }, { - "id": 872, + "id": 892, "name": { - "english": "Snom" + "english": "Urshifu" }, "type": [ - "Ice", - "Bug" + "Fighting", + "Dark" ], - "color": "white" + "color": "gray", + "base": { + "HP": 100, + "Attack": 130, + "Defense": 100, + "Sp. Attack": 63, + "Sp. Defense": 60, + "Speed": 97 + } }, { - "id": 873, + "id": 892, "name": { - "english": "Frosmoth" + "english": "Urshifu" }, "type": [ - "Ice", - "Bug" + "Fighting", + "Water" ], - "color": "white" + "color": "gray", + "base": { + "HP": 100, + "Attack": 130, + "Defense": 100, + "Sp. Attack": 63, + "Sp. Defense": 60, + "Speed": 97 + }, + "form": { + "key": "rapid-strike" + } }, { - "id": 874, + "id": 892, "name": { - "english": "Stonjourner" + "english": "Urshifu" }, "type": [ - "Rock" + "Fighting", + "Dark" ], - "color": "gray" + "color": "gray", + "base": { + "HP": 100, + "Attack": 130, + "Defense": 100, + "Sp. Attack": 63, + "Sp. Defense": 60, + "Speed": 97 + }, + "form": { + "key": "gmax" + } }, { - "id": 875, + "id": 892, "name": { - "english": "Eiscue" + "english": "Urshifu" }, "type": [ - "Ice" + "Fighting", + "Water" ], - "color": "blue" + "color": "gray", + "base": { + "HP": 100, + "Attack": 130, + "Defense": 100, + "Sp. Attack": 63, + "Sp. Defense": 60, + "Speed": 97 + }, + "form": { + "key": "rapid-strike-gmax" + } }, { - "id": 876, + "id": 892, "name": { - "english": "Indeedee" + "english": "Urshifu" }, "type": [ - "Psychic", - "Normal" + "Fighting", + "Dark" ], - "color": "purple" + "color": "gray" }, { - "id": 877, + "id": 893, "name": { - "english": "Morpeko" + "english": "Zarude" }, "type": [ - "Electric", - "Dark" + "Dark", + "Grass" ], - "color": "yellow" + "color": "green", + "base": { + "HP": 105, + "Attack": 120, + "Defense": 105, + "Sp. Attack": 70, + "Sp. Defense": 95, + "Speed": 105 + } }, { - "id": 878, + "id": 893, "name": { - "english": "Cufant" + "english": "Zarude" }, "type": [ - "Steel" + "Dark", + "Grass" ], - "color": "yellow" + "color": "green", + "base": { + "HP": 105, + "Attack": 120, + "Defense": 105, + "Sp. Attack": 70, + "Sp. Defense": 95, + "Speed": 105 + }, + "form": { + "key": "dada" + } }, { - "id": 879, + "id": 893, "name": { - "english": "Copperajah" + "english": "Zarude" }, "type": [ - "Steel" + "Dark", + "Grass" ], "color": "green" }, { - "id": 880, + "id": 894, "name": { - "english": "Dracozolt" + "english": "Regieleki" }, "type": [ - "Electric", - "Dragon" + "Electric" ], - "color": "green" + "color": "", + "base": { + "HP": 80, + "Attack": 100, + "Defense": 50, + "Sp. Attack": 100, + "Sp. Defense": 50, + "Speed": 200 + } }, { - "id": 881, + "id": 894, "name": { - "english": "Arctozolt" + "english": "Regieleki" }, "type": [ - "Electric", - "Ice" + "Electric" ], - "color": "blue" + "color": "" }, { - "id": 882, + "id": 895, "name": { - "english": "Dracovish" + "english": "Regidrago" }, "type": [ - "Water", "Dragon" ], - "color": "green" + "color": "", + "base": { + "HP": 200, + "Attack": 100, + "Defense": 50, + "Sp. Attack": 100, + "Sp. Defense": 50, + "Speed": 80 + } }, { - "id": 883, + "id": 895, "name": { - "english": "Arctovish" + "english": "Regidrago" }, "type": [ - "Water", - "Ice" + "Psychic" ], - "color": "blue" + "color": "" }, { - "id": 884, + "id": 896, "name": { - "english": "Duraludon" + "english": "Glastrier" }, "type": [ - "Steel", - "Dragon" + "Ice" ], - "color": "white" + "color": "", + "base": { + "HP": 100, + "Attack": 145, + "Defense": 130, + "Sp. Attack": 65, + "Sp. Defense": 110, + "Speed": 30 + } }, { - "id": 885, + "id": 896, "name": { - "english": "Dreepy" + "english": "Glastrier" }, "type": [ - "Dragon", - "Ghost" + "Ice" ], - "color": "green" + "color": "" }, { - "id": 886, + "id": 897, "name": { - "english": "Drakloak" + "english": "Spectrier" }, "type": [ - "Dragon", "Ghost" ], - "color": "green" + "color": "", + "base": { + "HP": 100, + "Attack": 65, + "Defense": 60, + "Sp. Attack": 145, + "Sp. Defense": 80, + "Speed": 130 + } }, { - "id": 887, + "id": 897, "name": { - "english": "Dragapult" + "english": "Spectrier" }, "type": [ - "Dragon", "Ghost" ], - "color": "green" + "color": "" }, { - "id": 888, + "id": 898, "name": { - "english": "Zacian" + "english": "Calyrex" }, "type": [ - "Fairy" + "Psychic", + "Grass" ], - "color": "blue" + "color": "", + "base": { + "HP": 100, + "Attack": 80, + "Defense": 80, + "Sp. Attack": 80, + "Sp. Defense": 80, + "Speed": 80 + } }, { - "id": 888, + "id": 898, "name": { - "english": "Zacian" + "english": "Calyrex" }, "type": [ - "Fairy", - "Steel" + "Psychic", + "Ice" ], - "color": "blue" + "color": "", + "base": { + "HP": 100, + "Attack": 165, + "Defense": 150, + "Sp. Attack": 85, + "Sp. Defense": 130, + "Speed": 50 + }, + "form": { + "key": "ice" + } }, { - "id": 889, + "id": 898, "name": { - "english": "Zamazenta" + "english": "Calyrex" }, "type": [ - "Fighting" + "Psychic", + "Ghost" ], - "color": "red" + "color": "", + "base": { + "HP": 100, + "Attack": 85, + "Defense": 80, + "Sp. Attack": 165, + "Sp. Defense": 100, + "Speed": 150 + }, + "form": { + "key": "shadow" + } }, { - "id": 889, + "id": 898, "name": { - "english": "Zamazenta" + "english": "Calyrex" }, "type": [ - "Fighting", - "Steel" + "Psychic", + "Grass" ], - "color": "red" + "color": "" }, { - "id": 890, + "id": 898, "name": { - "english": "Eternatus" + "english": "Calyrex" }, "type": [ - "Poison", - "Dragon" + "Psychic", + "Ice" ], - "color": "purple" + "form": { + "key": "ice-rider" + }, + "color": "" }, - { - "id": 891, + "id": 898, "name": { - "english": "Kubfu" + "english": "Calyrex" }, "type": [ - "Fighting" + "Psychic", + "Ghost" ], - "color": "gray" + "form": { + "key": "ghost-rider" + }, + "color": "" }, { - "id": 892, + "id": 899, "name": { - "english": "Urshifu" + "english": "Wyrdeer" }, "type": [ - "Fighting", - "Dark" + "Normal", + "Psychic" ], - "color": "gray" + "base": { + "HP": 103, + "Attack": 105, + "Defense": 72, + "Sp. Attack": 105, + "Sp. Defense": 75, + "Speed": 65 + } }, { - "id": 893, + "id": 900, "name": { - "english": "Zarude" + "english": "Kleavor" }, "type": [ - "Dark", - "Grass" + "Bug", + "Rock" ], - "color": "green" + "base": { + "HP": 70, + "Attack": 135, + "Defense": 95, + "Sp. Attack": 45, + "Sp. Defense": 70, + "Speed": 85 + } }, { - "id": 894, + "id": 901, "name": { - "english": "Regieleki" + "english": "Ursaluna" }, "type": [ - "Electric" + "Ground", + "Normal" ], - "color": "" + "base": { + "HP": 130, + "Attack": 140, + "Defense": 105, + "Sp. Attack": 45, + "Sp. Defense": 80, + "Speed": 50 + } }, { - "id": 895, + "id": 902, "name": { - "english": "Regidrago" + "english": "Basculegion" }, "type": [ - "Psychic" + "Water", + "Ghost" ], - "color": "" + "base": { + "HP": 120, + "Attack": 112, + "Defense": 65, + "Sp. Attack": 80, + "Sp. Defense": 75, + "Speed": 78 + } }, { - "id": 896, + "id": 902, "name": { - "english": "Glastrier" + "english": "Basculegion" }, "type": [ - "Ice" + "Water", + "Ghost" ], - "color": "" + "base": { + "HP": 120, + "Attack": 92, + "Defense": 65, + "Sp. Attack": 100, + "Sp. Defense": 75, + "Speed": 78 + }, + "form": { + "key": "f" + } }, { - "id": 897, + "id": 903, "name": { - "english": "Spectrier" + "english": "Sneasler" }, "type": [ - "Ghost" + "Fighting", + "Poison" ], - "color": "" + "base": { + "HP": 80, + "Attack": 130, + "Defense": 60, + "Sp. Attack": 40, + "Sp. Defense": 80, + "Speed": 120 + } }, { - "id": 898, + "id": 904, "name": { - "english": "Calyrex" + "english": "Overqwil" }, "type": [ - "Psychic", - "Grass" + "Dark", + "Poison" ], - "color": "" + "base": { + "HP": 85, + "Attack": 115, + "Defense": 95, + "Sp. Attack": 65, + "Sp. Defense": 65, + "Speed": 85 + } }, { - "id": 898, + "id": 905, "name": { - "english": "Calyrex" + "english": "Enamorus" }, "type": [ - "Psychic", - "Ice" + "Fairy", + "Flying" ], - "form": { - "key": "ice-rider" - }, - "color": "" + "base": { + "HP": 74, + "Attack": 115, + "Defense": 70, + "Sp. Attack": 135, + "Sp. Defense": 80, + "Speed": 106 + } }, { - "id": 898, + "id": 905, "name": { - "english": "Calyrex" + "english": "Enamorus" }, "type": [ - "Psychic", - "Ghost" + "Fairy", + "Flying" ], - "form": { - "key": "ghost-rider" + "base": { + "HP": 74, + "Attack": 115, + "Defense": 110, + "Sp. Attack": 135, + "Sp. Defense": 100, + "Speed": 46 }, - "color": "" + "form": { + "key": "therian" + } } -] +] \ No newline at end of file diff --git a/assets/data/route_orders.js b/assets/data/route_orders.js old mode 100755 new mode 100644 diff --git a/assets/data/types.json b/assets/data/types.json old mode 100755 new mode 100644 diff --git a/assets/fonts/.gitignore b/assets/fonts/.gitignore old mode 100755 new mode 100644 diff --git a/assets/index.html b/assets/index.html new file mode 100644 index 0000000..e69de29 diff --git a/assets/js/client.js b/assets/js/client.js index 77267eb..10c45ba 100755 --- a/assets/js/client.js +++ b/assets/js/client.js @@ -1,394 +1,396 @@ - -window.settings = {}; -settings = deepmerge(settings, defaultSettings); -settings = deepmerge(settings, themeSettings); -settings = deepmerge(settings, clientSettings); +window.settings = {} +settings = deepmerge(settings, defaultSettings) +settings = deepmerge(settings, themeSettings) +settings = deepmerge(settings, clientSettings) if (window.settings.debug) { - console.log(settings); + console.log(settings) } if (typeof pokedex !== 'undefined') { - pokedex = collect(pokedex); + pokedex = collect(pokedex) } if (typeof movedex !== 'undefined') { - movedex = collect(movedex); + movedex = collect(movedex) } if (typeof itemdex !== 'undefined') { - itemdex = collect(itemdex); + itemdex = collect(itemdex) } let loadCustomSprites = (socket, payload, cb) => { - // return fetch('./../../assets/sprites/spritesets.json') - return fetch('https://assets.pokelink.xyz/assets/sprites/spritesets.json', { cors: 'no-cors'}) - .then(response => response.json()) - .then(data => { - window.settings.spritesets = data.spritesets - if (params.has('spriteset')) { - let customSpriteSet = data.spritesets.pokemon - .find(set => set.name.toLowerCase() === params.get('spriteset').toLowerCase()) - - if (customSpriteSet) { - window.settings = deepmerge(window.settings, customSpriteSet.settings) - client.handleRemotePlayerSettings(null, { - ...payload, - updatedSettings: { - settings: { - ...customSpriteSet - } + // return fetch('./../../assets/sprites/spritesets.json') + return fetch('https://assets.pokelink.xyz/assets/sprites/spritesets.json', {cors: 'no-cors'}) + .then(response => response.json()) + .then(data => { + window.settings.spritesets = data.spritesets + if (params.has('spriteset')) { + let customSpriteSet = data.spritesets.pokemon + .find(set => set.name.toLowerCase() === params.get('spriteset').toLowerCase()) + + if (customSpriteSet) { + window.settings = deepmerge(window.settings, customSpriteSet.settings) + client.handleRemotePlayerSettings(null, { + ...payload, updatedSettings: { + settings: { + ...customSpriteSet + } + } + }, cb) + } } - }, cb) - } - } - }) + }) } let template = { - "pokemon": { - "is_active_in_battle": false, - "isEgg": 0, - "exp": 5181, - "hp": { - "max": 72, - "current": 72 - }, - "nature": "Relaxed", - "move2": { - "name": "Ice Ball", - "pp": 20 - }, - "isGenderless": true, - "speciesName": "Walrein", - "species": 578, - "status": { - "psn": 0, - "slp": 0, - "par": 0, - "fzn": 0, - "brn": 0 - }, - "nickname": null, - "levelMet": 6, - "isShiny": false, - "pid": Math.random()*10000, - "ability": "--", - "level": 19, - "hiddenpower": "Psychic", - "move1": { - "name": "Powder Snow", - "pp": 25 - }, - "pokerus": 0, - "evs": { - "atk": 35, - "def": 6, - "spatk": 7, - "spd": 24, - "spdef": 14, - "hp": 11 - }, - "isFemale": false, - "move4": { - "name": "Body Slam", - "pp": 15 - }, - "heldItem": 200, - "ivs": { - "atk": 6, - "def": 29, - "spatk": 27, - "spd": 14, - "spdef": 27, - "hp": 7 - }, - "locationMet": 60, - "move3": { - "name": "Water Gun", - "pp": 25 - } - }, - "slotId": 1, - "changeId": 0 + 'pokemon': { + 'is_active_in_battle': false, + 'isEgg': 0, + 'exp': 5181, + 'hp': { + 'max': 72, 'current': 72 + }, + 'nature': 'Relaxed', + 'move2': { + 'name': 'Ice Ball', 'pp': 20 + }, + 'isGenderless': true, + 'speciesName': 'Walrein', + 'species': 578, + 'status': { + 'psn': 0, 'slp': 0, 'par': 0, 'fzn': 0, 'brn': 0 + }, + 'nickname': null, + 'levelMet': 6, + 'isShiny': false, + 'pid': Math.random() * 10000, + 'ability': '--', + 'level': 19, + 'hiddenpower': 'Psychic', + 'move1': { + 'name': 'Powder Snow', 'pp': 25 + }, + 'pokerus': 0, + 'evs': { + 'atk': 35, 'def': 6, 'spatk': 7, 'spd': 24, 'spdef': 14, 'hp': 11 + }, + 'isFemale': false, + 'move4': { + 'name': 'Body Slam', 'pp': 15 + }, + 'heldItem': 200, + 'ivs': { + 'atk': 6, 'def': 29, 'spatk': 27, 'spd': 14, 'spdef': 27, 'hp': 7 + }, + 'locationMet': 60, + 'move3': { + 'name': 'Water Gun', 'pp': 25 + } + }, 'slotId': 1, 'changeId': 0 } const createParty = () => { - const page = params.get('page') || 1 - const start = (page - 1) * 15 - return pokedex.slice(start, 15).items.map((pokemon, idx) => { - let tempPokemon = {...template.pokemon, species: pokemon.id, speciesName: pokemon.name.english} - if (pokemon.id == 0) { - tempPokemon = { - ...tempPokemon, - species: 1, - isEgg: true - } - } - return {slotId: idx, changeId: 1, pokemon: tempPokemon} - }) + const page = params.get('page') || 1 + const start = (page - 1) * 15 + return pokedex.slice(start, 15).items.map((pokemon, idx) => { + let tempPokemon = {...template.pokemon, species: pokemon.id, speciesName: pokemon.name.english} + if (pokemon.id == 0) { + tempPokemon = { + ...tempPokemon, species: 1, isEgg: true + } + } + return {slotId: idx, changeId: 1, pokemon: tempPokemon} + }) } const normalizeAndParseHost = (serverHost) => { - try { - let URLParts = new URL(serverHost) - URLParts.protocol = 'http:' - - return URLParts.href - } catch (e) { - return `http://${serverHost}/` - } + try { + let URLParts = new URL(serverHost) + if (params.get('neo')?.toLowerCase() === 'true') { + URLParts.protocol = 'ws:' + } else { + URLParts.protocol = 'http:' + } + + return URLParts.href + } catch (e) { + if (params.get('neo')?.toLowerCase() === 'true') { + `ws://${serverHost}/` + } + return `http://${serverHost}/` + } } -const loadExternalSocketIO = (baseUrl, callback) => { - const existingScript = document.getElementById('socketIOClient'); +const loadProtobuf = (callback) => { + const existingScript = document.getElementById('protobuf') + + if (existingScript) { + callback() + return + } - if (!existingScript) { - const script = document.createElement('script'); - script.src = `${baseUrl}socket.io/socket.io.js`; // URL for the third-party library being loaded. - script.id = 'socketIOClient'; // e.g., googleMaps or stripe - document.body.appendChild(script); + const script = document.createElement('script') + script.src = '../../assets/libs/protobuf.min.js' + script.id = 'protobuf' + document.body.appendChild(script) script.onload = () => { - if (callback) callback(); - }; - } - - if (existingScript && callback) callback(); + callback() + } } -var events = []; -var rootSocket = null; - -var client = { - connection: null, - players: [], - connected: false, - username: null, - currentUser: settings.currentUser, - events: new EventEmitter(), - - setup (serverPort, username, host, cb) { - if (host === 'localhost') host = 'http://localhost' - host = host || 'http://127.0.0.1'; - this.username = username; - let address = normalizeAndParseHost(host + ':' + serverPort); - - loadExternalSocketIO(address, () => { - try { - rootSocket = this.connection = io(address, { - transports: ['websocket'], - extraHeaders: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Request-Private-Network': true - } - }) - } catch (e) { - rootSocket = this.connection = io(address, { - transports: ['websocket'], - extraHeaders: { - 'Access-Control-Allow-Origin': '*' - } - }) - } +const loadExternalSocketIO = (baseUrl, neo, callback) => { + if (neo) { + loadProtobuf(callback) + return + } + const existingScript = document.getElementById('socketIOClient') - rootSocket.on('connect', socket => { - this.log('Client Connected'); - this.connected = true; + if (!existingScript) { + const script = document.createElement('script') + script.src = `${baseUrl}socket.io/socket.io.js` // URL for the third-party library being loaded. + script.id = 'socketIOClient' // e.g., googleMaps or stripe + document.body.appendChild(script) - if (params.has('test')) { - let event = { - event: 'client:party:updated', - payload: { - username: settings.currentUser, - update: { - party: createParty() - } - } - }; - events.push(event) - this.handleRemotePlayerParty(socket, event.payload, cb) + script.onload = () => { + if (callback) callback() } + } - if (params.has('spriteset')) { - loadCustomSprites(null, { - username: this.currentUser - }, cb) + if (existingScript && callback) callback() +} + +var events = [] +var rootSocket = null + +var client = { + connection: null, + players: [], + connected: false, + username: null, + currentUser: settings.currentUser, + events: new EventEmitter(), + neo: false, + + setup(serverPort, username, host, cb) { + let neo = params.get('neo') + if (neo) { + this.neo = neo.toLowerCase() === 'true' } + if (host === 'localhost') host = 'http://localhost' + host = host || 'http://127.0.0.1' + this.username = username + let address = normalizeAndParseHost(host + ':' + serverPort) + + loadExternalSocketIO(address, this.neo, () => { + if (neo) { + rootSocket = this.connection = new NeoClient(address) + } else { + try { + rootSocket = this.connection = io(address, { + transports: ['websocket'], extraHeaders: { + 'Access-Control-Allow-Origin': '*', 'Access-Control-Request-Private-Network': true + } + }) + } catch (e) { + rootSocket = this.connection = io(address, { + transports: ['websocket'], extraHeaders: { + 'Access-Control-Allow-Origin': '*' + } + }) + } + } + - if (params.has('test')) return - - rootSocket - .on('client:party:updated', (data) => { - let event = { - event: 'client:party:updated', - payload: data - }; - events.push(event) - this.handleRemotePlayerParty(socket, data, cb) - }) - .on('client:badges:updated', (data) => { - let event = { - event: 'client:badges:updated', - payload: data - }; - events.push(event) - this.handleRemotePlayerTrainer(socket, data, cb) - }) - .on('client:players:list', (players) => { - let event = { - event: 'client:players:list', - payload: players - }; - events.push(event) - console.log(event) - this.addPlayersInBulk(socket, players, cb) - }) - .on('player:trainer:updated', (data) => { - let event = { - event: 'player:trainer:updated', - payload: data - }; - events.push(event) - console.log(event) - this.handleRemotePlayerTrainer(socket, data, cb) - }) - .on('player:settings:updated', (data) => { - let event = { - event: 'player:settings:updated', - payload: data - }; - events.push(event) - console.log(event) - this.handleRemotePlayerSettings(socket, data, cb) - }) - .on('player:party:death', (data) => { - let event = { - event: 'player:party:death', - payload: data - }; - events.push(event) - console.log(event) - this.events.emit('player:party:death', event) - }) - .on('player:party:revive', (data) => { - let event = { - event: 'player:party:revive', - payload: data - }; - events.push(event) - console.log(event) - this.events.emit('player:party:revive', event) - }) + rootSocket.on('connect', socket => { + this.log('Client Connected') + this.connected = true + + if (params.has('test')) { + let event = { + event: 'client:party:updated', payload: { + username: settings.currentUser, update: { + party: createParty() + } + } + } + events.push(event) + this.handleRemotePlayerParty(socket, event.payload, cb) + } + + if (params.has('spriteset')) { + loadCustomSprites(null, { + username: this.currentUser + }, cb) + } + + if (params.has('test')) return + + rootSocket + .on('client:party:updated', (data) => { + let event = { + event: 'client:party:updated', payload: data + } + events.push(event) + console.log(event) + this.handleRemotePlayerParty(socket, data, cb) + }) + .on('client:badges:updated', (data) => { + let event = { + event: 'client:badges:updated', payload: data + } + events.push(event) + console.log(event) + this.handleRemotePlayerTrainer(socket, data, cb) + }) + .on('client:players:list', (players) => { + let event = { + event: 'client:players:list', payload: players + } + events.push(event) + console.log(event) + this.addPlayersInBulk(socket, players, cb) + }) + .on('player:trainer:updated', (data) => { + let event = { + event: 'player:trainer:updated', payload: data + } + events.push(event) + console.log(event) + this.handleRemotePlayerTrainer(socket, data, cb) + }) + .on('player:settings:updated', (data) => { + let event = { + event: 'player:settings:updated', payload: data + } + events.push(event) + console.log(event) + this.handleRemotePlayerSettings(socket, data, cb) + }) + .on('player:party:death', (data) => { + let event = { + event: 'player:party:death', payload: data + } + events.push(event) + console.log(event) + this.events.emit('player:party:death', event) + }) + .on('player:party:revive', (data) => { + let event = { + event: 'player:party:revive', payload: data + } + events.push(event) + console.log(event) + this.events.emit('player:party:revive', event) + }) + }) + // this.connection = io.connect(address, { + // // secure: true, + // reconnection: true, + // rejectUnauthorized: false + // }); }) - // this.connection = io.connect(address, { - // // secure: true, - // reconnection: true, - // rejectUnauthorized: false - // }); - }) - return this; - }, + return this + }, - on (eventName, callback) { - this.events.on(eventName, callback); + on(eventName, callback) { + this.events.on(eventName, callback) - return this; - }, + return this + }, - join () { - }, + join() { + }, - handleRemotePlayerTrainer (socket, payload, cb) { - if (window.settings.debug) { - console.log('Player Trainer Updated'); - console.log(payload); - } - this.events.emit('player:trainer:updated', payload); - }, + handleRemotePlayerTrainer(socket, payload, cb) { + if (window.settings.debug) { + console.log('Player Trainer Updated') + console.log(payload) + } + this.events.emit('player:trainer:updated', payload) + }, - handleRemotePlayerParty (socket, payload, cb) { - if (window.settings.debug) { - console.log('Party Updated'); - } - let newPlayerParty = []; + handleRemotePlayerParty(socket, payload, cb) { + if (window.settings.debug) { + console.log('Party Updated') + } + let newPlayerParty = [] - if (this.players.hasOwnProperty(payload.username) === false) { - this.players[payload.username] = payload.update.party; - } + if (this.players.hasOwnProperty(payload.username) === false) { + this.players[payload.username] = payload.update.party + } - payload.update.party.forEach(mon => { - newPlayerParty[mon.slotId - 1] = mon; - }); + payload.update.party.forEach(mon => { + newPlayerParty[mon.slotId - 1] = mon + }) - newPlayerParty = {...this.players[payload.username], ...newPlayerParty}; - this.players = {...this.players, [payload.username]: newPlayerParty}; + newPlayerParty = {...this.players[payload.username], ...newPlayerParty} + this.players = {...this.players, [payload.username]: newPlayerParty} - this.log('Client Rcv: Player %s updated their party', payload.username); - cb(payload.username, Object.values(this.players[payload.username])); - this.events.emit('client:party:updated', this.players[payload.username]); - }, + this.log('Client Rcv: Player %s updated their party', payload.username) + cb(payload.username, Object.values(this.players[payload.username])) + this.events.emit('client:party:updated', this.players[payload.username]) + }, - handleRemotePlayerSettings (socket, payload, cb) { - if (settings.currentUser !== payload.username) return + handleRemotePlayerSettings(socket, payload, cb) { + if (settings.currentUser !== payload.username) return - window.settings = deepmerge( - window.settings, - payload.updatedSettings.settings - ) + window.settings = deepmerge(window.settings, payload.updatedSettings?.settings ?? payload.update.settings) - const transformedParty = Object.values(this.players[payload.username]) - .map(poke => { - if (poke !== null && poke.pokemon !== null) delete poke['pokemon']['transformed'] + if (this.players[payload.username] !== undefined) { + const transformedParty = Object.values(this.players[payload.username]) + .map(poke => { + if (poke !== null && poke.pokemon !== null && poke.pokemon !== undefined) delete poke['pokemon']['transformed'] + + return poke + }) - return poke - }) + console.info(transformedParty) + cb(payload.username, transformedParty) + this.events.emit('client:party:updated', transformedParty) + } - console.info(transformedParty) - console.info(`Settings updated`) - cb(payload.username, transformedParty); - this.events.emit('client:party:updated', transformedParty); - this.events.emit('settings:updated', window.settings) - }, + console.info(`Settings updated`) + this.events.emit('settings:updated', window.settings) + }, - addPlayersInBulk (socket, players, cb) { - if (window.settings.debug) { - console.log('Initial Bulk Load'); - console.log(players); - } - players.forEach((player) => { - let tempPlayer = { - id: player.id, - username: player.username, - update: { - party: player.party - } - } - - if (player.username === settings.currentUser) { - settings.game = { - id: player.trainer.game.id, - name: player.trainer.game.friendlyName, - generation: player.trainer.game.generation, - }; + addPlayersInBulk(socket, players, cb) { if (window.settings.debug) { - console.log(['setting game to gen: '+ settings.game.generation +' - '+settings.game.name]); + console.log('Initial Bulk Load') + console.log(players) } - this.events.emit('player:trainer:updated', player); - this.events.emit('client:party:updated', player.party); - } - - this.handleRemotePlayerParty(socket, tempPlayer, (username, newPlayerList) => { - cb(username, newPlayerList); - }); - }); - this.events.emit('client:players:list', players); - }, - - log (title, msg, ...params) { - params = params || []; - console.log.apply(this, [title, msg].concat(params)); - } + players.forEach((player) => { + let tempPlayer = { + id: player.id, username: player.username, update: { + party: player.party + } + } + + if (player.username === settings.currentUser) { + settings.game = { + id: player.trainer.game.id, + name: player.trainer.game.friendlyName, + generation: player.trainer.game.generation + } + if (window.settings.debug) { + console.log(['setting game to gen: ' + settings.game.generation + ' - ' + settings.game.name]) + } + this.events.emit('player:trainer:updated', player) + this.events.emit('client:party:updated', player.party) + } + + this.handleRemotePlayerParty(socket, tempPlayer, (username, newPlayerList) => { + cb(username, newPlayerList) + }) + }) + this.events.emit('client:players:list', players) + }, + + log(title, msg, ...params) { + params = params || [] + console.log.apply(this, [title, msg].concat(params)) + } } diff --git a/assets/js/defaultSettings.js b/assets/js/defaultSettings.js index 7579015..cbc969a 100755 --- a/assets/js/defaultSettings.js +++ b/assets/js/defaultSettings.js @@ -1,5 +1,5 @@ var defaultSettings = { - debug: true, + debug: false, game: { // only 3 4 and 5 supported atm generation: null, @@ -19,7 +19,7 @@ var defaultSettings = { // if your sprite set doesnt have shiny variants, set this to true ignoreShinies: false, // if this is true, pokelink will just show the base form pokemon - ignoreForms: true, + ignoreForms: false, // if true, the browser sources will identify what pokemon is in the egg determineEggs: false, // static or animated @@ -494,7 +494,29 @@ var defaultSettings = { 'melmetal', 'toxtricity', 'garbodor' - ] + ], + + "hisuian": [ + "arcanine", + "avalugg", + "braviary", + "decidueye", + "electrode", + "goodra", + "growlithe", + "lilligant", + "qwilfish", + "samurott", + "sliggoo", + "typhlosion", + "voltorb", + "zoroark", + "zorua", + ], + + 'palkia': { 'origin': 'palkia-origin' }, + 'dialga': { 'origin': 'dialga-origin' }, + 'giratina': { 'origin': 'giratina-origin' }, }, natures: { diff --git a/assets/js/events.js b/assets/js/events.js index 384b051..43b4509 100644 --- a/assets/js/events.js +++ b/assets/js/events.js @@ -1,70 +1,184 @@ /* Polyfill indexOf. */ -var indexOf; +var indexOf if (typeof Array.prototype.indexOf === 'function') { indexOf = function (haystack, needle) { - return haystack.indexOf(needle); - }; + return haystack.indexOf(needle) + } } else { indexOf = function (haystack, needle) { - var i = 0, length = haystack.length, idx = -1, found = false; + var i = 0, length = haystack.length, idx = -1, found = false while (i < length && !found) { if (haystack[i] === needle) { - idx = i; - found = true; + idx = i + found = true } - i++; + i++ } - return idx; - }; -}; + return idx + } +} /* Polyfill EventEmitter. */ var EventEmitter = function () { - this.events = {}; -}; + this.events = {} +} EventEmitter.prototype.on = function (event, listener) { if (typeof this.events[event] !== 'object') { - this.events[event] = []; + this.events[event] = [] } - this.events[event].push(listener); + this.events[event].push(listener) return this.events -}; +} EventEmitter.prototype.removeListener = function (event, listener) { - var idx; + var idx if (typeof this.events[event] === 'object') { - idx = indexOf(this.events[event], listener); + idx = indexOf(this.events[event], listener) if (idx > -1) { - this.events[event].splice(idx, 1); + this.events[event].splice(idx, 1) } } -}; +} EventEmitter.prototype.emit = function (event) { - var i, listeners, length, args = [].slice.call(arguments, 1); + var i, listeners, length, args = [].slice.call(arguments, 1) if (typeof this.events[event] === 'object') { - listeners = this.events[event].slice(); - length = listeners.length; + listeners = this.events[event].slice() + length = listeners.length for (i = 0; i < length; i++) { - listeners[i].apply(this, args); + listeners[i].apply(this, args) } } -}; +} EventEmitter.prototype.once = function (event, listener) { - this.on(event, function g () { - this.removeListener(event, g); - listener.apply(this, arguments); - }); -}; \ No newline at end of file + this.on(event, function g() { + this.removeListener(event, g) + listener.apply(this, arguments) + }) +} + +/* Polyfill NeoClient. */ +const NeoClient = function (address) { + let events = new EventEmitter() + let firstTimeConnect = true + let connection + let protobufTypes = {} + protobufTypes['v1'] = {} + + function loadV1Protos() { + protobuf.load('../../assets/proto/V1.proto', function (err, root) { + if (err) { + throw err + } + + protobufTypes['v1']['client:party:updated'] = root.lookupType('Pokelink.Core.Proto.V1.PartyMessage') + protobufTypes['v1']['player:settings:updated'] = root.lookupType('Pokelink.Core.Proto.V1.SettingsMessage') + protobufTypes['v1']['client:badges:updated'] = root.lookupType('Pokelink.Core.Proto.V1.BadgesMessage') + protobufTypes['v1']['player:party:death'] = root.lookupType('Pokelink.Core.Proto.V1.DeathMessage') + protobufTypes['v1']['player:party:revive'] = root.lookupType('Pokelink.Core.Proto.V1.ReviveMessage') + protobufTypes['v1']['base'] = root.lookupType('Pokelink.Core.Proto.V1.Base') + openConnection() + }) + } + + function openConnection() { + try { + connection = new WebSocket(address) + } catch { + setTimeout(openConnection, 2000) + return + } + connection.binaryType = 'arraybuffer' + + connection.onopen = function (ev) { + if (firstTimeConnect) { + events.emit('connect', ev.target) + firstTimeConnect = false; + } + connection.onmessage = event => { + let buffer = new Uint8Array(event.data) + let data = null + let user = null + let channel = null + try { + const base = protobufTypes['v1']['base'].decode(buffer) + channel = base.channel + if (!protobufTypes['v1'].hasOwnProperty(channel)) { + console.error(`Unknown channel ${channel}`) + return + } + let decoded = protobufTypes['v1'][channel].decode(buffer) + data = protobufTypes['v1'][channel].toObject(decoded) + delete data.channel + user = data.username + delete data.username + + } catch (ex) { + console.error(ex) + } + + if (channel === 'client:badges:updated') { + events.emit(channel, {username: user, trainer: data.trainer}) + } else if (channel === 'player:party:death' || channel === 'player:party:revive') { + events.emit(channel, {username: user, update: {username: user, ...data}}) + } else { + if (channel === 'client:party:updated') { + for (let member of data.party) { + if (member.pokemon === undefined || member.pokemon === null) { + continue; + } + if (member.pokemon.hp.current === undefined) { + member.pokemon.hp.current = 0 + } + } + } + events.emit(channel, {username: user, update: data}) + } + } + + connection.send(JSON.stringify({ + handshake: { + version: 1, client: 'WebSource', dataType: 'Protobuf', gzip: false + } + })) + } + connection.onclose = () => { + setTimeout(openConnection, 250) + } + this.connection = connection + } + + loadV1Protos() + + this.events = events +} + +NeoClient.prototype.on = function (event, listener) { + this.events.on(event, listener) + return this +} + +NeoClient.prototype.removeListener = function (event, listener) { + this.events.removeListener(event, listener) +} + +NeoClient.prototype.emit = function (event) { + this.events.emit(event, arguments) +} + +NeoClient.prototype.once = function (event, listener) { + this.events.once(event, listener) + return this +} diff --git a/assets/js/helpers.js b/assets/js/helpers.js index 41805ab..dc64f27 100755 --- a/assets/js/helpers.js +++ b/assets/js/helpers.js @@ -3,7 +3,7 @@ function transformPokemon(pokemon) { if (pokemon.hasOwnProperty('transformed') || typeof pokemon.transformed != 'undefined') { return pokemon; } - if (window.settings.hasOwnProperty('debug')) { + if (window.settings.debug) { console.info(pokemon); } // try and get pokedex info @@ -45,7 +45,7 @@ function transformPokemon(pokemon) { // handle forms if (settings.pokeImg.ignoreForms === false) { - if (pokemon.alternateForm !== '' && typeof pokemon.alternateForm !== 'undefined') { + if (pokemon.hasOwnProperty('alternateForm') && pokemon.alternateForm && pokemon.alternateForm.length > 0) { try { switch (pokemon.alternateForm) { case 'gmax': @@ -56,11 +56,16 @@ function transformPokemon(pokemon) { break case 'normal': + case 'none': break default: - filename = settings.pokemonForms[pokemon.speciesName.toLowerCase()][pokemon.alternateForm]; + let normalizedForm = pokemon.alternateForm + .toLowerCase() + .replace(/[é]/g, 'e') + .replace(/[^a-zA-Z0-9]/g, '') + filename = settings.pokemonForms[pokemon.speciesName.toLowerCase()][normalizedForm]; } } catch (e) { filename = backupFilename @@ -193,7 +198,7 @@ function transformPokemon(pokemon) { } function unCamelCase (str){ - if (typeof str === 'undefined' || str.len === 0) { + if (typeof str === 'undefined' || str.length === 0) { return null; } @@ -248,13 +253,13 @@ function string2Hex(str) { function getTypeColor(type) { if (typeof type !== 'string') { return 'white'; } - if (type.len == 0) { return 'white'; } + if (type.length == 0) { return 'white'; } return settings.typeColors[type.toLowerCase()]; } function getStatusColor(status) { if (typeof status !== 'string') { return 'white'; } - if (status.len == 0) { return 'white'; } + if (status.length == 0) { return 'white'; } return settings.statusColors[status.toLowerCase()]; } diff --git a/assets/js/socket.io.js b/assets/js/socket.io.js new file mode 100644 index 0000000..2dee50a --- /dev/null +++ b/assets/js/socket.io.js @@ -0,0 +1,6042 @@ +/*! + * Socket.IO v4.0.0 + * (c) 2014-2021 Guillermo Rauch + * Released under the MIT License. + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["io"] = factory(); + else + root["io"] = factory(); +})(self, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./build/index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./build/index.js": +/*!************************!*\ + !*** ./build/index.js ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Socket = exports.io = exports.Manager = exports.protocol = void 0; + +var url_1 = __webpack_require__(/*! ./url */ "./build/url.js"); + +var manager_1 = __webpack_require__(/*! ./manager */ "./build/manager.js"); + +var socket_1 = __webpack_require__(/*! ./socket */ "./build/socket.js"); + +Object.defineProperty(exports, "Socket", { + enumerable: true, + get: function get() { + return socket_1.Socket; + } +}); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client"); +/** + * Module exports. + */ + + +module.exports = exports = lookup; +/** + * Managers cache. + */ + +var cache = exports.managers = {}; + +function lookup(uri, opts) { + if (_typeof(uri) === "object") { + opts = uri; + uri = undefined; + } + + opts = opts || {}; + var parsed = url_1.url(uri, opts.path); + var source = parsed.source; + var id = parsed.id; + var path = parsed.path; + var sameNamespace = cache[id] && path in cache[id]["nsps"]; + var newConnection = opts.forceNew || opts["force new connection"] || false === opts.multiplex || sameNamespace; + var io; + + if (newConnection) { + debug("ignoring socket cache for %s", source); + io = new manager_1.Manager(source, opts); + } else { + if (!cache[id]) { + debug("new io instance for %s", source); + cache[id] = new manager_1.Manager(source, opts); + } + + io = cache[id]; + } + + if (parsed.query && !opts.query) { + opts.query = parsed.queryKey; + } + + return io.socket(parsed.path, opts); +} + +exports.io = lookup; +/** + * Protocol version. + * + * @public + */ + +var socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js"); + +Object.defineProperty(exports, "protocol", { + enumerable: true, + get: function get() { + return socket_io_parser_1.protocol; + } +}); +/** + * `connect`. + * + * @param {String} uri + * @public + */ + +exports.connect = lookup; +/** + * Expose constructors for standalone build. + * + * @public + */ + +var manager_2 = __webpack_require__(/*! ./manager */ "./build/manager.js"); + +Object.defineProperty(exports, "Manager", { + enumerable: true, + get: function get() { + return manager_2.Manager; + } +}); + +/***/ }), + +/***/ "./build/manager.js": +/*!**************************!*\ + !*** ./build/manager.js ***! + \**************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Manager = void 0; + +var eio = __webpack_require__(/*! engine.io-client */ "./node_modules/engine.io-client/lib/index.js"); + +var socket_1 = __webpack_require__(/*! ./socket */ "./build/socket.js"); + +var parser = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js"); + +var on_1 = __webpack_require__(/*! ./on */ "./build/on.js"); + +var Backoff = __webpack_require__(/*! backo2 */ "./node_modules/backo2/index.js"); + +var typed_events_1 = __webpack_require__(/*! ./typed-events */ "./build/typed-events.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:manager"); + +var Manager = /*#__PURE__*/function (_typed_events_1$Stric) { + _inherits(Manager, _typed_events_1$Stric); + + var _super = _createSuper(Manager); + + function Manager(uri, opts) { + var _this; + + _classCallCheck(this, Manager); + + _this = _super.call(this); + _this.nsps = {}; + _this.subs = []; + + if (uri && "object" === _typeof(uri)) { + opts = uri; + uri = undefined; + } + + opts = opts || {}; + opts.path = opts.path || "/socket.io"; + _this.opts = opts; + + _this.reconnection(opts.reconnection !== false); + + _this.reconnectionAttempts(opts.reconnectionAttempts || Infinity); + + _this.reconnectionDelay(opts.reconnectionDelay || 1000); + + _this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000); + + _this.randomizationFactor(opts.randomizationFactor || 0.5); + + _this.backoff = new Backoff({ + min: _this.reconnectionDelay(), + max: _this.reconnectionDelayMax(), + jitter: _this.randomizationFactor() + }); + + _this.timeout(null == opts.timeout ? 20000 : opts.timeout); + + _this._readyState = "closed"; + _this.uri = uri; + + var _parser = opts.parser || parser; + + _this.encoder = new _parser.Encoder(); + _this.decoder = new _parser.Decoder(); + _this._autoConnect = opts.autoConnect !== false; + if (_this._autoConnect) _this.open(); + return _this; + } + + _createClass(Manager, [{ + key: "reconnection", + value: function reconnection(v) { + if (!arguments.length) return this._reconnection; + this._reconnection = !!v; + return this; + } + }, { + key: "reconnectionAttempts", + value: function reconnectionAttempts(v) { + if (v === undefined) return this._reconnectionAttempts; + this._reconnectionAttempts = v; + return this; + } + }, { + key: "reconnectionDelay", + value: function reconnectionDelay(v) { + var _a; + + if (v === undefined) return this._reconnectionDelay; + this._reconnectionDelay = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v); + return this; + } + }, { + key: "randomizationFactor", + value: function randomizationFactor(v) { + var _a; + + if (v === undefined) return this._randomizationFactor; + this._randomizationFactor = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v); + return this; + } + }, { + key: "reconnectionDelayMax", + value: function reconnectionDelayMax(v) { + var _a; + + if (v === undefined) return this._reconnectionDelayMax; + this._reconnectionDelayMax = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v); + return this; + } + }, { + key: "timeout", + value: function timeout(v) { + if (!arguments.length) return this._timeout; + this._timeout = v; + return this; + } + /** + * Starts trying to reconnect if reconnection is enabled and we have not + * started reconnecting yet + * + * @private + */ + + }, { + key: "maybeReconnectOnOpen", + value: function maybeReconnectOnOpen() { + // Only try to reconnect if it's the first time we're connecting + if (!this._reconnecting && this._reconnection && this.backoff.attempts === 0) { + // keeps reconnection from firing twice for the same reconnection loop + this.reconnect(); + } + } + /** + * Sets the current transport `socket`. + * + * @param {Function} fn - optional, callback + * @return self + * @public + */ + + }, { + key: "open", + value: function open(fn) { + var _this2 = this; + + debug("readyState %s", this._readyState); + if (~this._readyState.indexOf("open")) return this; + debug("opening %s", this.uri); + this.engine = eio(this.uri, this.opts); + var socket = this.engine; + var self = this; + this._readyState = "opening"; + this.skipReconnect = false; // emit `open` + + var openSubDestroy = on_1.on(socket, "open", function () { + self.onopen(); + fn && fn(); + }); // emit `error` + + var errorSub = on_1.on(socket, "error", function (err) { + debug("error"); + self.cleanup(); + self._readyState = "closed"; + + _this2.emitReserved("error", err); + + if (fn) { + fn(err); + } else { + // Only do this if there is no fn to handle the error + self.maybeReconnectOnOpen(); + } + }); + + if (false !== this._timeout) { + var timeout = this._timeout; + debug("connect attempt will timeout after %d", timeout); + + if (timeout === 0) { + openSubDestroy(); // prevents a race condition with the 'open' event + } // set timer + + + var timer = setTimeout(function () { + debug("connect attempt timed out after %d", timeout); + openSubDestroy(); + socket.close(); + socket.emit("error", new Error("timeout")); + }, timeout); + + if (this.opts.autoUnref) { + timer.unref(); + } + + this.subs.push(function subDestroy() { + clearTimeout(timer); + }); + } + + this.subs.push(openSubDestroy); + this.subs.push(errorSub); + return this; + } + /** + * Alias for open() + * + * @return self + * @public + */ + + }, { + key: "connect", + value: function connect(fn) { + return this.open(fn); + } + /** + * Called upon transport open. + * + * @private + */ + + }, { + key: "onopen", + value: function onopen() { + debug("open"); // clear old subs + + this.cleanup(); // mark as open + + this._readyState = "open"; + this.emitReserved("open"); // add new subs + + var socket = this.engine; + this.subs.push(on_1.on(socket, "ping", this.onping.bind(this)), on_1.on(socket, "data", this.ondata.bind(this)), on_1.on(socket, "error", this.onerror.bind(this)), on_1.on(socket, "close", this.onclose.bind(this)), on_1.on(this.decoder, "decoded", this.ondecoded.bind(this))); + } + /** + * Called upon a ping. + * + * @private + */ + + }, { + key: "onping", + value: function onping() { + this.emitReserved("ping"); + } + /** + * Called with data. + * + * @private + */ + + }, { + key: "ondata", + value: function ondata(data) { + this.decoder.add(data); + } + /** + * Called when parser fully decodes a packet. + * + * @private + */ + + }, { + key: "ondecoded", + value: function ondecoded(packet) { + this.emitReserved("packet", packet); + } + /** + * Called upon socket error. + * + * @private + */ + + }, { + key: "onerror", + value: function onerror(err) { + debug("error", err); + this.emitReserved("error", err); + } + /** + * Creates a new socket for the given `nsp`. + * + * @return {Socket} + * @public + */ + + }, { + key: "socket", + value: function socket(nsp, opts) { + var socket = this.nsps[nsp]; + + if (!socket) { + socket = new socket_1.Socket(this, nsp, opts); + this.nsps[nsp] = socket; + } + + return socket; + } + /** + * Called upon a socket close. + * + * @param socket + * @private + */ + + }, { + key: "_destroy", + value: function _destroy(socket) { + var nsps = Object.keys(this.nsps); + + for (var _i = 0, _nsps = nsps; _i < _nsps.length; _i++) { + var nsp = _nsps[_i]; + var _socket = this.nsps[nsp]; + + if (_socket.active) { + debug("socket %s is still active, skipping close", nsp); + return; + } + } + + this._close(); + } + /** + * Writes a packet. + * + * @param packet + * @private + */ + + }, { + key: "_packet", + value: function _packet(packet) { + debug("writing packet %j", packet); + var encodedPackets = this.encoder.encode(packet); + + for (var i = 0; i < encodedPackets.length; i++) { + this.engine.write(encodedPackets[i], packet.options); + } + } + /** + * Clean up transport subscriptions and packet buffer. + * + * @private + */ + + }, { + key: "cleanup", + value: function cleanup() { + debug("cleanup"); + this.subs.forEach(function (subDestroy) { + return subDestroy(); + }); + this.subs.length = 0; + this.decoder.destroy(); + } + /** + * Close the current socket. + * + * @private + */ + + }, { + key: "_close", + value: function _close() { + debug("disconnect"); + this.skipReconnect = true; + this._reconnecting = false; + + if ("opening" === this._readyState) { + // `onclose` will not fire because + // an open event never happened + this.cleanup(); + } + + this.backoff.reset(); + this._readyState = "closed"; + if (this.engine) this.engine.close(); + } + /** + * Alias for close() + * + * @private + */ + + }, { + key: "disconnect", + value: function disconnect() { + return this._close(); + } + /** + * Called upon engine close. + * + * @private + */ + + }, { + key: "onclose", + value: function onclose(reason) { + debug("onclose"); + this.cleanup(); + this.backoff.reset(); + this._readyState = "closed"; + this.emitReserved("close", reason); + + if (this._reconnection && !this.skipReconnect) { + this.reconnect(); + } + } + /** + * Attempt a reconnection. + * + * @private + */ + + }, { + key: "reconnect", + value: function reconnect() { + var _this3 = this; + + if (this._reconnecting || this.skipReconnect) return this; + var self = this; + + if (this.backoff.attempts >= this._reconnectionAttempts) { + debug("reconnect failed"); + this.backoff.reset(); + this.emitReserved("reconnect_failed"); + this._reconnecting = false; + } else { + var delay = this.backoff.duration(); + debug("will wait %dms before reconnect attempt", delay); + this._reconnecting = true; + var timer = setTimeout(function () { + if (self.skipReconnect) return; + debug("attempting reconnect"); + + _this3.emitReserved("reconnect_attempt", self.backoff.attempts); // check again for the case socket closed in above events + + + if (self.skipReconnect) return; + self.open(function (err) { + if (err) { + debug("reconnect attempt error"); + self._reconnecting = false; + self.reconnect(); + + _this3.emitReserved("reconnect_error", err); + } else { + debug("reconnect success"); + self.onreconnect(); + } + }); + }, delay); + + if (this.opts.autoUnref) { + timer.unref(); + } + + this.subs.push(function subDestroy() { + clearTimeout(timer); + }); + } + } + /** + * Called upon successful reconnect. + * + * @private + */ + + }, { + key: "onreconnect", + value: function onreconnect() { + var attempt = this.backoff.attempts; + this._reconnecting = false; + this.backoff.reset(); + this.emitReserved("reconnect", attempt); + } + }]); + + return Manager; +}(typed_events_1.StrictEventEmitter); + +exports.Manager = Manager; + +/***/ }), + +/***/ "./build/on.js": +/*!*********************!*\ + !*** ./build/on.js ***! + \*********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.on = void 0; + +function on(obj, ev, fn) { + obj.on(ev, fn); + return function subDestroy() { + obj.off(ev, fn); + }; +} + +exports.on = on; + +/***/ }), + +/***/ "./build/socket.js": +/*!*************************!*\ + !*** ./build/socket.js ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Socket = void 0; + +var socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js"); + +var on_1 = __webpack_require__(/*! ./on */ "./build/on.js"); + +var typed_events_1 = __webpack_require__(/*! ./typed-events */ "./build/typed-events.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:socket"); +/** + * Internal events. + * These events can't be emitted by the user. + */ + + +var RESERVED_EVENTS = Object.freeze({ + connect: 1, + connect_error: 1, + disconnect: 1, + disconnecting: 1, + // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener + newListener: 1, + removeListener: 1 +}); + +var Socket = /*#__PURE__*/function (_typed_events_1$Stric) { + _inherits(Socket, _typed_events_1$Stric); + + var _super = _createSuper(Socket); + + /** + * `Socket` constructor. + * + * @public + */ + function Socket(io, nsp, opts) { + var _this; + + _classCallCheck(this, Socket); + + _this = _super.call(this); + _this.receiveBuffer = []; + _this.sendBuffer = []; + _this.ids = 0; + _this.acks = {}; + _this.flags = {}; + _this.io = io; + _this.nsp = nsp; + _this.ids = 0; + _this.acks = {}; + _this.receiveBuffer = []; + _this.sendBuffer = []; + _this.connected = false; + _this.disconnected = true; + _this.flags = {}; + + if (opts && opts.auth) { + _this.auth = opts.auth; + } + + if (_this.io._autoConnect) _this.open(); + return _this; + } + /** + * Subscribe to open, close and packet events + * + * @private + */ + + + _createClass(Socket, [{ + key: "subEvents", + value: function subEvents() { + if (this.subs) return; + var io = this.io; + this.subs = [on_1.on(io, "open", this.onopen.bind(this)), on_1.on(io, "packet", this.onpacket.bind(this)), on_1.on(io, "error", this.onerror.bind(this)), on_1.on(io, "close", this.onclose.bind(this))]; + } + /** + * Whether the Socket will try to reconnect when its Manager connects or reconnects + */ + + }, { + key: "connect", + + /** + * "Opens" the socket. + * + * @public + */ + value: function connect() { + if (this.connected) return this; + this.subEvents(); + if (!this.io["_reconnecting"]) this.io.open(); // ensure open + + if ("open" === this.io._readyState) this.onopen(); + return this; + } + /** + * Alias for connect() + */ + + }, { + key: "open", + value: function open() { + return this.connect(); + } + /** + * Sends a `message` event. + * + * @return self + * @public + */ + + }, { + key: "send", + value: function send() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.unshift("message"); + this.emit.apply(this, args); + return this; + } + /** + * Override `emit`. + * If the event is in `events`, it's emitted normally. + * + * @return self + * @public + */ + + }, { + key: "emit", + value: function emit(ev) { + if (RESERVED_EVENTS.hasOwnProperty(ev)) { + throw new Error('"' + ev + '" is a reserved event name'); + } + + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + args.unshift(ev); + var packet = { + type: socket_io_parser_1.PacketType.EVENT, + data: args + }; + packet.options = {}; + packet.options.compress = this.flags.compress !== false; // event ack callback + + if ("function" === typeof args[args.length - 1]) { + debug("emitting packet with ack id %d", this.ids); + this.acks[this.ids] = args.pop(); + packet.id = this.ids++; + } + + var isTransportWritable = this.io.engine && this.io.engine.transport && this.io.engine.transport.writable; + var discardPacket = this.flags["volatile"] && (!isTransportWritable || !this.connected); + + if (discardPacket) { + debug("discard packet as the transport is not currently writable"); + } else if (this.connected) { + this.packet(packet); + } else { + this.sendBuffer.push(packet); + } + + this.flags = {}; + return this; + } + /** + * Sends a packet. + * + * @param packet + * @private + */ + + }, { + key: "packet", + value: function packet(_packet) { + _packet.nsp = this.nsp; + + this.io._packet(_packet); + } + /** + * Called upon engine `open`. + * + * @private + */ + + }, { + key: "onopen", + value: function onopen() { + var _this2 = this; + + debug("transport is open - connecting"); + + if (typeof this.auth == "function") { + this.auth(function (data) { + _this2.packet({ + type: socket_io_parser_1.PacketType.CONNECT, + data: data + }); + }); + } else { + this.packet({ + type: socket_io_parser_1.PacketType.CONNECT, + data: this.auth + }); + } + } + /** + * Called upon engine or manager `error`. + * + * @param err + * @private + */ + + }, { + key: "onerror", + value: function onerror(err) { + if (!this.connected) { + this.emitReserved("connect_error", err); + } + } + /** + * Called upon engine `close`. + * + * @param reason + * @private + */ + + }, { + key: "onclose", + value: function onclose(reason) { + debug("close (%s)", reason); + this.connected = false; + this.disconnected = true; + delete this.id; + this.emitReserved("disconnect", reason); + } + /** + * Called with socket packet. + * + * @param packet + * @private + */ + + }, { + key: "onpacket", + value: function onpacket(packet) { + var sameNamespace = packet.nsp === this.nsp; + if (!sameNamespace) return; + + switch (packet.type) { + case socket_io_parser_1.PacketType.CONNECT: + if (packet.data && packet.data.sid) { + var id = packet.data.sid; + this.onconnect(id); + } else { + this.emitReserved("connect_error", new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)")); + } + + break; + + case socket_io_parser_1.PacketType.EVENT: + this.onevent(packet); + break; + + case socket_io_parser_1.PacketType.BINARY_EVENT: + this.onevent(packet); + break; + + case socket_io_parser_1.PacketType.ACK: + this.onack(packet); + break; + + case socket_io_parser_1.PacketType.BINARY_ACK: + this.onack(packet); + break; + + case socket_io_parser_1.PacketType.DISCONNECT: + this.ondisconnect(); + break; + + case socket_io_parser_1.PacketType.CONNECT_ERROR: + var err = new Error(packet.data.message); // @ts-ignore + + err.data = packet.data.data; + this.emitReserved("connect_error", err); + break; + } + } + /** + * Called upon a server event. + * + * @param packet + * @private + */ + + }, { + key: "onevent", + value: function onevent(packet) { + var args = packet.data || []; + debug("emitting event %j", args); + + if (null != packet.id) { + debug("attaching ack callback to event"); + args.push(this.ack(packet.id)); + } + + if (this.connected) { + this.emitEvent(args); + } else { + this.receiveBuffer.push(Object.freeze(args)); + } + } + }, { + key: "emitEvent", + value: function emitEvent(args) { + if (this._anyListeners && this._anyListeners.length) { + var listeners = this._anyListeners.slice(); + + var _iterator = _createForOfIteratorHelper(listeners), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var listener = _step.value; + listener.apply(this, args); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + + _get(_getPrototypeOf(Socket.prototype), "emit", this).apply(this, args); + } + /** + * Produces an ack callback to emit with an event. + * + * @private + */ + + }, { + key: "ack", + value: function ack(id) { + var self = this; + var sent = false; + return function () { + // prevent double callbacks + if (sent) return; + sent = true; + + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + debug("sending ack %j", args); + self.packet({ + type: socket_io_parser_1.PacketType.ACK, + id: id, + data: args + }); + }; + } + /** + * Called upon a server acknowlegement. + * + * @param packet + * @private + */ + + }, { + key: "onack", + value: function onack(packet) { + var ack = this.acks[packet.id]; + + if ("function" === typeof ack) { + debug("calling ack %s with %j", packet.id, packet.data); + ack.apply(this, packet.data); + delete this.acks[packet.id]; + } else { + debug("bad ack %s", packet.id); + } + } + /** + * Called upon server connect. + * + * @private + */ + + }, { + key: "onconnect", + value: function onconnect(id) { + debug("socket connected with id %s", id); + this.id = id; + this.connected = true; + this.disconnected = false; + this.emitReserved("connect"); + this.emitBuffered(); + } + /** + * Emit buffered events (received and emitted). + * + * @private + */ + + }, { + key: "emitBuffered", + value: function emitBuffered() { + var _this3 = this; + + this.receiveBuffer.forEach(function (args) { + return _this3.emitEvent(args); + }); + this.receiveBuffer = []; + this.sendBuffer.forEach(function (packet) { + return _this3.packet(packet); + }); + this.sendBuffer = []; + } + /** + * Called upon server disconnect. + * + * @private + */ + + }, { + key: "ondisconnect", + value: function ondisconnect() { + debug("server disconnect (%s)", this.nsp); + this.destroy(); + this.onclose("io server disconnect"); + } + /** + * Called upon forced client/server side disconnections, + * this method ensures the manager stops tracking us and + * that reconnections don't get triggered for this. + * + * @private + */ + + }, { + key: "destroy", + value: function destroy() { + if (this.subs) { + // clean subscriptions to avoid reconnections + this.subs.forEach(function (subDestroy) { + return subDestroy(); + }); + this.subs = undefined; + } + + this.io["_destroy"](this); + } + /** + * Disconnects the socket manually. + * + * @return self + * @public + */ + + }, { + key: "disconnect", + value: function disconnect() { + if (this.connected) { + debug("performing disconnect (%s)", this.nsp); + this.packet({ + type: socket_io_parser_1.PacketType.DISCONNECT + }); + } // remove socket from pool + + + this.destroy(); + + if (this.connected) { + // fire events + this.onclose("io client disconnect"); + } + + return this; + } + /** + * Alias for disconnect() + * + * @return self + * @public + */ + + }, { + key: "close", + value: function close() { + return this.disconnect(); + } + /** + * Sets the compress flag. + * + * @param compress - if `true`, compresses the sending data + * @return self + * @public + */ + + }, { + key: "compress", + value: function compress(_compress) { + this.flags.compress = _compress; + return this; + } + /** + * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not + * ready to send messages. + * + * @returns self + * @public + */ + + }, { + key: "onAny", + + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. + * + * @param listener + * @public + */ + value: function onAny(listener) { + this._anyListeners = this._anyListeners || []; + + this._anyListeners.push(listener); + + return this; + } + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. The listener is added to the beginning of the listeners array. + * + * @param listener + * @public + */ + + }, { + key: "prependAny", + value: function prependAny(listener) { + this._anyListeners = this._anyListeners || []; + + this._anyListeners.unshift(listener); + + return this; + } + /** + * Removes the listener that will be fired when any event is emitted. + * + * @param listener + * @public + */ + + }, { + key: "offAny", + value: function offAny(listener) { + if (!this._anyListeners) { + return this; + } + + if (listener) { + var listeners = this._anyListeners; + + for (var i = 0; i < listeners.length; i++) { + if (listener === listeners[i]) { + listeners.splice(i, 1); + return this; + } + } + } else { + this._anyListeners = []; + } + + return this; + } + /** + * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated, + * e.g. to remove listeners. + * + * @public + */ + + }, { + key: "listenersAny", + value: function listenersAny() { + return this._anyListeners || []; + } + }, { + key: "active", + get: function get() { + return !!this.subs; + } + }, { + key: "volatile", + get: function get() { + this.flags["volatile"] = true; + return this; + } + }]); + + return Socket; +}(typed_events_1.StrictEventEmitter); + +exports.Socket = Socket; + +/***/ }), + +/***/ "./build/typed-events.js": +/*!*******************************!*\ + !*** ./build/typed-events.js ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.StrictEventEmitter = void 0; + +var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js"); +/** + * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type + * parameters for mappings of event names to event data types, and strictly + * types method calls to the `EventEmitter` according to these event maps. + * + * @typeParam ListenEvents - `EventsMap` of user-defined events that can be + * listened to with `on` or `once` + * @typeParam EmitEvents - `EventsMap` of user-defined events that can be + * emitted with `emit` + * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be + * emitted by socket.io with `emitReserved`, and can be listened to with + * `listen`. + */ + + +var StrictEventEmitter = /*#__PURE__*/function (_Emitter) { + _inherits(StrictEventEmitter, _Emitter); + + var _super = _createSuper(StrictEventEmitter); + + function StrictEventEmitter() { + _classCallCheck(this, StrictEventEmitter); + + return _super.apply(this, arguments); + } + + _createClass(StrictEventEmitter, [{ + key: "on", + + /** + * Adds the `listener` function as an event listener for `ev`. + * + * @param ev Name of the event + * @param listener Callback function + */ + value: function on(ev, listener) { + _get(_getPrototypeOf(StrictEventEmitter.prototype), "on", this).call(this, ev, listener); + + return this; + } + /** + * Adds a one-time `listener` function as an event listener for `ev`. + * + * @param ev Name of the event + * @param listener Callback function + */ + + }, { + key: "once", + value: function once(ev, listener) { + _get(_getPrototypeOf(StrictEventEmitter.prototype), "once", this).call(this, ev, listener); + + return this; + } + /** + * Emits an event. + * + * @param ev Name of the event + * @param args Values to send to listeners of this event + */ + + }, { + key: "emit", + value: function emit(ev) { + var _get2; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + (_get2 = _get(_getPrototypeOf(StrictEventEmitter.prototype), "emit", this)).call.apply(_get2, [this, ev].concat(args)); + + return this; + } + /** + * Emits a reserved event. + * + * This method is `protected`, so that only a class extending + * `StrictEventEmitter` can emit its own reserved events. + * + * @param ev Reserved event name + * @param args Arguments to emit along with the event + */ + + }, { + key: "emitReserved", + value: function emitReserved(ev) { + var _get3; + + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + (_get3 = _get(_getPrototypeOf(StrictEventEmitter.prototype), "emit", this)).call.apply(_get3, [this, ev].concat(args)); + + return this; + } + /** + * Returns the listeners listening to an event. + * + * @param event Event name + * @returns Array of listeners subscribed to `event` + */ + + }, { + key: "listeners", + value: function listeners(event) { + return _get(_getPrototypeOf(StrictEventEmitter.prototype), "listeners", this).call(this, event); + } + }]); + + return StrictEventEmitter; +}(Emitter); + +exports.StrictEventEmitter = StrictEventEmitter; + +/***/ }), + +/***/ "./build/url.js": +/*!**********************!*\ + !*** ./build/url.js ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.url = void 0; + +var parseuri = __webpack_require__(/*! parseuri */ "./node_modules/parseuri/index.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:url"); +/** + * URL parser. + * + * @param uri - url + * @param path - the request path of the connection + * @param loc - An object meant to mimic window.location. + * Defaults to window.location. + * @public + */ + + +function url(uri) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ""; + var loc = arguments.length > 2 ? arguments[2] : undefined; + var obj = uri; // default to window.location + + loc = loc || typeof location !== "undefined" && location; + if (null == uri) uri = loc.protocol + "//" + loc.host; // relative path support + + if (typeof uri === "string") { + if ("/" === uri.charAt(0)) { + if ("/" === uri.charAt(1)) { + uri = loc.protocol + uri; + } else { + uri = loc.host + uri; + } + } + + if (!/^(https?|wss?):\/\//.test(uri)) { + debug("protocol-less url %s", uri); + + if ("undefined" !== typeof loc) { + uri = loc.protocol + "//" + uri; + } else { + uri = "https://" + uri; + } + } // parse + + + debug("parse %s", uri); + obj = parseuri(uri); + } // make sure we treat `localhost:80` and `localhost` equally + + + if (!obj.port) { + if (/^(http|ws)$/.test(obj.protocol)) { + obj.port = "80"; + } else if (/^(http|ws)s$/.test(obj.protocol)) { + obj.port = "443"; + } + } + + obj.path = obj.path || "/"; + var ipv6 = obj.host.indexOf(":") !== -1; + var host = ipv6 ? "[" + obj.host + "]" : obj.host; // define unique id + + obj.id = obj.protocol + "://" + host + ":" + obj.port + path; // define href + + obj.href = obj.protocol + "://" + host + (loc && loc.port === obj.port ? "" : ":" + obj.port); + return obj; +} + +exports.url = url; + +/***/ }), + +/***/ "./node_modules/backo2/index.js": +/*!**************************************!*\ + !*** ./node_modules/backo2/index.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Expose `Backoff`. + */ +module.exports = Backoff; +/** + * Initialize backoff timer with `opts`. + * + * - `min` initial timeout in milliseconds [100] + * - `max` max timeout [10000] + * - `jitter` [0] + * - `factor` [2] + * + * @param {Object} opts + * @api public + */ + +function Backoff(opts) { + opts = opts || {}; + this.ms = opts.min || 100; + this.max = opts.max || 10000; + this.factor = opts.factor || 2; + this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; + this.attempts = 0; +} +/** + * Return the backoff duration. + * + * @return {Number} + * @api public + */ + + +Backoff.prototype.duration = function () { + var ms = this.ms * Math.pow(this.factor, this.attempts++); + + if (this.jitter) { + var rand = Math.random(); + var deviation = Math.floor(rand * this.jitter * ms); + ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; + } + + return Math.min(ms, this.max) | 0; +}; +/** + * Reset the number of attempts. + * + * @api public + */ + + +Backoff.prototype.reset = function () { + this.attempts = 0; +}; +/** + * Set the minimum duration + * + * @api public + */ + + +Backoff.prototype.setMin = function (min) { + this.ms = min; +}; +/** + * Set the maximum duration + * + * @api public + */ + + +Backoff.prototype.setMax = function (max) { + this.max = max; +}; +/** + * Set the jitter + * + * @api public + */ + + +Backoff.prototype.setJitter = function (jitter) { + this.jitter = jitter; +}; + +/***/ }), + +/***/ "./node_modules/component-emitter/index.js": +/*!*************************************************!*\ + !*** ./node_modules/component-emitter/index.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Expose `Emitter`. + */ +if (true) { + module.exports = Emitter; +} +/** + * Initialize a new `Emitter`. + * + * @api public + */ + + +function Emitter(obj) { + if (obj) return mixin(obj); +} + +; +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + + return obj; +} +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + +Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) { + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); + return this; +}; +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + +Emitter.prototype.once = function (event, fn) { + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + +Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) { + this._callbacks = this._callbacks || {}; // all + + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } // specific event + + + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; // remove all handlers + + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } // remove specific handler + + + var cb; + + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } // Remove event specific arrays for event types that no + // one is subscribed for to avoid memory leak. + + + if (callbacks.length === 0) { + delete this._callbacks['$' + event]; + } + + return this; +}; +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + + +Emitter.prototype.emit = function (event) { + this._callbacks = this._callbacks || {}; + var args = new Array(arguments.length - 1), + callbacks = this._callbacks['$' + event]; + + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + + if (callbacks) { + callbacks = callbacks.slice(0); + + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + + +Emitter.prototype.listeners = function (event) { + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + + +Emitter.prototype.hasListeners = function (event) { + return !!this.listeners(event).length; +}; + +/***/ }), + +/***/ "./node_modules/debug/src/browser.js": +/*!*******************************************!*\ + !*** ./node_modules/debug/src/browser.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); + +exports.destroy = function () { + var warned = false; + return function () { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +}(); +/** + * Colors. + */ + + +exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ +// eslint-disable-next-line complexity + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } // Internet Explorer and Edge do not support colors. + + + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + + + return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); +} +/** + * Colorize log arguments if enabled. + * + * @api public + */ + + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function (match) { + if (match === '%%') { + return; + } + + index++; + + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + args.splice(lastC, 0, c); +} +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ + + +exports.log = console.debug || console.log || function () {}; +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + +function load() { + var r; + + try { + r = exports.storage.getItem('debug'); + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + + + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = __webpack_require__(/*! ./common */ "./node_modules/debug/src/common.js")(exports); +var formatters = module.exports.formatters; +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; + +/***/ }), + +/***/ "./node_modules/debug/src/common.js": +/*!******************************************!*\ + !*** ./node_modules/debug/src/common.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ +function setup(env) { + createDebug.debug = createDebug; + createDebug["default"] = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = __webpack_require__(/*! ms */ "./node_modules/ms/index.js"); + createDebug.destroy = destroy; + Object.keys(env).forEach(function (key) { + createDebug[key] = env[key]; + }); + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + + function selectColor(namespace) { + var hash = 0; + + for (var i = 0; i < namespace.length; i++) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + + createDebug.selectColor = selectColor; + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + var enableOverride = null; + + function debug() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Disabled? + if (!debug.enabled) { + return; + } + + var self = debug; // Set `diff` timestamp + + var curr = Number(new Date()); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } // Apply any `formatters` transformations + + + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + + index++; + var formatter = createDebug.formatters[format]; + + if (typeof formatter === 'function') { + var val = args[index]; + match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` + + args.splice(index, 1); + index--; + } + + return match; + }); // Apply env-specific formatting (colors, etc.) + + createDebug.formatArgs.call(self, args); + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: function get() { + return enableOverride === null ? createDebug.enabled(namespace) : enableOverride; + }, + set: function set(v) { + enableOverride = v; + } + }); // Env-specific initialization logic for debug instances + + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.names = []; + createDebug.skips = []; + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + + + function disable() { + var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) { + return '-' + namespace; + }))).join(','); + createDebug.enable(''); + return namespaces; + } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + var i; + var len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + + + function toNamespace(regexp) { + return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*'); + } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + + return val; + } + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + + + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + return createDebug; +} + +module.exports = setup; + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/globalThis.browser.js": +/*!*****************************************************************!*\ + !*** ./node_modules/engine.io-client/lib/globalThis.browser.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = function () { + if (typeof self !== "undefined") { + return self; + } else if (typeof window !== "undefined") { + return window; + } else { + return Function("return this")(); + } +}(); + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/index.js": +/*!****************************************************!*\ + !*** ./node_modules/engine.io-client/lib/index.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Socket = __webpack_require__(/*! ./socket */ "./node_modules/engine.io-client/lib/socket.js"); + +module.exports = function (uri, opts) { + return new Socket(uri, opts); +}; +/** + * Expose deps for legacy compatibility + * and standalone browser access. + */ + + +module.exports.Socket = Socket; +module.exports.protocol = Socket.protocol; // this is an int + +module.exports.Transport = __webpack_require__(/*! ./transport */ "./node_modules/engine.io-client/lib/transport.js"); +module.exports.transports = __webpack_require__(/*! ./transports/index */ "./node_modules/engine.io-client/lib/transports/index.js"); +module.exports.parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/socket.js": +/*!*****************************************************!*\ + !*** ./node_modules/engine.io-client/lib/socket.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +var transports = __webpack_require__(/*! ./transports/index */ "./node_modules/engine.io-client/lib/transports/index.js"); + +var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("engine.io-client:socket"); + +var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js"); + +var parseuri = __webpack_require__(/*! parseuri */ "./node_modules/parseuri/index.js"); + +var parseqs = __webpack_require__(/*! parseqs */ "./node_modules/parseqs/index.js"); + +var Socket = /*#__PURE__*/function (_Emitter) { + _inherits(Socket, _Emitter); + + var _super = _createSuper(Socket); + + /** + * Socket constructor. + * + * @param {String|Object} uri or options + * @param {Object} options + * @api public + */ + function Socket(uri) { + var _this; + + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + _classCallCheck(this, Socket); + + _this = _super.call(this); + + if (uri && "object" === _typeof(uri)) { + opts = uri; + uri = null; + } + + if (uri) { + uri = parseuri(uri); + opts.hostname = uri.host; + opts.secure = uri.protocol === "https" || uri.protocol === "wss"; + opts.port = uri.port; + if (uri.query) opts.query = uri.query; + } else if (opts.host) { + opts.hostname = parseuri(opts.host).host; + } + + _this.secure = null != opts.secure ? opts.secure : typeof location !== "undefined" && "https:" === location.protocol; + + if (opts.hostname && !opts.port) { + // if no port is specified manually, use the protocol default + opts.port = _this.secure ? "443" : "80"; + } + + _this.hostname = opts.hostname || (typeof location !== "undefined" ? location.hostname : "localhost"); + _this.port = opts.port || (typeof location !== "undefined" && location.port ? location.port : _this.secure ? 443 : 80); + _this.transports = opts.transports || ["polling", "websocket"]; + _this.readyState = ""; + _this.writeBuffer = []; + _this.prevBufferLen = 0; + _this.opts = _extends({ + path: "/engine.io", + agent: false, + withCredentials: false, + upgrade: true, + jsonp: true, + timestampParam: "t", + rememberUpgrade: false, + rejectUnauthorized: true, + perMessageDeflate: { + threshold: 1024 + }, + transportOptions: {} + }, opts); + _this.opts.path = _this.opts.path.replace(/\/$/, "") + "/"; + + if (typeof _this.opts.query === "string") { + _this.opts.query = parseqs.decode(_this.opts.query); + } // set on handshake + + + _this.id = null; + _this.upgrades = null; + _this.pingInterval = null; + _this.pingTimeout = null; // set on heartbeat + + _this.pingTimeoutTimer = null; + + if (typeof addEventListener === "function") { + addEventListener("beforeunload", function () { + if (_this.transport) { + // silently close the transport + _this.transport.removeAllListeners(); + + _this.transport.close(); + } + }, false); + + if (_this.hostname !== "localhost") { + _this.offlineEventListener = function () { + _this.onClose("transport close"); + }; + + addEventListener("offline", _this.offlineEventListener, false); + } + } + + _this.open(); + + return _this; + } + /** + * Creates transport of the given type. + * + * @param {String} transport name + * @return {Transport} + * @api private + */ + + + _createClass(Socket, [{ + key: "createTransport", + value: function createTransport(name) { + debug('creating transport "%s"', name); + var query = clone(this.opts.query); // append engine.io protocol identifier + + query.EIO = parser.protocol; // transport name + + query.transport = name; // session id if we already have one + + if (this.id) query.sid = this.id; + + var opts = _extends({}, this.opts.transportOptions[name], this.opts, { + query: query, + socket: this, + hostname: this.hostname, + secure: this.secure, + port: this.port + }); + + debug("options: %j", opts); + return new transports[name](opts); + } + /** + * Initializes transport to use and starts probe. + * + * @api private + */ + + }, { + key: "open", + value: function open() { + var transport; + + if (this.opts.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf("websocket") !== -1) { + transport = "websocket"; + } else if (0 === this.transports.length) { + // Emit error on next tick so it can be listened to + var self = this; + setTimeout(function () { + self.emit("error", "No transports available"); + }, 0); + return; + } else { + transport = this.transports[0]; + } + + this.readyState = "opening"; // Retry with the next transport if the transport is disabled (jsonp: false) + + try { + transport = this.createTransport(transport); + } catch (e) { + debug("error while creating transport: %s", e); + this.transports.shift(); + this.open(); + return; + } + + transport.open(); + this.setTransport(transport); + } + /** + * Sets the current transport. Disables the existing one (if any). + * + * @api private + */ + + }, { + key: "setTransport", + value: function setTransport(transport) { + debug("setting transport %s", transport.name); + var self = this; + + if (this.transport) { + debug("clearing existing transport %s", this.transport.name); + this.transport.removeAllListeners(); + } // set up transport + + + this.transport = transport; // set up transport listeners + + transport.on("drain", function () { + self.onDrain(); + }).on("packet", function (packet) { + self.onPacket(packet); + }).on("error", function (e) { + self.onError(e); + }).on("close", function () { + self.onClose("transport close"); + }); + } + /** + * Probes a transport. + * + * @param {String} transport name + * @api private + */ + + }, { + key: "probe", + value: function probe(name) { + debug('probing transport "%s"', name); + var transport = this.createTransport(name, { + probe: 1 + }); + var failed = false; + var self = this; + Socket.priorWebsocketSuccess = false; + + function onTransportOpen() { + if (self.onlyBinaryUpgrades) { + var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary; + failed = failed || upgradeLosesBinary; + } + + if (failed) return; + debug('probe transport "%s" opened', name); + transport.send([{ + type: "ping", + data: "probe" + }]); + transport.once("packet", function (msg) { + if (failed) return; + + if ("pong" === msg.type && "probe" === msg.data) { + debug('probe transport "%s" pong', name); + self.upgrading = true; + self.emit("upgrading", transport); + if (!transport) return; + Socket.priorWebsocketSuccess = "websocket" === transport.name; + debug('pausing current transport "%s"', self.transport.name); + self.transport.pause(function () { + if (failed) return; + if ("closed" === self.readyState) return; + debug("changing transport and sending upgrade packet"); + cleanup(); + self.setTransport(transport); + transport.send([{ + type: "upgrade" + }]); + self.emit("upgrade", transport); + transport = null; + self.upgrading = false; + self.flush(); + }); + } else { + debug('probe transport "%s" failed', name); + var err = new Error("probe error"); + err.transport = transport.name; + self.emit("upgradeError", err); + } + }); + } + + function freezeTransport() { + if (failed) return; // Any callback called by transport should be ignored since now + + failed = true; + cleanup(); + transport.close(); + transport = null; + } // Handle any error that happens while probing + + + function onerror(err) { + var error = new Error("probe error: " + err); + error.transport = transport.name; + freezeTransport(); + debug('probe transport "%s" failed because of error: %s', name, err); + self.emit("upgradeError", error); + } + + function onTransportClose() { + onerror("transport closed"); + } // When the socket is closed while we're probing + + + function onclose() { + onerror("socket closed"); + } // When the socket is upgraded while we're probing + + + function onupgrade(to) { + if (transport && to.name !== transport.name) { + debug('"%s" works - aborting "%s"', to.name, transport.name); + freezeTransport(); + } + } // Remove all listeners on the transport and on self + + + function cleanup() { + transport.removeListener("open", onTransportOpen); + transport.removeListener("error", onerror); + transport.removeListener("close", onTransportClose); + self.removeListener("close", onclose); + self.removeListener("upgrading", onupgrade); + } + + transport.once("open", onTransportOpen); + transport.once("error", onerror); + transport.once("close", onTransportClose); + this.once("close", onclose); + this.once("upgrading", onupgrade); + transport.open(); + } + /** + * Called when connection is deemed open. + * + * @api public + */ + + }, { + key: "onOpen", + value: function onOpen() { + debug("socket open"); + this.readyState = "open"; + Socket.priorWebsocketSuccess = "websocket" === this.transport.name; + this.emit("open"); + this.flush(); // we check for `readyState` in case an `open` + // listener already closed the socket + + if ("open" === this.readyState && this.opts.upgrade && this.transport.pause) { + debug("starting upgrade probes"); + var i = 0; + var l = this.upgrades.length; + + for (; i < l; i++) { + this.probe(this.upgrades[i]); + } + } + } + /** + * Handles a packet. + * + * @api private + */ + + }, { + key: "onPacket", + value: function onPacket(packet) { + if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { + debug('socket receive: type "%s", data "%s"', packet.type, packet.data); + this.emit("packet", packet); // Socket is live - any packet counts + + this.emit("heartbeat"); + + switch (packet.type) { + case "open": + this.onHandshake(JSON.parse(packet.data)); + break; + + case "ping": + this.resetPingTimeout(); + this.sendPacket("pong"); + this.emit("pong"); + break; + + case "error": + var err = new Error("server error"); + err.code = packet.data; + this.onError(err); + break; + + case "message": + this.emit("data", packet.data); + this.emit("message", packet.data); + break; + } + } else { + debug('packet received with socket readyState "%s"', this.readyState); + } + } + /** + * Called upon handshake completion. + * + * @param {Object} handshake obj + * @api private + */ + + }, { + key: "onHandshake", + value: function onHandshake(data) { + this.emit("handshake", data); + this.id = data.sid; + this.transport.query.sid = data.sid; + this.upgrades = this.filterUpgrades(data.upgrades); + this.pingInterval = data.pingInterval; + this.pingTimeout = data.pingTimeout; + this.onOpen(); // In case open handler closes socket + + if ("closed" === this.readyState) return; + this.resetPingTimeout(); + } + /** + * Sets and resets ping timeout timer based on server pings. + * + * @api private + */ + + }, { + key: "resetPingTimeout", + value: function resetPingTimeout() { + var _this2 = this; + + clearTimeout(this.pingTimeoutTimer); + this.pingTimeoutTimer = setTimeout(function () { + _this2.onClose("ping timeout"); + }, this.pingInterval + this.pingTimeout); + + if (this.opts.autoUnref) { + this.pingTimeoutTimer.unref(); + } + } + /** + * Called on `drain` event + * + * @api private + */ + + }, { + key: "onDrain", + value: function onDrain() { + this.writeBuffer.splice(0, this.prevBufferLen); // setting prevBufferLen = 0 is very important + // for example, when upgrading, upgrade packet is sent over, + // and a nonzero prevBufferLen could cause problems on `drain` + + this.prevBufferLen = 0; + + if (0 === this.writeBuffer.length) { + this.emit("drain"); + } else { + this.flush(); + } + } + /** + * Flush write buffers. + * + * @api private + */ + + }, { + key: "flush", + value: function flush() { + if ("closed" !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) { + debug("flushing %d packets in socket", this.writeBuffer.length); + this.transport.send(this.writeBuffer); // keep track of current length of writeBuffer + // splice writeBuffer and callbackBuffer on `drain` + + this.prevBufferLen = this.writeBuffer.length; + this.emit("flush"); + } + } + /** + * Sends a message. + * + * @param {String} message. + * @param {Function} callback function. + * @param {Object} options. + * @return {Socket} for chaining. + * @api public + */ + + }, { + key: "write", + value: function write(msg, options, fn) { + this.sendPacket("message", msg, options, fn); + return this; + } + }, { + key: "send", + value: function send(msg, options, fn) { + this.sendPacket("message", msg, options, fn); + return this; + } + /** + * Sends a packet. + * + * @param {String} packet type. + * @param {String} data. + * @param {Object} options. + * @param {Function} callback function. + * @api private + */ + + }, { + key: "sendPacket", + value: function sendPacket(type, data, options, fn) { + if ("function" === typeof data) { + fn = data; + data = undefined; + } + + if ("function" === typeof options) { + fn = options; + options = null; + } + + if ("closing" === this.readyState || "closed" === this.readyState) { + return; + } + + options = options || {}; + options.compress = false !== options.compress; + var packet = { + type: type, + data: data, + options: options + }; + this.emit("packetCreate", packet); + this.writeBuffer.push(packet); + if (fn) this.once("flush", fn); + this.flush(); + } + /** + * Closes the connection. + * + * @api private + */ + + }, { + key: "close", + value: function close() { + var self = this; + + if ("opening" === this.readyState || "open" === this.readyState) { + this.readyState = "closing"; + + if (this.writeBuffer.length) { + this.once("drain", function () { + if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + }); + } else if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + } + + function close() { + self.onClose("forced close"); + debug("socket closing - telling transport to close"); + self.transport.close(); + } + + function cleanupAndClose() { + self.removeListener("upgrade", cleanupAndClose); + self.removeListener("upgradeError", cleanupAndClose); + close(); + } + + function waitForUpgrade() { + // wait for upgrade to finish since we can't send packets while pausing a transport + self.once("upgrade", cleanupAndClose); + self.once("upgradeError", cleanupAndClose); + } + + return this; + } + /** + * Called upon transport error + * + * @api private + */ + + }, { + key: "onError", + value: function onError(err) { + debug("socket error %j", err); + Socket.priorWebsocketSuccess = false; + this.emit("error", err); + this.onClose("transport error", err); + } + /** + * Called upon transport close. + * + * @api private + */ + + }, { + key: "onClose", + value: function onClose(reason, desc) { + if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { + debug('socket close with reason: "%s"', reason); + var self = this; // clear timers + + clearTimeout(this.pingIntervalTimer); + clearTimeout(this.pingTimeoutTimer); // stop event from firing again for transport + + this.transport.removeAllListeners("close"); // ensure transport won't stay open + + this.transport.close(); // ignore further transport communication + + this.transport.removeAllListeners(); + + if (typeof removeEventListener === "function") { + removeEventListener("offline", this.offlineEventListener, false); + } // set ready state + + + this.readyState = "closed"; // clear session id + + this.id = null; // emit close event + + this.emit("close", reason, desc); // clean buffers after, so users can still + // grab the buffers on `close` event + + self.writeBuffer = []; + self.prevBufferLen = 0; + } + } + /** + * Filters upgrades, returning only those matching client transports. + * + * @param {Array} server upgrades + * @api private + * + */ + + }, { + key: "filterUpgrades", + value: function filterUpgrades(upgrades) { + var filteredUpgrades = []; + var i = 0; + var j = upgrades.length; + + for (; i < j; i++) { + if (~this.transports.indexOf(upgrades[i])) filteredUpgrades.push(upgrades[i]); + } + + return filteredUpgrades; + } + }]); + + return Socket; +}(Emitter); + +Socket.priorWebsocketSuccess = false; +/** + * Protocol version. + * + * @api public + */ + +Socket.protocol = parser.protocol; // this is an int + +function clone(obj) { + var o = {}; + + for (var i in obj) { + if (obj.hasOwnProperty(i)) { + o[i] = obj[i]; + } + } + + return o; +} + +module.exports = Socket; + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/transport.js": +/*!********************************************************!*\ + !*** ./node_modules/engine.io-client/lib/transport.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js"); + +var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js"); + +var Transport = /*#__PURE__*/function (_Emitter) { + _inherits(Transport, _Emitter); + + var _super = _createSuper(Transport); + + /** + * Transport abstract constructor. + * + * @param {Object} options. + * @api private + */ + function Transport(opts) { + var _this; + + _classCallCheck(this, Transport); + + _this = _super.call(this); + _this.opts = opts; + _this.query = opts.query; + _this.readyState = ""; + _this.socket = opts.socket; + return _this; + } + /** + * Emits an error. + * + * @param {String} str + * @return {Transport} for chaining + * @api public + */ + + + _createClass(Transport, [{ + key: "onError", + value: function onError(msg, desc) { + var err = new Error(msg); + err.type = "TransportError"; + err.description = desc; + this.emit("error", err); + return this; + } + /** + * Opens the transport. + * + * @api public + */ + + }, { + key: "open", + value: function open() { + if ("closed" === this.readyState || "" === this.readyState) { + this.readyState = "opening"; + this.doOpen(); + } + + return this; + } + /** + * Closes the transport. + * + * @api private + */ + + }, { + key: "close", + value: function close() { + if ("opening" === this.readyState || "open" === this.readyState) { + this.doClose(); + this.onClose(); + } + + return this; + } + /** + * Sends multiple packets. + * + * @param {Array} packets + * @api private + */ + + }, { + key: "send", + value: function send(packets) { + if ("open" === this.readyState) { + this.write(packets); + } else { + throw new Error("Transport not open"); + } + } + /** + * Called upon open + * + * @api private + */ + + }, { + key: "onOpen", + value: function onOpen() { + this.readyState = "open"; + this.writable = true; + this.emit("open"); + } + /** + * Called with data. + * + * @param {String} data + * @api private + */ + + }, { + key: "onData", + value: function onData(data) { + var packet = parser.decodePacket(data, this.socket.binaryType); + this.onPacket(packet); + } + /** + * Called with a decoded packet. + */ + + }, { + key: "onPacket", + value: function onPacket(packet) { + this.emit("packet", packet); + } + /** + * Called upon close. + * + * @api private + */ + + }, { + key: "onClose", + value: function onClose() { + this.readyState = "closed"; + this.emit("close"); + } + }]); + + return Transport; +}(Emitter); + +module.exports = Transport; + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/transports/index.js": +/*!***************************************************************!*\ + !*** ./node_modules/engine.io-client/lib/transports/index.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var XMLHttpRequest = __webpack_require__(/*! ../../contrib/xmlhttprequest-ssl/XMLHttpRequest */ "./node_modules/engine.io-client/lib/xmlhttprequest.js"); + +var XHR = __webpack_require__(/*! ./polling-xhr */ "./node_modules/engine.io-client/lib/transports/polling-xhr.js"); + +var JSONP = __webpack_require__(/*! ./polling-jsonp */ "./node_modules/engine.io-client/lib/transports/polling-jsonp.js"); + +var websocket = __webpack_require__(/*! ./websocket */ "./node_modules/engine.io-client/lib/transports/websocket.js"); + +exports.polling = polling; +exports.websocket = websocket; +/** + * Polling transport polymorphic constructor. + * Decides on xhr vs jsonp based on feature detection. + * + * @api private + */ + +function polling(opts) { + var xhr; + var xd = false; + var xs = false; + var jsonp = false !== opts.jsonp; + + if (typeof location !== "undefined") { + var isSSL = "https:" === location.protocol; + var port = location.port; // some user agents have empty `location.port` + + if (!port) { + port = isSSL ? 443 : 80; + } + + xd = opts.hostname !== location.hostname || port !== opts.port; + xs = opts.secure !== isSSL; + } + + opts.xdomain = xd; + opts.xscheme = xs; + xhr = new XMLHttpRequest(opts); + + if ("open" in xhr && !opts.forceJSONP) { + return new XHR(opts); + } else { + if (!jsonp) throw new Error("JSONP disabled"); + return new JSONP(opts); + } +} + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/transports/polling-jsonp.js": +/*!***********************************************************************!*\ + !*** ./node_modules/engine.io-client/lib/transports/polling-jsonp.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +var Polling = __webpack_require__(/*! ./polling */ "./node_modules/engine.io-client/lib/transports/polling.js"); + +var globalThis = __webpack_require__(/*! ../globalThis */ "./node_modules/engine.io-client/lib/globalThis.browser.js"); + +var rNewline = /\n/g; +var rEscapedNewline = /\\n/g; +/** + * Global JSONP callbacks. + */ + +var callbacks; + +var JSONPPolling = /*#__PURE__*/function (_Polling) { + _inherits(JSONPPolling, _Polling); + + var _super = _createSuper(JSONPPolling); + + /** + * JSONP Polling constructor. + * + * @param {Object} opts. + * @api public + */ + function JSONPPolling(opts) { + var _this; + + _classCallCheck(this, JSONPPolling); + + _this = _super.call(this, opts); + _this.query = _this.query || {}; // define global callbacks array if not present + // we do this here (lazily) to avoid unneeded global pollution + + if (!callbacks) { + // we need to consider multiple engines in the same page + callbacks = globalThis.___eio = globalThis.___eio || []; + } // callback identifier + + + _this.index = callbacks.length; // add callback to jsonp global + + var self = _assertThisInitialized(_this); + + callbacks.push(function (msg) { + self.onData(msg); + }); // append to query string + + _this.query.j = _this.index; + return _this; + } + /** + * JSONP only supports binary as base64 encoded strings + */ + + + _createClass(JSONPPolling, [{ + key: "doClose", + + /** + * Closes the socket. + * + * @api private + */ + value: function doClose() { + if (this.script) { + // prevent spurious errors from being emitted when the window is unloaded + this.script.onerror = function () {}; + + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + if (this.form) { + this.form.parentNode.removeChild(this.form); + this.form = null; + this.iframe = null; + } + + _get(_getPrototypeOf(JSONPPolling.prototype), "doClose", this).call(this); + } + /** + * Starts a poll cycle. + * + * @api private + */ + + }, { + key: "doPoll", + value: function doPoll() { + var self = this; + var script = document.createElement("script"); + + if (this.script) { + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + script.async = true; + script.src = this.uri(); + + script.onerror = function (e) { + self.onError("jsonp poll error", e); + }; + + var insertAt = document.getElementsByTagName("script")[0]; + + if (insertAt) { + insertAt.parentNode.insertBefore(script, insertAt); + } else { + (document.head || document.body).appendChild(script); + } + + this.script = script; + var isUAgecko = "undefined" !== typeof navigator && /gecko/i.test(navigator.userAgent); + + if (isUAgecko) { + setTimeout(function () { + var iframe = document.createElement("iframe"); + document.body.appendChild(iframe); + document.body.removeChild(iframe); + }, 100); + } + } + /** + * Writes with a hidden iframe. + * + * @param {String} data to send + * @param {Function} called upon flush. + * @api private + */ + + }, { + key: "doWrite", + value: function doWrite(data, fn) { + var self = this; + var iframe; + + if (!this.form) { + var form = document.createElement("form"); + var area = document.createElement("textarea"); + var id = this.iframeId = "eio_iframe_" + this.index; + form.className = "socketio"; + form.style.position = "absolute"; + form.style.top = "-1000px"; + form.style.left = "-1000px"; + form.target = id; + form.method = "POST"; + form.setAttribute("accept-charset", "utf-8"); + area.name = "d"; + form.appendChild(area); + document.body.appendChild(form); + this.form = form; + this.area = area; + } + + this.form.action = this.uri(); + + function complete() { + initIframe(); + fn(); + } + + function initIframe() { + if (self.iframe) { + try { + self.form.removeChild(self.iframe); + } catch (e) { + self.onError("jsonp polling iframe removal error", e); + } + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + var html = ' +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/storm-silver-with-benkei/assets/css/styles.css b/themes/storm-silver-with-benkei/assets/css/styles.css new file mode 100644 index 0000000..e412bea --- /dev/null +++ b/themes/storm-silver-with-benkei/assets/css/styles.css @@ -0,0 +1,174 @@ +.pokes { +margin-top: 110px; +} + +.browser-connected { + display: block !important; +} + +.badges { + display: grid; + grid-template-columns: repeat(16, 1fr); +} + +.badges {} + .badge__slot { + display: block; + } + + .badge__slot img { + width: 100px; + } + .badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; + } + body { background-color: rgba(0, 0, 0, 0); margin: 0px auto; overflow: hidden; } .badge__slot {max-height: 100%;} .badge__slot img { max-height:100%; width: auto;} +.pokemon__list { + /* display: grid; */ + width: 100%; + /* grid-template-columns: repeat(6, 128px); */ + /* grid-template-rows: repeat(1, 115px); */ + /* column-gap: 20px; */ + display: block; + position: relative; +} + +.pokemon__list .pokemon.isDead { + filter: grayscale(1); +} + +.pokemon.card { + position: relative; +} + +.pokemon.card:nth-child(even) { + top: 51px; +} + +.flipped .pokemon.card:nth-child(even) { + top: 0px +} + +.flipped .pokemon.card:nth-child(odd) { + top: 51px +} + +.pokemon__list > .pokemon { + border: 3px solid white; +} + +.pokemon { + display: inline-block; + width: 270px; + /* height: 152px; */ + height: 130px; + background-position-x: -38px; + background-position-y: -78px; + background-repeat: no-repeat; + background-size: 350px auto; + margin-right: 22px; + background-color: white; +} + +.pokemon__list .pokemon .pokemon { + overflow: hidden; + margin-top: 1px; + position: absolute; + margin-left: 1px; + width: 268px; +} + +.heldItem { + position: absolute; + top: -50px; + background-color: white; + padding: 5px; + width: 30px; + height: 30px; + margin-left: -4px; +} + +.heldItem img { + width: 100%; +} + +.flipped .heldItem { + right: 0; +} + +.pokemon__name { + position: absolute; + width: 100%; + top: 142px; + background: white; + padding: 10px 5px; + font-family: "Pokemon GB"; + font-weight: bold; + font-size: larger; + width: 266px; + text-align: center; + /* left: 0px; */ + margin-left: -4px; + height: 19px; +} + +.pokemon__list > .pokemon { + border: 3px solid white; + /* border-style: inset; */ +} +.pokemon__list .pokemon .hp { + width: 80%; + bottom: 6px; + height: 12px; + position: absolute; + left: 10px; + border: 4px solid rgba(0,0,0,0.4); +} + +.pokemon__list .pokemon .hp .hp__inner { + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; + height: 100%; +} + +.pokemon .hp .hp__inner.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.pokemon__list .pokemon .pokemon__details { + display: block; +} + +.pokemon__list .pokemon .pokemon__details .details__name { + font-weight: bold; + color: #c0c0c0; +} + +.pokemon__list .pokemon .pokemon__details .details__hp { + border: 1px solid #000000; + height: 5px; + width: 100%; +} + +.pokemon__list .pokemon .pokemon__details .details__hp .hp__bar { + background-color: #ff0000; + height: 5px; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} \ No newline at end of file diff --git a/themes/storm-silver-with-benkei/assets/js/components/list.js b/themes/storm-silver-with-benkei/assets/js/components/list.js new file mode 100644 index 0000000..5edaa28 --- /dev/null +++ b/themes/storm-silver-with-benkei/assets/js/components/list.js @@ -0,0 +1,95 @@ +Vue.component( "List", { + template: ` + +`, + data() { return { + connected: false, + loaded: false, + settings: {}, + party: [], + players: {}, + party_count: 6, + switchSpeed: 'switchMedium', + flipped: false + }}, + created: function () { + this.loaded = true + this.settings = window.settings; + this.flipped = !!params.get('flipped') + }, + mounted: function () { + var vm = this; + client.setup(settings.port, settings.currentUser+'-browser', settings.server, (username, party) => { + vm.connected = true; + + let idList = party + .filter(mon => typeof mon.pokemon !== 'undefined' && mon.pokemon !== null) + .map(mon => mon.pokemon.species).join('|') + + if (this.flipped === true) { + party == party.reverse() + } + + fetch('https://api.pokemontcg.io/v1/cards?setCode=base1|base2|basep|ex3|pop5|pop1|pop3|xyp|col1|dp1|dp2|dp3|dp4|swsh1|swsh2|ex15&supertype=pokemon&nationalPokedexNumber=' + idList) + .then(response => response.json()) + .then(cards => { + vm.players[username] = party.map(function (pokemonWrapper) { + let mon = pokemonWrapper.pokemon; + if (mon == null) { + return false; + } + + let transformed = transformPokemon(mon); + + try { + cardImages = cards + .cards + .find(card => card.nationalPokedexNumber === transformed.species) + + transformed.img = cardImages.imageUrl + } catch (e) { + // console.log(e, transformed) + console.log(`unknown image for ${mon.speciesName}`, cardImages) + console.info(cards.cards) + } + + return transformed + + }); + + if (username == client.currentUser) { + vm.party = vm.players[username]; + vm.party_count = vm.party.filter(function(value) { return typeof value == "object" }).length; + } + }) + }) + .on('player:trainer:updated', (payload) => { this.updateTrainerStuffs(payload)}) + ; + }, + methods: { + updateTrainerStuffs (payload) { + if (window.settings.debug) { + console.log(`Trainer Update recieved for ${payload.username}`) + console.log(payload, window.settings) + } + if (payload.username !== settings.currentUser) return; + + }, + + update( val ) { + }, + } +}); diff --git a/themes/storm-silver-with-benkei/assets/js/components/pokemon.js b/themes/storm-silver-with-benkei/assets/js/components/pokemon.js new file mode 100644 index 0000000..e766b2e --- /dev/null +++ b/themes/storm-silver-with-benkei/assets/js/components/pokemon.js @@ -0,0 +1,125 @@ +Vue.component( "Pokemon", { + template: ` +
+
+ +
+
{{nickname}}
+ +
+ + +
+
+ `, + props: { + pokemon: {}, + key: {} + }, + data () { + return { + settings: {}, + selectedSet: 'base1', + sets: [ + 'base5', + 'xy7', + 'swsh1', + 'base2', + 'ex15' + ], + party: [25, 1, 54, 21, 5, 53] + } + }, + created () { + this.settings = window.settings; + }, + computed: { + // (100/194) * 194 + healthPercent() { + return (100/this.pokemon.hp.max) * this.pokemon.hp.current + "%"; + }, + isDead () { + if (typeof this.pokemon === "undefined") { return false; } + + return parseFloat(this.healthPercent) === 0 + }, + nickname() { + return this.pokemon.nickname || this.pokemon.speciesName; + }, + sex() { + return (this.pokemon.isGenderless ? '' : (this.pokemon.isFemale ? 'female' : 'male')); + }, + ident() { + if (typeof this.pokemon === "undefined") { return null; } + return this.pokemon.species; + }, + opacity() { + if (typeof this.pokemon === "undefined") { return '0.4'; } + return '1'; + }, + hasItem() { + if (typeof this.pokemon === "undefined") { return false; } + if (typeof this.pokemon.heldItem === "undefined") { return false; } + return this.pokemon.heldItem.id !== 0; + }, + sprite () { + if (typeof this.pokemon === "undefined") { return ''; } + if (this.pokemon.img) { + return this.pokemon.img; + } + + return ''; + }, + nickname () { + if (this.ident === null) { + return ''; + } + + return this.pokemon.nickname + }, + mainStyle () { + let styles = { + 'opacity': 1, + } + + if (this.pokemon) { + let primaryType = this.pokemon.types[0].label.toLowerCase() + styles = {...styles, 'background-image': 'url(' + this.pokemon.img + ')'} + } + + return styles; + }, + innerMonStyle () { + let styles = {} + + if (this.pokemon) { + let hp = 100 - parseInt( (100/this.pokemon.hp.max) * this.pokemon.hp.current) + if (hp < 0) hp = 0 + + styles = { + 'background-image': 'url(' + this.pokemon.img + ')', + 'height': hp + '%', + 'filter': 'grayscale(1)', + 'transition': 'all 0.8s' + } + + console.log(styles) + } + + return styles; + }, + + selectedPokemon: { + get: function() { + return this.nickname + }, + set: function() { + this.$emit( "change", this.nickname ) + } + } + } +}); diff --git a/themes/storm-silver-with-benkei/assets/js/themeSettings.js b/themes/storm-silver-with-benkei/assets/js/themeSettings.js new file mode 100644 index 0000000..7d71b40 --- /dev/null +++ b/themes/storm-silver-with-benkei/assets/js/themeSettings.js @@ -0,0 +1,31 @@ +var themeSettings = { + theme: { + name: 'vyublitz', + hideHPBar: params.get('hide_hp') === 'true' || false, + }, + + pokeImg: { + // will use species name instead (eg Bulbasaur.gif instead of 1.gif), + useDexNumbers: true, + // valid image types include: gif, jpg, jpeg, png etc + fileType: 'png', + ignoreForms: true, + }, + + // Change these to thwwwwwwwwe image paths + + imgPaths: { + normal: 'https://assets.pokelink.xyz/assets/sprites/pokemon/gen8/animated/', + shiny: 'https://www.cpokemon.com/pokes/home/shiny/', + /*normal: 'http://assets.pokelink.xyz/assets/sprites/pokemon/home/normal/', + shiny: 'http://assets.pokelink.xyz/assets/sprites/pokemon/home/shiny/',*/ + party: 'https://assets.pokelink.xyz/assets/sprites/pokemon/gen8/party/', + animatedEgg: 'https://assets.pokelink.xyz/assets/sprites/egg.gif', + staticEgg: 'https://www.cpokemon.com/pokes/home/0.png', + unknown: 'https://assets.pokelink.xyz/assets/sprites/', + badges: 'https://assets.pokelink.xyz/assets/sprites/badges/', + status: 'https://assets.pokelink.xyz/assets/sprites/status/', + types: 'https://assets.pokelink.xyz/assets/sprites/types/', + items: 'https://assets.pokelink.xyz/assets/sprites/items/', + }, +}; diff --git a/themes/storm-silver-with-benkei/badges.html b/themes/storm-silver-with-benkei/badges.html new file mode 100644 index 0000000..acf1ff8 --- /dev/null +++ b/themes/storm-silver-with-benkei/badges.html @@ -0,0 +1,51 @@ + + + + + + + Badges + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/storm-silver-with-benkei/index.html b/themes/storm-silver-with-benkei/index.html new file mode 100644 index 0000000..77ecee7 --- /dev/null +++ b/themes/storm-silver-with-benkei/index.html @@ -0,0 +1,62 @@ + + + + + + + Pkmn + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/storm-silver-with-benkei/readme.md b/themes/storm-silver-with-benkei/readme.md new file mode 100644 index 0000000..96e45fd --- /dev/null +++ b/themes/storm-silver-with-benkei/readme.md @@ -0,0 +1,858 @@ +#Example Template +This is a template for a generic pokelink theme + +## Technical Details +Pokélink's web sources use the following tech to achieve their goal of enabling live, low-maintanance updates to a users layout: + - [VueJS](https://vuejs.org) enables client side template compilation & rendering, and also real time updates with computed properties, etc. + - [Socket.IO](https://socket.io) allows real time communication between the web sources and the Pokélink desktop app using web sockets. + +## Events +Updates are split into `events`. These events allow the browser source to handle specific updates in different ways. These are subject to change in major releases. Currently they are: + - `client:party:updated` - This triggers when a players party is updated + - `player:trainer:updated` - This happens when a specific player has a trainer update (Such as a new badge etc) + - `client:players:list` - This happens as a major update with all data about the session available (happens only currently on initial load) + +### client:party:updated +```json +{ + "username": "Jez", + "update": { + "party": [{ + "pokemon": { + "isEgg": 0, + "exp": 976, + "hp": { + "max": 29, + "current": 11 + }, + "nature": "Gentle", + "move2": { + "pp": 0 + }, + "isGenderless": true, + "speciesName": "Abra", + "species": 63, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "xHyt", + "levelMet": 3, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 12, + "hiddenpower": "Ice", + "move1": { + "name": "Skull Bash", + "pp": 11 + }, + "pokerus": 0, + "evs": { + "atk": 4, + "def": 1, + "spatk": 1, + "spd": 5, + "spdef": 4, + "hp": 6 + }, + "isFemale": false, + "heldItem": 0, + "pid": 2429532646, + "ivs": { + "atk": 17, + "def": 5, + "spatk": 29, + "spd": 18, + "spdef": 31, + "hp": 23 + }, + "locationMet": 18, + "move3": { + "pp": 0 + } + }, + "slotId": 1, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 491, + "hp": { + "max": 29, + "current": 29 + }, + "nature": "Naughty", + "move2": { + "name": "Hyper Beam", + "pp": 5 + }, + "isGenderless": true, + "speciesName": "Treecko", + "species": 252, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Nero", + "levelMet": 0, + "isShiny": false, + "move4": { + "name": "Air Cutter", + "pp": 25 + }, + "ability": "--", + "level": 9, + "hiddenpower": "Rock", + "move1": { + "name": "Tail Whip", + "pp": 30 + }, + "pokerus": 0, + "evs": { + "atk": 0, + "def": 1, + "spatk": 3, + "spd": 2, + "spdef": 0, + "hp": 2 + }, + "isFemale": false, + "heldItem": 0, + "pid": 4209861879, + "ivs": { + "atk": 16, + "def": 3, + "spatk": 31, + "spd": 0, + "spdef": 22, + "hp": 22 + }, + "locationMet": 146, + "move3": { + "name": "Frenzy Plant", + "pp": 5 + } + }, + "slotId": 2, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 812, + "hp": { + "max": 24, + "current": 24 + }, + "nature": "Quiet", + "move2": { + "name": "BubbleBeam", + "pp": 20 + }, + "isGenderless": true, + "speciesName": "Duskull", + "species": 355, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Duskullp", + "levelMet": 0, + "isShiny": false, + "move4": { + "name": "Cut", + "pp": 30 + }, + "ability": "--", + "level": 10, + "hiddenpower": "Flying", + "move1": { + "name": "Fly", + "pp": 15 + }, + "pokerus": 0, + "evs": { + "atk": 1, + "def": 5, + "spatk": 0, + "spd": 3, + "spdef": 0, + "hp": 1 + }, + "isFemale": false, + "heldItem": 0, + "pid": 605294667, + "ivs": { + "atk": 22, + "def": 14, + "spatk": 6, + "spd": 3, + "spdef": 12, + "hp": 0 + }, + "locationMet": 146, + "move3": { + "name": "Giga Drain", + "pp": 4 + } + }, + "slotId": 3, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 339, + "hp": { + "max": 20, + "current": 20 + }, + "nature": "Naive", + "move2": { + "name": "Blizzard", + "pp": 5 + }, + "isGenderless": true, + "speciesName": "Koffing", + "species": 109, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "NinasButt", + "levelMet": 0, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 6, + "hiddenpower": "Electric", + "move1": { + "name": "Low Kick", + "pp": 20 + }, + "pokerus": 0, + "evs": { + "atk": 0, + "def": 2, + "spatk": 2, + "spd": 1, + "spdef": 0, + "hp": 0 + }, + "isFemale": false, + "heldItem": 0, + "pid": 540253689, + "ivs": { + "atk": 8, + "def": 6, + "spatk": 23, + "spd": 0, + "spdef": 17, + "hp": 5 + }, + "locationMet": 146, + "move3": { + "pp": 0 + } + }, + "slotId": 4, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 104, + "hp": { + "max": 19, + "current": 2 + }, + "nature": "Gentle", + "move2": { + "name": "Ice Punch", + "pp": 15 + }, + "isGenderless": true, + "speciesName": "Goldeen", + "species": 118, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Starmie", + "levelMet": 4, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 4, + "hiddenpower": "Rock", + "move1": { + "name": "Mega Kick", + "pp": 3 + }, + "pokerus": 0, + "evs": { + "atk": 0, + "def": 0, + "spatk": 0, + "spd": 1, + "spdef": 0, + "hp": 0 + }, + "isFemale": false, + "heldItem": 0, + "pid": 1446441871, + "ivs": { + "atk": 27, + "def": 6, + "spatk": 13, + "spd": 22, + "spdef": 14, + "hp": 25 + }, + "locationMet": 19, + "move3": { + "name": "Overheat", + "pp": 5 + } + }, + "slotId": 5, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 703, + "hp": { + "max": 31, + "current": 31 + }, + "nature": "Adamant", + "move2": { + "name": "Fire Punch", + "pp": 15 + }, + "isGenderless": true, + "speciesName": "Whismur", + "species": 293, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Whismurp", + "levelMet": 0, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 10, + "hiddenpower": "Fighting", + "move1": { + "name": "Ice Punch", + "pp": 15 + }, + "pokerus": 0, + "evs": { + "atk": 3, + "def": 2, + "spatk": 0, + "spd": 4, + "spdef": 1, + "hp": 0 + }, + "isFemale": false, + "heldItem": 0, + "pid": 3985898503, + "ivs": { + "atk": 3, + "def": 14, + "spatk": 26, + "spd": 20, + "spdef": 2, + "hp": 9 + }, + "locationMet": 146, + "move3": { + "pp": 0 + } + }, + "slotId": 6, + "changeId": 0 + }] + } +} +``` + +### player:trainer:updated +coming soon + +### On initial Page Load +```json +[{ + "id": "Wg_TS21rkMIYC0nNAAAA", + "username": "Jez", + "trainer": { + "badges": [{ + "name": "Stone", + "value": false + }, { + "name": "Knuckle", + "value": false + }, { + "name": "Dynamo", + "value": false + }, { + "name": "Heat", + "value": false + }, { + "name": "Balance", + "value": false + }, { + "name": "Feather", + "value": false + }, { + "name": "Mind", + "value": false + }, { + "name": "Rain", + "value": false + }], + "game": { + "friendlyName": "Pokémon Emerald", + "gen3_game_key": 2, + "gen3_subgame_key": 0, + "gen45_game_key": 0, + "gen45_subgame_key": 0, + "generation": 3, + "id": "POKEMON EMER" + }, + "trainerName": null, + "trainer_id": null, + "secret_id": null, + "money": null + }, + "party": [{ + "pokemon": { + "isEgg": 0, + "exp": 976, + "hp": { + "max": 29, + "current": 11 + }, + "nature": "Gentle", + "move2": { + "pp": 0 + }, + "isGenderless": true, + "speciesName": "Abra", + "species": 63, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "xHyt", + "levelMet": 3, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 12, + "hiddenpower": "Ice", + "move1": { + "name": "Skull Bash", + "pp": 11 + }, + "pokerus": 0, + "evs": { + "atk": 4, + "def": 1, + "spatk": 1, + "spd": 5, + "spdef": 4, + "hp": 6 + }, + "isFemale": false, + "heldItem": 0, + "pid": 2429532646, + "ivs": { + "atk": 17, + "def": 5, + "spatk": 29, + "spd": 18, + "spdef": 31, + "hp": 23 + }, + "locationMet": 18, + "move3": { + "pp": 0 + } + }, + "slotId": 1, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 491, + "hp": { + "max": 29, + "current": 29 + }, + "nature": "Naughty", + "move2": { + "name": "Hyper Beam", + "pp": 5 + }, + "isGenderless": true, + "speciesName": "Treecko", + "species": 252, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Nero", + "levelMet": 0, + "isShiny": false, + "move4": { + "name": "Air Cutter", + "pp": 25 + }, + "ability": "--", + "level": 9, + "hiddenpower": "Rock", + "move1": { + "name": "Tail Whip", + "pp": 30 + }, + "pokerus": 0, + "evs": { + "atk": 0, + "def": 1, + "spatk": 3, + "spd": 2, + "spdef": 0, + "hp": 2 + }, + "isFemale": false, + "heldItem": 0, + "pid": 4209861879, + "ivs": { + "atk": 16, + "def": 3, + "spatk": 31, + "spd": 0, + "spdef": 22, + "hp": 22 + }, + "locationMet": 146, + "move3": { + "name": "Frenzy Plant", + "pp": 5 + } + }, + "slotId": 2, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 812, + "hp": { + "max": 24, + "current": 24 + }, + "nature": "Quiet", + "move2": { + "name": "BubbleBeam", + "pp": 20 + }, + "isGenderless": true, + "speciesName": "Duskull", + "species": 355, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Duskullp", + "levelMet": 0, + "isShiny": false, + "move4": { + "name": "Cut", + "pp": 30 + }, + "ability": "--", + "level": 10, + "hiddenpower": "Flying", + "move1": { + "name": "Fly", + "pp": 15 + }, + "pokerus": 0, + "evs": { + "atk": 1, + "def": 5, + "spatk": 0, + "spd": 3, + "spdef": 0, + "hp": 1 + }, + "isFemale": false, + "heldItem": 0, + "pid": 605294667, + "ivs": { + "atk": 22, + "def": 14, + "spatk": 6, + "spd": 3, + "spdef": 12, + "hp": 0 + }, + "locationMet": 146, + "move3": { + "name": "Giga Drain", + "pp": 4 + } + }, + "slotId": 3, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 339, + "hp": { + "max": 20, + "current": 20 + }, + "nature": "Naive", + "move2": { + "name": "Blizzard", + "pp": 5 + }, + "isGenderless": true, + "speciesName": "Koffing", + "species": 109, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "NinasButt", + "levelMet": 0, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 6, + "hiddenpower": "Electric", + "move1": { + "name": "Low Kick", + "pp": 20 + }, + "pokerus": 0, + "evs": { + "atk": 0, + "def": 2, + "spatk": 2, + "spd": 1, + "spdef": 0, + "hp": 0 + }, + "isFemale": false, + "heldItem": 0, + "pid": 540253689, + "ivs": { + "atk": 8, + "def": 6, + "spatk": 23, + "spd": 0, + "spdef": 17, + "hp": 5 + }, + "locationMet": 146, + "move3": { + "pp": 0 + } + }, + "slotId": 4, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 104, + "hp": { + "max": 19, + "current": 2 + }, + "nature": "Gentle", + "move2": { + "name": "Ice Punch", + "pp": 15 + }, + "isGenderless": true, + "speciesName": "Goldeen", + "species": 118, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Starmie", + "levelMet": 4, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 4, + "hiddenpower": "Rock", + "move1": { + "name": "Mega Kick", + "pp": 3 + }, + "pokerus": 0, + "evs": { + "atk": 0, + "def": 0, + "spatk": 0, + "spd": 1, + "spdef": 0, + "hp": 0 + }, + "isFemale": false, + "heldItem": 0, + "pid": 1446441871, + "ivs": { + "atk": 27, + "def": 6, + "spatk": 13, + "spd": 22, + "spdef": 14, + "hp": 25 + }, + "locationMet": 19, + "move3": { + "name": "Overheat", + "pp": 5 + } + }, + "slotId": 5, + "changeId": 0 + }, { + "pokemon": { + "isEgg": 0, + "exp": 703, + "hp": { + "max": 31, + "current": 31 + }, + "nature": "Adamant", + "move2": { + "name": "Fire Punch", + "pp": 15 + }, + "isGenderless": true, + "speciesName": "Whismur", + "species": 293, + "status": { + "psn": 0, + "slp": 0, + "par": 0, + "fzn": 0, + "brn": 0 + }, + "nickname": "Whismurp", + "levelMet": 0, + "isShiny": false, + "move4": { + "pp": 0 + }, + "ability": "--", + "level": 10, + "hiddenpower": "Fighting", + "move1": { + "name": "Ice Punch", + "pp": 15 + }, + "pokerus": 0, + "evs": { + "atk": 3, + "def": 2, + "spatk": 0, + "spd": 4, + "spdef": 1, + "hp": 0 + }, + "isFemale": false, + "heldItem": 0, + "pid": 3985898503, + "ivs": { + "atk": 3, + "def": 14, + "spatk": 26, + "spd": 20, + "spdef": 2, + "hp": 9 + }, + "locationMet": 146, + "move3": { + "pp": 0 + } + }, + "slotId": 6, + "changeId": 0 + }], + "boxes": [], + "pokedex": { + "stats": { + "seen": 0, + "caught": 0, + "dead": 0 + }, + "seen": [], + "caught": [], + "dead": [] + } +}] +``` + +## Settings +Settings are overridden in the following order + - ./assets/js/defaultSettings.js + - ./themes/{themeName}/assets/js/themeSettings.js + - ./clientSettings.js + +This means any settings in `defaultSettings.js` will be overridden by the `themeSettings.js` file within the theme folders. Then the merged settings from `defaultSettings.js` and `themeSettings.js` will be overriden by `clientSettings.js` file. \ No newline at end of file diff --git a/themes/sword-shield-detailed/assets/css/styles.css b/themes/sword-shield-detailed/assets/css/styles.css index bbe28ec..144756c 100644 --- a/themes/sword-shield-detailed/assets/css/styles.css +++ b/themes/sword-shield-detailed/assets/css/styles.css @@ -257,17 +257,22 @@ } -.badges {} - .badge__slot { - display: block; - float: left; - } - .badge__slot img { - width: 100px; - } - .badge__slot--inactive img { - -webkit-filter: grayscale(100%) brightness(0); - filter: grayscale(100%) brightness(0); - opacity: 0.6; - } \ No newline at end of file + .badges {} + .badge__slot { + display: block; + float: left; + } + + .badge__slot img { + width: 100px; + } + .badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; + } + +.browser-connected { + display: block !important; +} diff --git a/themes/sword-shield-detailed/badges.html b/themes/sword-shield-detailed/badges.html index 7b9c270..4fcc44e 100644 --- a/themes/sword-shield-detailed/badges.html +++ b/themes/sword-shield-detailed/badges.html @@ -5,26 +5,11 @@ Badges - - - + - + - - + - - + - - + - - + - - + - + diff --git a/themes/template/index.html b/themes/template/index.html old mode 100755 new mode 100644 index 479b3b5..f156213 --- a/themes/template/index.html +++ b/themes/template/index.html @@ -5,25 +5,10 @@ Pkmn - - - + - - + - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/unite-team-list/deaths.html b/themes/unite-team-list/deaths.html new file mode 100644 index 0000000..15f17cd --- /dev/null +++ b/themes/unite-team-list/deaths.html @@ -0,0 +1,81 @@ + + + + + + + Pkmn + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/unite-team-list/index.html b/themes/unite-team-list/index.html new file mode 100644 index 0000000..d71fdd4 --- /dev/null +++ b/themes/unite-team-list/index.html @@ -0,0 +1,85 @@ + + + + + + + Pkmn + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/unite-team-list/readme.md b/themes/unite-team-list/readme.md new file mode 100644 index 0000000..06c9810 --- /dev/null +++ b/themes/unite-team-list/readme.md @@ -0,0 +1,20 @@ +# Unite Team List +This is a theme built by [Jezzabel](https://twitter.com/ThatStreamerJez) + +## Preview +![Preview of the Unite-Style Team List](assets/preview.png) + +## Features + - **Subtle HP Bars** are shown just above the Pokémon's name. + - **Level** is shown next to the pokemon's sprite + - **Gender** is shown next to the pokemon's sprite + - **Full Generation Support** - All Pokémon who have a Pokémon home sprite will work using this theme. + - **Health Bar** is shown in varying colours depending on the percentage of remaining health + - **Animated Slot Switching** When switching pokemon in your party, the pokemon will slide out, then slide into their new respective slots. + - **Fainted pokemon** When a pokemon faints, it will "grey-out". + + +## Settings + +### Responsive layout +You can change this layout to be responsive (so it goes horizontal and stacks properly), just add `&responsive=true` in the URL \ No newline at end of file diff --git a/themes/x-monthly/assets/css/styles.css b/themes/x-monthly/assets/css/styles.css index d8d8e89..7ac986b 100644 --- a/themes/x-monthly/assets/css/styles.css +++ b/themes/x-monthly/assets/css/styles.css @@ -2,6 +2,20 @@ margin-top: 110px; } + .no-connection { + position: fixed; + width: 100vw; + height: 100vh; + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; + text-shadow: 3px 3px 0px black; + top: 0; + font-family: monospace; +} .pokes.browser-connected { display: block !important; } diff --git a/themes/x-monthly/badges.html b/themes/x-monthly/badges.html index 7b9c270..4fcc44e 100644 --- a/themes/x-monthly/badges.html +++ b/themes/x-monthly/badges.html @@ -5,26 +5,11 @@ Badges - - - + - - + + + + + + + + + + + +
+
+
+
+ {{ category }}: {{ badges.filter(x => x.obtained && x.localeCategory === category).length }} / {{ badges.filter(x => x.localeCategory === category).length }} +
+
+
{{ category }}
+
+
+
+ +
+
+
+
+
+
+ {{ badges.filter(x => x.obtained).length }} / {{ badges.length }} +
+
+ +
+
+
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + diff --git a/v2/badges/tsconfig.json b/v2/badges/tsconfig.json new file mode 100644 index 0000000..7478f07 --- /dev/null +++ b/v2/badges/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ES2022", + "esModuleInterop": true, + "allowJs": false, + "strict": true, + "moduleResolution": "node", + "skipLibCheck": true, + "declaration": false, + "baseUrl": "./", + "sourceMap": true, + "paths": { + "pokelink": [ + "../assets/dist/pokelink" + ] + } + }, + "include": [ + "./**/*" + ], + "exclude": [ + "../assets" + ] +} diff --git a/v2/buf.gen.yaml b/v2/buf.gen.yaml new file mode 100644 index 0000000..214d275 --- /dev/null +++ b/v2/buf.gen.yaml @@ -0,0 +1,9 @@ +version: v2 +managed: + enabled: true +inputs: + - directory: assets/proto +plugins: + - local: protoc-gen-es + out: assets/js + opt: target=ts \ No newline at end of file diff --git a/v2/dev-tools/theme-preview/index.html b/v2/dev-tools/theme-preview/index.html new file mode 100644 index 0000000..3e6957c --- /dev/null +++ b/v2/dev-tools/theme-preview/index.html @@ -0,0 +1,41 @@ + + + + + PokeLink v2 Theme Preview + + + +

PokeLink v2 Theme Preview

+ +
+ + + + +
+ +
+
+
+ +
+ +
+
+ +

All themes

+
+ + + + diff --git a/v2/dev-tools/theme-preview/preview.css b/v2/dev-tools/theme-preview/preview.css new file mode 100644 index 0000000..a5f7020 --- /dev/null +++ b/v2/dev-tools/theme-preview/preview.css @@ -0,0 +1,164 @@ +* { + box-sizing: border-box; +} + +body { + margin: 0; + padding: 16px; + background: #1e1e24; + color: #eee; + font-family: system-ui, -apple-system, Segoe UI, sans-serif; +} + +h1 { + margin: 0 0 12px; + font-size: 18px; +} + +.settings-bar { + display: flex; + align-items: end; + flex-wrap: wrap; + gap: 12px; + background: #2a2a33; + border-radius: 8px; + padding: 12px; + margin-bottom: 16px; +} + +.settings-bar label { + display: flex; + flex-direction: column; + font-size: 12px; + color: #aaa; + gap: 4px; +} + +.settings-bar input { + background: #1e1e24; + border: 1px solid #444; + color: #eee; + border-radius: 4px; + padding: 6px 8px; + font-size: 13px; + min-width: 160px; +} + +.settings-bar button { + background: #3a6df0; + border: none; + color: #fff; + border-radius: 4px; + padding: 8px 14px; + font-size: 13px; + cursor: pointer; + height: 32px; +} + +.settings-bar button:hover { + background: #2f5ad1; +} + +.primary-section { + margin-bottom: 24px; +} + +.primary-header { + display: flex; + justify-content: center; + align-items: center; + gap: 8px; + margin-bottom: 8px; + font-size: 14px; + color: #ccc; +} + +.primary-row { + display: flex; + align-items: center; + gap: 12px; +} + +.nav-button { + background: #2a2a33; + border: 1px solid #444; + color: #eee; + border-radius: 6px; + padding: 12px 16px; + font-size: 14px; + cursor: pointer; + flex-shrink: 0; +} + +.nav-button:hover { + background: #3a3a45; +} + +.primary-frame-wrap { + flex: 1; + aspect-ratio: 16 / 9; + background: #000; + border-radius: 8px; + overflow: hidden; + border: 2px solid #444; + position: relative; +} + +.primary-frame-wrap iframe { + position: absolute; + top: 0; + left: 0; + width: 1920px; + height: 1080px; + border: 0; + transform-origin: top left; +} + +.grid-heading { + font-size: 14px; + color: #ccc; + margin: 0 0 8px; +} + +.theme-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 12px; +} + +.theme-cell { + background: #2a2a33; + border: 2px solid #444; + border-radius: 8px; + overflow: hidden; + cursor: pointer; +} + +.theme-cell.active { + border-color: #3a6df0; +} + +.theme-cell-label { + font-size: 12px; + padding: 6px 8px; + color: #ccc; + background: #1e1e24; +} + +.theme-cell-frame { + aspect-ratio: 16 / 9; + background: #000; + overflow: hidden; + position: relative; +} + +.theme-cell-frame iframe { + position: absolute; + top: 0; + left: 0; + width: 1920px; + height: 1080px; + border: 0; + transform-origin: top left; + pointer-events: none; +} diff --git a/v2/dev-tools/theme-preview/preview.js b/v2/dev-tools/theme-preview/preview.js new file mode 100644 index 0000000..f94a130 --- /dev/null +++ b/v2/dev-tools/theme-preview/preview.js @@ -0,0 +1,188 @@ +// Update this list when themes are added to or removed from v2/themes/. +const THEMES = [ + 'basic-card', + 'bdsp-battle-style-hud', + 'big-numbers', + 'default', + 'digital-hex', + 'fading-card-art', + 'friday', + 'gameboy', + 'jezzabel-personal', + 'letsgo', + 'mass-multiplayer', + 'pokeball', + 'rescue-team-dx', + 'simple-circles', + 'sports-game-scores', + 'sprite-only', + 'sprite-test', + 'stick-it-down', + 'sword-shield-team', + 'trozei', + 'twitch-plays-pokemon', +] + +const SETTINGS_KEY = 'pokelink-theme-preview-settings' + +// Themes assume an OBS-style 1920x1080 canvas. Every iframe is rendered at +// that fixed size and scaled down with a CSS transform to fit its container, +// rather than being given a small viewport (which would reflow the layout). +const CANVAS_WIDTH = 1920 +const CANVAS_HEIGHT = 1080 + +let currentIndex = 0 + +// One iframe per theme, created once and never re-parented away from the +// DOM. Navigating just moves the existing element between the primary slot +// and its grid cell, so its WebSocket connection is never dropped/reloaded. +const iframesByTheme = new Map() +const gridSlotsByTheme = new Map() +let primaryFrameWrap + +const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + rescale(entry.target) + } +}) + +function loadSettings() { + const stored = JSON.parse(localStorage.getItem(SETTINGS_KEY) || '{}') + return { + server: stored.server || 'localhost', + port: stored.port || '3000', + users: stored.users || '', + } +} + +function saveSettings(settings) { + localStorage.setItem(SETTINGS_KEY, JSON.stringify(settings)) +} + +function readSettingsFromInputs() { + return { + server: document.getElementById('setting-server').value.trim() || 'localhost', + port: document.getElementById('setting-port').value.trim() || '3000', + users: document.getElementById('setting-users').value.trim(), + } +} + +function themeUrl(themeName, settings) { + const params = new URLSearchParams() + params.set('server', settings.server) + params.set('port', settings.port) + if (settings.users) { + params.set('users', settings.users) + } + return `../../themes/${themeName}/index.html?${params.toString()}` +} + +function rescale(containerEl) { + const iframe = containerEl.querySelector('iframe') + if (!iframe) { + return + } + const scale = containerEl.clientWidth / CANVAS_WIDTH + iframe.style.transform = `scale(${scale})` +} + +function updateLabelAndHighlight() { + const themeName = THEMES[currentIndex] + document.getElementById('primary-label').textContent = + `${themeName} (${currentIndex + 1} / ${THEMES.length})` + + document.querySelectorAll('.theme-cell').forEach((cell, index) => { + cell.classList.toggle('active', index === currentIndex) + }) +} + +function setCurrentIndex(index) { + const newIndex = (index + THEMES.length) % THEMES.length + if (newIndex === currentIndex) { + return + } + + const oldTheme = THEMES[currentIndex] + const newTheme = THEMES[newIndex] + + // Move the outgoing iframe back into its grid cell, and the incoming + // iframe into the primary slot. Neither iframe's src changes, so neither + // reloads/reconnects. + gridSlotsByTheme.get(oldTheme).appendChild(iframesByTheme.get(oldTheme)) + primaryFrameWrap.appendChild(iframesByTheme.get(newTheme)) + + currentIndex = newIndex + rescale(gridSlotsByTheme.get(oldTheme)) + rescale(primaryFrameWrap) + updateLabelAndHighlight() +} + +function reloadAll() { + const settings = readSettingsFromInputs() + saveSettings(settings) + + iframesByTheme.forEach((iframe, themeName) => { + iframe.src = themeUrl(themeName, settings) + }) +} + +function createIframe(themeName, settings) { + const iframe = document.createElement('iframe') + iframe.dataset.theme = themeName + iframe.width = CANVAS_WIDTH + iframe.height = CANVAS_HEIGHT + iframe.src = themeUrl(themeName, settings) + return iframe +} + +function buildGrid() { + const grid = document.getElementById('theme-grid') + const settings = loadSettings() + + THEMES.forEach((themeName, index) => { + const cell = document.createElement('div') + cell.className = 'theme-cell' + cell.addEventListener('click', () => setCurrentIndex(index)) + + const label = document.createElement('div') + label.className = 'theme-cell-label' + label.textContent = themeName + cell.appendChild(label) + + const frameWrap = document.createElement('div') + frameWrap.className = 'theme-cell-frame' + cell.appendChild(frameWrap) + + grid.appendChild(cell) + gridSlotsByTheme.set(themeName, frameWrap) + resizeObserver.observe(frameWrap) + + const iframe = createIframe(themeName, settings) + iframesByTheme.set(themeName, iframe) + + if (index === currentIndex) { + primaryFrameWrap.appendChild(iframe) + } else { + frameWrap.appendChild(iframe) + } + }) +} + +function init() { + primaryFrameWrap = document.getElementById('primary-frame-wrap') + resizeObserver.observe(primaryFrameWrap) + + const settings = loadSettings() + document.getElementById('setting-server').value = settings.server + document.getElementById('setting-port').value = settings.port + document.getElementById('setting-users').value = settings.users + + document.getElementById('back-button').addEventListener('click', () => setCurrentIndex(currentIndex - 1)) + document.getElementById('next-button').addEventListener('click', () => setCurrentIndex(currentIndex + 1)) + document.getElementById('reload-button').addEventListener('click', reloadAll) + + buildGrid() + updateLabelAndHighlight() +} + +document.addEventListener('DOMContentLoaded', init) diff --git a/v2/graveyards.json b/v2/graveyards.json new file mode 100644 index 0000000..8cafda7 --- /dev/null +++ b/v2/graveyards.json @@ -0,0 +1,36 @@ +{ + "version": 2, + "graveyards": [ + { + "name": "Pokelink.Graveyards.Default.name", + "translate": true, + "developer": "Pokélink", + "url": "https://assets.pokelink.xyz/v2/graveyards/default/", + "options": [ + { + "key": "counter", + "name": "Pokelink.Graveyards.Default.counter.name", + "description": "Pokelink.Graveyards.Default.counter.description", + "translate": true, + "type": "boolean", + "default": true + }, + { + "key": "showNames", + "name": "Pokelink.Graveyards.Default.showNames", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "scroll", + "name": "Pokelink.Graveyards.Default.scroll.name", + "description": "Pokelink.Graveyards.Default.scroll.description", + "translate": true, + "type": "boolean", + "default": false + } + ] + } + ] +} \ No newline at end of file diff --git a/v2/graveyards/default/assets/RifficFree-Bold.ttf b/v2/graveyards/default/assets/RifficFree-Bold.ttf new file mode 100644 index 0000000..428793e Binary files /dev/null and b/v2/graveyards/default/assets/RifficFree-Bold.ttf differ diff --git a/v2/graveyards/default/assets/css/styles.css b/v2/graveyards/default/assets/css/styles.css new file mode 100644 index 0000000..f10e172 --- /dev/null +++ b/v2/graveyards/default/assets/css/styles.css @@ -0,0 +1,437 @@ +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap'); +/* @font-face{font-family:RifficFree;src:local("RifficFree"),url("https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap")} */ +@font-face{font-family:RifficFree;src:local("RifficFree"),url("../RifficFree-Bold.ttf")} + +* { + /* font-family: "Riffic Free"; */ + font-family: 'Noto Sans', sans-serif; +} +.pokes { + /* margin-top: 110px; */ +} + +.browser-connected { + display: block !important; +} + +.pokemon__list { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} +.deaths__list { + display: flex; + flex-wrap: wrap; + flex-direction: row; +} +.deaths__list .deaths__pokemon .pokemon__name{ + color: #000; + margin-top: 8px; + text-align: center; + font-weight: bold; + font-family: RifficFree; + text-shadow: 1px 1px 2px #fff; +} +.deaths__list .deaths__pokemon .pokemon__image{ + display: flex; + justify-content: center; +} +.deaths__list .deaths__pokemon .pokemon__image img{ + width: -webkit-fill-available; +} +.deaths__list .deaths__pokemon { + max-width: 100px; + margin-right: 20px; +} + + +@-webkit-keyframes ticker { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes ticker { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} +.deaths:has(.marquee) { + width: 100%; + overflow: hidden; + box-sizing: content-box; + padding-left: 100%; +} +.deaths .deaths__list.marquee { + flex-wrap: nowrap; + flex-direction: row; + white-space: nowrap; + padding-right: 100%; + box-sizing: content-box; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + -webkit-animation-name: ticker; + animation-name: ticker; + -webkit-animation-duration: 30s; + animation-duration: 30s; +} + +.darkMode { + color: #fff !important; +} + +.pokemon { + height: 80px; + margin-bottom: 18px; +} + +.pokemon.isDead { + opacity: 0.8; +} + +.pokemon > div { + height: 100%; +} + +.pokemon-image__wrapper { + width: 80px; + height: 80px; + border-radius: 4px 0 0 45px; +} + +.pokemon .pokemon__details { + width: 300px; + height: 80px; + background: #fffbe9; + display: flex; + flex-direction: row; + align-self: flex-end; + font-weight: bold; + font-size: 19pt; + justify-content: space-between; + border-radius: 0 4px 4px 0; + position: relative; +} +.pokemon .pokemon__details .pokemon__level{ + font-size: 80%; + font-weight: bold; + padding: 13px; + +} +.pokemon .pokemon__details .pokemon__name{ + padding: 13px; +} + +.pokemon .hp { + height: 5px; + position: absolute; + width: 100%; + bottom: 0px; +} +.pokemon .exp { + height: 5px; + position: absolute; + width: 100%; + top: 0px; +} + + +.pokemon__list .pokemon .hp .hp__inner { + background: #27ff00; + transition: width 2s; + height: 100%; + align-self: flex-end; + width: 12px; +} + +.pokemon .exp .exp__inner { + background-color: cyan; + transition: width 2s; + height: 100%; + align-self: flex-end; + width: 12px; + +} + +.pokemon__list .pokemon.isPoisoned .hp .hp__inner { + background: purple; +} + +.pokemon__list .pokemon.isParalyzed .hp .hp__inner { + background: yellow; +} + +.pokemon__list .pokemon.isFrozen .hp .hp__inner { + background: rgb(111, 255, 255); +} + +.pokemon__list .pokemon.isBurned .hp .hp__inner { + background: #ff7d4d; +} +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + + +.pokemon .pokemon__image { + /* height: 100%; */ + /* display: flex; */ + height: 100%; + width: 100%; + left: -1%; + position: relative; + top: -10%; + display: flex; + flex-direction: column; + align-content: center; + flex-wrap: nowrap; + justify-content: center; + align-items: center; +} + +.pokemon .pokemon__image .sprite { + /* max-height: -webkit-fill-available; */ + /* padding-right: 12px; */ + /* align-self: center; + justify-self: center; */ + height: 90%; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +@keyframes takeDamage { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes poisoned { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes shake { + 10%, 90% { + transform: scale(2) translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: scale(2) translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: scale(2) translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: scale(2) translate3d(4px, 0, 0); + } +} + + +.sleeping { + width: 200px; + height: 200px; + position: absolute; + top: -50px; + left: 94%; + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 11; +} + +.sleeping span { + font-family: "RifficFree"; + color: #d4d4d4; + position: absolute; + bottom: 10px; + left: 10px; + font-size: 23pt; + opacity: 0; + -moz-animation: sleep 9s infinite linear; + -webkit-animation: sleep 9s infinite linear; + animation: sleep 9s infinite linear; +} +.sleeping span:nth-child(2n) { + -moz-animation-delay: 3s; + -webkit-animation-delay: 3s; + animation-delay: 3s; +} +.sleeping span:nth-child(3n) { + -moz-animation-delay: 6s; + -webkit-animation-delay: 6s; + animation-delay: 6s; +} + +@-webkit-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-moz-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-ms-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} diff --git a/v2/graveyards/default/assets/js/components/pokeImg.vue.js b/v2/graveyards/default/assets/js/components/pokeImg.vue.js new file mode 100644 index 0000000..f4e4e4b --- /dev/null +++ b/v2/graveyards/default/assets/js/components/pokeImg.vue.js @@ -0,0 +1,22 @@ +import { defineComponent } from 'vue'; +import { V2 } from 'pokelink'; +export default defineComponent({ + template: ` + + `, + props: { + pokemon: { + type: Object, + required: true + } + }, + methods: { + getSprite() { + return V2.getSprite(this.pokemon); + }, + useFallback() { + V2.useFallback(this.$refs.pokeImg, this.pokemon); + } + } +}); +//# sourceMappingURL=pokeImg.vue.js.map \ No newline at end of file diff --git a/v2/graveyards/default/assets/js/components/pokeImg.vue.js.map b/v2/graveyards/default/assets/js/components/pokeImg.vue.js.map new file mode 100644 index 0000000..b5ffc38 --- /dev/null +++ b/v2/graveyards/default/assets/js/components/pokeImg.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokeImg.vue.js","sourceRoot":"","sources":["pokeImg.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAW,MAAM,KAAK,CAAA;AAE7C,OAAO,EAAC,EAAE,EAAC,MAAM,UAAU,CAAA;AAG3B,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;KAET;IACD,KAAK,EAAE;QACH,OAAO,EAAE;YACL,IAAI,EAAE,MAA2B;YACjC,QAAQ,EAAE,IAAI;SACjB;KACJ;IACD,OAAO,EAAE;QACL,SAAS;YACL,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;QACD,WAAW;YACP,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAA2B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACxE,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/graveyards/default/assets/js/components/pokeImg.vue.ts b/v2/graveyards/default/assets/js/components/pokeImg.vue.ts new file mode 100644 index 0000000..a6fe433 --- /dev/null +++ b/v2/graveyards/default/assets/js/components/pokeImg.vue.ts @@ -0,0 +1,24 @@ +import {defineComponent, PropType} from 'vue' +import type {Pokemon} from 'v2Proto' +import {V2} from 'pokelink' + + +export default defineComponent({ + template: ` + + `, + props: { + pokemon: { + type: Object as PropType, + required: true + } + }, + methods: { + getSprite() { + return V2.getSprite(this.pokemon) + }, + useFallback() { + V2.useFallback(this.$refs.pokeImg as HTMLImageElement, this.pokemon) + } + } +}) \ No newline at end of file diff --git a/v2/graveyards/default/assets/js/deathCounter.js b/v2/graveyards/default/assets/js/deathCounter.js new file mode 100644 index 0000000..38e233f --- /dev/null +++ b/v2/graveyards/default/assets/js/deathCounter.js @@ -0,0 +1,76 @@ +import { createApp } from 'vue'; +import { clientSettings, isDefined, V2 } from 'pokelink'; +import pokeImg from './components/pokeImg.vue.js'; +function sortDeaths(x, y) { + let f = x.graveyardMeta?.timeOfDeath?.seconds; + let l = y.graveyardMeta?.timeOfDeath?.seconds; + if (!isDefined(f) || !isDefined(l)) { + return 0; + } + if (f > l) { + return 1; + } + if (f < l) { + return -1; + } + return 0; +} +(() => { + createApp({ + components: { + pokeImg: pokeImg + }, + data: function () { + return { + connected: false, + loaded: false, + deaths: [], + prefixText: '' + }; + }, + created: function () { + this.loaded = true; + }, + mounted: function () { + const vm = this; + V2.initialize({ listenForSpriteUpdates: false }); + this.prefixText = clientSettings.params.getString('prefixText', ''); + V2.onGraveyardUpdate((graveyard) => { + vm.deaths = graveyard.sort(sortDeaths); + }); + V2.onDeath((pokemon) => { + let deaths = vm.deaths; + deaths.push(pokemon); + vm.deaths = deaths.sort(sortDeaths); + }); + V2.onRevive((graveId) => { + vm.deaths = vm.deaths.filter((x) => x.graveyardMeta?.id !== graveId); + }); + V2.onSpriteTemplateUpdate(() => { + const deaths = vm.deaths; + vm.deaths = []; + vm.deaths = deaths; + vm.$forceUpdate(); + }); + V2.onConnect(() => { + vm.connected = true; + vm.loaded = true; + }); + }, + computed: { + showCounter() { + return clientSettings.params.getBool('counter', true); + // return this.type === VIEW_TYPE_COUNTER + }, + showNames() { + return clientSettings.params.getBool('showNames', false); + // return this.type === VIEW_TYPE_COUNTER + }, + scroll() { + return clientSettings.params.getBool('scroll', false); + // return this.type === VIEW_TYPE_COUNTER + } + } + }).mount('#deaths'); +})(); +//# sourceMappingURL=deathCounter.js.map \ No newline at end of file diff --git a/v2/graveyards/default/assets/js/deathCounter.js.map b/v2/graveyards/default/assets/js/deathCounter.js.map new file mode 100644 index 0000000..69fee1d --- /dev/null +++ b/v2/graveyards/default/assets/js/deathCounter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"deathCounter.js","sourceRoot":"","sources":["deathCounter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/graveyards/default/assets/js/deathCounter.ts b/v2/graveyards/default/assets/js/deathCounter.ts new file mode 100644 index 0000000..bac2470 --- /dev/null +++ b/v2/graveyards/default/assets/js/deathCounter.ts @@ -0,0 +1,93 @@ +import {createApp} from 'vue' +import {clientSettings, isDefined, V2} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import pokeImg from './components/pokeImg.vue.js' + +function sortDeaths(x: Pokemon, y: Pokemon) { + let f = x.graveyardMeta?.timeOfDeath?.seconds + let l = y.graveyardMeta?.timeOfDeath?.seconds + + if (!isDefined(f) || !isDefined(l)) { + return 0 + } + + if (f! > l!) { + return 1; + } + + if (f! < l!) { + return -1 + } + + return 0 +} + +(() => { + createApp({ + components: { + pokeImg: pokeImg + }, + data: function () { + return { + connected: false, + loaded: false, + deaths: [] as Pokemon[], + prefixText: '' + } + }, + created: function () { + this.loaded = true + }, + mounted: function () { + const vm = this + + V2.initialize({listenForSpriteUpdates: false}) + + this.prefixText = clientSettings.params.getString('prefixText', '')! + + V2.onGraveyardUpdate((graveyard) => { + vm.deaths = graveyard.sort(sortDeaths) + }) + + V2.onDeath((pokemon) => { + let deaths = vm.deaths + deaths.push(pokemon) + + vm.deaths = deaths.sort(sortDeaths) + }) + + V2.onRevive((graveId) => { + vm.deaths = vm.deaths.filter((x: Pokemon) => x.graveyardMeta?.id !== graveId) + }) + + V2.onSpriteTemplateUpdate(() => { + const deaths = vm.deaths + + vm.deaths = [] + + vm.deaths = deaths + + vm.$forceUpdate() + }) + + V2.onConnect(() => { + vm.connected = true + vm.loaded = true + }) + }, + computed: { + showCounter() { + return clientSettings.params.getBool('counter', true) + // return this.type === VIEW_TYPE_COUNTER + }, + showNames() { + return clientSettings.params.getBool('showNames', false) + // return this.type === VIEW_TYPE_COUNTER + }, + scroll() { + return clientSettings.params.getBool('scroll', false) + // return this.type === VIEW_TYPE_COUNTER + } + } + }).mount('#deaths') +})() \ No newline at end of file diff --git a/v2/graveyards/default/index.html b/v2/graveyards/default/index.html new file mode 100644 index 0000000..8550abf --- /dev/null +++ b/v2/graveyards/default/index.html @@ -0,0 +1,57 @@ + + + + + + + Deaths + + + + + + + + +
+
+
+ {{prefixText}}{{deaths.length}} +
+
+ +
+
+
{{pokemon.nickname || pokemon.translations.locale.speciesName}}
+
+
+
+
+
+ + + + + diff --git a/v2/graveyards/tsconfig.json b/v2/graveyards/tsconfig.json new file mode 100644 index 0000000..c91c9a6 --- /dev/null +++ b/v2/graveyards/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ES2022", + "esModuleInterop": true, + "allowJs": false, + "strict": true, + "moduleResolution": "node", + "skipLibCheck": true, + "declaration": false, + "baseUrl": "./", + "sourceMap": true, + "paths": { + "pokelink": [ + "../assets/dist/pokelink" + ], + "global": [ + "../assets/dist/global" + ], + "v2Proto": [ + "../assets/dist/v2_pb" + ] + } + }, + "include": [ + "./**/*" + ], + "exclude": [ + "../assets" + ] +} diff --git a/v2/package.json b/v2/package.json new file mode 100644 index 0000000..a4ae747 --- /dev/null +++ b/v2/package.json @@ -0,0 +1,41 @@ +{ + "name": "pokelink_themes_v2", + "version": "2.0.0", + "description": "", + "license": "MIT", + "repository": "https://github.com/pokelinkapp/pokelink-web", + "type": "module", + "engines": { + "node": ">=20 <25" + }, + "scripts": { + "prep": "yarn install", + "build:themes": "yarn build:core && yarn build:themes:nodeps", + "build:themes:nodeps": "yarn tsc -p ./themes/tsconfig.json", + "build:badges": "yarn build:core && yarn build:badges:nodeps", + "build:badges:nodeps": "yarn tsc -p ./badges/tsconfig.json", + "build:graveyards": "yarn build:core && yarn build:badges:nodeps", + "build:graveyards:nodeps": "yarn tsc -p ./graveyards/tsconfig.json", + "build:core": "yarn tsc -p ./assets/tsconfig.json && yarn webpack --config webpack.config.js", + "build": "cross-env-shell NODE_OPTIONS=--no-experimental-webstorage \"yarn prep && yarn buf generate && yarn build:core && yarn build:themes:nodeps && yarn build:badges:nodeps && yarn build:graveyards:nodeps\"" + }, + "dependencies": { + "@bufbuild/buf": "^1.51.0", + "@bufbuild/protobuf": "^2.2.5", + "@bufbuild/protoc-gen-es": "^2.2.5", + "@types/color-hash": "^2.0.0", + "collect.js": "^4.36.1", + "color-hash": "^2.0.2", + "esbuild-loader": "^4.3.0", + "handlebars": "^4.7.8", + "run-script-os": "^1.1.6", + "typescript": "^5.8.2", + "vue": "^3.5.13", + "vue-tsc": "^2.2.8", + "webpack": "^5.98.0", + "webpack-cli": "^6.0.1" + }, + "devDependencies": { + "cross-env": "^7.0.3" + } +} diff --git a/v2/sprites.json b/v2/sprites.json new file mode 100755 index 0000000..b4dacdd --- /dev/null +++ b/v2/sprites.json @@ -0,0 +1,544 @@ +{ + "version": 2, + "spriteSets": [ + { + "id": "pokelink:artwork", + "name": "Pokelink.SpriteSets.Artwork.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/artwork/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:black-white", + "name": "Pokelink.SpriteSets.BlackWhite.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/black-white/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:crystal", + "name": "Pokelink.SpriteSets.Crystal.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": false, + "supportedGenerations": [ + 1, + 2 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/crystal/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}.png" + }, + { + "id": "pokelink:crystal:animated", + "name": "Pokelink.SpriteSets.Crystal.animated", + "translate": true, + "developer": "Pokélink", + "animated": true, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/crystal/{{ifElse isShiny \"animated-shiny\" \"animated-normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}.gif" + }, + { + "id": "pokelink:diamond-pearl", + "name": "Pokelink.SpriteSets.DiamondPearl.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/diamond-pearl/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:fireRed-leafGreen", + "name": "Pokelink.SpriteSets.FireRedLeafGreen.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/firered-leafgreen/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}.png" + }, + { + "id": "pokelink:generation:5", + "name": "Pokelink.SpriteSets.Generation.five", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/gen5/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}.png" + }, + { + "id": "pokelink:generation:5:animated", + "name": "Pokelink.SpriteSets.Generation.fiveAnimated", + "translate": true, + "developer": "Pokélink", + "animated": true, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/gen5/{{ifElse isShiny \"animated-shiny\" \"animated\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.gif" + }, + { + "id": "pokelink:generation:6", + "name": "Pokelink.SpriteSets.Generation.six", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/gen6/normal/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:generation:6:animated", + "name": "Pokelink.SpriteSets.Generation.sixAnimated", + "translate": true, + "developer": "Pokélink", + "animated": true, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/gen6/{{ifElse isShiny \"animated-shiny\" \"animated\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.gif" + }, + { + "id": "pokelink:generation:7", + "name": "Pokelink.SpriteSets.Generation.seven", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/normal/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:generation:7:animated", + "name": "Pokelink.SpriteSets.Generation.sevenAnimated", + "translate": true, + "developer": "Pokélink", + "animated": true, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/{{ifElse isShiny \"animated-shiny\" \"animated\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.gif" + }, + { + "id": "pokelink:generation:8:party", + "name": "Pokelink.SpriteSets.Generation.eightParty", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/gen8/party/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:green", + "name": "Pokelink.SpriteSets.Green.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": false, + "supportedGenerations": [ + 1 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/green/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}.png" + }, + { + "id": "pokelink:heartgold-soulsilver", + "name": "Pokelink.SpriteSets.HeartGoldSoulSilver.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": false, + "supportedGenerations": [ + 1, + 2, + 3, + 4 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/heartgold-soulsilver/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:home", + "name": "Pokelink.SpriteSets.Home.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/home/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:home:animated", + "name": "Pokelink.SpriteSets.Home.animated", + "translate": true, + "developer": "Pokélink", + "animated": true, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/home/{{ifElse isShiny \"animated-shiny\" \"animated\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.gif" + }, + { + "id": "pokelink:legends:za", + "name": "Pokelink.SpriteSets.LegendsZA.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/legendsz-a/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (underscoreSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:moemon", + "name": "Pokelink.SpriteSets.Moemon.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": false, + "supportedGenerations": [ + 1, + 2, + 3 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/moemon/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}.png" + }, + { + "id": "pokelink:national:animated", + "name": "Pokelink.SpriteSets.National.animated", + "translate": true, + "developer": "Pokélink", + "animated": true, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/national/{{ifElse isShiny \"animated-shiny\" \"animated\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.gif" + }, + { + "id": "pokelink:national:party", + "name": "Pokelink.SpriteSets.National.party", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/national/party/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}.png" + }, + { + "id": "pokelink:pkhex:party", + "name": "Pokelink.SpriteSets.PKHeX.party", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/pkhex/party/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}.png" + }, + { + "id": "pokelink:platinum", + "name": "Pokelink.SpriteSets.Platinum.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/platinum/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:red-blue", + "name": "Pokelink.SpriteSets.RedBlue.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": false, + "supportedGenerations": [ + 1 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/red-blue/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}.png" + }, + { + "id": "pokelink:rescue-team-dx", + "name": "Pokelink.SpriteSets.RescueTeamDX.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": false, + "supportedGenerations": [ + 1, + 2, + 3 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/rescue-team-dx/normal/{{ species }}.png" + }, + { + "id": "pokelink:rumble", + "name": "Pokelink.SpriteSets.Rumble.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": false, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/rumble/{{species}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:silver", + "name": "Pokelink.SpriteSets.Silver.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": true, + "forms": false, + "supportedGenerations": [ + 1, + 2 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/silver/{{ifElse isShiny \"shiny\" \"normal\"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}.png" + }, + { + "id": "pokelink:sugimori", + "name": "Sugimori", + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/sugimori/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:trozei", + "name": "Pokelink.SpriteSets.Trozei.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": false, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/trozei/{{ species }}.png" + }, + { + "id": "pokelink:x-y", + "name": "Pokelink.SpriteSets.XY.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": true, + "supportedGenerations": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/x-y/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}{{ifElse (isDefined translations.english.formName) (concat \"-\" (toLower (noSpaces translations.english.formName))) \"\"}}{{addFemaleTag this \"-f\"}}.png" + }, + { + "id": "pokelink:yellow", + "name": "Pokelink.SpriteSets.Yellow.name", + "translate": true, + "developer": "Pokélink", + "animated": false, + "shinySprites": false, + "forms": false, + "supportedGenerations": [ + 1 + ], + "templateString": "https://assets.pokelink.xyz/v2/sprites/pokemon/yellow/{{toLower (noSpaces (nidoranGender translations.english.speciesName \"\" \"-f\"))}}.png" + } + ] +} diff --git a/v2/themes.json b/v2/themes.json new file mode 100755 index 0000000..38ddf5d --- /dev/null +++ b/v2/themes.json @@ -0,0 +1,459 @@ +{ + "version": 2, + "themes": [ + { + "name": "Pokelink.Themes.BasicCard.name", + "developer": "Pokélink", + "translate": true, + "supports": { + "changingSprites": false + }, + "url": "https://assets.pokelink.xyz/v2/themes/basic-card/", + "options": [ + { + "key": "verticalPokemon", + "name": "Pokelink.Themes.BasicCard.verticalPokemon.name", + "description": "Pokelink.Themes.BasicCard.verticalPokemon.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "hp", + "name": "Pokelink.Themes.BasicCard.hp.name", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.BDSPBattleStyleHud.name", + "developer": "Pokélink", + "translate": true, + "supports": { + "changingSprites": false + }, + "url": "https://assets.pokelink.xyz/v2/themes/bdsp-battle-style-hud/", + "options": [] + }, + { + "name": "Pokelink.Themes.BigNumbers.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:heartgold-soulsilver", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/big-numbers/", + "options": [ + { + "key": "useCardArtBackground", + "name": "Pokelink.Themes.BigNumbers.useCardArt.name", + "description": "Pokelink.Themes.BigNumbers.useCardArt.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "useTypesGradient", + "name": "Pokelink.Themes.BigNumbers.typesGradient.name", + "description": "Pokelink.Themes.BigNumbers.typesGradient.description", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.Default.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:generation:7:animated", + "supports": { + "changingSprites": false + }, + "url": "https://assets.pokelink.xyz/v2/themes/default/", + "options": [ + { + "key": "color", + "name": "Pokelink.Themes.Default.color", + "translate": true, + "type": "string", + "default": "Route", + "options": [ + "Route", + "Pokemon" + ], + "optionTranslationPrefix": "Pokelink.Themes.Default" + }, + { + "key": "typeBackground", + "name": "Pokelink.Themes.Default.typeBackground.name", + "description": "Pokelink.Themes.Default.typeBackground.description", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.DigitalHex.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:home", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/digital-hex/", + "options": [ + { + "key": "staggered", + "name": "Pokelink.Themes.DigitalHex.staggered.name", + "description": "Pokelink.Themes.DigitalHex.staggered.description", + "translate": true, + "type": "boolean", + "default": true + }, + { + "key": "hideHPBar", + "name": "Pokelink.Themes.DigitalHex.hideHPBar.name", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.FadingCardArt.name", + "developer": "Pokélink", + "translate": true, + "supports": { + "changingSprites": false + }, + "url": "https://assets.pokelink.xyz/v2/themes/fading-card-art/", + "options": [ + { + "key": "flat", + "name": "Pokelink.Themes.FadingCardArt.flat.name", + "description": "Pokelink.Themes.FadingCardArt.flat.description", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.Friday.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:home", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/friday/", + "options": [ + { + "key": "darkMode", + "name": "Pokelink.Themes.Friday.darkMode.name", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.Gameboy.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:generation:8:party", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/gameboy/" + }, + { + "name": "Pokelink.Themes.JezzabelPersonal.name", + "developer": "Jezzabel", + "translate": true, + "defaultSpriteSet": "pokelink:home", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/jezzabel-personal/", + "options": [ + { + "key": "flipped", + "name": "Pokelink.Themes.JezzabelPersonal.flipped.name", + "description": "Pokelink.Themes.JezzabelPersonal.flipped.description", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.LetsGo.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:national:animated", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/letsgo/", + "options": [ + { + "key": "verticalPokemon", + "name": "Pokelink.Themes.LetsGo.verticalPokemon.name", + "description": "Pokelink.Themes.LetsGo.verticalPokemon.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "colorPokeball", + "name": "Pokelink.Themes.LetsGo.colorPokeball.name", + "description": "Pokelink.Themes.LetsGo.colorPokeball.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "colorBorder", + "name": "Pokelink.Themes.LetsGo.colorBorder.name", + "description": "Pokelink.Themes.LetsGo.colorBorder.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "colorBg", + "name": "Pokelink.Themes.LetsGo.colorBg.name", + "description": "Pokelink.Themes.LetsGo.colorBg.description", + "translate": true, + "type": "boolean", + "default": true + }, + { + "key": "color", + "name": "Pokelink.Themes.LetsGo.color", + "translate": true, + "type": "string", + "default": "type", + "options": [ + "pokemon", + "type", + "route" + ], + "optionTranslationPrefix": "Pokelink.Themes.LetsGo" + } + ] + }, + { + "name": "Pokelink.Themes.Pokeball.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:generation:7:animated", + "supports": { + "changingSprites": true + }, + "options": [ + { + "key": "hideLevel", + "name": "Pokelink.Themes.Pokeball.hideLevel", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "hideName", + "name": "Pokelink.Themes.Pokeball.hideName", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "hideHP", + "name": "Pokelink.Themes.Pokeball.hideHP", + "translate": true, + "type": "boolean", + "default": false + } + ], + "url": "https://assets.pokelink.xyz/v2/themes/pokeball/" + }, + { + "name": "Pokelink.Themes.RescueTeamDX.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:rescue-team-dx", + "supports": { + "changingSprites": false + }, + "url": "https://assets.pokelink.xyz/v2/themes/rescue-team-dx/" + }, + { + "name": "Pokelink.Themes.SimpleCircles.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:home", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/simple-circles/" + }, + { + "name": "Pokelink.Themes.SportsTicker.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:home", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/sports-game-scores/", + "options": [ + { + "key": "verticalPokemon", + "name": "Pokelink.Themes.SportsTicker.verticalPokemon.name", + "description": "Pokelink.Themes.SportsTicker.verticalPokemon.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "noGap", + "name": "Pokelink.Themes.SportsTicker.noGap.name", + "description": "Pokelink.Themes.SportsTicker.noGap.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "useCardArtBackground", + "name": "Pokelink.Themes.SportsTicker.useCardArtBackground.name", + "translate": true, + "type": "boolean", + "default": true + }, + { + "key": "hideLevels", + "name": "Pokelink.Themes.SportsTicker.hideLevels.name", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.SpriteOnly.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:home", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/sprite-only/" + }, + { + "name": "Pokelink.Themes.StickItDown.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:generation:7", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/stick-it-down/" + }, + { + "name": "Pokelink.Themes.SwordShieldTeam.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:pkhex:party", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/sword-shield-team/", + "options": [ + { + "key": "colorPokeball", + "name": "Pokelink.Themes.SwordShieldTeam.colorPokeball.name", + "description": "Pokelink.Themes.SwordShieldTeam.colorPokeball.description", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "colorBothSides", + "name": "Pokelink.Themes.SwordShieldTeam.colorBothSides.name", + "description": "Pokelink.Themes.SwordShieldTeam.colorBothSides.description", + "translate": true, + "type": "boolean", + "default": true + }, + { + "key": "color", + "name": "Pokelink.Themes.SwordShieldTeam.color.name", + "translate": true, + "type": "string", + "default": "type", + "options": [ + "pokemon", + "type", + "route" + ], + "optionTranslationPrefix": "Pokelink.Themes.SwordShieldTeam.color" + } + ] + }, + { + "name": "Pokelink.Themes.Trozei.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:trozei", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/trozei/", + "options": [ + { + "key": "hideLevel", + "name": "Pokelink.Themes.Trozei.hideLevel.name", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "hideNickname", + "name": "Pokelink.Themes.Trozei.hideNickname.name", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "hideHP", + "name": "Pokelink.Themes.Trozei.hideHP.name", + "translate": true, + "type": "boolean", + "default": false + }, + { + "key": "hideTypes", + "name": "Pokelink.Themes.Trozei.hideTypes.name", + "translate": true, + "type": "boolean", + "default": false + } + ] + }, + { + "name": "Pokelink.Themes.TwitchPlays.name", + "developer": "Pokélink", + "translate": true, + "defaultSpriteSet": "pokelink:heartgold-soulsilver", + "supports": { + "changingSprites": true + }, + "url": "https://assets.pokelink.xyz/v2/themes/twitch-plays-pokemon/" + } + ] +} diff --git a/v2/themes/_shared/components/heartGauge.vue.js b/v2/themes/_shared/components/heartGauge.vue.js new file mode 100644 index 0000000..3f1495f --- /dev/null +++ b/v2/themes/_shared/components/heartGauge.vue.js @@ -0,0 +1,45 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` +
+
+ +
+ `, + props: { + pokemon: { + type: Object, + required: true + }, + orientation: { + type: String, + default: 'horizontal' + }, + segmented: { + type: Boolean, + default: true + } + }, + computed: { + heartGaugeRemaining() { + return `${this.pokemon.heartGaugePercentage ?? 0}%`; + }, + innerStyle() { + return this.orientation === 'vertical' + ? { height: this.heartGaugeRemaining } + : { width: this.heartGaugeRemaining }; + } + } +}); +//# sourceMappingURL=heartGauge.vue.js.map \ No newline at end of file diff --git a/v2/themes/_shared/components/heartGauge.vue.js.map b/v2/themes/_shared/components/heartGauge.vue.js.map new file mode 100644 index 0000000..cf739a7 --- /dev/null +++ b/v2/themes/_shared/components/heartGauge.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"heartGauge.vue.js","sourceRoot":"","sources":["heartGauge.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAW,MAAM,KAAK,CAAA;AAG7C,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;KAgBT;IACD,KAAK,EAAE;QACH,OAAO,EAAE;YACL,IAAI,EAAE,MAA2B;YACjC,QAAQ,EAAE,IAAI;SACjB;QACD,WAAW,EAAE;YACT,IAAI,EAAE,MAA6C;YACnD,OAAO,EAAE,YAAY;SACxB;QACD,SAAS,EAAE;YACP,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,IAAI;SAChB;KACJ;IACD,QAAQ,EAAE;QACN,mBAAmB;YACf,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAA;QACvD,CAAC;QACD,UAAU;YACN,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;gBAClC,CAAC,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAC;gBACpC,CAAC,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAC,CAAA;QAC3C,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/_shared/components/heartGauge.vue.ts b/v2/themes/_shared/components/heartGauge.vue.ts new file mode 100644 index 0000000..dee852e --- /dev/null +++ b/v2/themes/_shared/components/heartGauge.vue.ts @@ -0,0 +1,46 @@ +import {defineComponent, PropType} from 'vue' +import type {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` +
+
+ +
+ `, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + orientation: { + type: String as PropType<'horizontal' | 'vertical'>, + default: 'horizontal' + }, + segmented: { + type: Boolean, + default: true + } + }, + computed: { + heartGaugeRemaining(): string { + return `${this.pokemon.heartGaugePercentage ?? 0}%` + }, + innerStyle(): Record { + return this.orientation === 'vertical' + ? {height: this.heartGaugeRemaining} + : {width: this.heartGaugeRemaining} + } + } +}) \ No newline at end of file diff --git a/v2/themes/_shared/components/trimmedSprite.vue.js b/v2/themes/_shared/components/trimmedSprite.vue.js new file mode 100644 index 0000000..009d32a --- /dev/null +++ b/v2/themes/_shared/components/trimmedSprite.vue.js @@ -0,0 +1,185 @@ +import { defineComponent } from 'vue'; +import { V2 } from 'pokelink'; +export default defineComponent({ + template: ` +
+ + + + +
`, + props: { + pokemon: { + type: Object, + required: true + }, + getSprite: { + type: Function, + required: true + }, + usePartySprites: { + type: Boolean, + default: false + } + }, + data() { + return { + fixedSprite: false, + defaultHeight: 2000, + defaultWidth: 2000, + oldImage: '' + }; + }, + created() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.fixedSprite = false; + }); + }, + computed: { + isGif() { + return (this.$refs.pokemonSprite?.src ?? this.sprite()).split('.').pop().toLowerCase() === 'gif'; + } + }, + methods: { + sprite() { + return this.getSprite(this.pokemon); + }, + handleFallback() { + if (this.usePartySprites) { + V2.usePartyFallback(this.$refs.spriteImg, this.pokemon); + } + else { + V2.useFallback(this.$refs.spriteImg, this.pokemon); + } + }, + trim() { + if (this.oldImage === this.sprite()) { + this.fixedSprite = true; + return true; + } + this.oldImage = this.sprite(); + let vm = this; + const img = new Image(); + img.crossOrigin = 'Anonymous'; + img.onerror = () => { + V2.useFallback(img, this.pokemon); + }; + img.onload = () => { + const canvas = vm.$refs.canvas; + const ctx = canvas.getContext('2d', { + willReadFrequently: true + }); + canvas.width = vm.defaultWidth; + canvas.height = vm.defaultHeight; + ctx.clearRect(0, 0, vm.defaultWidth, vm.defaultHeight); + ctx.drawImage(img, 0, 0); + let trimmed = this.trimCanvas(canvas); + canvas.width = trimmed.width; + canvas.height = trimmed.height; + const newImage = new Image(); + newImage.onload = () => { + ctx.drawImage(newImage, 0, 0); + vm.fixedSprite = true; + vm.$emit('done'); + }; + newImage.src = trimmed.toDataURL(); + }; + img.src = this.sprite(); + }, + trimCanvas(c) { + const ctx = c.getContext('2d'), copy = document.createElement('canvas').getContext('2d'), pixels = ctx.getImageData(0, 0, c.width, c.height), l = pixels.data.length; + let i; + const bound = { + top: null, + left: null, + right: null, + bottom: null + }; + let x, y; + // Iterate over every pixel to find the highest + // and where it ends on every axis () + for (i = 0; i < l; i += 4) { + if (pixels.data[i + 3] !== 0) { + x = (i / 4) % c.width; + y = ~~((i / 4) / c.width); + if (bound.top === null) { + bound.top = y; + } + if (bound.left === null) { + bound.left = x; + } + else if (x < bound.left) { + bound.left = x; + } + if (bound.right === null) { + bound.right = x; + } + else if (bound.right < x) { + bound.right = x; + } + if (bound.bottom === null) { + bound.bottom = y; + } + else if (bound.bottom < y) { + bound.bottom = y; + } + } + } + // Calculate the height and width of the content + const trimHeight = bound.bottom - bound.top, trimWidth = bound.right - bound.left, trimmed = ctx.getImageData(bound.left, bound.top, trimWidth, trimHeight); + copy.canvas.width = trimWidth; + copy.canvas.height = trimHeight; + copy.putImageData(trimmed, 0, 0); + // Return trimmed canvas + return copy.canvas; + } + }, + watch: { + pokemon: { + deep: false, + handler(newVal, oldVal) { + const spriteHasChanged = this.oldImage !== V2.getSprite(newVal); + if (spriteHasChanged) { + this.fixedSprite = false; + } + if (spriteHasChanged && this.isGif) { + this.fixedSprite = true; + this.oldImage = newVal.img; + } + } + } + } +}); +//# sourceMappingURL=trimmedSprite.vue.js.map \ No newline at end of file diff --git a/v2/themes/_shared/components/trimmedSprite.vue.js.map b/v2/themes/_shared/components/trimmedSprite.vue.js.map new file mode 100644 index 0000000..6e2435f --- /dev/null +++ b/v2/themes/_shared/components/trimmedSprite.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trimmedSprite.vue.js","sourceRoot":"","sources":["trimmedSprite.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/_shared/components/trimmedSprite.vue.ts b/v2/themes/_shared/components/trimmedSprite.vue.ts new file mode 100644 index 0000000..8b6218b --- /dev/null +++ b/v2/themes/_shared/components/trimmedSprite.vue.ts @@ -0,0 +1,195 @@ +import {defineComponent, PropType} from 'vue' +import {V2} from 'pokelink' +import type {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` +
+ + + + +
`, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + getSprite: { + type: Function, + required: true + }, + usePartySprites: { + type: Boolean, + default: false + } + }, + data() { + return { + fixedSprite: false, + defaultHeight: 2000, + defaultWidth: 2000, + oldImage: '' + } + }, + created() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.fixedSprite = false + }) + }, + computed: { + isGif() { + return ((this.$refs.pokemonSprite as HTMLImageElement | undefined)?.src ?? this.sprite()).split('.').pop().toLowerCase() === 'gif' + } + }, + methods: { + sprite() { + return this.getSprite(this.pokemon) + }, + handleFallback() { + if (this.usePartySprites) { + V2.usePartyFallback(this.$refs.spriteImg as HTMLImageElement, this.pokemon) + } else { + V2.useFallback(this.$refs.spriteImg as HTMLImageElement, this.pokemon) + } + }, + trim() { + if (this.oldImage === this.sprite()) { + this.fixedSprite = true + return true + } + this.oldImage = this.sprite() + let vm = this + const img = new Image() + img.crossOrigin = 'Anonymous' + img.onerror = () => { + V2.useFallback(img, this.pokemon) + } + img.onload = () => { + const canvas = vm.$refs.canvas as HTMLCanvasElement + const ctx = canvas.getContext('2d', { + willReadFrequently: true + })! + canvas.width = vm.defaultWidth + canvas.height = vm.defaultHeight + ctx.clearRect(0, 0, vm.defaultWidth, vm.defaultHeight) + ctx.drawImage(img, 0, 0) + let trimmed = this.trimCanvas(canvas) + canvas.width = trimmed.width + canvas.height = trimmed.height + const newImage = new Image() + newImage.onload = () => { + ctx.drawImage(newImage, 0, 0) + vm.fixedSprite = true + vm.$emit('done') + } + newImage.src = trimmed.toDataURL() + } + img.src = this.sprite() + }, + trimCanvas(c: HTMLCanvasElement) { + const ctx = c.getContext('2d')!, + copy = document.createElement('canvas').getContext('2d')!, + pixels = ctx.getImageData(0, 0, c.width, c.height), + l = pixels.data.length + let i + const bound: { [key: string]: number | null } = { + top: null, + left: null, + right: null, + bottom: null + } + let x, y + + // Iterate over every pixel to find the highest + // and where it ends on every axis () + for (i = 0; i < l; i += 4) { + if (pixels.data[i + 3] !== 0) { + x = (i / 4) % c.width + y = ~~((i / 4) / c.width) + + if (bound.top === null) { + bound.top = y + } + + if (bound.left === null) { + bound.left = x + } else if (x < bound.left) { + bound.left = x + } + + if (bound.right === null) { + bound.right = x + } else if (bound.right < x) { + bound.right = x + } + + if (bound.bottom === null) { + bound.bottom = y + } else if (bound.bottom < y) { + bound.bottom = y + } + } + } + + // Calculate the height and width of the content + const trimHeight = bound.bottom! - bound.top!, + trimWidth = bound.right! - bound.left!, + trimmed = ctx.getImageData(bound.left!, bound.top!, trimWidth, trimHeight) + + copy.canvas.width = trimWidth + copy.canvas.height = trimHeight + copy.putImageData(trimmed, 0, 0) + + // Return trimmed canvas + return copy.canvas + } + }, + watch: { + pokemon: { + deep: false, + handler(newVal, oldVal) { + const spriteHasChanged = this.oldImage !== V2.getSprite(newVal) + if (spriteHasChanged) { + this.fixedSprite = false + } + if (spriteHasChanged && this.isGif) { + this.fixedSprite = true + this.oldImage = newVal.img + } + } + } + } +}) \ No newline at end of file diff --git a/v2/themes/_shared/styles/heartGauge.css b/v2/themes/_shared/styles/heartGauge.css new file mode 100644 index 0000000..970595d --- /dev/null +++ b/v2/themes/_shared/styles/heartGauge.css @@ -0,0 +1,62 @@ +/* + * --heart-gauge-fill : bar fill colour (default: purple #7B2FBE) + * --heart-gauge-bg : track background (default: transparent — each theme sets the track) + * --heart-gauge-tick : segment divider (default: semi-transparent white) + * + * For high-contrast / colour-blind overrides, theme or user CSS can redefine these vars. + */ + +.heart-gauge__inner { + background-color: var(--heart-gauge-fill, #7B2FBE); + height: 100%; + width: 0; + transition: width 2s ease-out; + will-change: width; +} + +.heart-gauge__segments { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + background-image: + linear-gradient(to right, + transparent calc(20% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(20% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(20% + 0.5px), transparent calc(20% + 0.5px), + transparent calc(40% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(40% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(40% + 0.5px), transparent calc(40% + 0.5px), + transparent calc(60% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(60% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(60% + 0.5px), transparent calc(60% + 0.5px), + transparent calc(80% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(80% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(80% + 0.5px), transparent calc(80% + 0.5px)); +} + +/* + * Vertical orientation: the bar drains top-down instead of left-to-right, + * so the fill is height-based and anchored to the bottom (mirrors how HP + * bars in vertical-bar themes like friday are built). + */ +.heart-gauge--vertical { + display: flex; + align-items: flex-end; +} + +.heart-gauge--vertical .heart-gauge__inner { + width: 100%; + height: 0; + transition: height 2s ease-out; +} + +.heart-gauge--vertical .heart-gauge__segments { + background-image: + linear-gradient(to bottom, + transparent calc(20% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(20% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(20% + 0.5px), transparent calc(20% + 0.5px), + transparent calc(40% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(40% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(40% + 0.5px), transparent calc(40% + 0.5px), + transparent calc(60% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(60% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(60% + 0.5px), transparent calc(60% + 0.5px), + transparent calc(80% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(80% - 0.5px), var(--heart-gauge-tick, rgba(255,255,255,0.5)) calc(80% + 0.5px), transparent calc(80% + 0.5px)); +} + +@media (prefers-reduced-motion: reduce) { + .heart-gauge__inner, + .heart-gauge--vertical .heart-gauge__inner { + transition: none; + } +} diff --git a/v2/themes/basic-card/assets/css/styles.css b/v2/themes/basic-card/assets/css/styles.css new file mode 100755 index 0000000..a055db2 --- /dev/null +++ b/v2/themes/basic-card/assets/css/styles.css @@ -0,0 +1,239 @@ +@import '../../../_shared/styles/heartGauge.css'; +html, body { + width: 100%; + height: 100%; + overflow: hidden; + padding-top: 10px; + margin: 0; + background-color: transparent !important; + font-family: 'Montserrat', sans-serif; +} + +body { + /* + background: red; + background: linear-gradient(45deg, #d2ffde, #ceefff, #ded1ff); + background-color: #ccc !important; + */ +} + +.pokemon { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + flex-direction: row; + max-height: 100vh; + padding-top: 120px; + margin: 0 20px; + justify-content: space-evenly; + align-content: space-between; +} + +.pokemon.vertical-column { + flex-direction: column; +} + +.pokemon .card { + border-radius: 20px; + border: 1px solid black; + background: none; + width: 300px; + background-color: rgba(255, 255, 255, 0.2); + min-height: 478px; + margin-bottom: 60px; + /*transform: scale(1.2);*/ +} + +.pokemon .card .card-image { + position: relative; + display: block; + height: 270px; +} + +.pokemon .card .card-image-container { + position: absolute; + width: 300px; + top: -45px; + left: 10px; + bottom: 0; + text-align: center; +} + +.pokemon .card .card-image-container span { + display: table-cell; + width: 200px; + height: 300px; + vertical-align: bottom; +} + +.pokemon .card .card-image-container span img[data-missingno="true"] { + height: 300px; + position: relative; + left: 55px; +} + +.card .card-content { + text-align: center; +} + +.card .card-content .main { + display: flex; + flex-direction: column; + margin-bottom: 30px; +} + +.pokemon .card-content .title { + font-size: 2rem; + margin-bottom: 1rem; + letter-spacing: 4px; +} + +.pokemon .card-content .hp { + font-size: 1.4rem; + width: 60%; + margin: auto; +} + +.pokemon .card-content .hp .text { + color: white; + display: inline-block; + padding-top: 4px; + font-size: 14px; +} + +.pokemon .card-content .hp .bar { + border-radius: 50px; + background: #073fa7; + border: 3.5px solid #00a3e2; + height: 11px; + overflow: hidden; +} + +.pokemon .card-content .hp .bar .health { + width: 50%; + height: 100%; + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; +} + +.pokemon .card-content .hp .bar .health.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} + +.pokemon .card-content .hp .bar .health.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.card .card-content .stats { + display: flex; + flex-direction: row; + justify-content: center; + align-items: flex-end; + margin-bottom: 20px; +} + +.card .card-content .stats div { + width: 25%; +} + +.card .card-content .stats .value { + font-size: 2rem; +} + +.card .card-content .stats .tag { + display: inline-block; + width: 100%; +} + +.card .card-content .stats img, +.card .card-content .stats svg { + height: 2rem; + width: 2rem; +} + + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon__types { +} + +.pokemon__types span, .pokemon__gender span { + font-family: "PT Sans Condensed", "Roboto Condensed", sans-serif; + font-size: 14px; + letter-spacing: 0; + line-height: 19px; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3), 1px -1px 1px rgba(0, 0, 0, 0.3), -1px 1px 0 rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.9), 0 2px 1px rgba(0, 0, 0, 0.5); + color: white; + border-radius: 6px; + box-shadow: 0px 2px 0px 1px rgba(0, 0, 0, 0.6); + border-top: 1px rgba(255, 255, 255, 0.5) solid; + border-bottom: 4px rgba(0, 0, 0, 0.5) solid; + margin: 2px; + font-weight: normal; + text-transform: uppercase; + min-width: 65px; + text-align: center; + padding: 5px 8px; +} + +.pokemon__types span + span { + margin: -5px; + border-radius: 0 6px 6px 0; +} + + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; +} + +.browser-connected { + display: block !important; +} + +.card-content .heart-gauge { + width: 60%; + height: 4px; + background: rgba(0, 0, 0, 0.15); + border-radius: 2px; + margin: 4px auto 0; + position: relative; + overflow: hidden; +} diff --git a/v2/themes/basic-card/assets/js/components/pokemon-card.vue.js b/v2/themes/basic-card/assets/js/components/pokemon-card.vue.js new file mode 100644 index 0000000..8983e6c --- /dev/null +++ b/v2/themes/basic-card/assets/js/components/pokemon-card.vue.js @@ -0,0 +1,99 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+ +
+
+
+
+
+ {{ this.pokemon.nickname || this.pokemon.translations.locale.speciesName }} +
+
+
+
+
+ {{ pokemon.hp.current }} / {{ pokemon.hp.max }} +
+ +
+
+
+ {{ this.pokemon.level }} + Level +
+
+ + Type(s) +
+
+ + Item +
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + settings: Object + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite, this.pokemon); + } + }, + computed: { + healthPercent() { + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + heldItemImage() { + return clientSettings.itemSpriteTemplate(this.pokemon); + }, + isMissingno() { + if (this.pokemon.isEgg) { + return false; + } + return this.pokemon.species <= 0; + }, + imageTag() { + if (this.pokemon.isEgg) { + return `https://assets.pokelink.xyz/assets/sprites/egg.png`; + } + let name = this.pokemon.species.toString(); + if (this.pokemon.isShiny) { + name = (this.pokemon.species + 2000) + '-Shiny'; + } + let englishFormName = this.pokemon.translations.english.formName; + if (englishFormName !== null && englishFormName !== undefined && this.pokemon.form !== 0) { + // We use the fallback sprite due to pokemonpets having a very inconsistent image naming scheme + return this.pokemon.fallbackSprite; + } + let imageTag = name + '-' + this.pokemon.translations.english.speciesName; + if (this.pokemon.species === 29) { + imageTag = name + '-nidoran_F'; + } + else if (this.pokemon.species === 32) { + imageTag = name + '-nidoran'; + } + return 'https://static.pokemonpets.com/images/monsters-images-300-300/' + imageTag + '.png'; + } + } +}); +//# sourceMappingURL=pokemon-card.vue.js.map \ No newline at end of file diff --git a/v2/themes/basic-card/assets/js/components/pokemon-card.vue.js.map b/v2/themes/basic-card/assets/js/components/pokemon-card.vue.js.map new file mode 100644 index 0000000..3e57bc1 --- /dev/null +++ b/v2/themes/basic-card/assets/js/components/pokemon-card.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon-card.vue.js","sourceRoot":"","sources":["pokemon-card.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAW,MAAM,KAAK,CAAA;AAC7C,OAAO,EAAC,EAAE,EAAE,cAAc,EAAc,MAAM,UAAU,CAAA;AAExD,OAAO,UAAU,MAAM,kDAAkD,CAAA;AAEzE,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyCT;IACD,UAAU,EAAE;QACR,aAAa,EAAE,UAAU;KAC5B;IACD,KAAK,EAAE;QACH,OAAO,EAAE;YACL,IAAI,EAAE,MAA2B;YACjC,QAAQ,EAAE,IAAI;SACjB;QACD,QAAQ,EAAE,MAAM;KACnB;IACD,OAAO,EAAE;QACL,WAAW;YACP,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAiC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9E,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,aAAa;YACT,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAG,CAAC,OAAO,GAAG,GAAG,CAAA;QACxE,CAAC;QACD,aAAa;YACT,OAAO,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1D,CAAC;QACD,WAAW;YACP,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAA;YAChB,CAAC;YAED,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;QACpC,CAAC;QACD,QAAQ;YACJ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrB,OAAO,oDAAoD,CAAA;YAC/D,CAAC;YAED,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;YAE1C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAA;YACnD,CAAC;YAED,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,YAAa,CAAC,OAAQ,CAAC,QAAQ,CAAA;YAElE,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvF,+FAA+F;gBAC/F,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;YACtC,CAAC;YAED,IAAI,QAAQ,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAa,CAAC,OAAQ,CAAC,WAAW,CAAA;YAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;gBAC9B,QAAQ,GAAG,IAAI,GAAG,YAAY,CAAA;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;gBACrC,QAAQ,GAAG,IAAI,GAAG,UAAU,CAAA;YAChC,CAAC;YAED,OAAO,gEAAgE,GAAG,QAAQ,GAAG,MAAM,CAAA;QAC/F,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/basic-card/assets/js/components/pokemon-card.vue.ts b/v2/themes/basic-card/assets/js/components/pokemon-card.vue.ts new file mode 100644 index 0000000..52e19a8 --- /dev/null +++ b/v2/themes/basic-card/assets/js/components/pokemon-card.vue.ts @@ -0,0 +1,107 @@ +import {defineComponent, PropType} from 'vue' +import {V2, clientSettings, V2DataTypes} from 'pokelink' +import {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+ +
+
+
+
+
+ {{ this.pokemon.nickname || this.pokemon.translations.locale.speciesName }} +
+
+
+
+
+ {{ pokemon.hp.current }} / {{ pokemon.hp.max }} +
+ +
+
+
+ {{ this.pokemon.level }} + Level +
+
+ + Type(s) +
+
+ + Item +
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + settings: Object + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite as HTMLImageElement, this.pokemon) + } + }, + computed: { + healthPercent() { + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + heldItemImage() { + return clientSettings.itemSpriteTemplate(this.pokemon) + }, + isMissingno() { + if (this.pokemon.isEgg) { + return false + } + + return this.pokemon.species <= 0 + }, + imageTag() { + if (this.pokemon.isEgg) { + return `https://assets.pokelink.xyz/assets/sprites/egg.png` + } + + let name = this.pokemon.species.toString() + + if (this.pokemon.isShiny) { + name = (this.pokemon.species + 2000) + '-Shiny' + } + + let englishFormName = this.pokemon.translations!.english!.formName + + if (englishFormName !== null && englishFormName !== undefined && this.pokemon.form !== 0) { + // We use the fallback sprite due to pokemonpets having a very inconsistent image naming scheme + return this.pokemon.fallbackSprite + } + + let imageTag = name + '-' + this.pokemon.translations!.english!.speciesName + if (this.pokemon.species === 29) { + imageTag = name + '-nidoran_F' + } else if (this.pokemon.species === 32) { + imageTag = name + '-nidoran' + } + + return 'https://static.pokemonpets.com/images/monsters-images-300-300/' + imageTag + '.png' + } + } +}) + diff --git a/v2/themes/basic-card/assets/js/party.js b/v2/themes/basic-card/assets/js/party.js new file mode 100644 index 0000000..c043ed6 --- /dev/null +++ b/v2/themes/basic-card/assets/js/party.js @@ -0,0 +1,74 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon-card.vue.js'; +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + }; + }, + mounted: function () { + const vm = this; + V2.initialize({ listenForSpriteUpdates: false }); + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false); + this.settings.hp = clientSettings.params.getBool('hp', false); + V2.onPartyUpdate((party) => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + }); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/basic-card/assets/js/party.js.map b/v2/themes/basic-card/assets/js/party.js.map new file mode 100644 index 0000000..54e3dcb --- /dev/null +++ b/v2/themes/basic-card/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/basic-card/assets/js/party.ts b/v2/themes/basic-card/assets/js/party.ts new file mode 100644 index 0000000..ca5124f --- /dev/null +++ b/v2/themes/basic-card/assets/js/party.ts @@ -0,0 +1,85 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import type {Nullable} from 'global' +import type {Pokemon} from 'v2Proto' +import pokemonCard from './components/pokemon-card.vue.js' + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + } + }, + mounted: function () { + const vm = this + V2.initialize({listenForSpriteUpdates: false}) + + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false) + this.settings.hp = clientSettings.params.getBool('hp', false) + + V2.onPartyUpdate((party: Nullable[]) => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + }) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, + clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/basic-card/index.html b/v2/themes/basic-card/index.html new file mode 100644 index 0000000..6b3a466 --- /dev/null +++ b/v2/themes/basic-card/index.html @@ -0,0 +1,63 @@ + + + + + + Basic Card + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/css/styles.css b/v2/themes/bdsp-battle-style-hud/assets/css/styles.css new file mode 100644 index 0000000..2a4d532 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/css/styles.css @@ -0,0 +1,476 @@ +@import '../../../_shared/styles/heartGauge.css'; +:root { + --border-color: #464845; + --border-width: 5px; + --background-color: #f5f5f5; +} + +@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;600;500;700;900&display=swap'); +@font-face { + font-family: 'FOT-UDKakugoC80Pro-B'; + src: local("FOT-UDKakugoC80Pro-B"), url("../fonts/FOT-UDKakugoC80Pro-B.otf") +} + +* { + /* font-family: 'Open Sans', sans-serif; */ + font-family: 'FOT-UDKakugoC80Pro-B', 'Roboto', sans-serif; + font-weight: 300; +} + +/* body {background-color: red;} */ +.pokes { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + flex-direction: column; + max-height: 100vh; +} + +.pokemon { + box-sizing: border-box; + width: 463px; + height: 114px; + margin-bottom: 13px; + padding-left: 35px; + padding-right: 31px; + padding-top: 12px; + padding-bottom: 12px; + display: flex; + border-radius: 15px; + background: linear-gradient(to bottom, #f5f5f5, #cacaca); + border: 4px solid var(--border-color); + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.2); + transition: opacity .5s; + opacity: 1; + /* background-image: url(./original.png); */ +} + +.pokemon.opaque { + opacity: 0; +} + +.pokemon .sex { + /* position: absolute; */ + right: -3px; + top: 7px; + width: 24px; + height: 24px; +} + +.pokemon .sex.male { + /* background-color: #50C8EF; */ + background-color: #0045e9; + padding: 1px; + border-radius: 18px; + /* width: 16px; */ + /* height: 16px; */ + position: relative; + top: -3px; + /* left: 4px; */ + display: inline-block +} + +.pokemon .sex.female { + background-color: #F05228; + padding: 1px; + border-radius: 18px; + /* width: 16px; */ + /* height: 16px; */ + position: relative; + top: -4px; + /* left: 4px; */ + display: inline-block +} + +.pokemon .sex .icon { + width: 16px; + position: relative; + top: -4px; + left: 4px; +} + +.pokemon .sex .icon.male > * { + fill: white !important; +} + +.pokemon .sex .icon.female > * { + fill: white !important; +} + +.pokemon .sex .icon.male { + top: -2px; + left: 4px; +} + +.pokemon .sex .icon.female { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + width: 16px; + height: 16px; + position: relative; + top: -4px; + left: 4px; + top: -4px; + +} + +.pokemon .pokemon__sprite { + width: 80px; +} + +.pokemon .details { + width: 100%; + position: relative; +} + +.pokemon .details .name { + height: 33px; + line-height: 27px; + font-size: 24px; + margin: 0; + position: relative; +} + +.pokemon .details .hp { + height: 15px; + line-height: 37px; + font-size: 1.4em; + padding: 2px; + border-radius: 4px; + background: linear-gradient(to bottom, #000000 0%, #0d0d0d 29%, #4e4e4e 51%, #4e4e4e 51%, #010101 76%, #000000 100%); + display: flex; + flex-direction: row; + width: auto; + align-items: center; + padding: 2px 10px; +} + +.pokemon .details .hp h5 { + color: #bb3737; + /* text-shadow: 0px 1px 2px red; */ + font-family: 'Pokemon GB'; + font-size: 10px; + line-height: 26px; + margin: 0; + /* text-shadow: 0 0 4px white; */ + display: block; + width: auto; + font-weight: bold; +} + +.pokemon .details .hp .text { + height: 37px; + line-height: 37px; + font-size: 1.4em; + margin: 0; +} + +.hp__text-and-exp { + position: relative; +} + +.hp__text-and-exp .text { + font-size: 24px; + margin: 0; + letter-spacing: 0px; + line-height: 37px; +} + +.hp__text-and-exp .exp { + background-color: #e0e0e1; + height: 8px; + width: 195px; + right: 19px; + top: 10px; + position: absolute; + overflow: hidden; + border-radius: 2px; + padding: 1px; + padding-top: 2px; +} + +.hp__text-and-exp .exp .exp__inner { + background-color: #5ecaef; + height: 10px; + border-radius: 2px; +} + +.hp__text-and-exp .heart-gauge { + background-color: #e0e0e1; + height: 8px; + width: 195px; + right: 19px; + top: 10px; + position: absolute; + overflow: hidden; + border-radius: 2px; + padding: 1px; + padding-top: 2px; +} + +.pokemon .details span.lvl { + position: absolute; + right: 22px; + /* bottom: -2px; */ + /* height: 37px; */ + /* line-height: 37px; */ + /* font-size: 27px; */ + font-size: 27px; + margin: 0; + /* letter-spacing: -5px; */ + font-weight: 300; + justify-self: normal; +} + +.pokemon .details .hp .bar { + /* background: #B3B1B3; */ + background: linear-gradient(to bottom, #616161 0%, #929293 8%, #b8b8ba 38%, #bcbcbf 46%, #b9b9bb 54%, #afafb1 62%, #929394 77%, #717273 100%); + height: 13px; + overflow: hidden; + width: 100%; +} + +.pokemon .details .hp .bar .health { + width: 50%; + height: 100%; + /* background: linear-gradient(to right, lime, #8bf500); */ + background: linear-gradient(to bottom, #70e166 0%, #97fb8b 42%, #a1fa95 51%, #97fb8b 58%, #97fb8b 58%, #56bd4a 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + transition: width 2s; +} + +.pokemon .details .hp .bar .health.low { + /* background: linear-gradient(to right, #ffcc00, #f1f500); */ + background: linear-gradient(to bottom, #ee9d4a 0%, #fea143 8%, #fbb359 17%, #fabf68 25%, #fecb75 42%, #fdc872 50%, #fbbf69 58%, #f7b15b 67%, #f2a14a 75%, #e98f34 83%, #dc842c 92%, #bf7933 100%); +} + +.pokemon .details .hp .bar .health.critical { + /* background: linear-gradient(to right, #d20000, #f51700); */ + background: linear-gradient(to bottom, #e44336 0%, #dd675c 25%, #e37267 33%, #e47368 50%, #d86e61 58%, #c56153 67%, #bd4a3c 75%, #b92114 100%); +} + +.pokemon .pokeball { + position: absolute; + /* fill: white; */ + opacity: 0.5; + transition: all 0.5s ease; + width: 76%; + left: 15px; + /* top: 102px; */ + transform: translateZ(30px) rotateX(75deg); + filter: drop-shadow(1px 5px 5px rgba(255, 255, 255, 1)); + height: 140px; +} + +.pokemon .cell { + transition: all 0.2s ease; +} + +.pokemon .cell .bg { + stroke: rgba(255, 255, 255, 0.5); + fill: rgba(255, 255, 255, 0.5); + transition: all 1.15s ease; +} + +.pokemon .cell .stroke { + stroke: white; + stroke-width: 4px; +} + +.pokemon:after { + content: ""; + display: block; + position: absolute; + left: 7px; + right: 7px; + bottom: 2px; + height: 180px; + border-radius: 100% 100% 70% 70% / 70% 70% 20% 20%; + background: transparent; + transition: all 0.2s ease; + z-index: -2; +} + +.pokemon.selected:after { + box-shadow: 0 20px 30px rgba(0, 0, 0, 0.5); +} + +.pokemon.selected .cell { + -webkit-filter: drop-shadow(0px 2px 6px white); + filter: drop-shadow(0px 2px 6px white); + -webkit-transform: scale(1.02); + transform: scale(1.02); +} + +.pokemon.selected .cell .bg { + fill: rgba(255, 246, 146, 0.9); + fill: url(#bg-gradient-selected) !important; +} + +.pokemon.selected .pokeball { + opacity: 0.8; +} + +.pokemon.selected .sprite { + -webkit-animation: bounce 0.8s ease infinite; + animation: bounce 0.8s ease infinite; +} + +.pokemon .pokemon__sprite { + /* width: 80px; + position: relative; */ + width: 80px; + position: relative; + display: flex; + text-align: center; + justify-content: center; +} + +.pokemon .pokemon__sprite .sprite { + /* position: absolute; + bottom: 6px; + width: 89px; */ + align-self: center; + /* min-width: 60px; + max-width: 73px; */ + + width: 30px; + bottom: 21px; + position: absolute; + left: 56%; + transform: translateX(-50%); +} + + +@-webkit-keyframes boing { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + } +} + +@keyframes boing { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + } +} + +@-webkit-keyframes bounce { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + } +} + +@keyframes bounce { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + } +} + +@-webkit-keyframes float { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%); + transform: translateY(-50%) translateX(-50%); + } + 50% { + -webkit-transform: translateY(-57%) translateX(-50%); + transform: translateY(-57%) translateX(-50%); + } +} + +@keyframes float { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%); + transform: translateY(-50%) translateX(-50%); + } + 50% { + -webkit-transform: translateY(-57%) translateX(-50%); + transform: translateY(-57%) translateX(-50%); + } +} + +h1 { + display: inline-block; + font-size: 60px; + margin: 10px; + color: #805cff; + font-weight: 900; +} + +body { + color: black; + font-family: "Heebo", sans-serif; + /* + background: linear-gradient(45deg, #d2ffde, #ceefff, #ded1ff); + background: red; + background-size: cover; + background-repeat: no-repeat; + padding: 20px; + */ +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; +} + +.browser-connected { + display: block !important; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugoC80Pro-B.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugoC80Pro-B.otf new file mode 100644 index 0000000..cdfe37b Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugoC80Pro-B.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-B.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-B.otf new file mode 100644 index 0000000..dd4af64 Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-B.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-DB.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-DB.otf new file mode 100644 index 0000000..fac7da9 Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-DB.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-E.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-E.otf new file mode 100644 index 0000000..1299157 Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-E.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-EL.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-EL.otf new file mode 100644 index 0000000..9969e7a Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-EL.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-H.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-H.otf new file mode 100644 index 0000000..9eade81 Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-H.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-L.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-L.otf new file mode 100644 index 0000000..6000ed5 Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-L.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-M.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-M.otf new file mode 100644 index 0000000..debe5ce Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-M.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-U.otf b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-U.otf new file mode 100644 index 0000000..dc0d938 Binary files /dev/null and b/v2/themes/bdsp-battle-style-hud/assets/fonts/FOT-UDKakugo_SmallPr6N-U.otf differ diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.js b/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.js new file mode 100644 index 0000000..e52ba50 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.js @@ -0,0 +1,36 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + + + + + + + `, + props: { + topColor: { + type: String, + default: '#eee' + }, + bottomColor: { + type: String, + default: '#888' + } + } +}); +//# sourceMappingURL=arrow.vue.js.map \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.js.map b/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.js.map new file mode 100644 index 0000000..8af16ad --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"arrow.vue.js","sourceRoot":"","sources":["arrow.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;KAqBT;IACD,KAAK,EAAE;QACH,QAAQ,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;SAClB;QACD,WAAW,EAAE;YACT,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;SAClB;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.ts b/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.ts new file mode 100644 index 0000000..13fc803 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/arrow.vue.ts @@ -0,0 +1,36 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + + + + + + + `, + props: { + topColor: { + type: String, + default: '#eee' + }, + bottomColor: { + type: String, + default: '#888' + } + } +}) \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.js b/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.js new file mode 100644 index 0000000..9e6ca9d --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.js @@ -0,0 +1,17 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + +` +}); +//# sourceMappingURL=female.vue.js.map \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.js.map b/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.js.map new file mode 100644 index 0000000..aada1df --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"female.vue.js","sourceRoot":"","sources":["female.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;OAYP;CACN,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.ts b/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.ts new file mode 100644 index 0000000..3cffaf2 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/female.vue.ts @@ -0,0 +1,17 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + +` +}) \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.js b/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.js new file mode 100644 index 0000000..abaa0fb --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.js @@ -0,0 +1,14 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + ` +}); +//# sourceMappingURL=male.vue.js.map \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.js.map b/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.js.map new file mode 100644 index 0000000..d865545 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"male.vue.js","sourceRoot":"","sources":["male.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;WASH;CACV,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.ts b/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.ts new file mode 100644 index 0000000..5bddccd --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/male.vue.ts @@ -0,0 +1,14 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + ` +}) \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.js b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.js new file mode 100644 index 0000000..9911ada --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.js @@ -0,0 +1,23 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + `, + props: { + ident: {}, + topColor: {}, + bottomColor: {} + } +}); +//# sourceMappingURL=pokeball.vue.js.map \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.js.map b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.js.map new file mode 100644 index 0000000..b15bbbc --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokeball.vue.js","sourceRoot":"","sources":["pokeball.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;KAaT;IACD,KAAK,EAAE;QACH,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;KAClB;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.ts b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.ts new file mode 100644 index 0000000..7915731 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokeball.vue.ts @@ -0,0 +1,23 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + `, + props: { + ident: {}, + topColor: {}, + bottomColor: {} + } +}) \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.js b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..bbe53f0 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.js @@ -0,0 +1,192 @@ +import { defineComponent } from 'vue'; +import { clientSettings, V2, V2DataTypes } from 'pokelink'; +import female from './female.vue.js'; +import male from './male.vue.js'; +import pokeball from './pokeball.vue.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+ +
+

+ {{ pokemon.nickname ?? pokemon.translations.locale.speciesName }} + + + + + Lv. {{ pokemon.level }} +

+
+
HP:
+
+
+
+
+ +
+
+ {{ pokemon.hp.current }}/{{ pokemon.hp.max }} + + +
+
+
+
+
+
+
+ `, + props: { + pokemon: { + type: Object, + required: true + } + }, + data() { + return { + fixedSprite: true + }; + }, + components: { + 'female': female, + 'male': male, + 'pokeball': pokeball, + 'heart-gauge': heartGauge + }, + mounted() { + }, + computed: { + pokemonExists() { + if (!V2.isValidPokemon(this.pokemon)) { + return false; + } + return true; + }, + partner() { + return false; + }, + healthPercent() { + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + nickname() { + if (!V2.isValidPokemon(this.pokemon)) { + return null; + } + return this.pokemon.nickname || this.pokemon.translations.english.speciesName; + }, + sex() { + switch (this.pokemon.gender) { + case V2DataTypes.Gender.male: + return 'male'; + case V2DataTypes.Gender.female: + return 'female'; + } + return ''; + }, + ident() { + if (!V2.isValidPokemon(this.pokemon)) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!V2.isValidPokemon(this.pokemon)) { + return '1'; + } + if (this.fixedSprite) { + return ''; + } + return ''; + }, + hasItem() { + if (!V2.isValidPokemon(this.pokemon)) { + return false; + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false; + } + return this.pokemon.heldItem !== 0; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + }, + hideGender() { + return clientSettings.params.getBool('hideGender', false); + }, + hideLevel() { + return clientSettings.params.getBool('hideLevel', false); + }, + experienceRemaining() { + return `${this.pokemon.expPercentage}%`; + } + }, + methods: { + isUndefined(pokemon) { + return !V2.isValidPokemon(pokemon); + }, + getSprite(pokemon) { + return V2.getSprite(pokemon); + }, + getPokeballTopColor: function () { + // if (!V2.isValidPokemon(this.pokemon)) { return '#C3C4C6'; } + // + // if (settings.pokeImg.pokemonColor === true) { + // return this.pokemon.color; + // } + // + // if (settings.pokeImg.routeColor === true) { + // return string2Hex(this.pokemon.locationMet.toString()); + // } + // + // if (settings.pokeImg.typeColor === true) { + // return getTypeColor(this.pokemon.types[0].label); + // } + // + // if (settings.pokeImg.staticColor !== false) { + // return normalizeColor(settings.pokeImg.staticColor, 100); + // } + return 'white'; + }, + getPokeballBottomColor: function () { + // if (settings.champion.colorPokeball !== true) { return '#C3C4C6'; } + // if (!V2.isValidPokemon(this.pokemon)) { return '#C3C4C6'; } + // + // if (settings.pokeImg.pokemonColor === true) { + // if (settings.champion.colorBothSidesPokeball !== true) { return '#C3C4C6'; } + // return this.pokemon.color; + // } + // + // if (settings.pokeImg.routeColor === true) { + // if (settings.champion.colorBothSidesPokeball !== true) { return 'C3C4C6'; } + // return string2Hex(this.pokemon.locationMet.toString()); + // } + // + // if (settings.pokeImg.typeColor === true) { + // if (this.pokemon.types.length === 2) { + // return getTypeColor(this.pokemon.types[1].label); + // } + // return getTypeColor(this.pokemon.types[0].label); + // } + // + // if (settings.pokeImg.staticColor !== false) { + // if (settings.champion.colorBothSidesPokeball !== true) { return 'C3C4C6'; } + // return settings.pokeImg.staticColor; + // } + return 'white'; + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.js.map b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..07c0e47 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.ts b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..2a10508 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/components/pokemon.vue.ts @@ -0,0 +1,198 @@ +import {defineComponent, PropType} from 'vue' +import {clientSettings, V2, V2DataTypes} from 'pokelink' +import female from './female.vue.js' +import male from './male.vue.js' +import pokeball from './pokeball.vue.js' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' +import {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` +
+ +
+

+ {{ pokemon.nickname ?? pokemon.translations.locale.speciesName }} + + + + + Lv. {{ pokemon.level }} +

+
+
HP:
+
+
+
+
+ +
+
+ {{ pokemon.hp.current }}/{{ pokemon.hp.max }} + + +
+
+
+
+
+
+
+ `, + props: { + pokemon: { + type: Object as PropType, + required: true + } + }, + data() { + return { + fixedSprite: true + } + }, + components: { + 'female': female, + 'male': male, + 'pokeball': pokeball, + 'heart-gauge': heartGauge + }, + mounted() { + + }, + computed: { + pokemonExists() { + if (!V2.isValidPokemon(this.pokemon)) { + return false + } + return true + }, + partner() { + return false + }, + healthPercent() { + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + nickname() { + if (!V2.isValidPokemon(this.pokemon)) { + return null + } + return this.pokemon.nickname || this.pokemon.translations!.english!.speciesName + }, + sex() { + switch (this.pokemon.gender) { + case V2DataTypes.Gender.male: + return 'male' + case V2DataTypes.Gender.female: + return 'female' + } + + return '' + }, + ident() { + if (!V2.isValidPokemon(this.pokemon)) { + return null + } + return this.pokemon.species + }, + opacity() { + if (!V2.isValidPokemon(this.pokemon)) { + return '1' + } + if (this.fixedSprite) { + return '' + } + return '' + }, + hasItem() { + if (!V2.isValidPokemon(this.pokemon)) { + return false + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false + } + return this.pokemon.heldItem !== 0 + }, + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + }, + hideGender() { + return clientSettings.params.getBool('hideGender', false) + }, + hideLevel() { + return clientSettings.params.getBool('hideLevel', false) + }, + experienceRemaining() { + return `${this.pokemon.expPercentage}%` + } + }, + methods: { + isUndefined(pokemon: Pokemon) { + return !V2.isValidPokemon(pokemon) + }, + getSprite(pokemon: Pokemon) { + return V2.getSprite(pokemon) + }, + getPokeballTopColor: function () { + // if (!V2.isValidPokemon(this.pokemon)) { return '#C3C4C6'; } + // + // if (settings.pokeImg.pokemonColor === true) { + // return this.pokemon.color; + // } + // + // if (settings.pokeImg.routeColor === true) { + // return string2Hex(this.pokemon.locationMet.toString()); + // } + // + // if (settings.pokeImg.typeColor === true) { + // return getTypeColor(this.pokemon.types[0].label); + // } + // + // if (settings.pokeImg.staticColor !== false) { + // return normalizeColor(settings.pokeImg.staticColor, 100); + // } + + return 'white' + }, + getPokeballBottomColor: function () { + // if (settings.champion.colorPokeball !== true) { return '#C3C4C6'; } + // if (!V2.isValidPokemon(this.pokemon)) { return '#C3C4C6'; } + // + // if (settings.pokeImg.pokemonColor === true) { + // if (settings.champion.colorBothSidesPokeball !== true) { return '#C3C4C6'; } + // return this.pokemon.color; + // } + // + // if (settings.pokeImg.routeColor === true) { + // if (settings.champion.colorBothSidesPokeball !== true) { return 'C3C4C6'; } + // return string2Hex(this.pokemon.locationMet.toString()); + // } + // + // if (settings.pokeImg.typeColor === true) { + // if (this.pokemon.types.length === 2) { + // return getTypeColor(this.pokemon.types[1].label); + // } + // return getTypeColor(this.pokemon.types[0].label); + // } + // + // if (settings.pokeImg.staticColor !== false) { + // if (settings.champion.colorBothSidesPokeball !== true) { return 'C3C4C6'; } + // return settings.pokeImg.staticColor; + // } + + return 'white' + } + + } +}) \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/party.js b/v2/themes/bdsp-battle-style-hud/assets/js/party.js new file mode 100644 index 0000000..cdc0e5c --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/party.js @@ -0,0 +1,74 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemon from './components/pokemon.vue.js'; +(() => { + createApp({ + components: { + 'pokemon': pokemon + }, + data() { + return { + connected: false, + loaded: false, + party: [], + switchSpeed: 'switchMedium' + }; + }, + created: function () { + this.settings = clientSettings; + }, + mounted: function () { + const vm = this; + V2.initialize({ listenForSpriteUpdates: false }); + V2.onPartyUpdate((party => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + })); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return !clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/party.js.map b/v2/themes/bdsp-battle-style-hud/assets/js/party.js.map new file mode 100644 index 0000000..efda6a6 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/assets/js/party.ts b/v2/themes/bdsp-battle-style-hud/assets/js/party.ts new file mode 100644 index 0000000..432cd62 --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/assets/js/party.ts @@ -0,0 +1,82 @@ +import {createApp} from 'vue' +import {V2, clientSettings, type Nullable, isDefined} from 'pokelink' +import pokemon from './components/pokemon.vue.js' + +(() => { + createApp({ + components: { + 'pokemon': pokemon + }, + data() { + return { + connected: false, + loaded: false, + party: [], + switchSpeed: 'switchMedium' + } + }, + created: function () { + this.settings = clientSettings + }, + mounted: function () { + const vm = this + V2.initialize({listenForSpriteUpdates: false}) + + V2.onPartyUpdate((party => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + })) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return !clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, + clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/bdsp-battle-style-hud/index.html b/v2/themes/bdsp-battle-style-hud/index.html new file mode 100644 index 0000000..e3571cb --- /dev/null +++ b/v2/themes/bdsp-battle-style-hud/index.html @@ -0,0 +1,63 @@ + + + + + + BDSP Battle Style Hud + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/RifficFree-Bold.ttf b/v2/themes/big-numbers/assets/RifficFree-Bold.ttf new file mode 100644 index 0000000..428793e Binary files /dev/null and b/v2/themes/big-numbers/assets/RifficFree-Bold.ttf differ diff --git a/v2/themes/big-numbers/assets/css/styles.css b/v2/themes/big-numbers/assets/css/styles.css new file mode 100644 index 0000000..99e129f --- /dev/null +++ b/v2/themes/big-numbers/assets/css/styles.css @@ -0,0 +1,555 @@ +@import '../../../_shared/styles/heartGauge.css'; +@font-face { + font-family: PokemonGB; + src: local("Pokemon GB"), url("./../../../../assets/fonts/Pokemon GB.ttf") +} + +@font-face { + font-family: RifficFree; + src: local("RifficFree"), url("../RifficFree-Bold.ttf") +} + +.pokes { + /* margin-top: 110px; */ +} + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.browser-connected { + display: block !important; +} + +.pokemon__list { + display: flex; + /* display: grid; */ + width: 100%; + /* grid-template-columns: repeat(6, 128px); */ + /* grid-template-rows: repeat(1, 115px); */ + /* column-gap: 20px; */ + /* display: block; */ + flex-direction: column; +} + + +.pokemon__list.horizontal { + flex-direction: row; +} + +.pokemon__list .pokemon { + width: 260px; + height: 144px; + margin-bottom: 15px; + margin-right: 15px; + position: relative; + padding-top: 40px; + overflow: hidden; + margin-top: -40px; +} + +.pokemon__container { + height: 144px; + position: relative; +} + +.pokemon__list .pokemon .slot_id { + position: absolute; + right: 2px; + top: 40px; + font-size: 14rem; + color: transparent; + -webkit-text-stroke: 7px rgb(255 255 255 / 38%); + font-family: fantasy; + height: 143px; + line-height: 168px; + z-index: 5; + font-family: "RifficFree"; + overflow: hidden; +} + +.pokemon__list .pokemon:nth-child(1) .slot_id { + /* right: -45px; */ +} + +.pokemon__list.flipped .pokemon:nth-child(1) .slot_id { + /* left: -70px; */ +} + +.pokemon__list.flipped .pokemon .slot_id { + left: -2px; + top: 40px; + font-size: 14rem; + color: transparent; + -webkit-text-stroke: 7px rgb(255 255 255 / 38%); + font-family: fantasy; + height: 143px; + line-height: 168px; + z-index: 5; + font-family: "RifficFree"; + overflow: hidden; +} + +.pokemon__card-art { + left: 260px; + animation-fill-mode: forwards; +} + +.pokemon.active .pokemon__card-art { + left: 0px; + animation: slideInLeft .4s linear forwards; +} + +.pokemon.closing .pokemon__card-art { + left: 0px; + animation: slideOutRight .4s linear forwards; +} + +.pokemon.active .pokemon__row { + animation: slideInLeft .4s linear forwards; +} + +.pokemon.closing .pokemon__row { + left: 260px; + animation: slideOutRight .4s linear forwards; +} + +.pokemon__list .pokemon:nth-child(1) .pokemon__container { + background-image: linear-gradient(90deg, #6800d4, #37005b); +} + +.pokemon__list .pokemon:nth-child(2) .pokemon__container { + background-image: linear-gradient(90deg, #6800d4, #00b703); +} + +.pokemon__list .pokemon:nth-child(3) .pokemon__container { + background-image: linear-gradient(90deg, #6800d4, #ffe800); +} + +.pokemon__list .pokemon:nth-child(4) .pokemon__container { + background-image: linear-gradient(90deg, #6800d4, #ff7200); +} + +.pokemon__list .pokemon:nth-child(5) .pokemon__container { + background-image: linear-gradient(90deg, #6800d4, #ff0000); +} + +.pokemon__list .pokemon:nth-child(6) .pokemon__container { + background-image: linear-gradient(90deg, #6800d4, #ff00fb); +} + +.pokemon__list.flipped .pokemon:nth-child(1) .pokemon__container { + background-image: linear-gradient(270deg, #6800d4, #37005b); +} + +.pokemon__list.flipped .pokemon:nth-child(2) .pokemon__container { + background-image: linear-gradient(270deg, #6800d4, #00b703); +} + +.pokemon__list.flipped .pokemon:nth-child(3) .pokemon__container { + background-image: linear-gradient(270deg, #6800d4, #ffe800); +} + +.pokemon__list.flipped .pokemon:nth-child(4) .pokemon__container { + background-image: linear-gradient(270deg, #6800d4, #ff7200); +} + +.pokemon__list.flipped .pokemon:nth-child(5) .pokemon__container { + background-image: linear-gradient(270deg, #6800d4, #ff0000); +} + +.pokemon__list.flipped .pokemon:nth-child(6) .pokemon__container { + background-image: linear-gradient(270deg, #6800d4, #ff00fb); +} + +/* +.pokemon__list .pokemon:nth-child(1) .pokemon__container, +.pokemon__list .pokemon:nth-child(1) .pokemon__card-art { + border-top-left-radius: 20px; +} +.pokemon__list.flipped .pokemon:nth-child(1) .pokemon__container, +.pokemon__list.flipped .pokemon:nth-child(1) .pokemon__card-art { + border-top-right-radius: 20px; + border-top-left-radius: 0px; +} + +.pokemon__list .pokemon:nth-child(6) .pokemon__container, +.pokemon__list .pokemon:nth-child(6) .pokemon__card-art { + border-bottom-left-radius: 20px; +} +.pokemon__list.flipped .pokemon:nth-child(6) .pokemon__container, +.pokemon__list.flipped .pokemon:nth-child(6) .pokemon__card-art { + border-bottom-right-radius: 20px; + border-bottom-left-radius: 0px; +} */ + +.pokemon .pokemon__card-art { + /* background-image: url(https://images.pokemontcg.io/sm8/19_hires.png); */ + height: 144px; + background-size: 330px; + background-position: -34px -58px; + position: absolute; + top: 40px; + /* left: 0px; */ + width: 100%; + z-index: 3; + opacity: 0.2; +} + +.pokemon__row { + position: relative; + height: 144px; + left: 260px; +} + +.pokemon__image { + position: relative; + height: 144px; + text-align: center; +} + +.pokemon__list .pokemon .pokemon__row .pokemon__image .sprite { + height: 120%; + position: relative; + bottom: 20px; + z-index: 6; +} + +.pokemon__list.flipped .pokemon .pokemon__row .pokemon__image .sprite { + transform: scaleX(-1); +} + +.pokemon__level { + font-family: "PokemonGB"; + bottom: 9px; + position: absolute; + left: 9px; + color: white; + text-shadow: 1px 1px black; + z-index: 10; +} + +.pokemon__list.flipped .pokemon__level { + right: 9px; + left: unset; +} + + +.pokemon__list .pokemon .hp .hp__inner { + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; + height: 100%; +} + +.pokemon .hp .hp__inner.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} + +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.pokemon__list .pokemon .exp { + position: absolute; + bottom: 0px; + width: calc(100% - 160px); + height: 2px; + background: transparent; + z-index: 5; + right: 0; +} + +.pokemon__heldItem { + position: absolute; + left: 6px; + bottom: 20px; +} + +.pokemon .exp .exp__inner { + background-color: cyan; + height: 3px; + transition: width 2s; +} + +.pokemon__list .pokemon .pokemon__details .details__hp { + border: 1px solid #000000; + height: 5px; + width: 100%; +} + +.pokemon__list .pokemon .pokemon__details .details__hp .hp__bar { + background-color: #ff0000; + height: 5px; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +@keyframes takeDamage { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes poisoned { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes shake { + 10%, 90% { + transform: scale(2) translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: scale(2) translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: scale(2) translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: scale(2) translate3d(4px, 0, 0); + } +} + +@keyframes slideInLeft { + from { + left: 260px; + } + + to { + left: 0px; + } +} + +@keyframes slideOutRight { + from { + left: 0px; + } + + to { + left: 260px; + } +} + + +.sleeping { + width: 144px; + height: 144px; + position: absolute; + left: 94%; + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 11; +} + +.sleeping span { + font-family: "RifficFree"; + color: #d4d4d4; + position: absolute; + bottom: 10px; + left: 10px; + font-size: 23pt; + opacity: 0; + -moz-animation: sleep 9s infinite linear; + -webkit-animation: sleep 9s infinite linear; + animation: sleep 9s infinite linear; +} + +.sleeping span:nth-child(2n) { + -moz-animation-delay: 3s; + -webkit-animation-delay: 3s; + animation-delay: 3s; +} + +.sleeping span:nth-child(3n) { + -moz-animation-delay: 6s; + -webkit-animation-delay: 6s; + animation-delay: 6s; +} + +@-webkit-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@-moz-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@-ms-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +.pokemon__container .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 8px; + background: rgba(0, 0, 0, 0.4); + z-index: 5; + overflow: hidden; +} diff --git a/v2/themes/big-numbers/assets/js/components/list.vue.js b/v2/themes/big-numbers/assets/js/components/list.vue.js new file mode 100644 index 0000000..4345300 --- /dev/null +++ b/v2/themes/big-numbers/assets/js/components/list.vue.js @@ -0,0 +1,56 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + this.flipped = clientSettings.params.getBool('flipped', false); + this.horizontal = clientSettings.params.getBool('horizontal', false); + V2.onPartyUpdate((party => { + vm.party = party; + vm.$forceUpdate(); + })); + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/components/list.vue.js.map b/v2/themes/big-numbers/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..eb42a6b --- /dev/null +++ b/v2/themes/big-numbers/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;SACpB,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,IAAI,CAAA;QACb,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC9D,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;QACpE,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YAChB,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/components/list.vue.ts b/v2/themes/big-numbers/assets/js/components/list.vue.ts new file mode 100644 index 0000000..86e5746 --- /dev/null +++ b/v2/themes/big-numbers/assets/js/components/list.vue.ts @@ -0,0 +1,58 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import {Nullable} from 'global' +import {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + this.flipped = clientSettings.params.getBool('flipped', false) + this.horizontal = clientSettings.params.getBool('horizontal', false) + V2.onPartyUpdate((party => { + vm.party = party + vm.$forceUpdate() + })) + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/components/pokemon.vue.js b/v2/themes/big-numbers/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..e2df47f --- /dev/null +++ b/v2/themes/big-numbers/assets/js/components/pokemon.vue.js @@ -0,0 +1,262 @@ +import { defineComponent } from 'vue'; +import { clientSettings, typeColors, V2, V2DataTypes } from 'pokelink'; +import { pokemonTCGCardSets } from '../party.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
{{ slotId }}
+
+
+
+ z + z + z +
+ +
+
+ Lv.{{ pokemon.level }} +
+
+ + +
+
+ + + + + + + + +
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + slotId: null + }, + data() { + return { + settings: {}, + justTookDamage: false, + customCardArt: null, + pokeIsChanging: false, + isFresh: true, + newCardArt: null, + sets: [] + }; + }, + created() { + this.sets = pokemonTCGCardSets(); + }, + mounted() { + this.pokeIsChanging = false; + if (this.useCardArtBackground) { + this.getNewCardArt(this.pokemon); + } + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite, this.pokemon); + }, + getNewCardArt(poke) { + let vm = this; + if (!this.isFresh) { + this.pokeIsChanging = true; + } + if (!this.useCardArtBackground) { + setTimeout(() => { + this.pokeIsChanging = false; + }, 1400); + return false; + } + let isFresh = this.customCardArt === null && this.isFresh; + if (!this.isFresh) { + this.pokeIsChanging = true; + } + this.isFresh = false; + fetch('https://api.pokemontcg.io/v1/cards?setCode=' + + this.sets.join('|') + + '&supertype=pokemon&nationalPokedexNumber=' + + poke.species) + .then(response => response.json()) + .then(cards => { + let setOrder = this.sets; + // try { + let cardImages = cards + .cards + .sort((a, b) => { + return setOrder.findIndex(set => set === a.setCode) - + setOrder.findIndex(set => set === b.setCode); + }); + cardImages = cardImages.find((card) => card.nationalPokedexNumber === poke.species); + this.newCardArt = cardImages.imageUrl; + if (!isFresh) { + setTimeout(() => { + this.customCardArt = this.newCardArt; + this.pokeIsChanging = false; + }, 1400); + } + else { + this.customCardArt = cardImages.imageUrl; + this.pokeIsChanging = false; + } + // } catch (e) { + // console.log(e) + // // console.log(`unknown image for ${vm.pokemon.speciesName}`) + // // console.info(cards.cards) + // + }); + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + sprite() { + return V2.getSprite(this.pokemon); + }, + useCardArtBackground() { + if (this.pokemon === null || this.pokemon.isEgg) { + return false; + } + return clientSettings.params.getBool('useCardArtBackground', false); + }, + useTypesGradient() { + if (this.pokemon === null) { + return false; + } + return clientSettings.params.getBool('useTypesGradient', false); + }, + isActive() { + if (!this.useCardArtBackground) { + return !this.pokeIsChanging; + } + return this.customCardArt && !this.pokeIsChanging; + }, + isClosing() { + return this.pokeIsChanging; + }, + healthPercent() { + if (!V2.isValidPokemon(this.pokemon)) { + return '0%'; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + isDead() { + return parseFloat(this.healthPercent) === 0; + }, + isSleeping() { + return this.pokemon.status === V2DataTypes.StatusEffect.asleep; + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + return this.pokemon.species; + }, + opacity() { + return '1'; + }, + hasItem() { + if (typeof this.pokemon.heldItem === 'undefined') { + return false; + } + return this.pokemon.heldItem !== 0; + }, + experienceRemaining() { + return `${this.pokemon.expPercentage}%`; + }, + mainStyle() { + let styles = { + 'opacity': this.opacity + }; + if (V2.isValidPokemon(this.pokemon)) { + let primaryType = this.pokemon.translations.english.types[0].toLowerCase(); + styles = { + ...styles, + 'background-image': 'linear-gradient(180deg, ' + typeColors[primaryType] + ', white)' + }; + } + // return styles; + }, + typeColorBackgroundStyle() { + if (!this.useTypesGradient) { + return false; + } + let styles = { + 'opacity': this.opacity + }; + if (V2.isValidPokemon(this.pokemon)) { + let primaryType = this.pokemon.translations.english.types[0] ?? '???'; + let secondaryType = this.pokemon.translations.english.types[1] ?? primaryType; + // if (this.pokemon.types.length > 1) { + // secondaryType = this.pokemon.types[1].label.toLowerCase() + // } + styles = { + ...styles, + 'background-image': 'linear-gradient(90deg, ' + + typeColors[primaryType] + + ', ' + + typeColors[secondaryType] + + ')' + }; + } + return styles; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if ((!oldVal.hasOwnProperty('hp') && newVal.hasOwnProperty('hp')) || + newVal.species !== + oldVal.species) { + this.getNewCardArt(newVal); + } + if (!newVal.hasOwnProperty('hp')) { + this.customCardArt = null; + } + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true; + setTimeout(() => { + this.justTookDamage = false; + }, 3000); + } + } + catch (e) { + return; + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/components/pokemon.vue.js.map b/v2/themes/big-numbers/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..f02d6f9 --- /dev/null +++ b/v2/themes/big-numbers/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/components/pokemon.vue.ts b/v2/themes/big-numbers/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..281a5ad --- /dev/null +++ b/v2/themes/big-numbers/assets/js/components/pokemon.vue.ts @@ -0,0 +1,274 @@ +import {defineComponent, PropType} from 'vue' +import {clientSettings, typeColors, V2, V2DataTypes} from 'pokelink' +import {pokemonTCGCardSets} from '../party.js' +import type {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
{{ slotId }}
+
+
+
+ z + z + z +
+ +
+
+ Lv.{{ pokemon.level }} +
+
+ + +
+
+ + + + + + + + +
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + slotId: null + }, + data() { + return { + settings: {}, + justTookDamage: false, + customCardArt: null, + pokeIsChanging: false, + isFresh: true, + newCardArt: null, + sets: [] as string[] + } + }, + created() { + this.sets = pokemonTCGCardSets() + }, + mounted() { + this.pokeIsChanging = false + if (this.useCardArtBackground) { + this.getNewCardArt(this.pokemon) + } + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite as HTMLImageElement, this.pokemon) + }, + getNewCardArt(poke: Pokemon) { + let vm = this + if (!this.isFresh) { + this.pokeIsChanging = true + } + if (!this.useCardArtBackground) { + setTimeout(() => { + this.pokeIsChanging = false + }, 1400) + return false + } + + let isFresh = this.customCardArt === null && this.isFresh + if (!this.isFresh) { + this.pokeIsChanging = true + } + this.isFresh = false + + fetch('https://api.pokemontcg.io/v1/cards?setCode=' + + this.sets.join('|') + + '&supertype=pokemon&nationalPokedexNumber=' + + poke.species) + .then(response => response.json()) + .then(cards => { + let setOrder = this.sets + // try { + let cardImages = cards + .cards + .sort((a: any, b: any) => { + return setOrder.findIndex(set => set === a.setCode) - + setOrder.findIndex(set => set === b.setCode) + }) + + cardImages = cardImages.find((card: any) => card.nationalPokedexNumber === poke.species) + this.newCardArt = cardImages.imageUrl + + if (!isFresh) { + setTimeout(() => { + this.customCardArt = this.newCardArt + this.pokeIsChanging = false + }, 1400) + } else { + this.customCardArt = cardImages.imageUrl + this.pokeIsChanging = false + } + // } catch (e) { + // console.log(e) + // // console.log(`unknown image for ${vm.pokemon.speciesName}`) + // // console.info(cards.cards) + // + }) + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + sprite() { + return V2.getSprite(this.pokemon) + }, + useCardArtBackground() { + if (this.pokemon === null || this.pokemon.isEgg) { + return false + } + return clientSettings.params.getBool('useCardArtBackground', false) + }, + useTypesGradient() { + if (this.pokemon === null) { + return false + } + return clientSettings.params.getBool('useTypesGradient', false) + }, + isActive() { + if (!this.useCardArtBackground) { + return !this.pokeIsChanging + } + return this.customCardArt && !this.pokeIsChanging + }, + isClosing() { + return this.pokeIsChanging + }, + healthPercent() { + if (!V2.isValidPokemon(this.pokemon)) { + return '0%' + } + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + isDead() { + return parseFloat(this.healthPercent) === 0 + }, + isSleeping() { + return this.pokemon.status === V2DataTypes.StatusEffect.asleep + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + return this.pokemon.species + }, + opacity() { + return '1' + }, + hasItem() { + if (typeof this.pokemon.heldItem === 'undefined') { + return false + } + return this.pokemon.heldItem !== 0 + }, + experienceRemaining() { + return `${this.pokemon.expPercentage}%` + }, + mainStyle() { + let styles: object = { + 'opacity': this.opacity + } + + if (V2.isValidPokemon(this.pokemon)) { + let primaryType = this.pokemon.translations!.english!.types[0].toLowerCase() + styles = { + ...styles, + 'background-image': 'linear-gradient(180deg, ' + typeColors[primaryType] + ', white)' + } + } + + // return styles; + }, + + typeColorBackgroundStyle() { + if (!this.useTypesGradient) { + return false + } + let styles: object = { + 'opacity': this.opacity + } + + if (V2.isValidPokemon(this.pokemon)) { + let primaryType = this.pokemon.translations!.english!.types[0] ?? '???' + let secondaryType = this.pokemon.translations!.english!.types[1] ?? primaryType + // if (this.pokemon.types.length > 1) { + // secondaryType = this.pokemon.types[1].label.toLowerCase() + // } + + styles = { + ...styles, + 'background-image': 'linear-gradient(90deg, ' + + typeColors[primaryType] + + ', ' + + typeColors[secondaryType] + + ')' + } + } + + return styles + }, + + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if ((!oldVal.hasOwnProperty('hp') && newVal.hasOwnProperty('hp')) || + newVal.species !== + oldVal.species) { + this.getNewCardArt(newVal) + } + + if (!newVal.hasOwnProperty('hp')) { + this.customCardArt = null + } + + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true + setTimeout(() => { + this.justTookDamage = false + }, 3000) + } + } catch (e) { + return + } + } + } +}) \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/party.js b/v2/themes/big-numbers/assets/js/party.js new file mode 100644 index 0000000..f107161 --- /dev/null +++ b/v2/themes/big-numbers/assets/js/party.js @@ -0,0 +1,87 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import list from './components/list.vue.js'; +export function pokemonTCGCardSets() { + let userDefinedSets = clientSettings.params.getString('sets', ''); + if (isDefined(userDefinedSets) && userDefinedSets.length > 0) { + return userDefinedSets.split('|'); + } + return [ + 'base1', + 'base2', + 'basep', + 'ex3', + 'pop5', + 'pop1', + 'pop3', + 'xyp', + 'col1', + 'dp1', + 'dp2', + 'dp3', + 'dp4', + 'swsh1', + 'swsh2', + 'ex15', + 'ex12', + 'dp6', + 'pl2', + 'bw11', + 'bw10', + 'bw9', + 'bw8', + 'bw7', + 'bw6', + 'bw5', + 'bw4', + 'bw4', + 'bw3', + 'bw2', + 'bw1', + 'xy1', + 'xy2', + 'xy3', + 'xy4', + 'xy5', + 'xy6', + 'xy7', + 'xy8' + ]; +} +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + this.resetSpriteSet(); + V2.onSpriteSetReset(this.resetSpriteSet); + V2.initialize(); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/heartgold-soulsilver/' + + '{{ifElse isShiny "shiny" "normal"}}' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}' + + '{{addFemaleTag this "-f"}}.png'); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/party.js.map b/v2/themes/big-numbers/assets/js/party.js.map new file mode 100644 index 0000000..77218e3 --- /dev/null +++ b/v2/themes/big-numbers/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,MAAM,UAAU,kBAAkB;IAC9B,IAAI,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAEjE,IAAI,SAAS,CAAC,eAAe,CAAC,IAAI,eAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,eAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,OAAO;QACH,OAAO;QACP,OAAO;QACP,OAAO;QACP,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,OAAO;QACP,OAAO;QACP,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACR,CAAA;AACL,CAAC;AAED,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,IAAI,CAAC,cAAc,EAAE,CAAA;YAErB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAExC,EAAE,CAAC,UAAU,EAAE,CAAA;YAEf,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;QACD,OAAO,EAAE;YACL,cAAc;gBACV,EAAE,CAAC,oBAAoB,CAAC,sEAAsE;oBAC1F,qCAAqC;oBACrC,kFAAkF;oBAClF,yHAAyH;oBACzH,gCAAgC,CAAC,CAAA;YACzC,CAAC;SACJ;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/big-numbers/assets/js/party.ts b/v2/themes/big-numbers/assets/js/party.ts new file mode 100644 index 0000000..aaefb6c --- /dev/null +++ b/v2/themes/big-numbers/assets/js/party.ts @@ -0,0 +1,94 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import list from './components/list.vue.js' + +export function pokemonTCGCardSets() { + let userDefinedSets = clientSettings.params.getString('sets', '') + + if (isDefined(userDefinedSets) && userDefinedSets!.length > 0) { + return userDefinedSets!.split('|') + } + + return [ + 'base1', + 'base2', + 'basep', + 'ex3', + 'pop5', + 'pop1', + 'pop3', + 'xyp', + 'col1', + 'dp1', + 'dp2', + 'dp3', + 'dp4', + 'swsh1', + 'swsh2', + 'ex15', + 'ex12', + 'dp6', + 'pl2', + 'bw11', + 'bw10', + 'bw9', + 'bw8', + 'bw7', + 'bw6', + 'bw5', + 'bw4', + 'bw4', + 'bw3', + 'bw2', + 'bw1', + 'xy1', + 'xy2', + 'xy3', + 'xy4', + 'xy5', + 'xy6', + 'xy7', + 'xy8' + ] +} + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + this.resetSpriteSet() + + V2.onSpriteSetReset(this.resetSpriteSet) + + V2.initialize() + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/heartgold-soulsilver/' + + '{{ifElse isShiny "shiny" "normal"}}' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}' + + '{{addFemaleTag this "-f"}}.png') + } + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/big-numbers/index.html b/v2/themes/big-numbers/index.html new file mode 100644 index 0000000..586a361 --- /dev/null +++ b/v2/themes/big-numbers/index.html @@ -0,0 +1,55 @@ + + + + + + Big Numbers + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/default/assets/css/styles.css b/v2/themes/default/assets/css/styles.css new file mode 100644 index 0000000..2a76c9a --- /dev/null +++ b/v2/themes/default/assets/css/styles.css @@ -0,0 +1,324 @@ +@import '../../../_shared/styles/heartGauge.css'; +html, body { + width: 100%; + height: 100%; + overflow: hidden; + padding: 0; + margin: 0; + background-color: transparent !important; +} + +body { + /*background-color: #ccc !important;*/ +} + +@font-face { + font-family: PokemonGB; + src: local("Pokemon GB"), url("/assets/fonts/Pokemon GB.ttf") +} + +.pokemon__slot { + float: left; + width: 15vw; + height: 100vh; + min-height: 100vh; + margin-left: 1.5vw; + background: url('../../../../assets/pokeball.png') no-repeat; + background-position: center; + background-size: 150vh; + color: black; + border: 10px solid #000000; +} + +.pokemon__slot.type_border { + border: 10px solid transparent; +} + +.pokemon__empty { + filter: grayscale(0); +} + +.pokemon__info { + background-color: rgba(0, 0, 0, 0.3); + padding: 10px; + position: absolute; + bottom: 10px; + width: 14.2vw; +} + +.pokemon__image { + max-height: 100%; + height: 65vh; + position: relative; + white-space: nowrap; + transform: scale(3); + z-index: 10; +} + +.pokemon__image.pokemon__egg img { + max-height: 80px; +} + +.pokemon__image img { + filter: grayscale(0); + transition: grayscale 0.5s; +} + +.pokemon__image.pokemon__dead img { + filter: grayscale(1); +} + +.pokemon__image img { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.pokemon__nick-shiny { + color: red; +} + +.pokemon__level-bar, .pokemon__nick, .pokemon__dead-label { + font-size: 2.5rem; + font-family: "PokemonGB"; +} + +.pokemon__status { +} + +.pokemon__hp { + text-align: right; +} + + +.pokemon__dead-label { + text-align: center; +} + +.progress-bar, .progress { + border-radius: 0px; + margin-bottom: 0; +} + +.progress-bar.grey { + background: #646464; +} + +.progress-bar.green { + background: #61df8f; +} + +.progress-bar.yellow { + background: #d9bc19; +} + +.progress-bar.red { + background: #c02020; +} + +.pokemon__bar { + padding: 10px; + position: relative; + top: 10px; + min-height: 20px; + margin: 0 0 -10px 0; + left: 60px; + transform: scale(1.5); +} + +.pokemon__bar > span { + color: white; + text-shadow: 2px 2px 1px rgba(0, 0, 0, 0.5); + border-radius: 4px; + box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.4); + padding: 5px 10px; + margin-right: 5px; +} + +.pokemon__gender { + -webkit-font-smoothing: antialiased; + margin-right: 8px !important; +} + +.pokemon__gender-female { + /*background-color: red;*/ + background: -webkit-linear-gradient(top, #a90329 0%, #8f0222 44%, #6d0019 100%); +} + +.pokemon__gender-male { + /*background-color: blue;*/ + background: -webkit-linear-gradient(top, #7abcff 0%, #60abf8 44%, #4096ee 100%); +} + + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon__types { +} + +.pokemon__types span, .pokemon__gender span { + font-family: "PT Sans Condensed", "Roboto Condensed", sans-serif; + font-size: 14px; + letter-spacing: 0; + line-height: 19px; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3), 1px -1px 1px rgba(0, 0, 0, 0.3), -1px 1px 0 rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.9), 0 2px 1px rgba(0, 0, 0, 0.5); + color: white; + border-radius: 6px; + box-shadow: 0px 2px 0px 1px rgba(0, 0, 0, 0.6); + border-top: 1px rgba(255, 255, 255, 0.5) solid; + border-bottom: 4px rgba(0, 0, 0, 0.5) solid; + margin: 2px; + font-weight: normal; + text-transform: uppercase; + min-width: 65px; + text-align: center; + padding: 5px 8px; +} + +.pokemon__types span + span { + margin: -5px; + border-radius: 0 6px 6px 0; +} + + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +[data-missingno="true"] { + max-height: 18%; +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; + word-break: break-all; +} + +.browser-connected .no-connection { + display: none; +} + +.browser-connected { + display: block !important; +} + +.badge__slot.badge__slot--gen8.badge { + width: auto; + background-color: transparent; +} + +.badge__slot.badge__slot--gen8 img { + width: auto; +} + +.badge__slot.badge__slot--gen8.badge__slot--grass img { + width: 523px; + left: 341px; + position: absolute; + top: 461px; +} + +.badge__slot.badge__slot--gen8.badge__slot--water img { + left: 529px; + position: absolute; + top: -11px; +} + +.badge__slot.badge__slot--gen8.badge__slot--fire img { + left: 241px; + position: absolute; + top: 232px; +} + +.badge__slot.badge__slot--gen8.badge__slot--fighting img { + display: block; + left: 14px; + position: absolute; + top: 422px; +} + +.badge__slot.badge__slot--gen8.badge__slot--ghost img { + display: block; + left: 14px; + position: absolute; + top: 422px; +} + +.badge__slot.badge__slot--gen8.badge__slot--fairy img { + width: 690px; + left: 454px; + position: absolute; + top: 219px; +} + +.badge__slot.badge__slot--gen8.badge__slot--rock img { + left: 306px; + position: absolute; + top: -121px; +} + +.badge__slot.badge__slot--gen8.badge__slot--ice img { + left: 306px; + position: absolute; + top: -121px; +} + +.badge__slot.badge__slot--gen8.badge__slot--dark img { + left: 127px; + position: absolute; + top: 68px; +} + +.badge__slot.badge__slot--gen8.badge__slot--dragon img { + position: absolute; + left: -115px; + width: 679px; + top: 0px; + height: auto; +} + +.pokemon__info .heart-gauge { + width: 100%; + height: 4px; + background: rgba(255, 255, 255, 0.2); + border-radius: 2px; + margin-top: 4px; + position: relative; + overflow: hidden; +} diff --git a/v2/themes/default/assets/js/components/pokemon-card.vue.js b/v2/themes/default/assets/js/components/pokemon-card.vue.js new file mode 100644 index 0000000..b18e61c --- /dev/null +++ b/v2/themes/default/assets/js/components/pokemon-card.vue.js @@ -0,0 +1,175 @@ +import { defineComponent } from 'vue'; +import { clientSettings, htmlColors, isDefined, string2ColHex, V2, V2DataTypes } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+ + + {{ pokemon.translations.locale.types[index] }} + {{ statusImg }} +
+
+ +
+
+
+ {{ + pokemon.nickname || + pokemon.translations.locale.speciesName + }} +
+
+ {{ (pokemon.level !== 100 ? 'L' + pokemon.level : ' ') }} + {{ pokemon.hp.current }}/ + {{ pokemon.hp.max }} + DEAD +
+
+
+
+
+
+ +
+
+
+
+
+
+
`, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + default: null, + type: Object, + required: false + } + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + styleBorder(pokemon) { + const color = clientSettings.params.getString('color', 'route').toLowerCase(); + const routeColor = color === 'route'; + const pokemonColor = color === 'pokemon'; + const typeColor = clientSettings.params.getBool('typeBackground', false); + let styles = {}; + if (routeColor && isDefined(pokemon.translations?.locale?.locationMetName)) { + styles = { ...styles, 'border-color': this.string2Hex(pokemon.translations.locale.locationMetName) }; + } + if (pokemonColor) { + styles = { ...styles, 'border-color': htmlColors[pokemon.color?.toLowerCase() ?? 'red'] }; + } + if (typeColor) { + const count = pokemon.translations.english.types.length; + const type1 = this.getTypeColor(pokemon.translations.english.types[0]); + if (count === 2) { + const type2 = this.getTypeColor(pokemon.translations.english.types[1]); + styles = { ...styles, + 'background': 'linear-gradient(to right, ' + type1 + ' 50%, ' + type2 + ' 50%)', + }; + } + else { + styles = { ...styles, + 'background': type1, + }; + } + } + return styles; + }, + healthBarPercent: function (pokemon) { + if (pokemon.hp.max === pokemon.hp.current) { + return 100; + } + return (100 / pokemon.hp.max) * pokemon.hp.current; + }, + healthBarClass: function (pokemon) { + const percent = this.healthBarPercent(pokemon); + if (percent === 0) { + return 'progress-bar grey'; + } + if (percent <= 25) { + return 'progress-bar red'; + } + if (percent <= 50) { + return 'progress-bar yellow'; + } + return 'progress-bar green'; + }, + isBorderColorType: function () { + return clientSettings.params.getBool('typeColor', false); + }, + getTypeColor: function (type) { + return V2.getTypeColor(type); + }, + getStatusColor: function (status) { + return V2.getStatusColor(status); + }, + string2Hex: function (str) { + return string2ColHex(str); + }, + sprite() { + if (this.pokemon.isEgg) { + return 'https://assets.pokelink.xyz/assets/sprites/egg.gif'; + } + return V2.getSprite(this.pokemon); + } + }, + computed: { + isMissingno() { + if (this.pokemon.isEgg) { + return false; + } + return this.pokemon.species <= 0; + }, + isMale() { + return !this.pokemon.isEgg && this.pokemon.gender === V2DataTypes.Gender.male; + }, + isFemale() { + return !this.pokemon.isEgg && this.pokemon.gender === V2DataTypes.Gender.female; + }, + isGenderless() { + return !this.pokemon.isEgg && this.pokemon.gender === V2DataTypes.Gender.genderless; + }, + isHealthy() { + return this.pokemon.status === V2DataTypes.StatusEffect.healthy; + }, + statusImg() { + switch (this.pokemon.status) { + case V2DataTypes.StatusEffect.healthy: + default: + return ''; + case V2DataTypes.StatusEffect.badlyPoisoned: + case V2DataTypes.StatusEffect.poisoned: + return 'PSN'; + case V2DataTypes.StatusEffect.asleep: + return 'SLP'; + case V2DataTypes.StatusEffect.paralyzed: + return 'PAR'; + case V2DataTypes.StatusEffect.frozen: + return 'FRZ'; + case V2DataTypes.StatusEffect.burned: + return 'BRN'; + } + } + } +}); +//# sourceMappingURL=pokemon-card.vue.js.map \ No newline at end of file diff --git a/v2/themes/default/assets/js/components/pokemon-card.vue.js.map b/v2/themes/default/assets/js/components/pokemon-card.vue.js.map new file mode 100644 index 0000000..45492ac --- /dev/null +++ b/v2/themes/default/assets/js/components/pokemon-card.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon-card.vue.js","sourceRoot":"","sources":["pokemon-card.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/default/assets/js/components/pokemon-card.vue.ts b/v2/themes/default/assets/js/components/pokemon-card.vue.ts new file mode 100644 index 0000000..2f6e4ec --- /dev/null +++ b/v2/themes/default/assets/js/components/pokemon-card.vue.ts @@ -0,0 +1,187 @@ +import {defineComponent, PropType} from 'vue' +import {clientSettings, htmlColors, isDefined, string2ColHex, V2, V2DataTypes} from 'pokelink' +import {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+ + + {{ pokemon.translations.locale.types[index] }} + {{ statusImg }} +
+
+ +
+
+
+ {{ + pokemon.nickname || + pokemon.translations.locale.speciesName + }} +
+
+ {{ (pokemon.level !== 100 ? 'L' + pokemon.level : ' ') }} + {{ pokemon.hp.current }}/ + {{ pokemon.hp.max }} + DEAD +
+
+
+
+
+
+ +
+
+
+
+
+
+
`, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + default: null, + type: Object as PropType, + required: false + } + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + styleBorder(pokemon: Pokemon) { + const color = clientSettings.params.getString('color', 'route')!.toLowerCase() + const routeColor = color === 'route' + const pokemonColor = color === 'pokemon' + const typeColor = clientSettings.params.getBool('typeBackground', false) + + let styles: {} = {} + + if (routeColor && isDefined(pokemon.translations?.locale?.locationMetName)) { + styles = {...styles, 'border-color': this.string2Hex(pokemon.translations!.locale!.locationMetName!)} + } + + if (pokemonColor) { + styles = {...styles, 'border-color': htmlColors[pokemon.color?.toLowerCase() ?? 'red']} + } + + if (typeColor) { + const count = pokemon.translations!.english!.types.length + const type1 = this.getTypeColor(pokemon.translations!.english!.types[0]) + + if (count === 2) { + const type2 = this.getTypeColor(pokemon.translations!.english!.types[1]) + styles = {...styles, + 'background': 'linear-gradient(to right, ' + type1 + ' 50%, ' + type2 + ' 50%)', + } + } else { + styles = {...styles, + 'background': type1, + } + } + } + + return styles + }, + healthBarPercent: function (pokemon: Pokemon) { + if (pokemon.hp!.max === pokemon.hp!.current) { + return 100 + } + + return (100 / pokemon.hp!.max) * pokemon.hp!.current + }, + healthBarClass: function (pokemon: Pokemon) { + const percent = this.healthBarPercent(pokemon) + + if (percent === 0) { + return 'progress-bar grey' + } + if (percent <= 25) { + return 'progress-bar red' + } + if (percent <= 50) { + return 'progress-bar yellow' + } + + return 'progress-bar green' + }, + isBorderColorType: function () { + return clientSettings.params.getBool('typeColor', false) + }, + getTypeColor: function (type: string) { + return V2.getTypeColor(type) + }, + getStatusColor: function (status: string) { + return V2.getStatusColor(status) + }, + string2Hex: function (str: string) { + return string2ColHex(str) + }, + sprite() { + if (this.pokemon.isEgg) { + return 'https://assets.pokelink.xyz/assets/sprites/egg.gif' + } + return V2.getSprite(this.pokemon) + } + }, + computed: { + isMissingno() { + if (this.pokemon.isEgg) { + return false + } + + return this.pokemon.species <= 0 + }, + isMale() { + return !this.pokemon.isEgg && this.pokemon.gender === V2DataTypes.Gender.male + }, + isFemale() { + return !this.pokemon.isEgg && this.pokemon.gender === V2DataTypes.Gender.female + }, + isGenderless() { + return !this.pokemon.isEgg && this.pokemon.gender === V2DataTypes.Gender.genderless + }, + isHealthy() { + return this.pokemon.status === V2DataTypes.StatusEffect.healthy + }, + statusImg() { + switch (this.pokemon.status) { + case V2DataTypes.StatusEffect.healthy: + default: + return '' + case V2DataTypes.StatusEffect.badlyPoisoned: + case V2DataTypes.StatusEffect.poisoned: + return 'PSN' + case V2DataTypes.StatusEffect.asleep: + return 'SLP' + case V2DataTypes.StatusEffect.paralyzed: + return 'PAR' + case V2DataTypes.StatusEffect.frozen: + return 'FRZ' + case V2DataTypes.StatusEffect.burned: + return 'BRN' + } + + + } + } +}) diff --git a/v2/themes/default/assets/js/party.js b/v2/themes/default/assets/js/party.js new file mode 100644 index 0000000..69ddaa9 --- /dev/null +++ b/v2/themes/default/assets/js/party.js @@ -0,0 +1,83 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon-card.vue.js'; +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + }; + }, + created: function () { + this.settings = clientSettings; + }, + mounted: function () { + const vm = this; + this.resetSpriteSet(); + V2.initialize({ listenForSpriteUpdates: false }); + V2.onPartyUpdate((party => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + })); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/animated' + + '{{ifElse isShiny "-shiny" ""}}' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}' + + '{{addFemaleTag this "-f"}}.gif'); + }, + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/default/assets/js/party.js.map b/v2/themes/default/assets/js/party.js.map new file mode 100644 index 0000000..e2d651c --- /dev/null +++ b/v2/themes/default/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/default/assets/js/party.ts b/v2/themes/default/assets/js/party.ts new file mode 100644 index 0000000..11bc83d --- /dev/null +++ b/v2/themes/default/assets/js/party.ts @@ -0,0 +1,93 @@ +import {createApp} from 'vue' +import {V2, clientSettings, type Nullable, isDefined} from 'pokelink' +import pokemonCard from './components/pokemon-card.vue.js' + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + } + }, + created: function () { + this.settings = clientSettings + }, + mounted: function () { + const vm = this + + this.resetSpriteSet() + + V2.initialize({listenForSpriteUpdates: false}) + + V2.onPartyUpdate((party => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + })) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, + clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/animated' + + '{{ifElse isShiny "-shiny" ""}}' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}' + + '{{addFemaleTag this "-f"}}.gif') + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/default/index.html b/v2/themes/default/index.html new file mode 100644 index 0000000..060e6e3 --- /dev/null +++ b/v2/themes/default/index.html @@ -0,0 +1,63 @@ + + + + + + Default + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/RifficFree-Bold.ttf b/v2/themes/digital-hex/assets/RifficFree-Bold.ttf new file mode 100644 index 0000000..428793e Binary files /dev/null and b/v2/themes/digital-hex/assets/RifficFree-Bold.ttf differ diff --git a/v2/themes/digital-hex/assets/css/styles.css b/v2/themes/digital-hex/assets/css/styles.css new file mode 100644 index 0000000..311984a --- /dev/null +++ b/v2/themes/digital-hex/assets/css/styles.css @@ -0,0 +1,401 @@ +@import '../../../_shared/styles/heartGauge.css'; +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap'); +/* @font-face{font-family:RifficFree;src:local("RifficFree"),url("https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap")} */ +@font-face { + font-family: RifficFree; + src: local("RifficFree"), url("../RifficFree-Bold.ttf") +} + +* { + font-family: "RifficFree"; + /* font-family: 'Noto Sans', sans-serif; */ +} + +.pokes { + /* margin-top: 110px; */ +} + +.browser-connected { + display: block !important; +} + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon__list { + display: flex; + flex-wrap: wrap; + flex-direction: row; + margin-left: 25px; +} + +.darkMode { + color: #fff !important; +} + +.pokemon { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + position: relative; + flex-direction: column; + transition: all 0.3s; + transition-delay: 0.9s; + width: 200px; + opacity: 0; +} + +.pokemon.loaded { + opacity: 1; +} + +.pokemon.staggered:nth-child(2) { + position: relative; + top: 170px; + left: -100px; +} + +.pokemon.staggered:nth-child(3) { + position: relative; + top: 0px; + left: -200px; +} + +.pokemon.staggered:nth-child(3) { + position: relative; + top: 0px; + left: -200px; +} + +.pokemon.staggered:nth-child(4) { + position: relative; + top: 170px; + left: -300px; +} + +.pokemon.staggered:nth-child(5) { + position: relative; + top: 0px; + left: -400px; +} + +.pokemon.staggered:nth-child(6) { + position: relative; + top: 170px; + left: -500px; +} + +.pokemon.staggered:nth-child(n+7) { + visibility: hidden; +} + +.pokemon.isDead { + opacity: 0.3; +} + +.pokemon.isEmpty { + opacity: 0.5; +} + +.pokemon svg path.slot__border { +} + +.pokemon svg path.slot__border { + transition: all 0.9s; +} + +.pokemon svg.outerHPBar circle.hpBar { + stroke: lime; + z-index: 2; +} + +.pokemon svg.outerHPBar circle.low { + stroke: #ffcc00; +} + +.pokemon svg.outerHPBar circle.critical { + stroke: #d20000; +} + +.pokemon .pokemon__details { + z-index: 5; + position: absolute; + bottom: 40px; +} + +.pokemon .pokemon__image { + z-index: 5; + display: flex; + align-items: bottom; + justify-content: center; + top: -249px; + position: relative; + left: -25px; + clip-path: url(#hexagon); + align-content: center; + justify-content: center; + height: 200px; + width: 200px; +} + +svg.slot__border-wrapper { + position: absolute; + top: 0; + left: -22px; + z-index: 20; +} + +.pokemon .pokemon__image .sprite { + /* max-height: calc(200px * 0.8); */ + height: calc(200px * 0.8); + position: absolute; + bottom: 0; +} + +@keyframes takeDamage { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes poisoned { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes shake { + 10%, 90% { + transform: scale(2) translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: scale(2) translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: scale(2) translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: scale(2) translate3d(4px, 0, 0); + } +} + + +.sleeping { + width: 200px; + height: 200px; + position: absolute; + top: -50px; + left: 94%; + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 11; +} + +.sleeping span { + font-family: "RifficFree"; + color: #d4d4d4; + position: absolute; + bottom: 10px; + left: 10px; + font-size: 23pt; + opacity: 0; + -moz-animation: sleep 9s infinite linear; + -webkit-animation: sleep 9s infinite linear; + animation: sleep 9s infinite linear; +} + +.sleeping span:nth-child(2n) { + -moz-animation-delay: 3s; + -webkit-animation-delay: 3s; + animation-delay: 3s; +} + +.sleeping span:nth-child(3n) { + -moz-animation-delay: 6s; + -webkit-animation-delay: 6s; + animation-delay: 6s; +} + +@-webkit-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@-moz-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@-ms-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.pokemon path.heart-gauge-arc { + transition: stroke-dashoffset 1s ease-out; +} diff --git a/v2/themes/digital-hex/assets/js/components/list.vue.js b/v2/themes/digital-hex/assets/js/components/list.vue.js new file mode 100644 index 0000000..06b75e7 --- /dev/null +++ b/v2/themes/digital-hex/assets/js/components/list.vue.js @@ -0,0 +1,58 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, homeSpriteTemplate, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + }; + }, + created: function () { + let vm = this; + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate); + }); + V2.initialize(); + V2.onPartyUpdate((party => { + vm.loaded = true; + vm.party = party; + })); + }, + mounted() { + this.flipped = clientSettings.params.getBool('flipped', false); + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/js/components/list.vue.js.map b/v2/themes/digital-hex/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..d00d5b7 --- /dev/null +++ b/v2/themes/digital-hex/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AAC1E,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;SACpB,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,EAAE,GAAG,IAAI,CAAA;QAEb,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACrB,EAAE,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,UAAU,EAAE,CAAA;QACf,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAA;YAChB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO;QACH,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAClE,CAAC;IACD,QAAQ,EAAE;QACN,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;IACD,OAAO,EAAE;QACL,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/js/components/list.vue.ts b/v2/themes/digital-hex/assets/js/components/list.vue.ts new file mode 100644 index 0000000..ee38f8e --- /dev/null +++ b/v2/themes/digital-hex/assets/js/components/list.vue.ts @@ -0,0 +1,62 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, homeSpriteTemplate, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import type {Pokemon} from 'v2Proto' +import type {Nullable} from 'global' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + } + }, + created: function () { + let vm = this + + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate) + }) + + V2.initialize() + V2.onPartyUpdate((party => { + vm.loaded = true + vm.party = party + })) + }, + mounted() { + this.flipped = clientSettings.params.getBool('flipped', false) + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + } +}) \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/js/components/pokemon.vue.js b/v2/themes/digital-hex/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..235d702 --- /dev/null +++ b/v2/themes/digital-hex/assets/js/components/pokemon.vue.js @@ -0,0 +1,257 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, typeColors, V2DataTypes } from 'pokelink'; +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js'; +export default defineComponent({ + template: ` +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ `, + components: { + 'trimmedSprite': trimmedSprite + }, + props: { + pokemon: { + type: Object, + required: true + }, + key: {}, + stroke: { + type: Number, + default() { + return 10; + } + } + }, + data() { + return { + loaded: false + }; + }, + created() { + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(vm.$forceUpdate); + }, + methods: { + getSprite() { + if (this.pokemon.isEgg) { + return `https://assets.pokelink.xyz/v2/sprites/pokemon/home/normal/egg.png`; + } + return V2.getSprite(this.pokemon); + } + }, + computed: { + staggered() { + return clientSettings.params.getBool('staggered', true); + }, + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + dashOffset() { + if (!this.isValid) { + return false; + } + if (clientSettings.params.getBool('hideHPBar', false)) { + return 0; + } + if (this.pokemon.isEgg) { + return 600; + } + return 600 - (this.healthPercent / 100 * 600); + }, + heartGaugeCircumference() { + return 542; + }, + heartGaugeDashOffset() { + if (!this.isValid) + return this.heartGaugeCircumference; + return this.heartGaugeCircumference - ((this.pokemon.heartGaugePercentage ?? 0) / 100 * this.heartGaugeCircumference); + }, + healthPercent() { + if (!this.isValid) { + return 100; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current; + }, + isDead() { + if (!this.isValid) { + return false; + } + return this.pokemon.hp.current === 0; + }, + level() { + if (!this.isValid) { + return null; + } + return this.pokemon.level.toString() || '0'; + }, + nickname() { + if (!this.isValid) { + return null; + } + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.isValid) { + return null; + } + return this.pokemon.pid; + }, + opacity() { + if (!this.isValid) { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.isValid) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + sprite() { + return V2.getSprite(this.pokemon); + }, + mainStyle() { + if (!this.isValid) { + return null; + } + let styles = { + 'opacity': this.opacity + }; + if (this.pokemon) { + styles = { ...styles }; //'background-image': 'linear-gradient(180deg, ' + this.settings.typeColors[primaryType] + ', white)'} + } + return styles; + }, + borderColor() { + if (!this.isValid || this.pokemon.isEgg) { + return '#7375ae'; + } + return typeColors[this.pokemon.translations.english.types[0]]; + }, + nature() { + if (!this.isValid || this.pokemon.isEgg) { + return ''; + } + if (!this.pokemon.nature) { + return ''; + } + return this.pokemon.translations.locale.natureName; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/js/components/pokemon.vue.js.map b/v2/themes/digital-hex/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..c82790d --- /dev/null +++ b/v2/themes/digital-hex/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/js/components/pokemon.vue.ts b/v2/themes/digital-hex/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..cdc8220 --- /dev/null +++ b/v2/themes/digital-hex/assets/js/components/pokemon.vue.ts @@ -0,0 +1,263 @@ +import {defineComponent, PropType} from 'vue' +import {V2, clientSettings, typeColors, V2DataTypes} from 'pokelink' +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js' +import type {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ `, + components: { + 'trimmedSprite': trimmedSprite + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + key: {}, + stroke: { + type: Number, + default() { + return 10 + } + } + }, + data() { + return { + loaded: false + } + }, + created() { + + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(vm.$forceUpdate) + }, + methods: { + getSprite() { + if (this.pokemon.isEgg) { + return `https://assets.pokelink.xyz/v2/sprites/pokemon/home/normal/egg.png` + } + return V2.getSprite(this.pokemon) + } + }, + computed: { + staggered() { + return clientSettings.params.getBool('staggered', true) + }, + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + dashOffset() { + if (!this.isValid) { + return false + } + if (clientSettings.params.getBool('hideHPBar', false)) { + return 0 + } + if (this.pokemon.isEgg) { + return 600 + } + return 600 - (this.healthPercent / 100 * 600) + }, + heartGaugeCircumference() { + return 542 + }, + heartGaugeDashOffset() { + if (!this.isValid) return this.heartGaugeCircumference + return this.heartGaugeCircumference - ((this.pokemon.heartGaugePercentage ?? 0) / 100 * this.heartGaugeCircumference) + }, + healthPercent() { + if (!this.isValid) { + return 100 + } + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + }, + isDead() { + if (!this.isValid) { + return false + } + + return this.pokemon.hp!.current === 0 + }, + level() { + if (!this.isValid) { + return null + } + return this.pokemon.level.toString() || '0' + }, + nickname() { + if (!this.isValid) { + return null + } + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.isValid) { + return null + } + return this.pokemon.pid + }, + opacity() { + if (!this.isValid) { + return '0.4' + } + return '1' + }, + hasItem() { + if (!this.isValid) { + return false + } + return this.pokemon.heldItem !== 0 + }, + sprite() { + return V2.getSprite(this.pokemon) + }, + mainStyle() { + if (!this.isValid) { + return null + } + let styles = { + 'opacity': this.opacity + } + + if (this.pokemon) { + styles = {...styles}//'background-image': 'linear-gradient(180deg, ' + this.settings.typeColors[primaryType] + ', white)'} + } + + return styles + }, + borderColor() { + if (!this.isValid || this.pokemon.isEgg) { + return '#7375ae' + } + return typeColors[this.pokemon.translations!.english!.types[0]] + }, + nature() { + if (!this.isValid || this.pokemon.isEgg) { + return '' + } + if (!this.pokemon.nature) { + return '' + } + + return this.pokemon.translations!.locale!.natureName + }, + + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + } + } +}) diff --git a/v2/themes/digital-hex/assets/js/party.js b/v2/themes/digital-hex/assets/js/party.js new file mode 100644 index 0000000..16435bc --- /dev/null +++ b/v2/themes/digital-hex/assets/js/party.js @@ -0,0 +1,28 @@ +import { createApp } from 'vue'; +import { V2, clientSettings } from 'pokelink'; +import list from './components/list.vue.js'; +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/js/party.js.map b/v2/themes/digital-hex/assets/js/party.js.map new file mode 100644 index 0000000..32a7f22 --- /dev/null +++ b/v2/themes/digital-hex/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAC,MAAM,UAAU,CAAA;AAC3C,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/digital-hex/assets/js/party.ts b/v2/themes/digital-hex/assets/js/party.ts new file mode 100644 index 0000000..137901f --- /dev/null +++ b/v2/themes/digital-hex/assets/js/party.ts @@ -0,0 +1,29 @@ +import {createApp} from 'vue' +import {V2, clientSettings} from 'pokelink' +import list from './components/list.vue.js' + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/digital-hex/index.html b/v2/themes/digital-hex/index.html new file mode 100644 index 0000000..4b7c081 --- /dev/null +++ b/v2/themes/digital-hex/index.html @@ -0,0 +1,55 @@ + + + + + + Digital Hex + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/css/styles.css b/v2/themes/fading-card-art/assets/css/styles.css new file mode 100644 index 0000000..b301ed6 --- /dev/null +++ b/v2/themes/fading-card-art/assets/css/styles.css @@ -0,0 +1,216 @@ +@import '../../../_shared/styles/heartGauge.css'; +@font-face { + font-family: PokemonGB; + src: local("Pokemon GB"), url("./../../../../assets/fonts/Pokemon GB.ttf") +} + +.pokes { + margin-top: 110px; +} + +.browser-connected { + display: block !important; +} + +.badges { + display: grid; + grid-template-columns: repeat(16, 1fr); +} + +.badges { +} + +.badge__slot { + display: block; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +body { + background-color: rgba(0, 0, 0, 0); + margin: 0px auto; + overflow: hidden; +} + +.badge__slot { + max-height: 100%; +} + +.badge__slot img { + max-height: 100%; + width: auto; +} + +.pokemon__list { + /* display: grid; */ + width: 100%; + /* grid-template-columns: repeat(6, 128px); */ + /* grid-template-rows: repeat(1, 115px); */ + /* column-gap: 20px; */ + display: block; + position: relative; +} + +.pokemon__list .pokemon.isDead { + filter: grayscale(1); +} + +.pokemon.card { + position: relative; + margin-bottom: 100px; +} + +.pokemon.card.flat { + top: 0px !important; +} + +.pokemon.card:nth-child(even) { + top: 51px; +} + +.flipped .pokemon.card:nth-child(even) { + top: 0px +} + +.flipped .pokemon.card:nth-child(odd) { + top: 51px +} + +.pokemon__list > .pokemon { + border: 3px solid white; +} + +.pokemon { + display: inline-block; + width: 270px; + /* height: 152px; */ + height: 130px; + background-position-x: -38px; + background-position-y: -78px; + background-repeat: no-repeat; + background-size: 350px auto; + margin-right: 22px; + background-color: white; +} + +.pokemon__list .pokemon .pokemon { + overflow: hidden; + margin-top: 1px; + position: absolute; + margin-left: 1px; + width: 268px; +} + +.heldItem { + position: absolute; + top: -50px; + background-color: white; + padding: 5px; + width: 30px; + height: 30px; + margin-left: -4px; +} + +.heldItem img { + width: 100%; +} + +.flipped .heldItem { + right: 0; +} + +.pokemon__name { + position: absolute; + width: 100%; + top: 142px; + background: white; + padding: 10px 5px; + font-family: PokemonGB; + font-weight: bold; + font-size: larger; + width: 266px; + text-align: center; + /* left: 0px; */ + margin-left: -4px; + height: 19px; +} + +.pokemon__list > .pokemon { + border: 3px solid white; + /* border-style: inset; */ +} + +.pokemon__list .pokemon .hp { + width: 80%; + bottom: 6px; + height: 12px; + position: absolute; + left: 10px; + border: 4px solid rgba(0, 0, 0, 0.4); +} + +.pokemon__list .pokemon .hp .hp__inner { + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; + height: 100%; +} + +.pokemon .hp .hp__inner.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} + +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.pokemon__list .pokemon .pokemon__details { + display: block; +} + +.pokemon__list .pokemon .pokemon__details .details__name { + font-weight: bold; + color: #c0c0c0; +} + +.pokemon__list .pokemon .pokemon__details .details__hp { + border: 1px solid #000000; + height: 5px; + width: 100%; +} + +.pokemon__list .pokemon .pokemon__details .details__hp .hp__bar { + background-color: #ff0000; + height: 5px; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.pokemon.card .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: rgba(0, 0, 0, 0.15); + overflow: hidden; + z-index: 10; +} diff --git a/v2/themes/fading-card-art/assets/js/components/list.vue.js b/v2/themes/fading-card-art/assets/js/components/list.vue.js new file mode 100644 index 0000000..bc4202a --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/components/list.vue.js @@ -0,0 +1,97 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, collect, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +import { pokemonTCGCardSets } from '../party.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + art: [null, null, null, null, null], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + this.flipped = clientSettings.params.getBool('flipped', false); + V2.onPartyUpdate((party => { + if (this.flipped) { + party = party.reverse(); + } + const filteredParty = party.filter(this.isDefined); + this.getArtInBatches(filteredParty).then((cards) => { + for (let i = 0; i < filteredParty.length; i++) { + if (!this.isDefined(filteredParty[i])) { + continue; + } + if (filteredParty[i].isEgg) { + this.art[i] = 'https://images.pokemontcg.io/pl4/88_hires.png'; + } + else { + try { + let cardImages = cards.flat().reduce((flat, item) => { + return [...flat, ...item.cards]; + }, []).find((card) => card.nationalPokedexNumber === filteredParty[i].species); + this.art[i] = cardImages.imageUrl; + } + catch (e) { + console.log(`unknown image for ${filteredParty[i].translations.english.speciesName}`, e); + if (clientSettings.debug) { + console.debug(cards.cards); + } + } + } + } + vm.party = party; + }); + })); + }, + methods: { + getArtInBatches(party) { + let promises = collect(party) + .chunk(15) + .map(async (pokemonList) => { + let idList = pokemonList.filter(mon => isDefined(mon)).map(mon => mon?.species).join('|'); + if (idList.length === 0) { + return {}; + } + let response = await fetch(`https://api.pokemontcg.io/v1/cards?setCode=${pokemonTCGCardSets().join('|')}&supertype=pokemon&nationalPokedexNumber=${idList}`); + return await response.json(); + }); + return Promise.all(promises); + }, + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot]; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/js/components/list.vue.js.map b/v2/themes/fading-card-art/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..ad5c58d --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/js/components/list.vue.ts b/v2/themes/fading-card-art/assets/js/components/list.vue.ts new file mode 100644 index 0000000..194fd7b --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/components/list.vue.ts @@ -0,0 +1,99 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, collect, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import {pokemonTCGCardSets} from '../party.js' +import type {Pokemon} from 'v2Proto' +import type {Nullable} from 'global' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + art: [null, null, null, null, null] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + this.flipped = clientSettings.params.getBool('flipped', false) + V2.onPartyUpdate((party => { + if (this.flipped) { + party = party.reverse() + } + const filteredParty = party.filter(this.isDefined) + + this.getArtInBatches(filteredParty).then((cards: any) => { + for (let i = 0; i < filteredParty.length; i++) { + if (!this.isDefined(filteredParty[i])) { + continue + } + if (filteredParty[i]!.isEgg) { + this.art[i] = 'https://images.pokemontcg.io/pl4/88_hires.png' + } else { + try { + let cardImages = cards.flat().reduce((flat: any, item: any) => { + return [...flat, ...item.cards] + }, []).find((card: any) => card.nationalPokedexNumber === filteredParty[i]!.species) + + this.art[i] = cardImages.imageUrl + } catch (e) { + console.log(`unknown image for ${filteredParty[i]!.translations!.english!.speciesName}`, e) + if (clientSettings.debug) { + console.debug(cards.cards) + } + } + } + } + vm.party = party + }) + })) + }, + methods: { + getArtInBatches(party: any[]) { + let promises = collect(party) + .chunk(15) + .map(async pokemonList => { + let idList = pokemonList.filter(mon => isDefined(mon)).map(mon => mon?.species).join('|') + if (idList.length === 0) { + return {} + } + let response = await fetch(`https://api.pokemontcg.io/v1/cards?setCode=${pokemonTCGCardSets().join('|')}&supertype=pokemon&nationalPokedexNumber=${idList}`) + return await response.json() + }) + return Promise.all(promises) + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/js/components/pokemon.vue.js b/v2/themes/fading-card-art/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..5d1dc42 --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/components/pokemon.vue.js @@ -0,0 +1,152 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, V2DataTypes } from 'pokelink'; +import { pokemonTCGCardSets } from '../party.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+ +
+
{{ nickname }}
+ + + +
+ + +
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + key: {}, + art: null + }, + data() { + return { + selectedSet: 'base1', + sets: [ + 'base5', + 'xy7', + 'swsh1', + 'base2', + 'ex15' + ], + customCardArt: null, + pokeIsChanging: false, + isFresh: true, + newCardArt: null + }; + }, + created() { + this.sets = pokemonTCGCardSets(); + }, + mounted() { + }, + methods: {}, + computed: { + flat() { + return clientSettings.params.getBool('flat', false); + }, + hideHPBar() { + return clientSettings.params.getBool('hideHPBar', false); + }, + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + heldItemImage() { + if (!this.isValid || this.pokemon?.heldItem === 0) { + return ""; + } + return clientSettings.itemSpriteTemplate(this.pokemon); + }, + useCardArtBackground() { + return this.isValid; + }, + // (100/194) * 194 + healthPercent() { + if (!this.isValid) { + return 100 + '%'; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + isDead() { + if (!this.isValid) { + return false; + } + return parseFloat(this.healthPercent) === 0; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.isValid) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!this.isValid) { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.isValid) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + nickname() { + if (!this.isValid) { + return ''; + } + return this.pokemon?.nickname ?? this.pokemon?.translations.locale.speciesName; + }, + mainStyle() { + let styles = { + 'opacity': 1 + }; + if (this.isValid) { + styles = { ...styles, 'background-image': 'url(' + this.art + ')' }; + } + return styles; + }, + innerMonStyle() { + let styles = {}; + if (this.isValid) { + let hp = 100 - (100 / this.pokemon.hp.max) * this.pokemon.hp.current; + if (hp < 0) + hp = 0; + styles = { + 'background-image': 'url(' + this.art + ')', + 'height': hp + '%', + 'filter': 'grayscale(1)', + 'transition': 'all 0.8s' + }; + } + return styles; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/js/components/pokemon.vue.js.map b/v2/themes/fading-card-art/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..d6959d0 --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/js/components/pokemon.vue.ts b/v2/themes/fading-card-art/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..f826849 --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/components/pokemon.vue.ts @@ -0,0 +1,160 @@ +import {defineComponent, PropType} from 'vue' +import {V2, clientSettings, V2DataTypes} from 'pokelink' +import {pokemonTCGCardSets} from '../party.js' +import type {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+ +
+
{{ nickname }}
+ + + +
+ + +
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + key: {}, + art: null + }, + data() { + return { + selectedSet: 'base1', + sets: [ + 'base5', + 'xy7', + 'swsh1', + 'base2', + 'ex15' + ], + customCardArt: null, + pokeIsChanging: false, + isFresh: true, + newCardArt: null + } + }, + created() { + this.sets = pokemonTCGCardSets() + }, + mounted() { + + }, + methods: {}, + computed: { + flat() { + return clientSettings.params.getBool('flat', false) + }, + hideHPBar() { + return clientSettings.params.getBool('hideHPBar', false) + }, + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + heldItemImage() { + if (!this.isValid || this.pokemon?.heldItem === 0) { + return "" + } + return clientSettings.itemSpriteTemplate(this.pokemon) + }, + useCardArtBackground() { + return this.isValid + }, + // (100/194) * 194 + healthPercent() { + if (!this.isValid) { + return 100 + '%' + } + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + isDead() { + if (!this.isValid) { + return false + } + + return parseFloat(this.healthPercent) === 0 + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.isValid) { + return null + } + return this.pokemon.species + }, + opacity() { + if (!this.isValid) { + return '0.4' + } + return '1' + }, + hasItem() { + if (!this.isValid) { + return false + } + return this.pokemon.heldItem !== 0 + }, + nickname() { + if (!this.isValid) { + return '' + } + return this.pokemon?.nickname ?? this.pokemon?.translations!.locale!.speciesName + }, + mainStyle() { + let styles: {} = { + 'opacity': 1 + } + + if (this.isValid) { + styles = {...styles, 'background-image': 'url(' + this.art + ')'} + } + + return styles + }, + innerMonStyle() { + let styles: {} = {} + + if (this.isValid) { + let hp = 100 - (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + if (hp < 0) hp = 0 + + styles = { + 'background-image': 'url(' + this.art + ')', + 'height': hp + '%', + 'filter': 'grayscale(1)', + 'transition': 'all 0.8s' + } + } + + return styles + }, + + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + } + } +}) diff --git a/v2/themes/fading-card-art/assets/js/party.js b/v2/themes/fading-card-art/assets/js/party.js new file mode 100644 index 0000000..980897a --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/party.js @@ -0,0 +1,76 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import list from './components/list.vue.js'; +export function pokemonTCGCardSets() { + let userDefinedSets = clientSettings.params.getString('sets'); + if (isDefined(userDefinedSets) && userDefinedSets.length > 0) { + return userDefinedSets.split('|'); + } + return [ + 'base1', + 'base2', + 'basep', + 'ex3', + 'pop5', + 'pop1', + 'pop3', + 'xyp', + 'col1', + 'dp1', + 'dp2', + 'dp3', + 'dp4', + 'swsh1', + 'swsh2', + 'ex15', + 'ex12', + 'dp6', + 'pl2', + 'bw11', + 'bw10', + 'bw9', + 'bw8', + 'bw7', + 'bw6', + 'bw5', + 'bw4', + 'bw4', + 'bw3', + 'bw2', + 'bw1', + 'xy1', + 'xy2', + 'xy3', + 'xy4', + 'xy5', + 'xy6', + 'xy7', + 'xy8' + ]; +} +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + V2.initialize({ listenForSpriteUpdates: false }); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/js/party.js.map b/v2/themes/fading-card-art/assets/js/party.js.map new file mode 100644 index 0000000..48ef8fa --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,MAAM,UAAU,kBAAkB;IAC9B,IAAI,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,IAAI,SAAS,CAAC,eAAe,CAAC,IAAI,eAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,eAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,OAAO;QACH,OAAO;QACP,OAAO;QACP,OAAO;QACP,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,OAAO;QACP,OAAO;QACP,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACR,CAAA;AACL,CAAC;AAED,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YACf,EAAE,CAAC,UAAU,CAAC,EAAC,sBAAsB,EAAE,KAAK,EAAC,CAAC,CAAA;YAE9C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/fading-card-art/assets/js/party.ts b/v2/themes/fading-card-art/assets/js/party.ts new file mode 100644 index 0000000..72ab3c2 --- /dev/null +++ b/v2/themes/fading-card-art/assets/js/party.ts @@ -0,0 +1,80 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import list from './components/list.vue.js' + +export function pokemonTCGCardSets() { + let userDefinedSets = clientSettings.params.getString('sets') + + if (isDefined(userDefinedSets) && userDefinedSets!.length > 0) { + return userDefinedSets!.split('|') + } + + return [ + 'base1', + 'base2', + 'basep', + 'ex3', + 'pop5', + 'pop1', + 'pop3', + 'xyp', + 'col1', + 'dp1', + 'dp2', + 'dp3', + 'dp4', + 'swsh1', + 'swsh2', + 'ex15', + 'ex12', + 'dp6', + 'pl2', + 'bw11', + 'bw10', + 'bw9', + 'bw8', + 'bw7', + 'bw6', + 'bw5', + 'bw4', + 'bw4', + 'bw3', + 'bw2', + 'bw1', + 'xy1', + 'xy2', + 'xy3', + 'xy4', + 'xy5', + 'xy6', + 'xy7', + 'xy8' + ] +} + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + V2.initialize({listenForSpriteUpdates: false}) + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/fading-card-art/index.html b/v2/themes/fading-card-art/index.html new file mode 100644 index 0000000..4bf0fd2 --- /dev/null +++ b/v2/themes/fading-card-art/index.html @@ -0,0 +1,55 @@ + + + + + + Fading Card Art + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/friday/assets/RifficFree-Bold.ttf b/v2/themes/friday/assets/RifficFree-Bold.ttf new file mode 100644 index 0000000..428793e Binary files /dev/null and b/v2/themes/friday/assets/RifficFree-Bold.ttf differ diff --git a/v2/themes/friday/assets/css/styles.css b/v2/themes/friday/assets/css/styles.css new file mode 100644 index 0000000..ef20b0a --- /dev/null +++ b/v2/themes/friday/assets/css/styles.css @@ -0,0 +1,357 @@ +@import '../../../_shared/styles/heartGauge.css'; +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap'); +/* @font-face{font-family:RifficFree;src:local("RifficFree"),url("https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap")} */ +/* @font-face{font-family:RifficFree;src:local("RifficFree"),url("../RifficFree-Bold.ttf")} */ + +.badges {} + .badge__slot { + display: block; + float: left; + } + + .badge__slot img { + width: 100px; + } + .badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; + } + +.browser-connected { + display: block !important; +} + +* { + /* font-family: "Riffic Free"; */ + font-family: 'Noto Sans', sans-serif; +} +.pokes { +/* margin-top: 110px; */ +} + +.pokes.browser-connected { + display: block !important; +} + +.pokemon__list { + display: flex; + flex-wrap: wrap; + flex-direction: row; +} + +.darkMode { + color: #fff !important; +} + +.pokemon { + height: 120px; + margin-right: 18px; +} + +.pokemon.isDead { + opacity: 0.2; +} + +.pokemon > div { + height: 100%; +} + +.pokemon .pokemon__details { + width: 80px; + display: flex; + flex-direction: column; + align-self: flex-end; + font-weight: bold; +} +.pokemon .pokemon__details .pokemon__level{ + font-size: 80%; + font-weight: bold; + +} +.pokemon .pokemon__details .pokemon__name{ +} + +.pokemon .hp { + height: 75%; + width: 18px; + display: flex; + align-self: flex-end; +} + + +.pokemon__list .pokemon .hp .hp__inner { + background: #96bc65; + transition: width 2s; + height: 100%; + align-self: flex-end; + width: 12px; +} + +.pokemon__list .pokemon.isPoisoned .hp .hp__inner { + background: purple; +} + +.pokemon__list .pokemon.isParalyzed .hp .hp__inner { + background: yellow; +} + +.pokemon__list .pokemon.isFrozen .hp .hp__inner { + background: rgb(111, 255, 255); +} + +.pokemon__list .pokemon.isBurned .hp .hp__inner { + background: #ff7d4d; +} +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + + +.pokemon .pokemon__image { + height: 100%; + display: flex; +} + +.pokemon .pokemon__image .sprite { + max-height: 72%; + padding-right: 12px; + align-self: flex-end; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +@keyframes takeDamage { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes poisoned { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes shake { + 10%, 90% { + transform: scale(2) translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: scale(2) translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: scale(2) translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: scale(2) translate3d(4px, 0, 0); + } +} + + +.sleeping { + width: 200px; + height: 200px; + position: absolute; + top: -50px; + left: 94%; + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 11; +} + +.sleeping span { + font-family: "RifficFree"; + color: #d4d4d4; + position: absolute; + bottom: 10px; + left: 10px; + font-size: 23pt; + opacity: 0; + -moz-animation: sleep 9s infinite linear; + -webkit-animation: sleep 9s infinite linear; + animation: sleep 9s infinite linear; +} +.sleeping span:nth-child(2n) { + -moz-animation-delay: 3s; + -webkit-animation-delay: 3s; + animation-delay: 3s; +} +.sleeping span:nth-child(3n) { + -moz-animation-delay: 6s; + -webkit-animation-delay: 6s; + animation-delay: 6s; +} + +@-webkit-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-moz-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-ms-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +.pokemon { + position: relative; +} + +.pokemon .heart-gauge { + height: 75%; + width: 8px; + margin-left: 6px; + align-self: flex-end; + background: rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} diff --git a/v2/themes/friday/assets/js/components/list.vue.js b/v2/themes/friday/assets/js/components/list.vue.js new file mode 100644 index 0000000..a406014 --- /dev/null +++ b/v2/themes/friday/assets/js/components/list.vue.js @@ -0,0 +1,58 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + this.flipped = clientSettings.params.getBool('flipped', false); + V2.onPartyUpdate((party => { + vm.party = party; + vm.$forceUpdate(); + })); + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + darkMode() { + return clientSettings.params.getBool('darkMode', false); + }, + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/friday/assets/js/components/list.vue.js.map b/v2/themes/friday/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..fb0017c --- /dev/null +++ b/v2/themes/friday/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;SACpB,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,IAAI,CAAA;QACb,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC9D,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YAChB,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,QAAQ;YACJ,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAC3D,CAAC;QACD,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/friday/assets/js/components/list.vue.ts b/v2/themes/friday/assets/js/components/list.vue.ts new file mode 100644 index 0000000..eb7ec78 --- /dev/null +++ b/v2/themes/friday/assets/js/components/list.vue.ts @@ -0,0 +1,60 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import type {Pokemon} from 'v2Proto' +import type {Nullable} from 'global' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + this.flipped = clientSettings.params.getBool('flipped', false) + V2.onPartyUpdate((party => { + vm.party = party + vm.$forceUpdate() + })) + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + darkMode() { + return clientSettings.params.getBool('darkMode', false) + }, + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/friday/assets/js/components/pokemon.vue.js b/v2/themes/friday/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..0d3bd58 --- /dev/null +++ b/v2/themes/friday/assets/js/components/pokemon.vue.js @@ -0,0 +1,152 @@ +import { defineComponent } from 'vue'; +import { V2, V2DataTypes } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+ +
+
+ Lv. {{ pokemon.level }} +
+
+ {{ nickname }} +
+
+ +
+ + +
+
+
+
+ +
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + } + }, + data() { + return { + justTookDamage: false + }; + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonImg, this.pokemon); + }, + sprite() { + if (!V2.isValidPokemon(this.pokemon)) { + return ''; + } + return V2.getSprite(this.pokemon); + }, + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + healthPercent() { + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + isDead() { + if (!V2.isValidPokemon(this.pokemon)) { + return false; + } + return this.pokemon.hp.current === 0; + }, + isSleeping() { + if (!V2.isValidPokemon(this.pokemon)) { + return false; + } + return this.pokemon.status === V2DataTypes.StatusEffect.asleep; + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations.english.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!V2.isValidPokemon(this.pokemon)) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!V2.isValidPokemon(this.pokemon)) { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!V2.isValidPokemon(this.pokemon)) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + experienceRemaining() { + return `${this.pokemon.expPercentage}%`; + }, + statusClass() { + if (!V2.isValidPokemon(this.pokemon)) { + return ''; + } + switch (this.pokemon.status) { + case V2DataTypes.StatusEffect.badlyPoisoned: + case V2DataTypes.StatusEffect.poisoned: + return 'isPoisoned'; + case V2DataTypes.StatusEffect.paralyzed: + return 'isParalyzed'; + case V2DataTypes.StatusEffect.burned: + return 'isBurned'; + case V2DataTypes.StatusEffect.frozen: + return 'isFrozen'; + } + return ''; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true; + setTimeout(() => { + this.justTookDamage = false; + }, 3000); + } + } + catch (e) { + return; + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/friday/assets/js/components/pokemon.vue.js.map b/v2/themes/friday/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..8380e6e --- /dev/null +++ b/v2/themes/friday/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/friday/assets/js/components/pokemon.vue.ts b/v2/themes/friday/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..940807a --- /dev/null +++ b/v2/themes/friday/assets/js/components/pokemon.vue.ts @@ -0,0 +1,158 @@ +import {defineComponent, PropType} from 'vue' +import {V2, clientSettings, typeColors, V2DataTypes} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import type {Nullable} from 'global' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+ +
+
+ Lv. {{ pokemon.level }} +
+
+ {{ nickname }} +
+
+ +
+ + +
+
+
+
+ +
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + } + }, + data() { + return { + justTookDamage: false + } + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonImg as HTMLImageElement, this.pokemon) + }, + sprite() { + if (!V2.isValidPokemon(this.pokemon)) { + return '' + } + + return V2.getSprite(this.pokemon) + }, + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + healthPercent() { + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + isDead() { + if (!V2.isValidPokemon(this.pokemon)) { + return false + } + + return this.pokemon.hp!.current === 0 + }, + isSleeping() { + if (!V2.isValidPokemon(this.pokemon)) { + return false + } + + return this.pokemon.status === V2DataTypes.StatusEffect.asleep + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations!.english!.speciesName + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!V2.isValidPokemon(this.pokemon)) { + return null + } + return this.pokemon.species + }, + opacity() { + if (!V2.isValidPokemon(this.pokemon)) { + return '0.4' + } + return '1' + }, + hasItem() { + if (!V2.isValidPokemon(this.pokemon)) { + return false + } + return this.pokemon.heldItem !== 0 + }, + experienceRemaining() { + return `${this.pokemon.expPercentage}%` + }, + statusClass() { + if (!V2.isValidPokemon(this.pokemon)) { + return '' + } + + switch (this.pokemon.status) { + case V2DataTypes.StatusEffect.badlyPoisoned: + case V2DataTypes.StatusEffect.poisoned: + return 'isPoisoned' + case V2DataTypes.StatusEffect.paralyzed: + return 'isParalyzed' + case V2DataTypes.StatusEffect.burned: + return 'isBurned' + case V2DataTypes.StatusEffect.frozen: + return 'isFrozen' + } + + return '' + }, + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true + setTimeout(() => { + this.justTookDamage = false + }, 3000) + } + } catch (e) { + return + } + } + } +}) diff --git a/v2/themes/friday/assets/js/party.js b/v2/themes/friday/assets/js/party.js new file mode 100644 index 0000000..aebc1e0 --- /dev/null +++ b/v2/themes/friday/assets/js/party.js @@ -0,0 +1,32 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, homeSpriteTemplate } from 'pokelink'; +import list from './components/list.vue.js'; +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate); + }); + V2.initialize(); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/friday/assets/js/party.js.map b/v2/themes/friday/assets/js/party.js.map new file mode 100644 index 0000000..b9a733d --- /dev/null +++ b/v2/themes/friday/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAC,MAAM,UAAU,CAAA;AAC/D,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE;gBACrB,EAAE,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,UAAU,EAAE,CAAA;YAEf,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/friday/assets/js/party.ts b/v2/themes/friday/assets/js/party.ts new file mode 100644 index 0000000..485c77a --- /dev/null +++ b/v2/themes/friday/assets/js/party.ts @@ -0,0 +1,35 @@ +import {createApp} from 'vue' +import {V2, clientSettings, homeSpriteTemplate} from 'pokelink' +import list from './components/list.vue.js' + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate) + }) + + V2.initialize() + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/friday/index.html b/v2/themes/friday/index.html new file mode 100644 index 0000000..3ea0a7f --- /dev/null +++ b/v2/themes/friday/index.html @@ -0,0 +1,55 @@ + + + + + + Friday + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/gameboy/assets/css/styles.css b/v2/themes/gameboy/assets/css/styles.css new file mode 100644 index 0000000..656acab --- /dev/null +++ b/v2/themes/gameboy/assets/css/styles.css @@ -0,0 +1,173 @@ +@import '../../../_shared/styles/heartGauge.css'; + html, body { + width: 100%; + height: 100%; + overflow: hidden; + padding-top: 10px; + margin: 0; + background-color: transparent !important; + } + body { + /* + background: red !important; + */ + } + + @font-face{font-family:PokemonGB;src:url("/assets/fonts/Pokemon GB.ttf")} + .text { font-family: PokemonGB; } + + .party_row { + display: flex; + max-width: 400px; + font-size: 11px; + margin-bottom: 4px; + height: 30px; + position: relative; + } + + .sprite { + width: 40px; + text-align: center; + } + + .sprite img { + max-width: 40px; + max-height: 40px; + } + + .details{ + display: flex; + flex-direction: column; + min-width: 200px; + margin: 7px; + } + + .details .half.level { + justify-content: flex-end; + } + + .half { + display: flex; + width: 100%; + height: 12px; + margin-bottom: 2px; + } + + .healthBar { + + } + + .heathBar__label { + font-size: 8px; + text-transform: uppercase; + align-self: flex-end; + background-color: rgba(0,0,0, 1); + color: #caaf7e; + padding: 2px 2px 2px 3px; + font-weight: bold; + display: inline-block; + } + + .healthBar__bar { + padding: 3px 0 1px 0; + background-color: #fff; + border-bottom: 1px solid #000; + width: 65px; + display: inline-block; + } + + .healthBar__bar .bar .health { + width: 100%; + background-color: #00ff00; + height: 5px; + } + + .healthBar__bar .bar .health.low { + width: 100%; + background-color: #00ff00; + height: 5px; + } + + .health { + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; + } + .health.low { + background: linear-gradient(to right, #ffcc00, #f1f500); + } + .health.critical { + background: linear-gradient(to right, #d20000, #f51700); + } + + + .healthBar__chock { + content: " "; + background-color: rgba(0,0,0,1); + width: 5px; + display: inline-block; + + } + + .half.top { + justify-content: space-between; + } + + .half.bottom { + justify-content: flex-end; + } + + /* transitions stuffs */ + .switchSlow-move { + transition: transform 2s; + } + + .switchMedium-move { + transition: transform 1s; + } + + .switchFast-move { + transition: transform 0.5s; + } + + .no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0,0,0,0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; + } + + .badges {} + .badge__slot { + display: block; + float: left; + } + + .badge__slot img { + width: 100px; + } + .badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; + } + + .browser-connected { + display: block !important; + } + + .details .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 3px; + background: rgba(0, 0, 0, 0.2); + border-radius: 0; + overflow: hidden; + } diff --git a/v2/themes/gameboy/assets/images/shiny.png b/v2/themes/gameboy/assets/images/shiny.png new file mode 100644 index 0000000..bd979ae Binary files /dev/null and b/v2/themes/gameboy/assets/images/shiny.png differ diff --git a/v2/themes/gameboy/assets/js/components/pokemon-card.vue.js b/v2/themes/gameboy/assets/js/components/pokemon-card.vue.js new file mode 100644 index 0000000..7dd268d --- /dev/null +++ b/v2/themes/gameboy/assets/js/components/pokemon-card.vue.js @@ -0,0 +1,78 @@ +import { defineComponent } from 'vue'; +import { V2 } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+
+
+ {{ pokemon.nickname || pokemon.translations.locale.speciesName }} +
+
{{ pokemon.hp.current }}/{{ pokemon.hp.max }}
+
+
+
+ + + + :L{{pokemon.level}} +
+
+
HP:
+
+
+
+
+
+
+
+
+ +
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + default: null, + type: Object, + required: false + } + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + useFallback() { + V2.usePartyFallback(this.$refs.pokemonImg, this.pokemon); + }, + imageTag() { + if (!this.isValid) { + return null; + } + if (this.pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/small_egg.png'; + } + return V2.getPartySprite(this.pokemon); + }, + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + healthPercent() { + if (!this.isValid) { + return `0%`; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + "%"; + }, + } +}); +//# sourceMappingURL=pokemon-card.vue.js.map \ No newline at end of file diff --git a/v2/themes/gameboy/assets/js/components/pokemon-card.vue.js.map b/v2/themes/gameboy/assets/js/components/pokemon-card.vue.js.map new file mode 100644 index 0000000..9857690 --- /dev/null +++ b/v2/themes/gameboy/assets/js/components/pokemon-card.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon-card.vue.js","sourceRoot":"","sources":["pokemon-card.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAW,MAAM,KAAK,CAAA;AAC7C,OAAO,EAAC,EAAE,EAAoE,MAAM,UAAU,CAAA;AAE9F,OAAO,UAAU,MAAM,kDAAkD,CAAA;AAEzE,eAAe,eAAe,CAAC;IAC7B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT;IACD,UAAU,EAAE;QACV,aAAa,EAAE,UAAU;KAC1B;IACD,KAAK,EAAE;QACL,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAA2B;YACjC,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO;QACL,MAAM,EAAE,GAAG,IAAI,CAAA;QACf,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE;YAC7B,EAAE,CAAC,YAAY,EAAE,CAAA;QACnB,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,EAAE;QACP,WAAW;YACT,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,UAA8B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9E,CAAC;QACD,QAAQ;YACN,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvB,OAAO,sDAAsD,CAAA;YAC/D,CAAC;YACD,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;KACF;IACD,QAAQ,EAAE;QACR,OAAO;YACL,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,aAAa;YACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YACpC,OAAO,CAAC,GAAG,GAAC,IAAI,CAAC,OAAO,CAAC,EAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAG,CAAC,OAAO,GAAG,GAAG,CAAC;QACrE,CAAC;KACF;CACF,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/gameboy/assets/js/components/pokemon-card.vue.ts b/v2/themes/gameboy/assets/js/components/pokemon-card.vue.ts new file mode 100644 index 0000000..8e84775 --- /dev/null +++ b/v2/themes/gameboy/assets/js/components/pokemon-card.vue.ts @@ -0,0 +1,75 @@ +import {defineComponent, PropType} from 'vue' +import {V2, V2DataTypes, string2ColHex, clientSettings, htmlColors, isDefined} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+
+
+ {{ pokemon.nickname || pokemon.translations.locale.speciesName }} +
+
{{ pokemon.hp.current }}/{{ pokemon.hp.max }}
+
+
+
+ + + + :L{{pokemon.level}} +
+
+
HP:
+
+
+
+
+
+
+
+
+ +
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + default: null, + type: Object as PropType, + required: false + } + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + useFallback() { + V2.usePartyFallback(this.$refs.pokemonImg as HTMLImageElement, this.pokemon) + }, + imageTag() { + if (!this.isValid) { return null; } + if (this.pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/small_egg.png' + } + return V2.getPartySprite(this.pokemon) + }, + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + healthPercent() { + if (!this.isValid ) { return `0%`; } + return (100/this.pokemon.hp!.max) * this.pokemon.hp!.current + "%"; + }, + } +}); diff --git a/v2/themes/gameboy/assets/js/party.js b/v2/themes/gameboy/assets/js/party.js new file mode 100644 index 0000000..ff78185 --- /dev/null +++ b/v2/themes/gameboy/assets/js/party.js @@ -0,0 +1,82 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon-card.vue.js'; +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + }; + }, + created: function () { + this.settings = clientSettings; + }, + mounted: function () { + const vm = this; + this.resetSpriteSet(); + V2.onSpriteSetReset(this.resetSpriteSet); + V2.initialize(); + V2.onPartyUpdate((party => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + })); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen8/party' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{addFemaleTag this "-f"}}.png'); + }, + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/gameboy/assets/js/party.js.map b/v2/themes/gameboy/assets/js/party.js.map new file mode 100644 index 0000000..9d89310 --- /dev/null +++ b/v2/themes/gameboy/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/gameboy/assets/js/party.ts b/v2/themes/gameboy/assets/js/party.ts new file mode 100644 index 0000000..aeb0125 --- /dev/null +++ b/v2/themes/gameboy/assets/js/party.ts @@ -0,0 +1,93 @@ +import {createApp} from 'vue' +import {V2, clientSettings, type Nullable, isDefined} from 'pokelink' +import pokemonCard from './components/pokemon-card.vue.js' + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + } + }, + created: function () { + this.settings = clientSettings + }, + mounted: function () { + const vm = this + + this.resetSpriteSet() + + V2.onSpriteSetReset(this.resetSpriteSet) + + V2.initialize() + + V2.onPartyUpdate((party => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + })) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, + clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen8/party' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{addFemaleTag this "-f"}}.png') + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/gameboy/index.html b/v2/themes/gameboy/index.html new file mode 100644 index 0000000..e68fd99 --- /dev/null +++ b/v2/themes/gameboy/index.html @@ -0,0 +1,60 @@ + + + + + + Gameboy + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/RifficFree-Bold.ttf b/v2/themes/jezzabel-personal/assets/RifficFree-Bold.ttf new file mode 100644 index 0000000..428793e Binary files /dev/null and b/v2/themes/jezzabel-personal/assets/RifficFree-Bold.ttf differ diff --git a/v2/themes/jezzabel-personal/assets/css/styles.css b/v2/themes/jezzabel-personal/assets/css/styles.css new file mode 100644 index 0000000..e2046ab --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/css/styles.css @@ -0,0 +1,476 @@ +@import '../../../_shared/styles/heartGauge.css'; +@font-face { + font-family: PokemonGB; + src: local("Pokemon GB"), url("./../../../../assets/fonts/Pokemon GB.ttf") +} + +@font-face { + font-family: RifficFree; + src: local("RifficFree"), url("../RifficFree-Bold.ttf") +} + +.pokes { + /* margin-top: 110px; */ +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; + text-shadow: 3px 3px 0px black; + top: 0; + font-family: monospace; +} + +.pokes.browser-connected { + display: block !important; +} + +.pokemon__list { + /* display: grid; */ + width: 100%; + /* grid-template-columns: repeat(6, 128px); */ + /* grid-template-rows: repeat(1, 115px); */ + /* column-gap: 20px; */ + display: block; +} + +.pokemon__list .pokemon { + display: block; + position: relative; + text-align: center; + background-color: white; + width: 300px; + margin-top: 45px; + height: 95px; + background-color: rgba(0, 0, 0, 0.6); + transform: skewY(-5deg); + margin-left: 15px; +} + +.pokemon__list.flipped .pokemon { + transform: skewY(5deg); + margin-right: 15px; +} + +.pokemon__row { + width: 100%; + height: 100%; + overflow: hidden; +} + +.pokemon__level small { + font-size: 50%; +} + +.pokemon__level { + position: absolute; + font-family: "pokemonGB"; + color: #fff; + left: 35px; + top: 35px; +} + +.pokemon__list.flipped .pokemon__level { + right: 35px; + left: unset; +} + +.pokemon__name { + position: absolute; + bottom: -10px; + padding: 5px; + width: 166px; + font-family: "PokemonGB"; + text-align: center; + left: -15px; + z-index: 10; +} + +.pokemon__list.flipped .pokemon__name { + left: unset; + right: -15px; +} + +.pokemon__list .pokemon.isDead { + filter: grayscale(1); +} + + +.pokemon__list .pokemon .pokemon__image { + /* overflow: hidden; */ + height: 95px; + right: 0px; + position: absolute; + width: 138px; +} + +.pokemon__list .pokemon .pokemon__image .sprite.sprite--gif { + height: unset; +} + +.pokemon__list.flipped .pokemon .pokemon__image { + right: unset; + left: 0px; +} + +.pokemon__list .pokemon .sprite { + top: 50%; + position: absolute; + right: 10px; + /* height: 100%; */ +} + +.pokemon__list .pokemon.isPoisoned .pokemon__image .sprite { + animation: poisoned 0.9s, shake 0.9s; + animation-iteration-count: infinite; + transform: scale(1.2) translateY(-50%) translate3d(0, 0, 0); + backface-visibility: hidden; + perspective: 1000px; +} + +.pokemon__list .pokemon.isDamaged .pokemon__image .sprite { + animation: takeDamage 0.3s; + animation-iteration-count: 7; +} + +.pokemon__list .pokemon .sprite { + transform: scale(1.2) translateY(-50%); + max-width: 186px; + max-height: 100%; +} + +.pokemon__list.flipped .pokemon .sprite { + transform: scale(1.2) translateY(-50%) scaleX(-1); + left: 10px; +} + +.pokemon__list .pokemon .hp { + width: 100%; + top: -4px; + height: 4px; + position: absolute; +} + +.pokemon__list.flipped .pokemon .hp { + transform: scaleX(-1); +} + +.pokemon__list .pokemon .hp .hp__inner { + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; + height: 100%; +} + +.pokemon .hp .hp__inner.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} + +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.pokemon__list .pokemon .exp { + position: absolute; + bottom: 0px; + width: calc(100% - 160px); + height: 2px; + background: transparent; + z-index: 5; + right: 0; +} + +.pokemon__list.flipped .pokemon .exp { + transform: scaleX(-1); + right: unset; + left: 0px; +} + +.pokemon__heldItem { + position: absolute; + left: 6px; + bottom: 20px; +} + +.pokemon .exp .exp__inner { + background-color: cyan; + height: 3px; + transition: width 2s; +} + +.pokemon__list .pokemon .heart-gauge { + position: absolute; + bottom: 0px; + left: 0; + right: 0; + width: 100%; + height: 4px; + background: rgba(255, 255, 255, 0.15); + z-index: 5; + overflow: hidden; +} + +.pokemon__list.flipped .pokemon .heart-gauge { + transform: scaleX(-1); + right: unset; + left: 0px; +} + +.pokemon__list .pokemon .pokemon__details { + display: block; +} + +.pokemon__list .pokemon .pokemon__details .details__name { + font-weight: bold; + color: #c0c0c0; +} + +.pokemon__list .pokemon .pokemon__details .details__hp { + border: 1px solid #000000; + height: 5px; + width: 100%; +} + +.pokemon__list .pokemon .pokemon__details .details__hp .hp__bar { + background-color: #ff0000; + height: 5px; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +@keyframes takeDamage { + 0% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(400%) contrast(2); + -webkit-filter: none; + filter: none; + } + 50% { + + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes poisoned { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes shake { + 10%, 90% { + transform: translateY(-50%) scale(1.2) translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: translateY(-50%) scale(1.2) translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: translateY(-50%) scale(1.2) translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: translateY(-50%) scale(1.2) translate3d(4px, 0, 0); + } +} + + +.sleeping { + width: 200px; + height: 200px; + position: absolute; + top: -50px; + left: 94%; + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 11; +} + +.pokemon__list.flipped .sleeping { + left: 36%; +} + +.sleeping span { + font-family: "RifficFree"; + color: #d4d4d4; + position: absolute; + bottom: 10px; + left: 10px; + font-size: 23pt; + opacity: 0; + -moz-animation: sleep 9s infinite linear; + -webkit-animation: sleep 9s infinite linear; + animation: sleep 9s infinite linear; +} + +.sleeping span:nth-child(2n) { + -moz-animation-delay: 3s; + -webkit-animation-delay: 3s; + animation-delay: 3s; +} + +.sleeping span:nth-child(3n) { + -moz-animation-delay: 6s; + -webkit-animation-delay: 6s; + animation-delay: 6s; +} + +@-webkit-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@-moz-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@-ms-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +@keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} diff --git a/v2/themes/jezzabel-personal/assets/js/components/list.vue.js b/v2/themes/jezzabel-personal/assets/js/components/list.vue.js new file mode 100644 index 0000000..2b92602 --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/components/list.vue.js @@ -0,0 +1,58 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + this.flipped = clientSettings.params.getBool('flipped', false); + V2.onPartyUpdate((party => { + vm.party = party; + vm.$forceUpdate(); + })); + }, + methods: { + isValid(pokemon) { + return V2.isValidPokemon(pokemon); + }, + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/js/components/list.vue.js.map b/v2/themes/jezzabel-personal/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..cd6033d --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;SACpB,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,IAAI,CAAA;QACb,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC9D,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YAChB,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO,EAAE;QACL,OAAO,CAAC,OAA0B;YAC9B,OAAO,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;QACD,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/js/components/list.vue.ts b/v2/themes/jezzabel-personal/assets/js/components/list.vue.ts new file mode 100644 index 0000000..e314746 --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/components/list.vue.ts @@ -0,0 +1,60 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import type {Pokemon} from 'v2Proto' +import type {Nullable} from 'global' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false, + horizontal: false + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + this.flipped = clientSettings.params.getBool('flipped', false) + V2.onPartyUpdate((party => { + vm.party = party + vm.$forceUpdate() + })) + }, + methods: { + isValid(pokemon: Nullable) { + return V2.isValidPokemon(pokemon) + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.js b/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..135a5e5 --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.js @@ -0,0 +1,165 @@ +import { defineComponent } from 'vue'; +import { V2, typeColors, V2DataTypes } from 'pokelink'; +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+
+
+ +
+ z + z + z +
+ +
+
+ Lv.{{ pokemon.level }} +
+ +
+ +
+ {{ nickname }} +
+ + +
+
+
+
+
+
+ `, + components: { + 'trimmedSprite': trimmedSprite, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + } + }, + data() { + return { + justTookDamage: false, + loaded: false + }; + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + getSprite(pokemon) { + return V2.getSprite(pokemon); + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + healthPercent() { + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + isDead() { + if (!this.isValid) { + return false; + } + return parseFloat(this.healthPercent) === 0; + }, + isSleeping() { + if (!this.isValid) { + return false; + } + return this.pokemon.status === V2DataTypes.StatusEffect.asleep; + }, + isPoisoned() { + if (!this.isValid) { + return false; + } + return this.pokemon.status === V2DataTypes.StatusEffect.poisoned || this.pokemon.status === V2DataTypes.StatusEffect.badlyPoisoned; + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.isValid) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!this.isValid) { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.isValid) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + experienceRemaining() { + if (!this.isValid) { + return '0%'; + } + return `${this.pokemon.expPercentage}%`; + }, + nameStyle() { + let styles = { + 'opacity': this.opacity + }; + if (this.pokemon) { + let primaryType = this.pokemon.translations.english.types[0]; + let secondaryType = primaryType; + if (this.pokemon.translations.english.types.length < 1) { + secondaryType = this.pokemon.translations.english.types[1]; + } + styles = { + ...styles, + 'background-image': 'linear-gradient(180deg, ' + typeColors[primaryType] + ', ' + typeColors[secondaryType] + ')' + }; + } + return styles; + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true; + setTimeout(() => { + this.justTookDamage = false; + }, 3000); + } + } + catch (e) { + return; + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.js.map b/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..0c30ae0 --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.ts b/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..3949a9d --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/components/pokemon.vue.ts @@ -0,0 +1,173 @@ +import {defineComponent, PropType} from 'vue' +import {V2, clientSettings, typeColors, V2DataTypes} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import type {Nullable} from 'global' +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+
+
+ +
+ z + z + z +
+ +
+
+ Lv.{{ pokemon.level }} +
+ +
+ +
+ {{ nickname }} +
+ + +
+
+
+
+
+
+ `, + components: { + 'trimmedSprite': trimmedSprite, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + } + }, + data() { + return { + justTookDamage: false, + loaded: false + } + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + getSprite(pokemon: Pokemon) { + return V2.getSprite(pokemon) + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + healthPercent() { + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + isDead() { + if (!this.isValid) { + return false + } + + return parseFloat(this.healthPercent) === 0 + }, + isSleeping() { + if (!this.isValid) { + return false + } + + return this.pokemon.status === V2DataTypes.StatusEffect.asleep + }, + isPoisoned() { + if (!this.isValid) { + return false + } + + return this.pokemon.status === V2DataTypes.StatusEffect.poisoned || this.pokemon.status === V2DataTypes.StatusEffect.badlyPoisoned + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.isValid) { + return null + } + return this.pokemon.species + }, + opacity() { + if (!this.isValid) { + return '0.4' + } + return '1' + }, + hasItem() { + if (!this.isValid) { + return false + } + + return this.pokemon.heldItem !== 0 + }, + experienceRemaining() { + if (!this.isValid) { + return '0%' + } + return `${this.pokemon.expPercentage}%` + }, + nameStyle() { + let styles: {} = { + 'opacity': this.opacity + } + + if (this.pokemon) { + let primaryType = this.pokemon.translations!.english!.types[0] + let secondaryType = primaryType + if (this.pokemon.translations!.english!.types.length < 1) { + secondaryType = this.pokemon.translations!.english!.types[1] + } + + styles = { + ...styles, + 'background-image': 'linear-gradient(180deg, ' + typeColors[primaryType] + ', ' + typeColors[secondaryType] + ')' + } + } + + return styles + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true + setTimeout(() => { + this.justTookDamage = false + }, 3000) + } + } catch (e) { + return + } + } + } +}) diff --git a/v2/themes/jezzabel-personal/assets/js/party.js b/v2/themes/jezzabel-personal/assets/js/party.js new file mode 100644 index 0000000..aebc1e0 --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/party.js @@ -0,0 +1,32 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, homeSpriteTemplate } from 'pokelink'; +import list from './components/list.vue.js'; +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate); + }); + V2.initialize(); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/js/party.js.map b/v2/themes/jezzabel-personal/assets/js/party.js.map new file mode 100644 index 0000000..b9a733d --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAC,MAAM,UAAU,CAAA;AAC/D,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE;gBACrB,EAAE,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,UAAU,EAAE,CAAA;YAEf,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/assets/js/party.ts b/v2/themes/jezzabel-personal/assets/js/party.ts new file mode 100644 index 0000000..485c77a --- /dev/null +++ b/v2/themes/jezzabel-personal/assets/js/party.ts @@ -0,0 +1,35 @@ +import {createApp} from 'vue' +import {V2, clientSettings, homeSpriteTemplate} from 'pokelink' +import list from './components/list.vue.js' + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate) + }) + + V2.initialize() + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/jezzabel-personal/index.html b/v2/themes/jezzabel-personal/index.html new file mode 100644 index 0000000..ccb2146 --- /dev/null +++ b/v2/themes/jezzabel-personal/index.html @@ -0,0 +1,55 @@ + + + + + + Jezzabel's Personal + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/letsgo/assets/css/styles.css b/v2/themes/letsgo/assets/css/styles.css new file mode 100644 index 0000000..aae88f0 --- /dev/null +++ b/v2/themes/letsgo/assets/css/styles.css @@ -0,0 +1,464 @@ +@import '../../../_shared/styles/heartGauge.css'; +.arrow { + position: absolute; + left: 0; + top: 50%; + width: 36px; + height: 36px; + -webkit-animation: boing 0.8s ease infinite; + animation: boing 0.8s ease infinite; + -webkit-transform-origin: right center; + transform-origin: right center; + pointer-events: none; +} + +.arrow svg { + position: absolute; + width: 36px; + left: 0; + top: 0; + -webkit-filter: drop-shadow(0px 2px 3px rgba(0, 0, 0, 0.4)); + filter: drop-shadow(0px 2px 3px rgba(0, 0, 0, 0.4)); + -webkit-animation: smoosh 0.7s ease infinite; + animation: smoosh 0.7s ease infinite; +} + +.pokes { + +} + +.pokemon__list { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + max-height: 100vh; + justify-content: space-evenly; + align-content: space-between; +} + +.pokemon__list.vertical-column { + flex-direction: column; +} + +.pokemon { + /*background: linear-gradient(45deg, #d2ffde, #ceefff, #ded1ff);*/ + float: left; + text-align: center; + position: relative; + width: 180px; + min-width: 150px; + + max-height: 256px; + margin: 0 20px; +} + +.pokemon__list.vertical-column .pokemon { + margin-bottom: 10px; +} + + +.pokemon * { + vertical-align: middle; +} + +.pokemon label { + position: absolute; + left: 10px; + right: 10px; + top: 10px; + bottom: 10px; + z-index: 1; +} + +.pokemon .radio { + position: absolute; + opacity: 0; +} + +.pokemon .lvl { + color: #666; + position: absolute; + left: 14px; + top: 12px; + font-weight: 400; + font-size: 18px; +} + +.pokemon .sex { + position: absolute; + right: 14px; + top: 11px; +} + +.pokemon .sex .icon { + width: 18px; +} + +.pokemon .sex .icon.female { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +.pokemon .sprite { + position: absolute; + top: 35%; + left: 50%; + transform: translate(-50%, -50%); + max-height: 100%; + max-width: 160px; +} + +.pokemon .details { + position: absolute; + top: 65%; + left: 0; + right: 0; +} + +.pokemon .details .name { + font-size: 20px; + font-weight: 400; + color: #222; + margin: 4px 0; + display: inline-block; +} + +.pokemon .details .hp { + width: 60%; + margin: auto; +} + +.pokemon .details .hp .text { + color: #666; + display: inline-block; + padding-top: 4px; + font-size: 14px; +} + +.pokemon .details .hp .bar { + border-radius: 50px; + background: #073fa7; + border: 3.5px solid #00a3e2; + height: 11px; + overflow: hidden; +} + +.pokemon .details .hp .bar .health { + width: 50%; + height: 100%; + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; +} + +.pokemon .details .hp .bar .health.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} + +.pokemon .details .hp .bar .health.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.pokemon .pokeball { + position: absolute; + fill: white; + opacity: 0.5; + transition: all 0.5s ease; + width: 76%; + left: 12%; + top: 47%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.pokemon .cell { + transition: all 0.2s ease; +} + +.pokemon .cell .bg { + stroke: rgba(255, 255, 255, 0.5); + fill: rgba(255, 255, 255, 0.5); + transition: all 1.15s ease; +} + +.pokemon .cell .stroke { + stroke: white; + stroke-width: 4px; +} + +.pokemon:after { + content: ""; + display: block; + position: absolute; + left: 7px; + right: 7px; + bottom: 2px; + height: 180px; + border-radius: 100% 100% 70% 70% / 70% 70% 20% 20%; + background: transparent; + box-shadow: 0 20px 30px rgba(0, 0, 0, 0.1); + transition: all 0.2s ease; + z-index: -2; +} + +.pokemon.selected:after { + box-shadow: 0 20px 30px rgba(0, 0, 0, 0.5); +} + +.pokemon.selected .cell { + -webkit-filter: drop-shadow(0px 2px 6px white); + filter: drop-shadow(0px 2px 6px white); + -webkit-transform: scale(1.02); + transform: scale(1.02); +} + +.pokemon.selected .cell .bg { + fill: rgba(255, 246, 146, 0.9); + fill: url(#bg-gradient-selected) !important; +} + +.pokemon.selected .pokeball { + opacity: 0.8; +} + +.pokemon.selected .sprite { + -webkit-animation: bounce 0.8s ease infinite; + animation: bounce 0.8s ease infinite; +} + +.button { + position: relative; + background: white; + border: 2px solid #ffc55b; + border-radius: 10px; + min-height: 30px; + vertical-align: middle; + padding: 0 20px; + outline: none !important; + cursor: pointer; + font-size: 18px; +} + +.button:after { + content: ""; + position: absolute; + left: -5px; + right: -5px; + top: -5px; + bottom: -5px; + background: white; + border-radius: 13px; + z-index: -1; + box-shadow: 0 3px 5px -2px rgba(0, 0, 0, 0.2); +} + +.button:hover { + background: linear-gradient(to bottom, #ffd78e, #ffc55b); + border-color: white; +} + +.button:hover:after { + background: linear-gradient(to bottom, #ffd78e, #ffc55b); + box-shadow: 0 0 5px 2px white, 0 0 15px #ffe9c1, 0 3px 5px -2px rgba(0, 0, 0, 0.2); +} + +.candy { + display: block; + position: absolute; + top: 52%; + left: 55%; + height: 12px; + width: 12px; + transform: scale(1); + margin: 12px; +} + +.candy:after { + content: ""; + display: block; + height: 1px; + width: 1px; + box-shadow: 0px 5px #000000, 0px 6px #000000, 0px 7px #000000, 1px 8px #000000, 3px 9px #000000, 2px 9px #000000, 4px 10px #000000, 5px 10px #000000, 6px 11px #000000, 7px 11px #000000, 8px 11px #000000, 9px 10px #000000, 10px 9px #000000, 10px 8px #000000, 10px 7px #000000, 10px 6px #000000, 10px 5px #000000, 10px 4px #000000, 10px 3px #000000, 9px 2px #000000, 8px 1px #000000, 7px 1px #000000, 6px 1px #000000, 5px 2px #000000, 4px 2px #000000, 3px 3px #000000, 2px 3px #000000, 1px 4px #000000, 8px 2px #ffffff, 7px 2px #ffffff, 6px 3px #ffffff, 7px 3px #ffffff, 8px 3px #ffffff, 9px 3px #ffffff, 8px 4px #ffffff, 6px 2px #fff69c, 5px 3px #fff69c, 4px 3px #fff69c, 4px 4px #fff69c, 2px 4px #fff69c, 3px 5px #fff69c, 6px 4px #fff69c, 9px 5px #fff69c, 9px 7px #fff69c, 6px 8px #fff69c, 3px 4px #fff6e6, 2px 5px #fff6e6, 3px 6px #fff6e6, 7px 4px #fff6e6, 9px 4px #fff6e6, 7px 8px #fff6e6, 8px 8px #ffffff, 8px 10px #dea410, 7px 10px #dea410, 6px 10px #dea410, 9px 9px #dea410, 8px 9px #dea410, 7px 9px #dea410, 6px 9px #dea410, 5px 9px #dea410, 4px 9px #dea410, 4px 8px #dea410, 3px 8px #dea410, 2px 8px #dea410, 2px 7px #dea410, 1px 7px #dea410, 1px 6px #dea410, 1px 5px #eec529, 2px 6px #eec529, 3px 7px #eec529, 5px 8px #eec529, 9px 8px #eec529, 7px 6px #f6de41, 8px 6px #f6de41, 8px 7px #f6de41, 7px 7px #f6de41, 7px 5px #f6de41, 6px 5px #f6de41, 5px 5px #f6de41, 6px 6px #f6de41, 5px 4px #ffe65a, 4px 5px #ffe65a, 8px 5px #ffe65a, 9px 6px #ffe65a, 4px 6px #ffe65a, 5px 6px #ffe65a, 5px 7px #ffe65a, 6px 7px #ffe65a, 4px 7px #fff69c; +} + +.candy.mighty { + filter: hue-rotate(300deg) saturate(2.2); +} + +.candy.smart { + filter: hue-rotate(200deg) saturate(1) brightness(0.65) contrast(3); +} + +.candy.tough { + filter: hue-rotate(170deg) saturate(1) brightness(0.65) contrast(3.1); +} + +.candy.courage { + filter: hue-rotate(40deg) saturate(1) brightness(0.8) contrast(2); +} + +.candy.quick { + filter: hue-rotate(140deg) saturate(1) brightness(0.8) contrast(1.8); +} + + +@-webkit-keyframes boing { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + } +} + +@keyframes boing { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + } +} + +@-webkit-keyframes bounce { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + } +} + +@keyframes bounce { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + } +} + +@-webkit-keyframes float { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%); + transform: translateY(-50%) translateX(-50%); + } + 50% { + -webkit-transform: translateY(-57%) translateX(-50%); + transform: translateY(-57%) translateX(-50%); + } +} + +@keyframes float { + 0%, 100% { + -webkit-transform: translateY(-50%) translateX(-50%); + transform: translateY(-50%) translateX(-50%); + } + 50% { + -webkit-transform: translateY(-57%) translateX(-50%); + transform: translateY(-57%) translateX(-50%); + } +} + +body, html { + min-height: 100%; + text-align: center; +} + +h1 { + display: inline-block; + font-size: 60px; + margin: 10px; + color: #805cff; + font-weight: 900; +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; +} + +.browser-connected { + display: block !important; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.deaths { +} + +.deaths__title { +} + +.deaths__list { + grid-template-columns: repeat(4, 1fr); + grid-template-rows: 100px; +} + +.deaths .deaths__list .deaths__pokemon { + height: 100%; +} + +.deaths .deaths__list .deaths__pokemon img { + height: 100%; +} + + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.browser-connected { + display: block !important; +} + +.pokemon > .heart-gauge { + position: absolute; + bottom: 2px; + left: 10px; + right: 10px; + height: 4px; + background: rgba(0, 0, 0, 0.15); + border-radius: 2px; + overflow: hidden; +} diff --git a/v2/themes/letsgo/assets/js/components/arrow.vue.js b/v2/themes/letsgo/assets/js/components/arrow.vue.js new file mode 100644 index 0000000..8de578b --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/arrow.vue.js @@ -0,0 +1,23 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + + + + + + +`, + props: { + topColor: { type: String, default: "#eee" }, + bottomColor: { type: String, default: "#888" } + } +}); +//# sourceMappingURL=arrow.vue.js.map \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/arrow.vue.js.map b/v2/themes/letsgo/assets/js/components/arrow.vue.js.map new file mode 100644 index 0000000..6d58991 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/arrow.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"arrow.vue.js","sourceRoot":"","sources":["arrow.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;CAcb;IACG,KAAK,EAAE;QACH,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;QAC3C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;KACjD;CACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/arrow.vue.ts b/v2/themes/letsgo/assets/js/components/arrow.vue.ts new file mode 100644 index 0000000..1a1dbb7 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/arrow.vue.ts @@ -0,0 +1,23 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + + + + + + +`, + props: { + topColor: { type: String, default: "#eee" }, + bottomColor: { type: String, default: "#888" } + } +}); diff --git a/v2/themes/letsgo/assets/js/components/bg.vue.js b/v2/themes/letsgo/assets/js/components/bg.vue.js new file mode 100644 index 0000000..fa2df7f --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/bg.vue.js @@ -0,0 +1,23 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + + + +`, + props: { + border: {}, + bgc: {}, + type1: {}, + type2: {}, + ident: {}, + } +}); +//# sourceMappingURL=bg.vue.js.map \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/bg.vue.js.map b/v2/themes/letsgo/assets/js/components/bg.vue.js.map new file mode 100644 index 0000000..f740762 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/bg.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bg.vue.js","sourceRoot":"","sources":["bg.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;CAWb;IACG,KAAK,EAAE;QACH,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACZ;CACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/bg.vue.ts b/v2/themes/letsgo/assets/js/components/bg.vue.ts new file mode 100644 index 0000000..6fa8e62 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/bg.vue.ts @@ -0,0 +1,23 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + + + +`, + props: { + border: {}, + bgc: {}, + type1: {}, + type2: {}, + ident: {}, + } +}); diff --git a/v2/themes/letsgo/assets/js/components/female.vue.js b/v2/themes/letsgo/assets/js/components/female.vue.js new file mode 100644 index 0000000..9e6ca9d --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/female.vue.js @@ -0,0 +1,17 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + +` +}); +//# sourceMappingURL=female.vue.js.map \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/female.vue.js.map b/v2/themes/letsgo/assets/js/components/female.vue.js.map new file mode 100644 index 0000000..55a04c2 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/female.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"female.vue.js","sourceRoot":"","sources":["female.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;OAYP;CACN,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/female.vue.ts b/v2/themes/letsgo/assets/js/components/female.vue.ts new file mode 100644 index 0000000..4d7cdc6 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/female.vue.ts @@ -0,0 +1,17 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + +` +}); diff --git a/v2/themes/letsgo/assets/js/components/male.vue.js b/v2/themes/letsgo/assets/js/components/male.vue.js new file mode 100644 index 0000000..abaa0fb --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/male.vue.js @@ -0,0 +1,14 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + ` +}); +//# sourceMappingURL=male.vue.js.map \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/male.vue.js.map b/v2/themes/letsgo/assets/js/components/male.vue.js.map new file mode 100644 index 0000000..987aa1d --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/male.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"male.vue.js","sourceRoot":"","sources":["male.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;WASH;CACV,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/male.vue.ts b/v2/themes/letsgo/assets/js/components/male.vue.ts new file mode 100644 index 0000000..a067920 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/male.vue.ts @@ -0,0 +1,14 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + ` +}); diff --git a/v2/themes/letsgo/assets/js/components/pokeball.vue.js b/v2/themes/letsgo/assets/js/components/pokeball.vue.js new file mode 100644 index 0000000..fd74d7c --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/pokeball.vue.js @@ -0,0 +1,16 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + `, + props: { + topColor: {}, + bottomColor: {} + } +}); +//# sourceMappingURL=pokeball.vue.js.map \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/pokeball.vue.js.map b/v2/themes/letsgo/assets/js/components/pokeball.vue.js.map new file mode 100644 index 0000000..80ee8bd --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/pokeball.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokeball.vue.js","sourceRoot":"","sources":["pokeball.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;GAOX;IACC,KAAK,EAAE;QACH,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;KAClB;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/pokeball.vue.ts b/v2/themes/letsgo/assets/js/components/pokeball.vue.ts new file mode 100644 index 0000000..b445061 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/pokeball.vue.ts @@ -0,0 +1,16 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + `, + props: { + topColor: {}, + bottomColor: {} + } +}) diff --git a/v2/themes/letsgo/assets/js/components/pokemon.vue.js b/v2/themes/letsgo/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..3b71400 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/pokemon.vue.js @@ -0,0 +1,242 @@ +import { defineComponent } from 'vue'; +import { V2, V2DataTypes, hex2rgba, typeColors, string2ColHex, clientSettings, htmlColors, isDefined } from 'pokelink'; +import female from './female.vue.js'; +import male from './male.vue.js'; +import pokeball from './pokeball.vue.js'; +import bg from './bg.vue.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+ + + + + +
+ `, + props: { + pokemon: { + type: Object + } + }, + components: { + 'female': female, + 'male': male, + 'pokeball': pokeball, + 'bg': bg, + 'heart-gauge': heartGauge + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + data() { + return { + settings: { + colorPokeball: clientSettings.params.getBool('colorPokeball', false), + colorBothSides: clientSettings.params.getBool('colorBothSides', true), + colorBorder: clientSettings.params.getBool('colorBorder', false), + colorBg: clientSettings.params.getBool('colorBg', true), + pokemonColor: clientSettings.params.getString('color', 'type') === 'pokemon', + typeColor: clientSettings.params.getString('color', 'type') === 'type', + routeColor: clientSettings.params.getString('color', 'type') === 'route' + } + }; + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + partner() { + return false; + }, + healthPercent() { + if (!this.isValid) { + return '0%'; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + nickname() { + if (!this.isValid) { + return ''; + } + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + if (!this.isValid || this.pokemon.isEgg) { + return ''; + } + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.isValid) { + return null; + } + return `${this.pokemon.species}${isDefined(this.pokemon.form) ? `-${this.pokemon.form}` : ''}`; + }, + opacity() { + if (!this.isValid) { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.isValid) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + type1() { + if (!this.isValid) { + return 'rgba(255,255,255,.2)'; + } + return hex2rgba(typeColors[this.pokemon.translations.english.types[0]], 50); + }, + type2() { + if (!this.isValid) { + return 'rgba(255,255,255,.2)'; + } + if (this.pokemon.translations.english.types.length >= 2) { + return hex2rgba(typeColors[this.pokemon.translations.english.types[1]], 50); + } + return hex2rgba(typeColors[this.pokemon.translations.english.types[0]], 50); + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + } + }, + methods: { + sprite() { + if (this.pokemon?.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.png'; + } + return V2.getSprite(this.pokemon); + }, + useFallback() { + V2.useFallback(this.$refs.pokemonImg, this.pokemon); + }, + getPokeballTopColor: function () { + if (!this.settings.colorPokeball) { + return 'white'; + } + if (!this.isValid) { + return 'rgba(255,255,255,.2)'; + } + if (this.settings.pokemonColor) { + return isDefined(this.pokemon.color) ? htmlColors[this.pokemon.color.toLowerCase()] : 'white'; + } + if (this.settings.routeColor) { + if (isDefined(this.pokemon.translations.locale.locationMetName)) { + return string2ColHex(this.pokemon.translations.locale.locationMetName); + } + return 'white'; + } + if (this.settings.typeColor) { + return typeColors[this.pokemon.translations.english.types[0]]; + } + return 'white'; + }, + getPokeballBottomColor: function () { + if (!this.settings.colorPokeball) { + return 'white'; + } + if (!this.isValid) { + return 'rgba(255,255,255,.2)'; + } + if (this.settings.pokemonColor) { + if (!this.settings.colorBothSides) { + return 'white'; + } + return isDefined(this.pokemon.color) ? htmlColors[this.pokemon.color.toLowerCase()] : 'white'; + } + if (this.settings.routeColor) { + if (!this.settings.colorBothSides) { + return 'white'; + } + if (isDefined(this.pokemon.translations.locale.locationMetName)) { + return string2ColHex(this.pokemon.translations.locale.locationMetName); + } + return 'white'; + } + if (this.settings.typeColor) { + if (this.pokemon.translations.english.types.length >= 2) { + return typeColors[this.pokemon.translations.english.types[1]]; + } + return typeColors[this.pokemon.translations.english.types[0]]; + } + return 'white'; + }, + getBorderColor: function () { + if (!this.settings.colorBorder) { + return 'white'; + } + if (!this.isValid) { + return 'white'; + } + if (this.settings.routeColor) { + if (isDefined(this.pokemon.translations.locale.locationMetName)) { + return string2ColHex(this.pokemon.translations.locale.locationMetName); + } + return 'white'; + } + if (this.settings.pokemonColor) { + return hex2rgba(isDefined(this.pokemon.color) ? htmlColors[this.pokemon.color.toLowerCase()] : 'white', 50); + } + if (this.settings.typeColor) { + return typeColors[this.pokemon.translations.english.types[0]]; + } + return 'white'; + }, + getBgColor: function () { + if (!this.settings.colorBg) { + return 'rgba(255,255,255,.5)'; + } + if (!this.isValid) { + return 'rgba(255,255,255,.5)'; + } + if (this.settings.routeColor) { + if (isDefined(this.pokemon.translations.locale.locationMetName)) { + return string2ColHex(this.pokemon.translations.locale.locationMetName); + } + return 'white'; + } + if (this.settings.pokemonColor) { + return hex2rgba(isDefined(this.pokemon.color) ? htmlColors[this.pokemon.color.toLowerCase()] : 'white', 50); + } + if (this.settings.typeColor) { + return `url('#types-${this.pokemon.species}${isDefined(this.pokemon.form) ? `-${this.pokemon.form}` : ''}')`; + } + return 'rgba(255,255,255,.5)'; + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/pokemon.vue.js.map b/v2/themes/letsgo/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..d58bd02 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/components/pokemon.vue.ts b/v2/themes/letsgo/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..b284057 --- /dev/null +++ b/v2/themes/letsgo/assets/js/components/pokemon.vue.ts @@ -0,0 +1,273 @@ +import {defineComponent, PropType} from 'vue' +import {V2, V2DataTypes, hex2rgba, typeColors, string2ColHex, clientSettings, htmlColors, isDefined} from 'pokelink' +import female from './female.vue.js' +import male from './male.vue.js' +import pokeball from './pokeball.vue.js' +import bg from './bg.vue.js' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' +import {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` +
+ + + + + +
+ `, + props: { + pokemon: { + type: Object as PropType + } + }, + components: { + 'female': female, + 'male': male, + 'pokeball': pokeball, + 'bg': bg, + 'heart-gauge': heartGauge + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + data() { + return { + settings: { + colorPokeball: clientSettings.params.getBool('colorPokeball', false), + colorBothSides: clientSettings.params.getBool('colorBothSides', true), + colorBorder: clientSettings.params.getBool('colorBorder', false), + colorBg: clientSettings.params.getBool('colorBg', true), + pokemonColor: clientSettings.params.getString('color', 'type') === 'pokemon', + typeColor: clientSettings.params.getString('color', 'type') === 'type', + routeColor: clientSettings.params.getString('color', 'type') === 'route' + } + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + partner() { + return false + }, + healthPercent() { + if (!this.isValid) { + return '0%' + } + return (100 / this.pokemon!.hp!.max) * this.pokemon!.hp!.current + '%' + }, + nickname() { + if (!this.isValid) { + return '' + } + return this.pokemon!.nickname || this.pokemon!.translations!.locale!.speciesName + }, + sex() { + if (!this.isValid || this.pokemon!.isEgg) { + return '' + } + return (this.pokemon!.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon!.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.isValid) { + return null + } + return `${this.pokemon!.species}${isDefined(this.pokemon!.form) ? `-${this.pokemon!.form!}` : ''}` + }, + opacity() { + if (!this.isValid) { + return '0.4' + } + return '1' + }, + hasItem() { + if (!this.isValid) { + return false + } + return this.pokemon!.heldItem !== 0 + }, + type1() { + if (!this.isValid) { + return 'rgba(255,255,255,.2)' + } + + return hex2rgba(typeColors[this.pokemon!.translations!.english!.types[0]], 50) + }, + type2() { + if (!this.isValid) { + return 'rgba(255,255,255,.2)' + } + + if (this.pokemon!.translations!.english!.types.length >= 2) { + return hex2rgba(typeColors[this.pokemon!.translations!.english!.types[1]], 50) + } + + return hex2rgba(typeColors[this.pokemon!.translations!.english!.types[0]], 50) + }, + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + } + }, + methods: { + sprite() { + if (this.pokemon?.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.png' + } + return V2.getSprite(this.pokemon!) + }, + useFallback() { + V2.useFallback(this.$refs.pokemonImg as HTMLImageElement, this.pokemon!) + }, + getPokeballTopColor: function () { + if (!this.settings.colorPokeball) { + return 'white' + } + + if (!this.isValid) { + return 'rgba(255,255,255,.2)' + } + + if (this.settings.pokemonColor) { + return isDefined(this.pokemon!.color) ? htmlColors[this.pokemon!.color!.toLowerCase()] : 'white' + } + + if (this.settings.routeColor) { + if (isDefined(this.pokemon!.translations!.locale!.locationMetName)) { + return string2ColHex(this.pokemon!.translations!.locale!.locationMetName!) + } + + return 'white' + } + + if (this.settings.typeColor) { + return typeColors[this.pokemon!.translations!.english!.types[0]] + } + + return 'white' + }, + getPokeballBottomColor: function () { + if (!this.settings.colorPokeball) { + return 'white' + } + + if (!this.isValid) { + return 'rgba(255,255,255,.2)' + } + + if (this.settings.pokemonColor) { + if (!this.settings.colorBothSides) { + return 'white' + } + return isDefined(this.pokemon!.color) ? htmlColors[this.pokemon!.color!.toLowerCase()] : 'white' + } + + if (this.settings.routeColor) { + if (!this.settings.colorBothSides) { + return 'white' + } + + if (isDefined(this.pokemon!.translations!.locale!.locationMetName)) { + return string2ColHex(this.pokemon!.translations!.locale!.locationMetName!) + } + + return 'white' + } + + if (this.settings.typeColor) { + if (this.pokemon!.translations!.english!.types.length >= 2) { + return typeColors[this.pokemon!.translations!.english!.types[1]] + } + return typeColors[this.pokemon!.translations!.english!.types[0]] + } + + return 'white' + }, + + getBorderColor: function () { + if (!this.settings.colorBorder) { + return 'white' + } + + if (!this.isValid) { + return 'white' + } + + if (this.settings.routeColor) { + if (isDefined(this.pokemon!.translations!.locale!.locationMetName)) { + return string2ColHex(this.pokemon!.translations!.locale!.locationMetName!) + } + + return 'white' + } + + if (this.settings.pokemonColor) { + return hex2rgba(isDefined(this.pokemon!.color) ? htmlColors[this.pokemon!.color!.toLowerCase()] : 'white', 50) + } + + if (this.settings.typeColor) { + return typeColors[this.pokemon!.translations!.english!.types[0]] + } + + return 'white' + }, + + getBgColor: function () { + if (!this.settings.colorBg) { + return 'rgba(255,255,255,.5)' + } + + if (!this.isValid) { + return 'rgba(255,255,255,.5)' + } + + if (this.settings.routeColor) { + if (isDefined(this.pokemon!.translations!.locale!.locationMetName)) { + return string2ColHex(this.pokemon!.translations!.locale!.locationMetName!) + } + + return 'white' + } + + if (this.settings.pokemonColor) { + return hex2rgba(isDefined(this.pokemon!.color) ? htmlColors[this.pokemon!.color!.toLowerCase()] : 'white', 50) + } + + if (this.settings.typeColor) { + return `url('#types-${this.pokemon!.species}${isDefined(this.pokemon!.form) ? `-${this.pokemon!.form!}` : ''}')` + } + + return 'rgba(255,255,255,.5)' + } + } +}) diff --git a/v2/themes/letsgo/assets/js/party.js b/v2/themes/letsgo/assets/js/party.js new file mode 100644 index 0000000..96c16f0 --- /dev/null +++ b/v2/themes/letsgo/assets/js/party.js @@ -0,0 +1,83 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon.vue.js'; +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + }; + }, + mounted: function () { + const vm = this; + this.resetSpriteSet(); + V2.onSpriteSetReset(this.resetSpriteSet); + V2.initialize(); + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false); + this.settings.hp = clientSettings.params.getBool('hp', false); + V2.onPartyUpdate((party) => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + }); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/national/animated' + + '{{ifElse isShiny "-shiny" ""}}' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}' + + '{{addFemaleTag this "-f"}}.gif'); + }, + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/party.js.map b/v2/themes/letsgo/assets/js/party.js.map new file mode 100644 index 0000000..6a56f62 --- /dev/null +++ b/v2/themes/letsgo/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/letsgo/assets/js/party.ts b/v2/themes/letsgo/assets/js/party.ts new file mode 100644 index 0000000..67adfca --- /dev/null +++ b/v2/themes/letsgo/assets/js/party.ts @@ -0,0 +1,98 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import type {Nullable} from 'global' +import type {Pokemon} from 'v2Proto' +import pokemonCard from './components/pokemon.vue.js' + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + } + }, + mounted: function () { + const vm = this + + this.resetSpriteSet() + + V2.onSpriteSetReset(this.resetSpriteSet) + + V2.initialize() + + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false) + this.settings.hp = clientSettings.params.getBool('hp', false) + + V2.onPartyUpdate((party: Nullable[]) => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + }) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, + clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/national/animated' + + '{{ifElse isShiny "-shiny" ""}}' + + '/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}' + + '{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}' + + '{{addFemaleTag this "-f"}}.gif') + + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/letsgo/index.html b/v2/themes/letsgo/index.html new file mode 100644 index 0000000..c61f5b1 --- /dev/null +++ b/v2/themes/letsgo/index.html @@ -0,0 +1,63 @@ + + + + + + Lets Go + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/css/styles.css b/v2/themes/mass-multiplayer/assets/css/styles.css new file mode 100644 index 0000000..fbccd5c --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/css/styles.css @@ -0,0 +1,190 @@ +@import '../../../_shared/styles/heartGauge.css'; +html, body { + width: 100%; + height: 100%; + overflow: hidden; + padding: 0; + margin: 0; + background-color: transparent !important; +} + +body { + background-color: transparent !important; +} + +@font-face { + font-family: PokemonGB; + src: local("Pokemon GB"), url("../../../../assets/fonts/Pokemon GB.ttf") +} + +.pokemon__slot { + width: 150px; + margin-left: 10px; + background-size: contain; + position: relative; +} + +.pokemon__image { + height: 160px; + position: relative; + white-space: nowrap; +} + +.pokemon__image img { + filter: grayscale(0); + transition: grayscale 0.5s; +} + +.pokemon__image.pokemon__dead img { + filter: grayscale(1); +} + +.pokemon__image img { + position: absolute; + bottom: 70px; + + width: auto; + height: auto; + max-width: 60px; + max-height: 60px; + margin: 0 0 0 25%; + transform: scale(2); +} + +.pokemon__nick-shiny { + color: red; +} + +.pokemon__nick-sex.female { + color: red; +} + +.pokemon__nick-sex.male { + color: blue; +} + +.pokemon__level-bar, .pokemon__nick, .pokemon__dead-label { + font-size: 11px; + font-family: "PokemonGB"; + color: white; +} + +.pokemon__hp { + text-align: right; +} + +.pokemon__dead-label { + text-align: center; +} + +.progress-bar { + border-radius: 0px; + font-family: "PokemonGB"; + font-size: 8px !important; +} + +.progress-bar.grey { + background: #646464; +} + +.progress-bar.green { + background: #61df8f; +} + +.progress-bar.yellow { + background: #d9bc19; +} + +.progress-bar.red { + background: #c02020; +} + + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon__types { +} + +.pokemon__types span { + font-family: "PT Sans Condensed", "Roboto Condensed", sans-serif; + font-size: 14px; + letter-spacing: 0; + line-height: 19px; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3), 1px -1px 1px rgba(0, 0, 0, 0.3), -1px 1px 0 rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.9), 0 2px 1px rgba(0, 0, 0, 0.5); + color: white; + border-radius: 6px; + box-shadow: 0px 2px 0px 1px rgba(0, 0, 0, 0.6); + border-top: 1px rgba(255, 255, 255, 0.5) solid; + border-bottom: 4px rgba(0, 0, 0, 0.5) solid; + margin: 2px; + font-weight: normal; + text-transform: uppercase; + min-width: 65px; + text-align: center; + padding: 5px 8px; +} + +.pokemon__types span + span { + + margin: -5px; + border-radius: 0 6px 6px 0; +} + + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; +} + +.browser-connected { + display: block !important; +} + +.pokemon__slot .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: rgba(0, 0, 0, 0.15); + border-radius: 0; + overflow: hidden; +} diff --git a/v2/themes/mass-multiplayer/assets/js/components/display.vue.js b/v2/themes/mass-multiplayer/assets/js/components/display.vue.js new file mode 100644 index 0000000..918b7c3 --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/components/display.vue.js @@ -0,0 +1,96 @@ +import { defineComponent } from 'vue'; +import { isDefined, string2ColHex, V2 } from 'pokelink'; +import pokemonCard from './pokemon-card.vue.js'; +export default defineComponent({ + template: ` +
+
+
+ {{ user }} + + + +
Badges {{ data.badges.filter(x => x.obtained).length }}/{{ data.badges.length }} +
+
Deaths: {{ data.deaths.length }}
+
+
+
+ `, + components: { + 'pokemon-card': pokemonCard + }, + mounted() { + const vm = this; + V2.initialize({ listenForSpriteUpdates: false, numberOfPlayers: -1 }); + V2.onPartyUpdate(((party, username) => { + this.initializeIfUndefined(username); + this.users[username].party = party.filter(this.isDefined); + vm.$forceUpdate(); + })); + V2.onBadgeUpdate((badges, username) => { + this.initializeIfUndefined(username); + this.users[username].badges = badges; + }); + V2.onGraveyardUpdate((graveyard, username) => { + this.initializeIfUndefined(username); + this.users[username].deaths = graveyard; + }); + V2.onDeath((pokemon, username) => { + this.initializeIfUndefined(username); + this.users[username].deaths.push(pokemon); + }); + V2.onRevive((graveId, username) => { + this.initializeIfUndefined(username); + this.users[username].deaths = this.users[username].deaths.filter((x) => x.graveyardMeta?.id !== graveId); + }); + setInterval(this.checkUsers, 10000); + }, + data() { + return { + users: {}, + switchSpeed: 'switchMedium' + }; + }, + methods: { + initializeIfUndefined(user) { + if (!isDefined(this.users[user])) { + this.users[user] = { + party: [], + badges: [], + deaths: [], + lastUpdate: new Date(), + timedOut: false, + color: string2ColHex(user) + }; + } + this.users[user].lastUpdate = new Date(); + this.users[user].timedOut = false; + }, + checkUsers() { + this.$forceUpdate(); + // for (const user in this.users) { + // const timeDiff = new Date().getTime() - this.users[user].lastUpdate.getTime() + // if (timeDiff >= 10000 && !this.users[user].timedOut) { + // if (clientSettings.debug) { + // console.debug(`${user} has been idle for 30 seconds`) + // } + // this.users[user].timedOut = true + // } else if (timeDiff >= 30000) { + // if (clientSettings.debug) { + // console.debug(`${user} has been removed for being idle for 120 seconds`) + // } + // delete this.users[user] + // } + // } + }, + getTimeDiff(user) { + return new Date().getTime() - this.users[user].lastUpdate.getTime(); + }, + isDefined(obj) { + return isDefined(obj); + } + } +}); +//# sourceMappingURL=display.vue.js.map \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/components/display.vue.js.map b/v2/themes/mass-multiplayer/assets/js/components/display.vue.js.map new file mode 100644 index 0000000..e2965ab --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/components/display.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"display.vue.js","sourceRoot":"","sources":["display.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/components/display.vue.ts b/v2/themes/mass-multiplayer/assets/js/components/display.vue.ts new file mode 100644 index 0000000..ff9fe9b --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/components/display.vue.ts @@ -0,0 +1,119 @@ +import {defineComponent, PropType} from 'vue' +import {clientSettings, isDefined, Nullable, string2ColHex, V2} from 'pokelink' +import {Badge, Pokemon} from 'v2Proto' +import pokemonCard from './pokemon-card.vue.js' + +interface UserData { + party: Nullable[] + badges: Badge[], + deaths: Pokemon[] + lastUpdate: Date, + timedOut: boolean, + color: string +} + +export default defineComponent({ + template: ` +
+
+
+ {{ user }} + + + +
Badges {{ data.badges.filter(x => x.obtained).length }}/{{ data.badges.length }} +
+
Deaths: {{ data.deaths.length }}
+
+
+
+ `, + components: { + 'pokemon-card': pokemonCard + }, + mounted() { + const vm = this + + V2.initialize({listenForSpriteUpdates: false, numberOfPlayers: -1}) + + V2.onPartyUpdate(((party, username) => { + this.initializeIfUndefined(username) + + this.users[username].party = party.filter(this.isDefined) + vm.$forceUpdate() + })) + + V2.onBadgeUpdate((badges, username) => { + this.initializeIfUndefined(username) + + this.users[username].badges = badges + }) + + V2.onGraveyardUpdate((graveyard, username) => { + this.initializeIfUndefined(username) + + this.users[username].deaths = graveyard + }) + + V2.onDeath((pokemon, username) => { + this.initializeIfUndefined(username) + + this.users[username].deaths.push(pokemon) + }) + + V2.onRevive((graveId, username) => { + this.initializeIfUndefined(username) + + this.users[username].deaths = this.users[username].deaths.filter((x: Pokemon) => x.graveyardMeta?.id !== graveId) + }) + + setInterval(this.checkUsers, 10000) + }, + data() { + return { + users: {} as { [key: string]: UserData }, + switchSpeed: 'switchMedium' + } + }, + methods: { + initializeIfUndefined(user: string) { + if (!isDefined(this.users[user])) { + this.users[user] = { + party: [], + badges: [], + deaths: [], + lastUpdate: new Date(), + timedOut: false, + color: string2ColHex(user) + } + } + + this.users[user].lastUpdate = new Date() + this.users[user].timedOut = false + }, + checkUsers() { + this.$forceUpdate() + // for (const user in this.users) { + // const timeDiff = new Date().getTime() - this.users[user].lastUpdate.getTime() + // if (timeDiff >= 10000 && !this.users[user].timedOut) { + // if (clientSettings.debug) { + // console.debug(`${user} has been idle for 30 seconds`) + // } + // this.users[user].timedOut = true + // } else if (timeDiff >= 30000) { + // if (clientSettings.debug) { + // console.debug(`${user} has been removed for being idle for 120 seconds`) + // } + // delete this.users[user] + // } + // } + }, + getTimeDiff(user: string) { + return new Date().getTime() - this.users[user].lastUpdate.getTime(); + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + } +}) \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.js b/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.js new file mode 100644 index 0000000..50913b0 --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.js @@ -0,0 +1,44 @@ +import { defineComponent } from 'vue'; +import { V2 } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+ +
+ +
+
+
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + props: { + pokemon: { + default: null, + type: Object, + required: false + } + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite, this.pokemon); + }, + sprite() { + return V2.getSprite(this.pokemon); + } + } +}); +//# sourceMappingURL=pokemon-card.vue.js.map \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.js.map b/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.js.map new file mode 100644 index 0000000..285a8a0 --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon-card.vue.js","sourceRoot":"","sources":["pokemon-card.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAW,MAAM,KAAK,CAAA;AAC7C,OAAO,EAAC,EAAE,EAAC,MAAM,UAAU,CAAA;AAE3B,OAAO,UAAU,MAAM,kDAAkD,CAAA;AAEzE,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;KAaT;IACD,UAAU,EAAE;QACR,aAAa,EAAE,UAAU;KAC5B;IACD,OAAO;QACH,MAAM,EAAE,GAAG,IAAI,CAAA;QACf,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE;YAC3B,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAA;IACN,CAAC;IACD,KAAK,EAAE;QACH,OAAO,EAAE;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAA2B;YACjC,QAAQ,EAAE,KAAK;SAClB;KACJ;IACD,OAAO,EAAE;QACL,WAAW;YACP,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAiC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9E,CAAC;QACD,MAAM;YACF,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.ts b/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.ts new file mode 100644 index 0000000..e4abeb8 --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/components/pokemon-card.vue.ts @@ -0,0 +1,45 @@ +import {defineComponent, PropType} from 'vue' +import {V2} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+ +
+ +
+
+
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + props: { + pokemon: { + default: null, + type: Object as PropType, + required: false + } + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite as HTMLImageElement, this.pokemon) + }, + sprite() { + return V2.getSprite(this.pokemon) + } + } +}) \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/party.js b/v2/themes/mass-multiplayer/assets/js/party.js new file mode 100644 index 0000000..e28630e --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/party.js @@ -0,0 +1,26 @@ +import { createApp } from 'vue'; +import { V2, clientSettings } from 'pokelink'; +import display from './components/display.vue.js'; +(() => { + createApp({ + components: { + 'display': display + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + }; + }, + created: function () { + this.settings = clientSettings; + }, + mounted: function () { + V2.onConnect(() => { + this.connected = true; + }); + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/party.js.map b/v2/themes/mass-multiplayer/assets/js/party.js.map new file mode 100644 index 0000000..957ae3f --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAW,MAAM,UAAU,CAAA;AACrD,OAAO,OAAO,MAAM,6BAA6B,CAAA;AAEjD,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,SAAS,EAAE,OAAO;SACrB;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;YACL,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACzB,CAAC,CAAC,CAAA;QACN,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/mass-multiplayer/assets/js/party.ts b/v2/themes/mass-multiplayer/assets/js/party.ts new file mode 100644 index 0000000..04d1a01 --- /dev/null +++ b/v2/themes/mass-multiplayer/assets/js/party.ts @@ -0,0 +1,26 @@ +import {createApp} from 'vue' +import {V2, clientSettings, Nullable} from 'pokelink' +import display from './components/display.vue.js' + +(() => { + createApp({ + components: { + 'display': display + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + } + }, + created: function () { + this.settings = clientSettings + }, + mounted: function () { + V2.onConnect(() => { + this.connected = true + }) + } + }).mount('#party') +})() diff --git a/v2/themes/mass-multiplayer/index.html b/v2/themes/mass-multiplayer/index.html new file mode 100644 index 0000000..8fe8504 --- /dev/null +++ b/v2/themes/mass-multiplayer/index.html @@ -0,0 +1,60 @@ + + + + + + Sprite Only + + + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/v2/themes/pokeball/assets/css/styles.css b/v2/themes/pokeball/assets/css/styles.css new file mode 100644 index 0000000..6885188 --- /dev/null +++ b/v2/themes/pokeball/assets/css/styles.css @@ -0,0 +1,198 @@ +@import '../../../_shared/styles/heartGauge.css'; +html, body { + width: 100%; + height: 100%; + overflow: hidden; + padding: 0; + margin: 0; + background-color: transparent !important; +} + +body { + background-color: transparent !important; +} + +@font-face { + font-family: PokemonGB; + src: local("Pokemon GB"), url("../../../../assets/fonts/Pokemon%20GB.ttf") +} + +.pokemon__slot { + float: left; + width: 150px; + margin-left: 10px; + background: url('../../../../assets/pokeball.png') no-repeat; + background-size: contain; + position: relative; +} + +.pokemon__image { + height: 160px; + position: relative; + white-space: nowrap; +} + +.pokemon__image img { + filter: grayscale(0); + transition: grayscale 0.5s; +} + +.pokemon__image.pokemon__dead img { + filter: grayscale(1); +} + +.pokemon__image img { + position: absolute; + bottom: 70px; + + width: auto; + height: auto; + max-width: 60px; + max-height: 60px; + margin: 0 0 0 25%; + transform: scale(2); +} + +.pokemon__nick-shiny { + color: red; +} + +.pokemon__nick-sex.female { + color: red; +} + +.pokemon__nick-sex.male { + color: blue; +} + +.pokemon__nick { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.pokemon__level-bar, .pokemon__nick, .pokemon__dead-label { + font-size: 11px; + font-family: "PokemonGB"; + color: white; +} + +.pokemon__hp { + text-align: right; +} + +.pokemon__dead-label { + text-align: center; +} + +.progress-bar { + border-radius: 0px; + font-family: "PokemonGB"; + font-size: 8px !important; +} + +.progress-bar.grey { + background: #646464; +} + +.progress-bar.green { + background: #61df8f; +} + +.progress-bar.yellow { + background: #d9bc19; +} + +.progress-bar.red { + background: #c02020; +} + + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon__types { +} + +.pokemon__types span { + font-family: "PT Sans Condensed", "Roboto Condensed", sans-serif; + font-size: 14px; + letter-spacing: 0; + line-height: 19px; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3), 1px -1px 1px rgba(0, 0, 0, 0.3), -1px 1px 0 rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.9), 0 2px 1px rgba(0, 0, 0, 0.5); + color: white; + border-radius: 6px; + box-shadow: 0px 2px 0px 1px rgba(0, 0, 0, 0.6); + border-top: 1px rgba(255, 255, 255, 0.5) solid; + border-bottom: 4px rgba(0, 0, 0, 0.5) solid; + margin: 2px; + font-weight: normal; + text-transform: uppercase; + min-width: 65px; + text-align: center; + padding: 5px 8px; +} + +.pokemon__types span + span { + + margin: -5px; + border-radius: 0 6px 6px 0; +} + + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; +} + +.browser-connected { + display: block !important; +} + +.pokemon__slot .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: rgba(0, 0, 0, 0.15); + border-radius: 0; + overflow: hidden; +} diff --git a/v2/themes/pokeball/assets/js/components/pokemon-card.vue.js b/v2/themes/pokeball/assets/js/components/pokemon-card.vue.js new file mode 100644 index 0000000..c26b1d9 --- /dev/null +++ b/v2/themes/pokeball/assets/js/components/pokemon-card.vue.js @@ -0,0 +1,165 @@ +import { defineComponent } from 'vue'; +import { V2, clientSettings, V2DataTypes, string2ColHex } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+ +
+
+
+ + {{ pokemon.nickname || pokemon.translations.locale.speciesName }} + + + +
+
+
+ L{{ pokemon.level }} + {{ pokemon.hp.current }}/{{ pokemon.hp.max }} +
+
+
DEAD
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + settings: Object + }, + data() { + return { + hideHP: true, + hideLevel: true, + hideName: true + }; + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + this.hideHP = clientSettings.params.getBool('hideHP', false); + this.hideLevel = clientSettings.params.getBool('hideLevel', false); + this.hideName = clientSettings.params.getBool('hideName', false); + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + } + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite, this.pokemon); + }, + getSprite() { + if (this.pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.gif'; + } + return V2.getSprite(this.pokemon); + }, + styleBorder(pokemon) { + if (!this.isValid) { + return { 'border-color': 'black' }; + } + let color = clientSettings.params.getString('color', undefined); + const routeColor = color === 'route'; + const pokemonColor = color === 'pokemon'; + const typeColor = color === 'type'; + if (routeColor) { + return { 'border-color': string2ColHex(pokemon.translations.english.locationMetName) }; + } + if (pokemonColor) { + return { 'border-color': pokemon.color }; + } + if (typeColor) { + const types = pokemon.translations.english.types; + const count = types.length; + const type1 = V2.getTypeColor(types[0]); + if (count === 2) { + const type2 = V2.getTypeColor(types[1]); + return { + 'background': 'linear-gradient(to right, ' + type1 + ' 50%, ' + type2 + ' 50%)', + 'border-color': 'black' + }; + } + return { 'background': type1, 'border-color': 'black' }; + } + return { 'border-color': 'black' }; + }, + healthBarPercent: function () { + if (!this.isValid) { + return 100; + } + if (this.pokemon.hp.max === this.pokemon.hp.current) { + return 100; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current; + }, + healthBarClass: function () { + const percent = this.healthBarPercent(); + if (percent == 0) { + return 'progress-bar grey'; + } + if (percent <= 25) { + return 'progress-bar red'; + } + if (percent <= 50) { + return 'progress-bar yellow'; + } + return 'progress-bar green'; + }, + isBorderColorType: function () { + return clientSettings.params.getString('color', undefined) === 'type'; + }, + getTypeColor: function (type) { + return V2.getTypeColor(type); + }, + getStatusColor: function (status) { + return V2.getStatusColor(status); + }, + string2Hex: function (str) { + return string2ColHex(str); + }, + isMale() { + if (!this.isValid) { + return false; + } + return this.pokemon.gender === V2DataTypes.Gender.male; + }, + isFemale() { + if (!this.isValid) { + return false; + } + return this.pokemon.gender === V2DataTypes.Gender.female; + } + } +}); +//# sourceMappingURL=pokemon-card.vue.js.map \ No newline at end of file diff --git a/v2/themes/pokeball/assets/js/components/pokemon-card.vue.js.map b/v2/themes/pokeball/assets/js/components/pokemon-card.vue.js.map new file mode 100644 index 0000000..5232ff5 --- /dev/null +++ b/v2/themes/pokeball/assets/js/components/pokemon-card.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon-card.vue.js","sourceRoot":"","sources":["pokemon-card.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/pokeball/assets/js/components/pokemon-card.vue.ts b/v2/themes/pokeball/assets/js/components/pokemon-card.vue.ts new file mode 100644 index 0000000..5645f0d --- /dev/null +++ b/v2/themes/pokeball/assets/js/components/pokemon-card.vue.ts @@ -0,0 +1,180 @@ +import {defineComponent, PropType} from 'vue' +import {V2, clientSettings, V2DataTypes, string2ColHex} from 'pokelink' +import {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+ +
+
+
+ + {{ pokemon.nickname || pokemon.translations.locale.speciesName }} + + + +
+
+
+ L{{ pokemon.level }} + {{ pokemon.hp.current }}/{{ pokemon.hp.max }} +
+
+
DEAD
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + settings: Object + }, + data() { + return { + hideHP: true, + hideLevel: true, + hideName: true + } + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + + this.hideHP = clientSettings.params.getBool('hideHP', false) + this.hideLevel = clientSettings.params.getBool('hideLevel', false) + this.hideName = clientSettings.params.getBool('hideName', false) + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + } + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite as HTMLImageElement, this.pokemon!) + }, + getSprite() { + if (this.pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.gif' + } + return V2.getSprite(this.pokemon!) + }, + styleBorder(pokemon: Pokemon) { + if (!this.isValid) { + return {'border-color': 'black'} + } + + let color = clientSettings.params.getString('color', undefined) + const routeColor = color === 'route' + const pokemonColor = color === 'pokemon' + const typeColor = color === 'type' + + if (routeColor) { + return {'border-color': string2ColHex(pokemon.translations!.english!.locationMetName!)} + } + + if (pokemonColor) { + return {'border-color': pokemon.color} + } + + if (typeColor) { + const types = pokemon.translations!.english!.types + const count = types.length + const type1 = V2.getTypeColor(types[0]) + + if (count === 2) { + const type2 = V2.getTypeColor(types[1]) + return { + 'background': 'linear-gradient(to right, ' + type1 + ' 50%, ' + type2 + ' 50%)', + 'border-color': 'black' + } + } + return {'background': type1, 'border-color': 'black'} + } + + return {'border-color': 'black'} + }, + healthBarPercent: function () { + if (!this.isValid) { + return 100 + } + + if (this.pokemon.hp!.max === this.pokemon.hp!.current) { + return 100 + } + + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + }, + healthBarClass: function () { + const percent = this.healthBarPercent() + + if (percent == 0) { + return 'progress-bar grey' + } + if (percent <= 25) { + return 'progress-bar red' + } + if (percent <= 50) { + return 'progress-bar yellow' + } + + return 'progress-bar green' + }, + isBorderColorType: function () { + return clientSettings.params.getString('color', undefined) === 'type' + }, + + getTypeColor: function (type: string) { + return V2.getTypeColor(type) + }, + + getStatusColor: function (status: string) { + return V2.getStatusColor(status) + }, + string2Hex: function (str: string) { + return string2ColHex(str) + }, + isMale() { + if (!this.isValid) { + return false + } + return this.pokemon!.gender === V2DataTypes.Gender.male + }, + isFemale() { + if (!this.isValid) { + return false + } + return this.pokemon!.gender === V2DataTypes.Gender.female + } + } +}) + diff --git a/v2/themes/pokeball/assets/js/party.js b/v2/themes/pokeball/assets/js/party.js new file mode 100644 index 0000000..e8d70b9 --- /dev/null +++ b/v2/themes/pokeball/assets/js/party.js @@ -0,0 +1,77 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon-card.vue.js'; +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + }; + }, + mounted: function () { + const vm = this; + this.resetSpriteSet(); + V2.onSpriteSetReset(this.resetSpriteSet); + V2.initialize(); + V2.onPartyUpdate((party) => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + }); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/{{ifElse isShiny "animated-shiny" "animated"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}{{addFemaleTag this "-f"}}.gif'); + }, + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/pokeball/assets/js/party.js.map b/v2/themes/pokeball/assets/js/party.js.map new file mode 100644 index 0000000..55bcac9 --- /dev/null +++ b/v2/themes/pokeball/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/pokeball/assets/js/party.ts b/v2/themes/pokeball/assets/js/party.ts new file mode 100644 index 0000000..1fba1ae --- /dev/null +++ b/v2/themes/pokeball/assets/js/party.ts @@ -0,0 +1,90 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import type {Nullable} from 'global' +import type {Pokemon} from 'v2Proto' +import pokemonCard from './components/pokemon-card.vue.js' + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + } + }, + mounted: function () { + const vm = this + + this.resetSpriteSet() + + V2.onSpriteSetReset(this.resetSpriteSet) + + V2.initialize() + + V2.onPartyUpdate((party: Nullable[]) => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + }) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, + clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/{{ifElse isShiny "animated-shiny" "animated"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}{{addFemaleTag this "-f"}}.gif') + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/pokeball/index.html b/v2/themes/pokeball/index.html new file mode 100644 index 0000000..88f011a --- /dev/null +++ b/v2/themes/pokeball/index.html @@ -0,0 +1,64 @@ + + + + + + Pokeball + + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/css/styles.css b/v2/themes/rescue-team-dx/assets/css/styles.css new file mode 100644 index 0000000..b68ca6d --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/css/styles.css @@ -0,0 +1,157 @@ +@import '../../../_shared/styles/heartGauge.css'; +.pokes { + margin-top: 110px; +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; + text-shadow: 3px 3px 0px black; + top: 0; + font-family: monospace; +} +.pokes.browser-connected { + display: block !important; +} + +.pokemon__list { + display: flex; + flex-direction: row; + flex-flow: row wrap; +} + +.pokemon__list .pokemon { + margin: 10px; +} +.pokemon>div { + content: " "; + width: 160px; + height: 160px; + /*-webkit-transition: all 1.5s ease-in-out;*/ + /*-moz-transition: all 1.5s ease-in-out;*/ + /*transition: all 1.5s ease-in-out;*/ + background-size: cover; +} + +.pokemon__list .pokemon .sprite { + width: 160px; + height: 160px; +} + +.pokemon .sex { + position: absolute; + right: 14px; + bottom: 11px; +} +.sex svg:nth-child(1) { + position: absolute; + left: -3px; + top: -3px; + z-index: 99; +} +.sex svg:nth-child(2) { + filter: blur(6px); + width: 30px !important; +} +.pokemon .sex .icon { + width: 30px; +} +.pokemon .sex .icon.female { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +.pokemon__list .pokemon.isDead { + filter: grayscale(1); +} + +.pokemon__list .pokemon .hp { + width: 80%; + bottom: 6px; + height: 12px; + position: absolute; + left: 10px; + border: 4px solid rgba(0,0,0,0.4); +} + +.pokemon__list .pokemon .hp .hp__inner { + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; + height: 100%; +} + +.pokemon .hp .hp__inner.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.pokemon__list .pokemon .pokemon__details { + display: block; +} + +.pokemon__list .pokemon .pokemon__details .details__name { + font-weight: bold; + color: #c0c0c0; +} + +.pokemon__list .pokemon .pokemon__details .details__hp { + border: 1px solid #000000; + height: 5px; + width: 100%; +} + +.pokemon__list .pokemon .pokemon__details .details__hp .hp__bar { + background-color: #ff0000; + height: 5px; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} +.badges {} +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.browser-connected { + display: block !important; +} + +.pokemon > div .heart-gauge { + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 80%; + height: 4px; + background: rgba(0, 0, 0, 0.2); + overflow: hidden; +} diff --git a/v2/themes/rescue-team-dx/assets/js/components/female.vue.js b/v2/themes/rescue-team-dx/assets/js/components/female.vue.js new file mode 100644 index 0000000..13c4dd2 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/female.vue.js @@ -0,0 +1,27 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + + `, + props: { + color: null + }, + computed: { + fill() { + return `fill: ${this.color || '#F05228'}`; + } + } +}); +//# sourceMappingURL=female.vue.js.map \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/female.vue.js.map b/v2/themes/rescue-team-dx/assets/js/components/female.vue.js.map new file mode 100644 index 0000000..ad00708 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/female.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"female.vue.js","sourceRoot":"","sources":["female.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;aAcD;IACT,KAAK,EAAE;QACH,KAAK,EAAE,IAAI;KACd;IACD,QAAQ,EAAE;QACN,IAAI;YACA,OAAO,SAAS,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAA;QAC7C,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/female.vue.ts b/v2/themes/rescue-team-dx/assets/js/components/female.vue.ts new file mode 100644 index 0000000..2ad2758 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/female.vue.ts @@ -0,0 +1,27 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + + `, + props: { + color: null + }, + computed: { + fill() { + return `fill: ${this.color || '#F05228'}` + } + } +}) diff --git a/v2/themes/rescue-team-dx/assets/js/components/list.vue.js b/v2/themes/rescue-team-dx/assets/js/components/list.vue.js new file mode 100644 index 0000000..51af62f --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/list.vue.js @@ -0,0 +1,52 @@ +import { defineComponent } from 'vue'; +import { V2, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium' + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + V2.onPartyUpdate((party => { + vm.party = party.filter(x => !x?.isEgg); + vm.$forceUpdate(); + })); + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/list.vue.js.map b/v2/themes/rescue-team-dx/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..76605f3 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAkB,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;SAC9B,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,IAAI,CAAA;QACb,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACvC,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/list.vue.ts b/v2/themes/rescue-team-dx/assets/js/components/list.vue.ts new file mode 100644 index 0000000..93ae118 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/list.vue.ts @@ -0,0 +1,54 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import {Nullable} from 'global' +import {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium' + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + V2.onPartyUpdate((party => { + vm.party = party.filter(x => !x?.isEgg) + vm.$forceUpdate() + })) + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/male.vue.js b/v2/themes/rescue-team-dx/assets/js/components/male.vue.js new file mode 100644 index 0000000..31cf8fc --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/male.vue.js @@ -0,0 +1,24 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + `, + props: { + color: null + }, + computed: { + fill() { + return `fill: ${this.color || '#50C8EF'}`; + } + } +}); +//# sourceMappingURL=male.vue.js.map \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/male.vue.js.map b/v2/themes/rescue-team-dx/assets/js/components/male.vue.js.map new file mode 100644 index 0000000..775a713 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/male.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"male.vue.js","sourceRoot":"","sources":["male.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;aAWD;IACT,KAAK,EAAE;QACH,KAAK,EAAE,IAAI;KACd;IACD,QAAQ,EAAE;QACN,IAAI;YACA,OAAO,SAAS,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAA;QAC7C,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/male.vue.ts b/v2/themes/rescue-team-dx/assets/js/components/male.vue.ts new file mode 100644 index 0000000..6bbfd43 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/male.vue.ts @@ -0,0 +1,24 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + `, + props: { + color: null + }, + computed: { + fill() { + return `fill: ${this.color || '#50C8EF'}` + } + } +}) \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.js b/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..4b6c852 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.js @@ -0,0 +1,121 @@ +import { defineComponent } from 'vue'; +import { V2, V2DataTypes } from 'pokelink'; +import male from './male.vue.js'; +import female from './female.vue.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+ +
+ + + + + + + + + +
+ +
+ `, + components: { + 'female': female, + 'male': male, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + slotId: null + }, + data() { + return { + image: null + }; + }, + created() { + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite, this.pokemon); + this.$refs.pokeSprite.style.backgroundImage = `url('${this.$refs.pokemonSprite.src}')`; + }, + getSprite() { + return V2.getSprite(this.pokemon); + }, + spriteLoaded() { + this.$refs.pokeSprite.style.backgroundImage = `url('${this.$refs.pokemonSprite.src}')`; + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + isDead() { + if (!this.isValid) { + return false; + } + return this.pokemon.hp.current === 0; + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.isValid) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!this.isValid) { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.isValid) { + return false; + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false; + } + return this.pokemon.heldItem !== 0; + }, + mainStyle() { + let styles = { + 'opacity': this.opacity + }; + // if (this.pokemon) { + // let primaryType = this.pokemon.types[0].label.toLowerCase() + // styles = {...styles, 'background-image': 'linear-gradient(180deg, ' + this.settings.typeColors[primaryType] + ', white)'} + // } + return styles; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.js.map b/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..7fd1f97 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.ts b/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..11dff26 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/components/pokemon.vue.ts @@ -0,0 +1,127 @@ +import {defineComponent, PropType} from 'vue' +import {clientSettings, Nullable, typeColors, V2, V2DataTypes} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import male from './male.vue.js' +import female from './female.vue.js' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+ +
+ + + + + + + + + +
+ +
+ `, + components: { + 'female': female, + 'male': male, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + slotId: null + }, + data() { + return { + image: null as Nullable + } + }, + created() { + + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite as HTMLImageElement, this.pokemon); + (this.$refs.pokeSprite as HTMLDivElement).style.backgroundImage = `url('${(this.$refs.pokemonSprite as HTMLImageElement).src}')` + }, + getSprite() { + return V2.getSprite(this.pokemon) + }, + spriteLoaded() { + (this.$refs.pokeSprite as HTMLDivElement).style.backgroundImage = `url('${(this.$refs.pokemonSprite as HTMLImageElement).src}')` + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + isDead() { + if (!this.isValid) { + return false + } + + return this.pokemon.hp!.current === 0 + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.isValid) { + return null + } + return this.pokemon.species + }, + opacity() { + if (!this.isValid) { + return '0.4' + } + return '1' + }, + hasItem() { + if (!this.isValid) { + return false + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false + } + return this.pokemon.heldItem !== 0 + }, + mainStyle() { + let styles = { + 'opacity': this.opacity + } + + // if (this.pokemon) { + // let primaryType = this.pokemon.types[0].label.toLowerCase() + // styles = {...styles, 'background-image': 'linear-gradient(180deg, ' + this.settings.typeColors[primaryType] + ', white)'} + // } + + return styles + }, + + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + } + } +}) \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/party.js b/v2/themes/rescue-team-dx/assets/js/party.js new file mode 100644 index 0000000..7075a09 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/party.js @@ -0,0 +1,30 @@ +import { createApp } from 'vue'; +import { V2, clientSettings } from 'pokelink'; +import list from './components/list.vue.js'; +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/rescue-team-dx/normal/{{ species }}.png'); + V2.initialize({ listenForSpriteUpdates: false }); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/party.js.map b/v2/themes/rescue-team-dx/assets/js/party.js.map new file mode 100644 index 0000000..9ed4e4e --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAY,MAAM,UAAU,CAAA;AACtD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,EAAE,CAAC,oBAAoB,CAAC,wFAAwF,CAAC,CAAA;YAEjH,EAAE,CAAC,UAAU,CAAC,EAAC,sBAAsB,EAAE,KAAK,EAAC,CAAC,CAAA;YAE9C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/assets/js/party.ts b/v2/themes/rescue-team-dx/assets/js/party.ts new file mode 100644 index 0000000..acace01 --- /dev/null +++ b/v2/themes/rescue-team-dx/assets/js/party.ts @@ -0,0 +1,33 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import list from './components/list.vue.js' + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/rescue-team-dx/normal/{{ species }}.png') + + V2.initialize({listenForSpriteUpdates: false}) + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/rescue-team-dx/index.html b/v2/themes/rescue-team-dx/index.html new file mode 100644 index 0000000..20b02c2 --- /dev/null +++ b/v2/themes/rescue-team-dx/index.html @@ -0,0 +1,56 @@ + + + + + + Rescue Team DX + + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/RifficFree-Bold.ttf b/v2/themes/simple-circles/assets/RifficFree-Bold.ttf new file mode 100644 index 0000000..428793e Binary files /dev/null and b/v2/themes/simple-circles/assets/RifficFree-Bold.ttf differ diff --git a/v2/themes/simple-circles/assets/css/styles.css b/v2/themes/simple-circles/assets/css/styles.css new file mode 100644 index 0000000..1e4886b --- /dev/null +++ b/v2/themes/simple-circles/assets/css/styles.css @@ -0,0 +1,328 @@ +@import '../../../_shared/styles/heartGauge.css'; +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap'); +/* @font-face{font-family:RifficFree;src:local("RifficFree"),url("https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap")} */ +@font-face{font-family:RifficFree;src:local("RifficFree"),url("../RifficFree-Bold.ttf")} + +* { + font-family: "RifficFree"; + /* font-family: 'Noto Sans', sans-serif; */ +} +.pokes { +/* margin-top: 110px; */ +} + +.browser-connected { + display: block !important; +} + +.badges {} + .badge__slot { + display: block; + float: left; + } + + .badge__slot img { + width: 100px; + } + .badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; + } + +.pokemon__list { + display: flex; + flex-wrap: wrap; + flex-direction: row; +} + +.darkMode { + color: #fff !important; +} + +.pokemon { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + position: relative; + flex-direction: column; + transition: all 0.3s; + transition-delay: 0.9s; +} + +.pokemon.isDead { + opacity: 0.3; +} +.pokemon.isEmpty { + opacity: 0.3; +} + +.pokemon svg.outerHPBar { + position: absolute; + top: 0px; + left: 0px; + z-index:1 +} + +.pokemon svg.outerHPBar circle { + transition: stroke-dashoffset 0.9s; + transform: rotate(-90deg); + transform-origin: 50% 50%; + z-index: 1; +} + +.pokemon svg.outerHPBar circle.hpBar { + stroke: lime; + z-index: 2; +} +.pokemon svg.outerHPBar circle.low { + stroke: #ffcc00; +} +.pokemon svg.outerHPBar circle.critical { + stroke: #d20000; +} + +.pokemon .pokemon__details { + z-index:5; + position: absolute; + bottom: 40px; +} + +.pokemon .pokemon__image { + z-index:5; + display: flex; + align-items: bottom; + justify-content: center; +} + +.pokemon .pokemon__image .sprite { + position: relative; + top: -10px; + max-height: 100%; + max-width: 100%; +} + +@keyframes takeDamage { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes poisoned { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes shake { + 10%, 90% { + transform: scale(2) translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: scale(2) translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: scale(2) translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: scale(2) translate3d(4px, 0, 0); + } +} + + +.sleeping { + width: 200px; + height: 200px; + position: absolute; + top: -50px; + left: 94%; + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 11; +} + +.sleeping span { + font-family: "RifficFree"; + color: #d4d4d4; + position: absolute; + bottom: 10px; + left: 10px; + font-size: 23pt; + opacity: 0; + -moz-animation: sleep 9s infinite linear; + -webkit-animation: sleep 9s infinite linear; + animation: sleep 9s infinite linear; +} +.sleeping span:nth-child(2n) { + -moz-animation-delay: 3s; + -webkit-animation-delay: 3s; + animation-delay: 3s; +} +.sleeping span:nth-child(3n) { + -moz-animation-delay: 6s; + -webkit-animation-delay: 6s; + animation-delay: 6s; +} + +@-webkit-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-moz-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-ms-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + diff --git a/v2/themes/simple-circles/assets/js/components/list.vue.js b/v2/themes/simple-circles/assets/js/components/list.vue.js new file mode 100644 index 0000000..c98e806 --- /dev/null +++ b/v2/themes/simple-circles/assets/js/components/list.vue.js @@ -0,0 +1,53 @@ +import { defineComponent } from 'vue'; +import { V2, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + V2.onPartyUpdate((party => { + vm.party = party; + vm.$forceUpdate(); + })); + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/js/components/list.vue.js.map b/v2/themes/simple-circles/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..8d4ebf2 --- /dev/null +++ b/v2/themes/simple-circles/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAkB,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,KAAK;SACjB,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,IAAI,CAAA;QACb,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YAChB,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/js/components/list.vue.ts b/v2/themes/simple-circles/assets/js/components/list.vue.ts new file mode 100644 index 0000000..5428204 --- /dev/null +++ b/v2/themes/simple-circles/assets/js/components/list.vue.ts @@ -0,0 +1,55 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import {Nullable} from 'global' +import {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + V2.onPartyUpdate((party => { + vm.party = party + vm.$forceUpdate() + })) + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/js/components/pokemon.vue.js b/v2/themes/simple-circles/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..c840af1 --- /dev/null +++ b/v2/themes/simple-circles/assets/js/components/pokemon.vue.js @@ -0,0 +1,248 @@ +import { defineComponent } from 'vue'; +import { V2, V2DataTypes, clientSettings } from 'pokelink'; +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js'; +export default defineComponent({ + template: ` +
+
+ + + + + + + + + + +
+
+ {{ nickname }} +
+
+
+
+ `, + components: { + 'trimmedSprite': trimmedSprite + }, + props: { + pokemon: { + type: Object, + required: true + }, + key: {}, + radius: { + type: Number, + default() { + return 100; + } + }, + stroke: { + type: Number, + default() { + return 10; + } + } + }, + data() { + return { + fixedSprite: false + }; + }, + created() { + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + getSprite(pokemon) { + return V2.getSprite(pokemon); + }, + useFallback() { + } + }, + computed: { + pokemonExists() { + return V2.isValidPokemon(this.pokemon); + }, + normalizedRadius() { + return this.radius - this.stroke * 2; + }, + circumference() { + return this.normalizedRadius * 2 * Math.PI; + }, + dashOffset() { + if (!this.pokemonExists) { + return false; + } + return this.circumference - (this.healthPercent / 100 * this.circumference); + }, + innerStroke() { + return 5; + }, + innerRadius() { + return this.normalizedRadius - this.stroke / 2 - this.innerStroke / 2; + }, + innerCircumference() { + return this.innerRadius * 2 * Math.PI; + }, + showExp() { + return clientSettings.params.getBool('showExp', true); + }, + showInnerRing() { + return this.showExp || (this.pokemonExists && this.pokemon.isShadow); + }, + expDashOffset() { + if (!this.pokemonExists) + return this.innerCircumference; + return this.innerCircumference - (this.pokemon.expPercentage / 100 * this.innerCircumference); + }, + heartGaugeDashOffset() { + if (!this.pokemonExists) + return this.innerCircumference; + return this.innerCircumference - ((this.pokemon.heartGaugePercentage ?? 0) / 100 * this.innerCircumference); + }, + healthPercent() { + if (!this.pokemonExists) { + return 0; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current; + }, + isDead() { + if (!this.pokemonExists) { + return false; + } + return this.healthPercent === 0; + }, + level() { + if (!this.pokemonExists) { + return null; + } + return this.pokemon.level || '0'; + }, + nickname() { + if (!this.pokemonExists) { + return null; + } + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.pokemonExists) { + return null; + } + return this.pokemon.pid; + }, + opacity() { + if (typeof this.pokemon === 'undefined') { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.pokemonExists) { + return null; + } + if (typeof this.pokemon === 'undefined') { + return false; + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false; + } + return this.pokemon.heldItem !== 0; + }, + mainStyle() { + if (!this.pokemonExists) { + return null; + } + return { + 'opacity': this.opacity + }; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + } + }, + watch: { + pokemon(oldPoke, newPoke) { + if (oldPoke.img !== newPoke.img) { + this.fixedSprite = false; + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/js/components/pokemon.vue.js.map b/v2/themes/simple-circles/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..03a3f1d --- /dev/null +++ b/v2/themes/simple-circles/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/js/components/pokemon.vue.ts b/v2/themes/simple-circles/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..2160d8b --- /dev/null +++ b/v2/themes/simple-circles/assets/js/components/pokemon.vue.ts @@ -0,0 +1,252 @@ +import {defineComponent, PropType} from 'vue' +import {V2, V2DataTypes, clientSettings} from 'pokelink' +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js' +import type {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` +
+
+ + + + + + + + + + +
+
+ {{ nickname }} +
+
+
+
+ `, + components: { + 'trimmedSprite': trimmedSprite + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + key: {}, + radius: { + type: Number, + default() { + return 100 + } + }, + stroke: { + type: Number, + default() { + return 10 + } + } + }, + data() { + return { + fixedSprite: false + } + }, + created() { + + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + getSprite(pokemon: Pokemon) { + return V2.getSprite(pokemon) + }, + useFallback() { + + } + }, + computed: { + pokemonExists() { + return V2.isValidPokemon(this.pokemon) + }, + normalizedRadius() { + return this.radius - this.stroke * 2 + }, + circumference() { + return this.normalizedRadius * 2 * Math.PI + }, + dashOffset() { + if (!this.pokemonExists) { + return false + } + return this.circumference - (this.healthPercent / 100 * this.circumference) + }, + innerStroke() { + return 5 + }, + innerRadius() { + return this.normalizedRadius - this.stroke / 2 - this.innerStroke / 2 + }, + innerCircumference() { + return this.innerRadius * 2 * Math.PI + }, + showExp() { + return clientSettings.params.getBool('showExp', true) + }, + showInnerRing() { + return this.showExp || (this.pokemonExists && this.pokemon.isShadow) + }, + expDashOffset() { + if (!this.pokemonExists) return this.innerCircumference + return this.innerCircumference - (this.pokemon.expPercentage / 100 * this.innerCircumference) + }, + heartGaugeDashOffset() { + if (!this.pokemonExists) return this.innerCircumference + return this.innerCircumference - ((this.pokemon.heartGaugePercentage ?? 0) / 100 * this.innerCircumference) + }, + healthPercent() { + if (!this.pokemonExists) { + return 0 + } + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + }, + isDead() { + if (!this.pokemonExists) { + return false + } + + return this.healthPercent === 0 + }, + level() { + if (!this.pokemonExists) { + return null + } + return this.pokemon.level || '0' + }, + nickname() { + if (!this.pokemonExists) { + return null + } + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.pokemonExists) { + return null + } + return this.pokemon.pid + }, + opacity() { + if (typeof this.pokemon === 'undefined') { + return '0.4' + } + return '1' + }, + hasItem() { + if (!this.pokemonExists) { + return null + } + if (typeof this.pokemon === 'undefined') { + return false + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false + } + + return this.pokemon.heldItem !== 0 + }, + mainStyle() { + if (!this.pokemonExists) { + return null + } + return { + 'opacity': this.opacity + } + }, + + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + } + }, + watch: { + pokemon(oldPoke, newPoke) { + if (oldPoke.img !== newPoke.img) { + this.fixedSprite = false + } + } + } +}) diff --git a/v2/themes/simple-circles/assets/js/party.js b/v2/themes/simple-circles/assets/js/party.js new file mode 100644 index 0000000..aebc1e0 --- /dev/null +++ b/v2/themes/simple-circles/assets/js/party.js @@ -0,0 +1,32 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, homeSpriteTemplate } from 'pokelink'; +import list from './components/list.vue.js'; +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate); + }); + V2.initialize(); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/js/party.js.map b/v2/themes/simple-circles/assets/js/party.js.map new file mode 100644 index 0000000..a9583ba --- /dev/null +++ b/v2/themes/simple-circles/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAa,kBAAkB,EAAC,MAAM,UAAU,CAAA;AAC1E,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE;gBACrB,EAAE,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,UAAU,EAAE,CAAA;YAEf,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/simple-circles/assets/js/party.ts b/v2/themes/simple-circles/assets/js/party.ts new file mode 100644 index 0000000..f8d5c85 --- /dev/null +++ b/v2/themes/simple-circles/assets/js/party.ts @@ -0,0 +1,35 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined, homeSpriteTemplate} from 'pokelink' +import list from './components/list.vue.js' + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate) + }) + + V2.initialize() + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/simple-circles/index.html b/v2/themes/simple-circles/index.html new file mode 100644 index 0000000..20b02c2 --- /dev/null +++ b/v2/themes/simple-circles/index.html @@ -0,0 +1,56 @@ + + + + + + Rescue Team DX + + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/sports-game-scores/assets/css/styles.css b/v2/themes/sports-game-scores/assets/css/styles.css new file mode 100644 index 0000000..1206066 --- /dev/null +++ b/v2/themes/sports-game-scores/assets/css/styles.css @@ -0,0 +1,179 @@ +@import '../../../_shared/styles/heartGauge.css'; + +* { + font-family: 'Open Sans', sans-serif; +} + +html, body { + margin: 0; +} + +.pokemon__list { + /* display: flex; */ + /* flex-direction: column; */ + /* flex-direction: row; */ + /* justify-content: space-between; */ + /* flex-wrap: wrap; */ + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-template-rows: 1fr; + gap: 15px 15px; +} +.pokemon__list.noGap { + gap: 0 0; +} + +.pokemon__list.vertical { + display: grid; + grid-template-columns: repeat(1, 275px); + grid-template-columns: repeat(1, minmax(260px, 307px)); /** FIX ME **/ + grid-template-rows: repeat(6, 75px); +} + +.pokemon__list .pokemon { + background: black; + height: 75px; + overflow: hidden; + display: flex; + position: relative; + min-width: 265px; + margin-bottom: 20px; + opacity: 1; + transition: all 0.3s; +} +.pokemon__list .pokemon.isDead{ + filter: grayscale(1); +} + +.pokemon__list .pokemon.opaque { + opacity: 0.3; +} + +.pokemon__list .pokemon .pokemon__card-art { + /* height: 75px; + width: -webkit-fill-available; + content: "-"; + display: block; + position: absolute; + background-repeat: no-repeat; + background-size: 391px; + background-attachment: local; + background-position: -46px -101px; + opacity: 0.2; */ + + height: 75px; + width: 100%; + content: "-"; + display: block; + position: absolute; + background-repeat: no-repeat; + background-size: 407px; + background-attachment: local; + background-position: -46px -101px; + opacity: 0.2; +} + +.pokemon__list .pokemon .pokemon__sprite .pokemon__image { + /* display: flex; + width: 40%; + justify-content: end; + align-items: center; + height: 100%; + padding: 0px 20px; */ + display: flex; + width: 40%; + /* justify-content: end; */ + align-items: center; + height: 100%; + padding: 0px 20px; + flex-direction: row; + justify-content: flex-start; +} + +.pokemon__list .pokemon .pokemon__sprite { + width: 100px; +} +.pokemon__list .pokemon .pokemon__sprite canvas.sprite { + height: 120%; + /* top: 50%; */ + /* position: relative; */ + /* transform: translateX(50%) translateY(-46%); */ +} + +.pokemon__details { + position: relative; + margin-left: auto; + width: -webkit-fill-available; +} + +.pokemon__details > div{ + text-align: right; + width: inherit; + position: absolute; + opacity: 0; + overflow: hidden; + color: #fff; + text-shadow: 1px 1px black; + font-size: 1.4em; + padding-right: 15px; + line-height: 75px; +} + +.pokemon__details > .pokemon__hp { + line-height: 34px; +} + +.loaded .pokemon__details > div { + animation: rotateWord 15s linear infinite 0s; +} + +.loaded .pokemon__details > div:nth-child(2) { + -webkit-animation-delay: 5s; + -ms-animation-delay: 5s; + animation-delay: 5s; +} +.loaded .pokemon__details > div:nth-child(3) { + -webkit-animation-delay: 10s; + -ms-animation-delay: 10s; + animation-delay: 10s; +} +.loaded .pokemon__details > div:nth-child(4) { + -webkit-animation-delay: 15s; + -ms-animation-delay: 15s; + animation-delay: 15s; +} +@keyframes rotateWord { + 0%, 2% { opacity: 0; transform: translateY(-30px); } + 5% { opacity: 1; transform: translateY(0px);} + 17%, 33% { opacity: 1; transform: translateY(0px); } + 36% { opacity: 0; transform: translateY(30px); } + 100% { opacity: 0; } +} + +.browser-connected { + display: block !important; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.pokemon > .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: rgba(0, 0, 0, 0.2); + overflow: hidden; + z-index: 5; +} diff --git a/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.js b/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..61033dd --- /dev/null +++ b/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.js @@ -0,0 +1,265 @@ +import { defineComponent } from 'vue'; +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +import { pokemonTCGCardSets } from '../party.js'; +import { clientSettings, hex2rgba, V2, V2DataTypes } from 'pokelink'; +var getTypeColor = V2.getTypeColor; +export default defineComponent({ + template: ` +
+
+
+ +
+
+
+
Lv.{{ pokemon.level }}
+
{{ pokemon.hp.current }} / {{ pokemon.hp.max }}
+
+
{{ pokemon.nickname || pokemon.translations.locale.speciesName }}
+
+ {{ statusEffectsSlide }} +
+
+ +
+ `, + components: { + 'trimmedSprite': trimmedSprite, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + key: {} + }, + data() { + return { + fixedSprite: false, + settings: { + useCardArtBackground: clientSettings.params.getBool('useCardArtBackground', true) + }, + customCardArt: null, + pokeIsChanging: false, + isFresh: true, + newCardArt: null, + sets: [], + justTookDamage: false + }; + }, + created() { + this.sets = pokemonTCGCardSets(); + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + this.pokeIsChanging = false; + if (this.pokemonExists) { + if (this.settings.useCardArtBackground) { + this.getNewCardArt(this.pokemon); + } + else { + this.actionOnImageLoaded(); + } + } + if (!this.pokemonExists) { + this.actionOnImageLoaded(); + } + }, + computed: { + isDead() { + if (!this.pokemonExists) { + return false; + } + return parseFloat(this.healthPercent) === 0; + }, + pokemonExists() { + return V2.isValidPokemon(this.pokemon); + }, + healthPercent() { + if (!this.pokemonExists) { + return '0%'; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + sex() { + if (!this.pokemonExists) { + return null; + } + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.pokemonExists) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!this.pokemonExists) { + return '1'; + } + if (!this.fixedSprite) { + return ''; + } + return ''; + }, + hasItem() { + if (!this.pokemonExists) { + return false; + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false; + } + return this.pokemon.heldItem !== 0; + }, + type1() { + if (!this.pokemonExists) { + return 'rgba(255,255,255,.2)'; + } + return hex2rgba(getTypeColor(this.pokemon.translations.english.types[0]), 50); + }, + type2() { + if (!this.pokemonExists) { + return 'rgba(255,255,255,.2)'; + } + if (this.pokemon.translations.english.types.length >= 2) { + return hex2rgba(getTypeColor(this.pokemon.translations.english.types[1]), 50); + } + return hex2rgba(getTypeColor(this.pokemon.translations.english.types[0]), 50); + }, + backgroundGradientStyle() { + if (!this.pokemonExists) { + return false; + } + // let styles = { + // 'opacity': this.opacity, + // } + let primaryType = this.pokemon.translations.english.types[0]; + return { 'background-image': 'linear-gradient(180deg, ' + getTypeColor(primaryType) + ', black)' }; + }, + statusEffectsSlide() { + // const titles = {'psn': 'Poisoned', 'slp': 'Sleeping', 'par': 'Paralyzed', 'fzn': 'Frozen', 'brn': 'Burned'} + // let activeEffects = ['psn', 'slp', 'par', 'frz', 'brn'] + // .filter(effect => this.pokemon.status[effect] === 1) + if (this.isDead) + return 'DEAD'; + // if (this.pokemon.nature ) { + return this.pokemon.translations.locale.natureName; + // } + // if (this.pokemon.ability && this.pokemon.ability !== 0) { + // return this.pokemon.translations!.locale!.abilityName + // } + // + // return `` + }, + hideLevel() { + return clientSettings.params.getBool('hideLevels', false); + } + }, + methods: { + getSprite(pokemon) { + return V2.getSprite(pokemon); + }, + getNewCardArt(poke) { + let vm = this; + if (!this.isFresh) { + this.pokeIsChanging = true; + } + if (!this.settings.useCardArtBackground || this.pokemon.isEgg) { + setTimeout(() => { + this.pokeIsChanging = false; + this.actionOnImageLoaded(); + }, 100); + return false; + } + let isFresh = this.customCardArt === null && this.isFresh; + if (!this.isFresh) { + this.pokeIsChanging = true; + } + this.isFresh = false; + if (!this.pokemonExists) { + this.customCardArt = null; + this.pokeIsChanging = false; + this.actionOnImageLoaded(); + this.newCardArt = null; + } + fetch('https://api.pokemontcg.io/v1/cards?setCode=' + this.sets.join('|') + '&supertype=pokemon&nationalPokedexNumber=' + poke.species) + .then(response => response.json()) + .then(cards => { + console.log(cards); + let setOrder = this.sets; + // try { + let cardImages = cards + .cards + .sort((a, b) => { + return setOrder.findIndex(set => set === a.setCode) - setOrder.findIndex(set => set === b.setCode); + }); + cardImages = cardImages.find((card) => card.nationalPokedexNumber === poke.species); + this.newCardArt = cardImages.imageUrl; + if (!isFresh) { + setTimeout(() => { + this.customCardArt = this.newCardArt; + this.pokeIsChanging = false; + this.actionOnImageLoaded(); + }, 1400); + } + else { + this.customCardArt = cardImages.imageUrl; + this.pokeIsChanging = false; + this.actionOnImageLoaded(); + } + // } catch (e) { + // console.log(e) + // // console.log(`unknown image for ${vm.pokemon.speciesName}`) + // // console.info(cards.cards) + // + }); + setTimeout(() => { + this.actionOnImageLoaded(); + }, 500); + }, + actionOnImageLoaded() { + this.fixedSprite = true; + this.$emit('loaded'); + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if (newVal.species !== oldVal.species) { + this.getNewCardArt(newVal); + } + if (!newVal.hasOwnProperty('hp')) { + this.customCardArt = null; + } + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true; + setTimeout(() => { + this.justTookDamage = false; + }, 3000); + } + } + catch (e) { + return; + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.js.map b/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..efa3aaa --- /dev/null +++ b/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.ts b/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..bda9bfa --- /dev/null +++ b/v2/themes/sports-game-scores/assets/js/components/pokemon.vue.ts @@ -0,0 +1,280 @@ +import {defineComponent, PropType} from 'vue' +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' +import {Pokemon} from 'v2Proto' +import {pokemonTCGCardSets} from '../party.js' +import {clientSettings, hex2rgba, V2, V2DataTypes} from 'pokelink' +import getTypeColor = V2.getTypeColor + +export default defineComponent({ + template: ` +
+
+
+ +
+
+
+
Lv.{{ pokemon.level }}
+
{{ pokemon.hp.current }} / {{ pokemon.hp.max }}
+
+
{{ pokemon.nickname || pokemon.translations.locale.speciesName }}
+
+ {{ statusEffectsSlide }} +
+
+ +
+ `, + components: { + 'trimmedSprite': trimmedSprite, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + key: {} + }, + data() { + return { + fixedSprite: false, + settings: { + useCardArtBackground: clientSettings.params.getBool('useCardArtBackground', true) + }, + customCardArt: null, + pokeIsChanging: false, + isFresh: true, + newCardArt: null, + sets: [] as string[], + justTookDamage: false + } + }, + created() { + this.sets = pokemonTCGCardSets() + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + this.pokeIsChanging = false + if (this.pokemonExists) { + if (this.settings.useCardArtBackground) { + this.getNewCardArt(this.pokemon) + } else { + this.actionOnImageLoaded() + } + } + if (!this.pokemonExists) { + this.actionOnImageLoaded() + } + }, + computed: { + isDead() { + if (!this.pokemonExists) { + return false + } + + return parseFloat(this.healthPercent) === 0 + }, + pokemonExists() { + return V2.isValidPokemon(this.pokemon) + }, + healthPercent() { + if (!this.pokemonExists) { + return '0%' + } + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + sex() { + if (!this.pokemonExists) { + return null + } + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.pokemonExists) { + return null + } + return this.pokemon.species + }, + opacity() { + if (!this.pokemonExists) { + return '1' + } + if (!this.fixedSprite) { + return '' + } + return '' + }, + hasItem() { + if (!this.pokemonExists) { + return false + } + if (typeof this.pokemon.heldItem === 'undefined') { + return false + } + return this.pokemon.heldItem !== 0 + }, + + type1() { + if (!this.pokemonExists) { + return 'rgba(255,255,255,.2)' + } + + return hex2rgba(getTypeColor(this.pokemon.translations!.english!.types[0]), 50) + }, + type2() { + if (!this.pokemonExists) { + return 'rgba(255,255,255,.2)' + } + + if (this.pokemon.translations!.english!.types.length >= 2) { + return hex2rgba(getTypeColor(this.pokemon.translations!.english!.types[1]), 50) + } + return hex2rgba(getTypeColor(this.pokemon.translations!.english!.types[0]), 50) + }, + backgroundGradientStyle() { + if (!this.pokemonExists) { + return false + } + // let styles = { + // 'opacity': this.opacity, + // } + + let primaryType = this.pokemon.translations!.english!.types[0] + return {'background-image': 'linear-gradient(180deg, ' + getTypeColor(primaryType) + ', black)'} + }, + + statusEffectsSlide() { + // const titles = {'psn': 'Poisoned', 'slp': 'Sleeping', 'par': 'Paralyzed', 'fzn': 'Frozen', 'brn': 'Burned'} + // let activeEffects = ['psn', 'slp', 'par', 'frz', 'brn'] + // .filter(effect => this.pokemon.status[effect] === 1) + + if (this.isDead) return 'DEAD' + + // if (this.pokemon.nature ) { + return this.pokemon.translations!.locale!.natureName + // } + + // if (this.pokemon.ability && this.pokemon.ability !== 0) { + // return this.pokemon.translations!.locale!.abilityName + // } + // + // return `` + }, + hideLevel() { + return clientSettings.params.getBool('hideLevels', false) + } + }, + methods: { + getSprite(pokemon: Pokemon){ + return V2.getSprite(pokemon) + }, + getNewCardArt(poke: Pokemon) { + let vm = this + if (!this.isFresh) { + this.pokeIsChanging = true + } + + if (!this.settings.useCardArtBackground || this.pokemon.isEgg) { + setTimeout(() => { + this.pokeIsChanging = false + this.actionOnImageLoaded() + }, 100) + return false + } + + let isFresh = this.customCardArt === null && this.isFresh + if (!this.isFresh) { + this.pokeIsChanging = true + } + this.isFresh = false + + if (!this.pokemonExists) { + this.customCardArt = null + this.pokeIsChanging = false + this.actionOnImageLoaded() + this.newCardArt = null + } + + fetch('https://api.pokemontcg.io/v1/cards?setCode=' + this.sets.join('|') + '&supertype=pokemon&nationalPokedexNumber=' + poke.species) + .then(response => response.json()) + .then(cards => { + console.log(cards) + let setOrder = this.sets + // try { + let cardImages = cards + .cards + .sort((a: any, b: any) => { + return setOrder.findIndex(set => set === a.setCode) - setOrder.findIndex(set => set === b.setCode) + }) + + cardImages = cardImages.find((card: any) => card.nationalPokedexNumber === poke.species) + this.newCardArt = cardImages.imageUrl + + if (!isFresh) { + setTimeout(() => { + this.customCardArt = this.newCardArt + this.pokeIsChanging = false + this.actionOnImageLoaded() + }, 1400) + } else { + this.customCardArt = cardImages.imageUrl + this.pokeIsChanging = false + this.actionOnImageLoaded() + } + // } catch (e) { + // console.log(e) + // // console.log(`unknown image for ${vm.pokemon.speciesName}`) + // // console.info(cards.cards) + // + }) + + setTimeout(() => { + this.actionOnImageLoaded() + }, 500) + }, + actionOnImageLoaded() { + this.fixedSprite = true + this.$emit('loaded') + } + }, + watch: { + pokemon(newVal, oldVal) { + try { + if (newVal.species !== oldVal.species) { + this.getNewCardArt(newVal) + } + + if (!newVal.hasOwnProperty('hp')) { + this.customCardArt = null + } + + if (newVal.hp.current < oldVal.hp.current) { + this.justTookDamage = true + setTimeout(() => { + this.justTookDamage = false + }, 3000) + } + } catch (e) { + return + } + } + } +}) diff --git a/v2/themes/sports-game-scores/assets/js/party.js b/v2/themes/sports-game-scores/assets/js/party.js new file mode 100644 index 0000000..6dbc816 --- /dev/null +++ b/v2/themes/sports-game-scores/assets/js/party.js @@ -0,0 +1,132 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, homeSpriteTemplate, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon.vue.js'; +export function pokemonTCGCardSets() { + let userDefinedSets = clientSettings.params.getString('sets', ''); + if (userDefinedSets !== null && userDefinedSets.length > 0) { + return userDefinedSets.split('|'); + } + return [ + 'base1', + 'base2', + 'basep', + 'ex3', + 'pop5', + 'pop1', + 'pop3', + 'xyp', + 'col1', + 'dp1', + 'dp2', + 'dp3', + 'dp4', + 'swsh1', + 'swsh2', + 'ex15', + 'ex12', + 'dp6', + 'pl2', + 'bw11', + 'bw10', + 'bw9', + 'bw8', + 'bw7', + 'bw6', + 'bw5', + 'bw4', + 'bw4', + 'bw3', + 'bw2', + 'bw1', + 'xy1', + 'xy2', + 'xy3', + 'xy4', + 'xy5', + 'xy6', + 'xy7', + 'xy8', + ]; +} +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium', + }; + }, + mounted: function () { + const vm = this; + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate); + }); + V2.initialize(); + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false); + this.settings.noGap = clientSettings.params.getBool('noGap', false); + V2.onPartyUpdate((party) => { + vm.party = party; + this.loaded = true; + requestAnimationFrame(() => { + let currentFixedTimeline = document.timeline.currentTime; + document.getAnimations().map((tickerAnim) => { + tickerAnim.cancel(); + tickerAnim.currentTime = currentFixedTimeline; + tickerAnim.play(); + }); + }); + vm.$forceUpdate(); + }); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/sports-game-scores/assets/js/party.js.map b/v2/themes/sports-game-scores/assets/js/party.js.map new file mode 100644 index 0000000..a65b45e --- /dev/null +++ b/v2/themes/sports-game-scores/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/sports-game-scores/assets/js/party.ts b/v2/themes/sports-game-scores/assets/js/party.ts new file mode 100644 index 0000000..7f9625a --- /dev/null +++ b/v2/themes/sports-game-scores/assets/js/party.ts @@ -0,0 +1,151 @@ +import {createApp} from 'vue' +import {V2, clientSettings, homeSpriteTemplate, isDefined} from 'pokelink' +import type {Nullable} from 'global' +import type {Pokemon} from 'v2Proto' +import pokemonCard from './components/pokemon.vue.js' + +export function pokemonTCGCardSets() { + let userDefinedSets = clientSettings.params.getString('sets', '')! + + if (userDefinedSets !== null && userDefinedSets.length > 0) { + return userDefinedSets.split('|') + } + + return [ + 'base1', + 'base2', + 'basep', + 'ex3', + 'pop5', + 'pop1', + 'pop3', + 'xyp', + 'col1', + 'dp1', + 'dp2', + 'dp3', + 'dp4', + 'swsh1', + 'swsh2', + 'ex15', + 'ex12', + 'dp6', + 'pl2', + 'bw11', + 'bw10', + 'bw9', + 'bw8', + 'bw7', + 'bw6', + 'bw5', + 'bw4', + 'bw4', + 'bw3', + 'bw2', + 'bw1', + 'xy1', + 'xy2', + 'xy3', + 'xy4', + 'xy5', + 'xy6', + 'xy7', + 'xy8', + ] +} + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium', + } + }, + mounted: function () { + const vm = this + + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate) + }) + + V2.initialize() + + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false) + this.settings.noGap = clientSettings.params.getBool('noGap', false) + + V2.onPartyUpdate((party: Nullable[]) => { + vm.party = party + this.loaded = true + + requestAnimationFrame(() => { + let currentFixedTimeline = document.timeline.currentTime; + document.getAnimations().map((tickerAnim) => { + tickerAnim.cancel(); + tickerAnim.currentTime = currentFixedTimeline; + tickerAnim.play(); + }) + }) + + + vm.$forceUpdate() + }) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, + clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/sports-game-scores/index.html b/v2/themes/sports-game-scores/index.html new file mode 100644 index 0000000..145a006 --- /dev/null +++ b/v2/themes/sports-game-scores/index.html @@ -0,0 +1,63 @@ + + + + + + Sports Game Scores + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/sprite-only/assets/css/styles.css b/v2/themes/sprite-only/assets/css/styles.css new file mode 100644 index 0000000..4eef7d6 --- /dev/null +++ b/v2/themes/sprite-only/assets/css/styles.css @@ -0,0 +1,191 @@ +@import '../../../_shared/styles/heartGauge.css'; +html, body { + width: 100%; + height: 100%; + overflow: hidden; + padding: 0; + margin: 0; + background-color: transparent !important; +} + +body { + background-color: transparent !important; +} + +@font-face { + font-family: PokemonGB; + src: local("Pokemon GB"), url("../../../../assets/fonts/Pokemon GB.ttf") +} + +.pokemon__slot { + float: left; + width: 150px; + margin-left: 10px; + background-size: contain; + position: relative; +} + +.pokemon__image { + height: 160px; + position: relative; + white-space: nowrap; +} + +.pokemon__image img { + filter: grayscale(0); + transition: grayscale 0.5s; +} + +.pokemon__image.pokemon__dead img { + filter: grayscale(1); +} + +.pokemon__image img { + position: absolute; + bottom: 70px; + + width: auto; + height: auto; + max-width: 60px; + max-height: 60px; + margin: 0 0 0 25%; + transform: scale(2); +} + +.pokemon__nick-shiny { + color: red; +} + +.pokemon__nick-sex.female { + color: red; +} + +.pokemon__nick-sex.male { + color: blue; +} + +.pokemon__level-bar, .pokemon__nick, .pokemon__dead-label { + font-size: 11px; + font-family: "PokemonGB"; + color: white; +} + +.pokemon__hp { + text-align: right; +} + +.pokemon__dead-label { + text-align: center; +} + +.progress-bar { + border-radius: 0px; + font-family: "PokemonGB"; + font-size: 8px !important; +} + +.progress-bar.grey { + background: #646464; +} + +.progress-bar.green { + background: #61df8f; +} + +.progress-bar.yellow { + background: #d9bc19; +} + +.progress-bar.red { + background: #c02020; +} + + +.badges { +} + +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} + +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon__types { +} + +.pokemon__types span { + font-family: "PT Sans Condensed", "Roboto Condensed", sans-serif; + font-size: 14px; + letter-spacing: 0; + line-height: 19px; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3), 1px -1px 1px rgba(0, 0, 0, 0.3), -1px 1px 0 rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.9), 0 2px 1px rgba(0, 0, 0, 0.5); + color: white; + border-radius: 6px; + box-shadow: 0px 2px 0px 1px rgba(0, 0, 0, 0.6); + border-top: 1px rgba(255, 255, 255, 0.5) solid; + border-bottom: 4px rgba(0, 0, 0, 0.5) solid; + margin: 2px; + font-weight: normal; + text-transform: uppercase; + min-width: 65px; + text-align: center; + padding: 5px 8px; +} + +.pokemon__types span + span { + + margin: -5px; + border-radius: 0 6px 6px 0; +} + + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; +} + +.browser-connected { + display: block !important; +} + +.pokemon__slot .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: rgba(0, 0, 0, 0.15); + border-radius: 2px; + overflow: hidden; +} diff --git a/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.js b/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.js new file mode 100644 index 0000000..50913b0 --- /dev/null +++ b/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.js @@ -0,0 +1,44 @@ +import { defineComponent } from 'vue'; +import { V2 } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+ +
+ +
+
+
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + props: { + pokemon: { + default: null, + type: Object, + required: false + } + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite, this.pokemon); + }, + sprite() { + return V2.getSprite(this.pokemon); + } + } +}); +//# sourceMappingURL=pokemon-card.vue.js.map \ No newline at end of file diff --git a/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.js.map b/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.js.map new file mode 100644 index 0000000..285a8a0 --- /dev/null +++ b/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon-card.vue.js","sourceRoot":"","sources":["pokemon-card.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAW,MAAM,KAAK,CAAA;AAC7C,OAAO,EAAC,EAAE,EAAC,MAAM,UAAU,CAAA;AAE3B,OAAO,UAAU,MAAM,kDAAkD,CAAA;AAEzE,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;KAaT;IACD,UAAU,EAAE;QACR,aAAa,EAAE,UAAU;KAC5B;IACD,OAAO;QACH,MAAM,EAAE,GAAG,IAAI,CAAA;QACf,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE;YAC3B,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAA;IACN,CAAC;IACD,KAAK,EAAE;QACH,OAAO,EAAE;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAA2B;YACjC,QAAQ,EAAE,KAAK;SAClB;KACJ;IACD,OAAO,EAAE;QACL,WAAW;YACP,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAiC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9E,CAAC;QACD,MAAM;YACF,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.ts b/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.ts new file mode 100644 index 0000000..e4abeb8 --- /dev/null +++ b/v2/themes/sprite-only/assets/js/components/pokemon-card.vue.ts @@ -0,0 +1,45 @@ +import {defineComponent, PropType} from 'vue' +import {V2} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+ +
+ +
+
+
+
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + props: { + pokemon: { + default: null, + type: Object as PropType, + required: false + } + }, + methods: { + useFallback() { + V2.useFallback(this.$refs.pokemonSprite as HTMLImageElement, this.pokemon) + }, + sprite() { + return V2.getSprite(this.pokemon) + } + } +}) \ No newline at end of file diff --git a/v2/themes/sprite-only/assets/js/party.js b/v2/themes/sprite-only/assets/js/party.js new file mode 100644 index 0000000..0b93a8f --- /dev/null +++ b/v2/themes/sprite-only/assets/js/party.js @@ -0,0 +1,78 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, homeSpriteTemplate, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon-card.vue.js'; +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium', + }; + }, + created: function () { + this.settings = clientSettings; + }, + mounted: function () { + const vm = this; + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate); + }); + V2.initialize(); + V2.onPartyUpdate((party => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + })); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/sprite-only/assets/js/party.js.map b/v2/themes/sprite-only/assets/js/party.js.map new file mode 100644 index 0000000..745c040 --- /dev/null +++ b/v2/themes/sprite-only/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/sprite-only/assets/js/party.ts b/v2/themes/sprite-only/assets/js/party.ts new file mode 100644 index 0000000..1b50a35 --- /dev/null +++ b/v2/themes/sprite-only/assets/js/party.ts @@ -0,0 +1,89 @@ +import {createApp} from 'vue' +import {V2, clientSettings, homeSpriteTemplate, type Nullable, isDefined} from 'pokelink' +import pokemonCard from './components/pokemon-card.vue.js' + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium', + + } + }, + created: function () { + this.settings = clientSettings + }, + mounted: function () { + const vm = this + + V2.onSpriteSetReset(() => { + V2.updateSpriteTemplate(homeSpriteTemplate) + }) + + V2.initialize() + + V2.onPartyUpdate((party => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + })) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, + clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/sprite-only/index.html b/v2/themes/sprite-only/index.html new file mode 100644 index 0000000..869e702 --- /dev/null +++ b/v2/themes/sprite-only/index.html @@ -0,0 +1,63 @@ + + + + + + Sprite Only + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/sprite-test/assets/css/styles.css b/v2/themes/sprite-test/assets/css/styles.css new file mode 100644 index 0000000..e50e8f7 --- /dev/null +++ b/v2/themes/sprite-test/assets/css/styles.css @@ -0,0 +1,3 @@ +.monospace { + font-family: "Noto Sans Mono", monospace; +} \ No newline at end of file diff --git a/v2/themes/sprite-test/assets/js/test.js b/v2/themes/sprite-test/assets/js/test.js new file mode 100644 index 0000000..e132b1c --- /dev/null +++ b/v2/themes/sprite-test/assets/js/test.js @@ -0,0 +1,247 @@ +import { createApp } from 'vue'; +import { homeSpriteTemplate, Handlebars, clientSettings, spriteTestInitialize, isDefined, V2 } from 'pokelink'; +(() => { + spriteTestInitialize(); + createApp({ + template: ` +
+
+
+ + + + + +
+
+
+
{{ exampleOutput() }}
+ +
+
+
+
Testing ({{ entries.length - results.filter(x => hasValue(x)).length }})
+
Success ({{ results.filter(x => x === 2).length }})
+
Fallback ({{ results.filter(x => x === 1).length }})
+
Failed ({{ results.filter(x => x === 0).length }})
+
+
+
+
+
+
+
+
+ +
+
{{ entry.translations.locale.speciesName }} / {{ entry.translations.english.speciesName }}
+
#{{ entry.species }}
+
Female
+
{{ entry.translations.locale.formName }} / + {{ entry.translations.english.formName }} +
+
#{{ entry.form }}
+
+
+
+
+
+ `, + data() { + return { + templateText: homeSpriteTemplate, + hasError: false, + templateError: false, + error: null, + examplePokemon: { + 'pid': 3791076706, + 'species': 6, + 'level': 1, + 'hp': { + 'max': 1, + 'current': 1 + }, + 'ivs': {}, + 'evs': {}, + 'translations': { + 'english': { + 'speciesName': 'Charizard', + 'status': 'Healthy', + 'types': [ + 'Fire', + 'Dragon' + ], + 'formName': 'Mega X', + 'pokerusStatus': 'No' + }, + 'locale': { + 'speciesName': 'Charizard', + 'status': 'Healthy', + 'types': [ + 'Fire', + 'Dragon' + ], + 'formName': 'Mega X', + 'pokerusStatus': 'No' + } + }, + 'color': 'Black', + 'fallbackSprite': '$POKELINK_HOST/assets:/assets/sprites/pokemon/home/normal/charizard-megax.png', + 'fallbackPartySprite': '$POKELINK_HOST/pokelink:/pkhex/img/sprites/a_6-1.png', + 'heldItem': 0, + 'gender': 'male', + 'form': 1, + 'isEgg': false, + 'hiddenPower': 18, + 'nature': 25, + 'isShiny': false, + 'pokeball': 0, + 'friendship': 0, + 'ability': 0, + 'pokerus': 'clean', + 'locationMet': 0 + }, + entries: [], + results: [], + enableShiny: true, + show: null + }; + }, + methods: { + getSprite(pokemon) { + return V2.getSprite(pokemon); + }, + getFallback(pokemon) { + return pokemon.fallbackSprite?.replace('$POKELINK_HOST', `http://${clientSettings.host}:${clientSettings.port}`); + }, + async getSpriteDex() { + this.show = null; + this.entries = []; + this.hasError = false; + this.error = null; + this.finished = false; + let response; + try { + response = await fetch(`http://${clientSettings.host}:${clientSettings.port}/api/pokelink/v1/listSpriteDex${this.enableShiny ? '?addShiny=true' : ''}`, { method: 'GET' }); + } + catch (e) { + this.hasError = true; + this.error = `Unable to connect to http://${clientSettings.host}:${clientSettings.port}. Is a Pokelink session running?\n\nIf it is. Please make sure the host and port url parameters are correct`; + throw e; + } + try { + let result = await response.text(); + let json = JSON.parse(result); + if (Array.isArray(json.entries)) { + this.entries = json.entries; + this.results = []; + if (clientSettings.debug) { + console.debug(`${this.entries.length} entries received`); + } + } + else { + this.hasError = true; + this.error = `Data received was not an array ${JSON.stringify(result)}`; + } + } + catch (e) { + this.hasError = true; + this.error = e.toString(); + throw e; + } + }, + canShow(i) { + switch (this.show) { + case null: + return true; + default: + return this.results[i] === this.show; + } + }, + handleSuccess(i) { + if (this.hasValue(this.results[i])) { + return; + } + this.results[i] = 2; + }, + handleError(i, img) { + if (!this.hasFinished) { + this.show = 1; + } + if (this.hasValue(this.results[i])) { + this.results[i] = 0; + return; + } + this.results[i] = 1; + V2.useFallback(img, this.entries[i]); + }, + hasValue(idx) { + return isDefined(idx); + }, + exampleOutput() { + try { + const result = V2.getSprite(this.examplePokemon); + this.templateError = false; + return `Example output: ${result}`; + } + catch (e) { + this.templateError = true; + this.error = e.toString(); + return ''; + } + } + }, + computed: { + hasFinished() { + return this.entries.length === this.results.length; + }, + helpers() { + const output = []; + for (const key in Handlebars.helpers) { + output.push(key); + } + return output; + } + }, + watch: { + templateText(newValue) { + this.show = null; + this.results = []; + this.entries = []; + try { + const newTemplate = Handlebars.compile(newValue); + this.templateError = false; + this.hasError = false; + this.error = null; + newTemplate(this.examplePokemon); + V2.updateSpriteTemplate(newValue); + } + catch (ex) { + this.hasError = true; + this.error = ex; + } + } + } + }).mount('#test'); +})(); +//# sourceMappingURL=test.js.map \ No newline at end of file diff --git a/v2/themes/sprite-test/assets/js/test.js.map b/v2/themes/sprite-test/assets/js/test.js.map new file mode 100644 index 0000000..f7c8651 --- /dev/null +++ b/v2/themes/sprite-test/assets/js/test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/sprite-test/assets/js/test.ts b/v2/themes/sprite-test/assets/js/test.ts new file mode 100644 index 0000000..241de48 --- /dev/null +++ b/v2/themes/sprite-test/assets/js/test.ts @@ -0,0 +1,265 @@ +import {createApp} from 'vue' +import {homeSpriteTemplate, Handlebars, Nullable, clientSettings, spriteTestInitialize, isDefined, resolveIllegalCharacters, V2} from 'pokelink' +import {Gender, Pokemon} from 'v2Proto' +import {defineComponent} from 'vue' + +interface SpriteDexItem { + species: number + form: number + hasFemaleSprite: boolean, + gender: 'genderless' | 'male' | 'female', + isShiny: boolean, + fallbackSprite: string, + fallbackPartySprite: string, + translations: { + english: { speciesName: string; formName: Nullable }; + locale: { speciesName: string; formName: Nullable } + } +} + +(() => { + spriteTestInitialize() + createApp({ + template: ` +
+
+
+ + + + + +
+
+
+
{{ exampleOutput() }}
+ +
+
+
+
Testing ({{ entries.length - results.filter(x => hasValue(x)).length }})
+
Success ({{ results.filter(x => x === 2).length }})
+
Fallback ({{ results.filter(x => x === 1).length }})
+
Failed ({{ results.filter(x => x === 0).length }})
+
+
+
+
+
+
+
+
+ +
+
{{ entry.translations.locale.speciesName }} / {{ entry.translations.english.speciesName }}
+
#{{ entry.species }}
+
Female
+
{{ entry.translations.locale.formName }} / + {{ entry.translations.english.formName }} +
+
#{{ entry.form }}
+
+
+
+
+
+ `, + data() { + return { + templateText: homeSpriteTemplate, + hasError: false, + templateError: false, + error: null as Nullable, + examplePokemon: { + 'pid': 3791076706, + 'species': 6, + 'level': 1, + 'hp': { + 'max': 1, + 'current': 1 + }, + 'ivs': {}, + 'evs': {}, + 'translations': { + 'english': { + 'speciesName': 'Charizard', + 'status': 'Healthy', + 'types': [ + 'Fire', + 'Dragon' + ], + 'formName': 'Mega X', + 'pokerusStatus': 'No' + }, + 'locale': { + 'speciesName': 'Charizard', + 'status': 'Healthy', + 'types': [ + 'Fire', + 'Dragon' + ], + 'formName': 'Mega X', + 'pokerusStatus': 'No' + } + }, + 'color': 'Black', + 'fallbackSprite': '$POKELINK_HOST/assets:/assets/sprites/pokemon/home/normal/charizard-megax.png', + 'fallbackPartySprite': '$POKELINK_HOST/pokelink:/pkhex/img/sprites/a_6-1.png', + 'heldItem': 0, + 'gender': 'male', + 'form': 1, + 'isEgg': false, + 'hiddenPower': 18, + 'nature': 25, + 'isShiny': false, + 'pokeball': 0, + 'friendship': 0, + 'ability': 0, + 'pokerus': 'clean', + 'locationMet': 0 + } as unknown as Pokemon, + entries: [] as SpriteDexItem[], + results: [] as Nullable<0 | 1 | 2>[], + enableShiny: true, + show: null as Nullable<0 | 1 | 2> + } + }, + methods: { + getSprite(pokemon: SpriteDexItem) { + return V2.getSprite(pokemon as unknown as Pokemon) + }, + getFallback(pokemon: SpriteDexItem) { + return pokemon.fallbackSprite?.replace('$POKELINK_HOST', `http://${clientSettings.host}:${clientSettings.port}`) + }, + async getSpriteDex() { + this.show = null + this.entries = [] + this.hasError = false + this.error = null + this.finished = false + let response: Response + try { + response = await fetch(`http://${clientSettings.host}:${clientSettings.port}/api/pokelink/v1/listSpriteDex${this.enableShiny ? '?addShiny=true' : ''}`, {method: 'GET'}) + } catch(e) { + this.hasError = true + this.error = `Unable to connect to http://${clientSettings.host}:${clientSettings.port}. Is a Pokelink session running?\n\nIf it is. Please make sure the host and port url parameters are correct` + throw e + } + + try { + let result = await response.text() + + let json = JSON.parse(result) + + if (Array.isArray(json.entries)) { + this.entries = json.entries + this.results = [] + + if (clientSettings.debug) { + console.debug(`${this.entries.length} entries received`) + } + } else { + this.hasError = true + this.error = `Data received was not an array ${JSON.stringify(result)}` + } + } catch(e: any) { + this.hasError = true + this.error = e.toString() + throw e + } + }, + canShow(i: number) { + switch (this.show) { + case null: + return true + default: + return this.results[i] === this.show; + } + }, + handleSuccess(i: number) { + if (this.hasValue(this.results[i])) { + return + } + this.results[i] = 2 + }, + handleError(i: number, img: HTMLImageElement) { + if (!this.hasFinished) { + this.show = 1 + } + if (this.hasValue(this.results[i])) { + this.results[i] = 0 + return + } + + this.results[i] = 1 + V2.useFallback(img, this.entries[i]) + }, + hasValue(idx?: any){ + return isDefined(idx) + }, + exampleOutput() { + try { + const result = V2.getSprite(this.examplePokemon) + this.templateError = false + return `Example output: ${result}` + } catch (e: any) { + this.templateError = true + this.error = e.toString() + return '' + } + } + }, + computed: { + hasFinished() { + return this.entries.length === this.results.length + }, + helpers() { + const output: string[] = [] + + for (const key in Handlebars.helpers) { + output.push(key) + } + + return output + } + }, + watch: { + templateText(newValue) { + this.show = null + this.results = [] + this.entries = [] + try { + const newTemplate = Handlebars.compile(newValue) + this.templateError = false + this.hasError = false + this.error = null + newTemplate(this.examplePokemon) + V2.updateSpriteTemplate(newValue) + } catch(ex) { + this.hasError = true + this.error = ex + } + } + } + }).mount('#test') +})() \ No newline at end of file diff --git a/v2/themes/sprite-test/index.html b/v2/themes/sprite-test/index.html new file mode 100644 index 0000000..f826d56 --- /dev/null +++ b/v2/themes/sprite-test/index.html @@ -0,0 +1,35 @@ + + + + + + + Sprite Tester + + + + +
+ + + + + + \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/RifficFree-Bold.ttf b/v2/themes/stick-it-down/assets/RifficFree-Bold.ttf new file mode 100644 index 0000000..428793e Binary files /dev/null and b/v2/themes/stick-it-down/assets/RifficFree-Bold.ttf differ diff --git a/v2/themes/stick-it-down/assets/css/styles.css b/v2/themes/stick-it-down/assets/css/styles.css new file mode 100644 index 0000000..1f72620 --- /dev/null +++ b/v2/themes/stick-it-down/assets/css/styles.css @@ -0,0 +1,445 @@ +@import '../../../_shared/styles/heartGauge.css'; +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap'); +/* @font-face{font-family:RifficFree;src:local("RifficFree"),url("https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap")} */ +@font-face{font-family:RifficFree;src:local("RifficFree"),url("../RifficFree-Bold.ttf")} + +* { + /* font-family: "Riffic Free"; */ + font-family: 'Noto Sans', sans-serif; +} +.pokes { + /* margin-top: 110px; */ +} + +.browser-connected { + display: block !important; +} + +.pokemon__list { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} +.deaths__list { + display: flex; + flex-wrap: wrap; + flex-direction: row; +} +.deaths__list .deaths__pokemon .pokemon__name{ + color: #000; + margin-top: 8px; + text-align: center; + font-weight: bold; + font-family: RifficFree; + text-shadow: 1px 1px 2px #fff; +} +.deaths__list .deaths__pokemon .pokemon__image{ + display: flex; + justify-content: center; +} +.deaths__list .deaths__pokemon .pokemon__image img{ + width: -webkit-fill-available; +} +.deaths__list .deaths__pokemon { + max-width: 100px; + margin-right: 20px; +} + + +@-webkit-keyframes ticker { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes ticker { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} +.deaths:has(.marquee) { + width: 100%; + overflow: hidden; + box-sizing: content-box; + padding-left: 100%; +} +.deaths .deaths__list.marquee { + flex-wrap: nowrap; + flex-direction: row; + white-space: nowrap; + padding-right: 100%; + box-sizing: content-box; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + -webkit-animation-name: ticker; + animation-name: ticker; + -webkit-animation-duration: 30s; + animation-duration: 30s; +} + +.darkMode { + color: #fff !important; +} + +.pokemon { + height: 80px; + margin-bottom: 18px; +} + +.pokemon.isDead { + opacity: 0.8; +} + +.pokemon > div { + height: 100%; +} + +.pokemon-image__wrapper { + width: 80px; + height: 80px; + border-radius: 4px 0 0 45px; +} + +.pokemon .pokemon__details { + width: 300px; + height: 80px; + background: #fffbe9; + display: flex; + flex-direction: row; + align-self: flex-end; + font-weight: bold; + font-size: 19pt; + justify-content: space-between; + border-radius: 0 4px 4px 0; + position: relative; +} +.pokemon .pokemon__details .pokemon__level{ + font-size: 80%; + font-weight: bold; + padding: 13px; + +} +.pokemon .pokemon__details .pokemon__name{ + padding: 13px; +} + +.pokemon .hp { + height: 5px; + position: absolute; + width: 100%; + bottom: 0px; +} +.pokemon .exp { + height: 5px; + position: absolute; + width: 100%; + top: 0px; +} + + +.pokemon__list .pokemon .hp .hp__inner { + background: #27ff00; + transition: width 2s; + height: 100%; + align-self: flex-end; + width: 12px; +} + +.pokemon .exp .exp__inner { + background-color: cyan; + transition: width 2s; + height: 100%; + align-self: flex-end; + width: 12px; +} + +.pokemon .heart-gauge { + height: 5px; + position: absolute; + width: 100%; + top: 0px; + background: rgba(0, 0, 0, 0.1); +} + +.pokemon__list .pokemon.isPoisoned .hp .hp__inner { + background: purple; +} + +.pokemon__list .pokemon.isParalyzed .hp .hp__inner { + background: yellow; +} + +.pokemon__list .pokemon.isFrozen .hp .hp__inner { + background: rgb(111, 255, 255); +} + +.pokemon__list .pokemon.isBurned .hp .hp__inner { + background: #ff7d4d; +} +.pokemon .hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + + +.pokemon .pokemon__image { + /* height: 100%; */ + /* display: flex; */ + height: 100%; + width: 100%; + left: -1%; + position: relative; + top: -10%; + display: flex; + flex-direction: column; + align-content: center; + flex-wrap: nowrap; + justify-content: center; + align-items: center; +} + +.pokemon .pokemon__image .sprite { + /* max-height: -webkit-fill-available; */ + /* padding-right: 12px; */ + /* align-self: center; + justify-self: center; */ + height: 90%; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +@keyframes takeDamage { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-50deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes poisoned { + 0% { + -webkit-filter: none; + filter: none; + } + 50% { + -webkit-filter: invert(40%) grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(400%) contrast(2); + filter: grayscale(100%) brightness(40%) sepia(100%) hue-rotate(-106deg) saturate(600%) contrast(0.8); + } + 100% { + -webkit-filter: none; + filter: none; + } +} + +@keyframes shake { + 10%, 90% { + transform: scale(2) translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: scale(2) translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: scale(2) translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: scale(2) translate3d(4px, 0, 0); + } +} + + +.sleeping { + width: 200px; + height: 200px; + position: absolute; + top: -50px; + left: 94%; + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 11; +} + +.sleeping span { + font-family: "RifficFree"; + color: #d4d4d4; + position: absolute; + bottom: 10px; + left: 10px; + font-size: 23pt; + opacity: 0; + -moz-animation: sleep 9s infinite linear; + -webkit-animation: sleep 9s infinite linear; + animation: sleep 9s infinite linear; +} +.sleeping span:nth-child(2n) { + -moz-animation-delay: 3s; + -webkit-animation-delay: 3s; + animation-delay: 3s; +} +.sleeping span:nth-child(3n) { + -moz-animation-delay: 6s; + -webkit-animation-delay: 6s; + animation-delay: 6s; +} + +@-webkit-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-moz-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@-ms-keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} +@keyframes sleep { + 0% { + -moz-transform: translate(0, 0) scale(0.3); + -ms-transform: translate(0, 0) scale(0.3); + -webkit-transform: translate(0, 0) scale(0.3); + transform: translate(0, 0) scale(0.3); + opacity: 0; + } + 1% { + opacity: 0; + } + 3% { + opacity: 1; + } + 50% { + -moz-transform: translate(90%, -50%) scale(0.65); + -ms-transform: translate(90%, -50%) scale(0.65); + -webkit-transform: translate(90%, -50%) scale(0.65); + transform: translate(90%, -50%) scale(0.65); + } + 75% { + opacity: 1; + } + 100% { + -moz-transform: translate(180%, -100%) scale(1); + -ms-transform: translate(180%, -100%) scale(1); + -webkit-transform: translate(180%, -100%) scale(1); + transform: translate(180%, -100%) scale(1); + opacity: 0; + } +} diff --git a/v2/themes/stick-it-down/assets/js/components/list.vue.js b/v2/themes/stick-it-down/assets/js/components/list.vue.js new file mode 100644 index 0000000..af79ff8 --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/components/list.vue.js @@ -0,0 +1,52 @@ +import { defineComponent } from 'vue'; +import { V2, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium' + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + V2.onPartyUpdate((party => { + vm.party = party; + vm.$forceUpdate(); + })); + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/components/list.vue.js.map b/v2/themes/stick-it-down/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..0bcf48e --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAkB,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;SAC9B,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,IAAI,CAAA;QACb,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YAChB,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/components/list.vue.ts b/v2/themes/stick-it-down/assets/js/components/list.vue.ts new file mode 100644 index 0000000..e9471c4 --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/components/list.vue.ts @@ -0,0 +1,54 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import {Nullable} from 'global' +import {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium' + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + V2.onPartyUpdate((party => { + vm.party = party + vm.$forceUpdate() + })) + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/components/pokemon.vue.js b/v2/themes/stick-it-down/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..11f91d3 --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/components/pokemon.vue.js @@ -0,0 +1,153 @@ +import { defineComponent } from 'vue'; +import { V2, V2DataTypes } from 'pokelink'; +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
+ +
+ +
+ +
+
+
+
+ {{ nickname }} +
+
+ Lv. {{ pokemon.level }} +
+
+
+
+
+
+
+ `, + components: { + trimmedSprite: trimmedSprite, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + slotId: null + }, + data() { + return { + justTookDamage: false + }; + }, + created() { + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + getSprite(pokemon) { + if (pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.png'; + } + return V2.getSprite(pokemon); + } + }, + computed: { + pokemonExists() { + return V2.isValidPokemon(this.pokemon); + }, + healthPercent() { + if (!this.pokemonExists) { + return 0; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + "%"; + }, + isDead() { + if (!this.pokemonExists) { + return false; + } + return this.pokemon.hp.current === 0; + }, + isSleeping() { + if (!this.pokemonExists) { + return false; + } + return this.pokemon.status === V2DataTypes.StatusEffect.asleep; + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.pokemonExists) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (typeof this.pokemon === "undefined") { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.pokemonExists) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + experienceRemaining() { + return this.pokemon.expPercentage + '%'; + }, + statusClasses() { + if (typeof this.pokemon === "undefined") { + return []; + } + let statuses = []; + if (this.pokemon.status === V2DataTypes.StatusEffect.poisoned || this.pokemon.status === V2DataTypes.StatusEffect.badlyPoisoned) + statuses = [...statuses, 'isPoisoned']; + if (this.pokemon.status === V2DataTypes.StatusEffect.paralyzed) + statuses = [...statuses, 'isParalyzed']; + if (this.pokemon.status === V2DataTypes.StatusEffect.burned) + statuses = [...statuses, 'isBurned']; + if (this.pokemon.status === V2DataTypes.StatusEffect.frozen) + statuses = [...statuses, 'isFrozen']; + return statuses; + }, + cellColour() { + if (!this.pokemonExists || this.pokemon.isEgg) + return '#120c2f'; + return V2.getTypeColor(this.pokemon.translations.english.types[0]); + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit("change", this.nickname); + } + }, + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/components/pokemon.vue.js.map b/v2/themes/stick-it-down/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..280f50f --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/components/pokemon.vue.ts b/v2/themes/stick-it-down/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..a5a4d34 --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/components/pokemon.vue.ts @@ -0,0 +1,139 @@ +import {defineComponent, PropType} from 'vue' +import {clientSettings, Nullable, typeColors, V2, V2DataTypes} from 'pokelink' +import type {Pokemon} from 'v2Proto' +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
+ +
+ +
+ +
+
+
+
+ {{ nickname }} +
+
+ Lv. {{ pokemon.level }} +
+
+
+
+
+
+
+ `, + components: { + trimmedSprite: trimmedSprite, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + slotId: null + }, + data() { + return { + justTookDamage: false + } + }, + created() { + + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + getSprite(pokemon: Pokemon) { + if (pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.png' + } + return V2.getSprite(pokemon) + } + }, + computed: { + pokemonExists () { + return V2.isValidPokemon(this.pokemon) + }, + healthPercent() { + if (!this.pokemonExists ) { return 0; } + return (100/this.pokemon.hp!.max) * this.pokemon.hp!.current + "%"; + }, + isDead () { + if (!this.pokemonExists ) { return false; } + + return this.pokemon.hp!.current === 0 + }, + isSleeping () { + if (!this.pokemonExists ) { return false; } + + return this.pokemon.status === V2DataTypes.StatusEffect.asleep + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName; + }, + sex() { + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.pokemonExists) { return null; } + return this.pokemon.species; + }, + opacity() { + if (typeof this.pokemon === "undefined") { return '0.4'; } + return '1'; + }, + hasItem() { + if (!this.pokemonExists) { return false; } + return this.pokemon.heldItem !== 0; + }, + experienceRemaining () { + return this.pokemon.expPercentage + '%' + }, + statusClasses () { + if (typeof this.pokemon === "undefined") { return []; } + let statuses: string[] = [] + if (this.pokemon.status === V2DataTypes.StatusEffect.poisoned || this.pokemon.status === V2DataTypes.StatusEffect.badlyPoisoned) statuses = [...statuses, 'isPoisoned'] + if (this.pokemon.status === V2DataTypes.StatusEffect.paralyzed) statuses = [...statuses, 'isParalyzed'] + if (this.pokemon.status === V2DataTypes.StatusEffect.burned) statuses = [...statuses, 'isBurned'] + if (this.pokemon.status === V2DataTypes.StatusEffect.frozen) statuses = [...statuses, 'isFrozen'] + + return statuses + }, + cellColour () { + if (!this.pokemonExists || this.pokemon.isEgg) return '#120c2f' + return V2.getTypeColor(this.pokemon.translations!.english!.types[0]) + }, + selectedPokemon: { + get: function() { + return this.nickname + }, + set: function() { + this.$emit( "change", this.nickname ) + } + }, + } +}) \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/party.js b/v2/themes/stick-it-down/assets/js/party.js new file mode 100644 index 0000000..78180b8 --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/party.js @@ -0,0 +1,36 @@ +import { createApp } from 'vue'; +import { V2, clientSettings } from 'pokelink'; +import list from './components/list.vue.js'; +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + this.resetSpriteSet(); + V2.onSpriteSetReset(this.resetSpriteSet); + V2.initialize(); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/normal/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}{{addFemaleTag this "-f"}}.png'); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/party.js.map b/v2/themes/stick-it-down/assets/js/party.js.map new file mode 100644 index 0000000..c14c0e6 --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAY,MAAM,UAAU,CAAA;AACtD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,IAAI,CAAC,cAAc,EAAE,CAAA;YAErB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAExC,EAAE,CAAC,UAAU,EAAE,CAAA;YAEf,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;QACD,OAAO,EAAE;YACL,cAAc;gBACV,EAAE,CAAC,oBAAoB,CAAC,iSAAiS,CAAC,CAAA;YAC9T,CAAC;SACJ;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/stick-it-down/assets/js/party.ts b/v2/themes/stick-it-down/assets/js/party.ts new file mode 100644 index 0000000..2b02973 --- /dev/null +++ b/v2/themes/stick-it-down/assets/js/party.ts @@ -0,0 +1,40 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import list from './components/list.vue.js' + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + this.resetSpriteSet() + + V2.onSpriteSetReset(this.resetSpriteSet) + + V2.initialize() + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/gen7/normal/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}{{addFemaleTag this "-f"}}.png') + } + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/stick-it-down/index.html b/v2/themes/stick-it-down/index.html new file mode 100644 index 0000000..1f05e6f --- /dev/null +++ b/v2/themes/stick-it-down/index.html @@ -0,0 +1,55 @@ + + + + + + Stick it down + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/css/styles.css b/v2/themes/sword-shield-team/assets/css/styles.css new file mode 100644 index 0000000..557eed5 --- /dev/null +++ b/v2/themes/sword-shield-team/assets/css/styles.css @@ -0,0 +1,325 @@ +@import '../../../_shared/styles/heartGauge.css'; + +* { + font-family: 'Open Sans', sans-serif; +} +/* body {background-color: red;} */ +.pokes { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + flex-direction: column; + max-height: 100vh; +} + +.pokemon { + width: 386px; + height: 85px; + margin-bottom: 13px; + display: flex; + border-radius: 53px; + background: white; + box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); + transition: opacity .5s; + opacity: 1; +} +.pokemon.opaque { + opacity: 0; +} + +.pokemon .sex { + position: absolute; + right: -3px; + top: 7px; + width: 24px; + height: 24px; +} +.pokemon .sex.male { + background-color: #50C8EF; + padding: 1px; + border-radius: 18px; +} +.pokemon .sex.female { + background-color: #F05228; + padding: 1px; + border-radius: 18px; +} +.pokemon .sex .icon { + width: 16px; + position: relative; + top: -9px; + left: 4px; +} +.pokemon .sex .icon.male > * { + fill: white !important; +} +.pokemon .sex .icon.female > * { + fill: white !important; +} +.pokemon .sex .icon.female { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.pokemon .pokemon__sprite { + width: 80px; +} +.pokemon .details { + width: 220px; + position: relative; +} +.pokemon .details .name { + height: 37px; + line-height: 37px; + font-size: 1.5em; + margin: 0; +} +.pokemon .details .hp .text { + height: 37px; + line-height: 37px; + font-size: 1.4em; + margin: 0; +} +.pokemon .details span.lvl { + position: absolute; + left: 207px; + bottom: 5px; + height: 37px; + line-height: 37px; + font-size: 1.4em; + margin: 0; + width: 63px; +} +.pokemon .details .hp .bar { + background: #B3B1B3; + height: 6px; + overflow: hidden; +} +.pokemon .details .hp .bar .health { + width: 50%; + height: 100%; + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; +} +.pokemon .details .hp .bar .health.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} +.pokemon .details .hp .bar .health.critical { + background: linear-gradient(to right, #d20000, #f51700); +} +.pokemon .pokeball { + position: absolute; + /* fill: white; */ + opacity: 0.5; + transition: all 0.5s ease; + width: 76%; + left: 15px; + /* top: 102px; */ + transform: translateZ(30px) rotateX(75deg); + filter: drop-shadow(1px 5px 5px rgba(255,255,255,1)); + height: 140px; +} +.pokemon .cell { + transition: all 0.2s ease; +} +.pokemon .cell .bg { + stroke: rgba(255, 255, 255, 0.5); + fill: rgba(255, 255, 255, 0.5); + transition: all 1.15s ease; +} +.pokemon .cell .stroke { + stroke: white; + stroke-width: 4px; +} +.pokemon:after { + content: ""; + display: block; + position: absolute; + left: 7px; + right: 7px; + bottom: 2px; + height: 180px; + border-radius: 100% 100% 70% 70% / 70% 70% 20% 20%; + background: transparent; + transition: all 0.2s ease; + z-index: -2; +} +.pokemon.selected:after { + box-shadow: 0 20px 30px rgba(0, 0, 0, 0.5); +} +.pokemon.selected .cell { + -webkit-filter: drop-shadow(0px 2px 6px white); + filter: drop-shadow(0px 2px 6px white); + -webkit-transform: scale(1.02); + transform: scale(1.02); +} +.pokemon.selected .cell .bg { + fill: rgba(255, 246, 146, 0.9); + fill: url(#bg-gradient-selected) !important; +} +.pokemon.selected .pokeball { + opacity: 0.8; +} +.pokemon.selected .sprite { + -webkit-animation: bounce 0.8s ease infinite; + animation: bounce 0.8s ease infinite; +} +.pokemon .pokemon__sprite { + /* width: 80px; + position: relative; */ + width: 80px; + position: relative; + display: flex; + text-align: center; + justify-content: center; +} +.pokemon .pokemon__sprite .sprite { + /* position: absolute; + bottom: 6px; + width: 89px; */ + align-self: center; + /* min-width: 60px; + max-width: 73px; */ + + width: 30px; + bottom: 21px; + position: absolute; + left: 56%; + transform: translateX(-50%); +} + + +@-webkit-keyframes boing { + 0%,100% { + -webkit-transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + } +} + +@keyframes boing { + 0%,100% { + -webkit-transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-90%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + transform: translateY(-50%) translateX(-60%) scaleX(0.95) scaleY(1.1); + } +} +@-webkit-keyframes bounce { + 0%,100% { + -webkit-transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + } +} +@keyframes bounce { + 0%,100% { + -webkit-transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + transform: translateY(-50%) translateX(-50%) scaleX(1) scaleY(1); + } + 50% { + -webkit-transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + transform: translateY(-60%) translateX(-50%) scaleX(0.95) scaleY(1.03); + } +} +@-webkit-keyframes float { + 0%,100% { + -webkit-transform: translateY(-50%) translateX(-50%); + transform: translateY(-50%) translateX(-50%); + } + 50% { + -webkit-transform: translateY(-57%) translateX(-50%); + transform: translateY(-57%) translateX(-50%); + } +} +@keyframes float { + 0%,100% { + -webkit-transform: translateY(-50%) translateX(-50%); + transform: translateY(-50%) translateX(-50%); + } + 50% { + -webkit-transform: translateY(-57%) translateX(-50%); + transform: translateY(-57%) translateX(-50%); + } +} + +h1 { + display: inline-block; + font-size: 60px; + margin: 10px; + color: #805cff; + font-weight: 900; +} + +body { + color: black; + font-family: "Heebo", sans-serif; + /* + background: linear-gradient(45deg, #d2ffde, #ceefff, #ded1ff); + background: red; + background-size: cover; + background-repeat: no-repeat; + padding: 20px; + */ } + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0,0,0,0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; +} + +.browser-connected { + display: block !important; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.badges {} +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon .details .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: rgba(0, 0, 0, 0.15); + overflow: hidden; +} diff --git a/v2/themes/sword-shield-team/assets/js/components/arrow.vue.js b/v2/themes/sword-shield-team/assets/js/components/arrow.vue.js new file mode 100644 index 0000000..8de578b --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/arrow.vue.js @@ -0,0 +1,23 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + + + + + + +`, + props: { + topColor: { type: String, default: "#eee" }, + bottomColor: { type: String, default: "#888" } + } +}); +//# sourceMappingURL=arrow.vue.js.map \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/arrow.vue.js.map b/v2/themes/sword-shield-team/assets/js/components/arrow.vue.js.map new file mode 100644 index 0000000..2e47eda --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/arrow.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"arrow.vue.js","sourceRoot":"","sources":["arrow.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC7B,QAAQ,EAAE;;;;;;;;;;;;;;CAcX;IACC,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;QAC3C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;KAC/C;CACF,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/arrow.vue.ts b/v2/themes/sword-shield-team/assets/js/components/arrow.vue.ts new file mode 100644 index 0000000..421a8ce --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/arrow.vue.ts @@ -0,0 +1,23 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + + + + + + +`, + props: { + topColor: { type: String, default: "#eee" }, + bottomColor: { type: String, default: "#888" } + } +}); diff --git a/v2/themes/sword-shield-team/assets/js/components/female.vue.js b/v2/themes/sword-shield-team/assets/js/components/female.vue.js new file mode 100644 index 0000000..9e6ca9d --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/female.vue.js @@ -0,0 +1,17 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + +` +}); +//# sourceMappingURL=female.vue.js.map \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/female.vue.js.map b/v2/themes/sword-shield-team/assets/js/components/female.vue.js.map new file mode 100644 index 0000000..9fe85b3 --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/female.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"female.vue.js","sourceRoot":"","sources":["female.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC7B,QAAQ,EAAE;;;;;;;;;;;;OAYL;CACN,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/female.vue.ts b/v2/themes/sword-shield-team/assets/js/components/female.vue.ts new file mode 100644 index 0000000..dbf26eb --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/female.vue.ts @@ -0,0 +1,17 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + +` +}); diff --git a/v2/themes/sword-shield-team/assets/js/components/male.vue.js b/v2/themes/sword-shield-team/assets/js/components/male.vue.js new file mode 100644 index 0000000..abaa0fb --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/male.vue.js @@ -0,0 +1,14 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + ` +}); +//# sourceMappingURL=male.vue.js.map \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/male.vue.js.map b/v2/themes/sword-shield-team/assets/js/components/male.vue.js.map new file mode 100644 index 0000000..abe71fd --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/male.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"male.vue.js","sourceRoot":"","sources":["male.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC7B,QAAQ,EAAE;;;;;;;;;WASD;CACV,CAAC,CAAC"} \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/male.vue.ts b/v2/themes/sword-shield-team/assets/js/components/male.vue.ts new file mode 100644 index 0000000..a8e6c0a --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/male.vue.ts @@ -0,0 +1,14 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + ` +}); diff --git a/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.js b/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.js new file mode 100644 index 0000000..1fe004a --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.js @@ -0,0 +1,18 @@ +import { defineComponent } from 'vue'; +export default defineComponent({ + template: ` + + + + + + + + `, + props: { + ident: {}, + topColor: {}, + bottomColor: {} + } +}); +//# sourceMappingURL=pokeball.vue.js.map \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.js.map b/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.js.map new file mode 100644 index 0000000..0c142ea --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokeball.vue.js","sourceRoot":"","sources":["pokeball.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AAEnC,eAAe,eAAe,CAAC;IAC7B,QAAQ,EAAE;;;;;;;;GAQT;IACD,KAAK,EAAE;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;KAChB;CACF,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.ts b/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.ts new file mode 100644 index 0000000..049eb65 --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/pokeball.vue.ts @@ -0,0 +1,18 @@ +import {defineComponent} from 'vue' + +export default defineComponent({ + template: ` + + + + + + + + `, + props: { + ident: {}, + topColor: {}, + bottomColor: {} + } +}) diff --git a/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.js b/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..a6f285c --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.js @@ -0,0 +1,192 @@ +import { defineComponent } from 'vue'; +import { clientSettings, string2ColHex, V2, V2DataTypes } from 'pokelink'; +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js'; +import pokeball from './pokeball.vue.js'; +import male from './male.vue.js'; +import female from './female.vue.js'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+ + + +
+
+

+ {{ nickname }} + + + + +

+
+
+
+
+ {{ pokemon.hp.current }} / {{ pokemon.hp.max }} +
+ + Lv. + {{ pokemon.level }} +
+
+
+ `, + components: { + 'trimmedSprite': trimmedSprite, + 'pokeball': pokeball, + 'male': male, + 'female': female, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + key: {} + }, + data() { + return { + fixedSprite: false, + colorPokeball: false, + colorPokemon: false, + colorRoute: false, + colorType: false, + colorBothSides: true + }; + }, + mounted() { + let color = clientSettings.params.getString('color', 'type'); + this.colorPokeball = clientSettings.params.getBool('colorPokeball', false); + this.colorBothSides = clientSettings.params.getBool('colorBothSides', true); + this.colorPokemon = color === 'pokemon'; + this.colorRoute = color === 'route'; + this.colorType = color === 'type'; + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + healthPercent() { + if (!this.isValid) { + return '0%'; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + '%'; + }, + nickname() { + if (!this.isValid) { + return null; + } + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + sex() { + if (!this.isValid) { + return ''; + } + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')); + }, + ident() { + if (!this.isValid) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!this.isValid) { + return '1'; + } + if (!this.fixedSprite) { + return ''; + } + return ''; + }, + hasItem() { + if (!this.isValid) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit('change', this.nickname); + } + }, + hideGender() { + return clientSettings.params.getBool("hideGender", false); + }, + hideLevel() { + return clientSettings.params.getBool("hideLevels", false); + } + }, + methods: { + getSprite(pokemon) { + if (pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/small_egg.png'; + } + return V2.getSprite(pokemon); + }, + getPokeballTopColor: function () { + if (!this.isValid || !this.colorPokeball || (!this.colorPokemon && !this.colorRoute && !this.colorType)) { + return '#C3C4C6'; + } + if (this.colorPokemon) { + return this.pokemon.color; + } + if (this.colorRoute) { + return string2ColHex(this.pokemon.translations?.locale?.locationMetName || ''); + } + if (this.colorType) { + return V2.getTypeColor(this.pokemon.translations.english.types[0]); + } + return 'white'; + }, + getPokeballBottomColor: function () { + if (!this.isValid || !this.colorPokeball || (!this.colorPokemon && !this.colorRoute && !this.colorType)) { + return '#C3C4C6'; + } + if (!this.isValid) { + return '#C3C4C6'; + } + if (this.colorPokemon) { + if (!this.colorBothSides) { + return '#C3C4C6'; + } + return this.pokemon.color; + } + if (this.colorRoute) { + if (!this.colorBothSides) { + return 'C3C4C6'; + } + return string2ColHex(this.pokemon.translations?.locale?.locationMetName || ''); + } + if (this.colorType) { + if (this.pokemon.translations.english.types.length === 2) { + return V2.getTypeColor(this.pokemon.translations.english.types[1]); + } + return V2.getTypeColor(this.pokemon.translations.english.types[0]); + } + return 'white'; + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.js.map b/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..ba67a8a --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.ts b/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..3b0d192 --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/components/pokemon.vue.ts @@ -0,0 +1,204 @@ +import {defineComponent, PropType} from 'vue' +import {clientSettings, string2ColHex, V2, V2DataTypes} from 'pokelink' +import trimmedSprite from '../../../../_shared/components/trimmedSprite.vue.js' +import pokeball from './pokeball.vue.js' +import male from './male.vue.js' +import female from './female.vue.js' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' +import type {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` +
+
+ + + +
+
+

+ {{ nickname }} + + + + +

+
+
+
+
+ {{ pokemon.hp.current }} / {{ pokemon.hp.max }} +
+ + Lv. + {{ pokemon.level }} +
+
+
+ `, + components: { + 'trimmedSprite': trimmedSprite, + 'pokeball': pokeball, + 'male': male, + 'female': female, + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + key: {} + }, + data() { + return { + fixedSprite: false, + colorPokeball: false, + colorPokemon: false, + colorRoute: false, + colorType: false, + colorBothSides: true + } + }, + mounted() { + let color = clientSettings.params.getString('color', 'type') + this.colorPokeball = clientSettings.params.getBool('colorPokeball', false) + this.colorBothSides = clientSettings.params.getBool('colorBothSides', true) + + this.colorPokemon = color === 'pokemon' + this.colorRoute = color === 'route' + this.colorType = color === 'type' + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + healthPercent() { + if (!this.isValid) { + return '0%' + } + return (100 / this.pokemon.hp!.max) * this.pokemon.hp!.current + '%' + }, + nickname() { + if (!this.isValid) { + return null + } + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName + }, + sex() { + if (!this.isValid) { + return '' + } + return (this.pokemon.gender === V2DataTypes.Gender.genderless ? '' : (this.pokemon.gender === V2DataTypes.Gender.female ? 'female' : 'male')) + }, + ident() { + if (!this.isValid) { + return null + } + return this.pokemon.species + }, + opacity() { + if (!this.isValid) { + return '1' + } + if (!this.fixedSprite) { + return '' + } + return '' + }, + hasItem() { + if (!this.isValid) { + return false + } + + return this.pokemon.heldItem!== 0 + }, + selectedPokemon: { + get: function () { + return this.nickname + }, + set: function () { + this.$emit('change', this.nickname) + } + }, + hideGender() { + return clientSettings.params.getBool("hideGender", false) + }, + hideLevel() { + return clientSettings.params.getBool("hideLevels", false) + } + }, + methods: { + getSprite(pokemon: Pokemon) { + if (pokemon.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/small_egg.png' + } + return V2.getSprite(pokemon) + }, + getPokeballTopColor: function () { + if (!this.isValid || !this.colorPokeball || (!this.colorPokemon && !this.colorRoute && !this.colorType)) { + return '#C3C4C6' + } + + if (this.colorPokemon) { + return this.pokemon.color + } + + if (this.colorRoute) { + return string2ColHex(this.pokemon.translations?.locale?.locationMetName || '') + } + + if (this.colorType) { + return V2.getTypeColor(this.pokemon.translations!.english!.types[0]) + } + + return 'white' + }, + getPokeballBottomColor: function () { + if (!this.isValid || !this.colorPokeball || (!this.colorPokemon && !this.colorRoute && !this.colorType)) { + return '#C3C4C6' + } + if (!this.isValid) { + return '#C3C4C6' + } + + if (this.colorPokemon) { + if (!this.colorBothSides) { + return '#C3C4C6' + } + return this.pokemon.color + } + + if (this.colorRoute) { + if (!this.colorBothSides) { + return 'C3C4C6' + } + return string2ColHex(this.pokemon.translations?.locale?.locationMetName || '') + } + + if (this.colorType) { + if (this.pokemon.translations!.english!.types.length === 2) { + return V2.getTypeColor(this.pokemon.translations!.english!.types[1]) + } + return V2.getTypeColor(this.pokemon.translations!.english!.types[0]) + } + + return 'white' + } + + } +}) diff --git a/v2/themes/sword-shield-team/assets/js/party.js b/v2/themes/sword-shield-team/assets/js/party.js new file mode 100644 index 0000000..e825dc6 --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/party.js @@ -0,0 +1,79 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemon from './components/pokemon.vue.js'; +(() => { + createApp({ + components: { + 'pokemon': pokemon + }, + data() { + return { + connected: false, + loaded: false, + party: [], + switchSpeed: 'switchMedium' + }; + }, + created: function () { + this.settings = clientSettings; + }, + mounted: function () { + const vm = this; + this.resetSpriteSet(); + V2.onSpriteSetReset(this.resetSpriteSet); + V2.initialize(); + V2.onPartyUpdate((party => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + })); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/pkhex/party/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}.png'); + }, + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/party.js.map b/v2/themes/sword-shield-team/assets/js/party.js.map new file mode 100644 index 0000000..3361c9d --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/sword-shield-team/assets/js/party.ts b/v2/themes/sword-shield-team/assets/js/party.ts new file mode 100644 index 0000000..5705459 --- /dev/null +++ b/v2/themes/sword-shield-team/assets/js/party.ts @@ -0,0 +1,90 @@ +import {createApp} from 'vue' +import {V2, clientSettings, type Nullable, isDefined} from 'pokelink' +import pokemon from './components/pokemon.vue.js' + +(() => { + createApp({ + components: { + 'pokemon': pokemon + }, + data() { + return { + connected: false, + loaded: false, + party: [], + switchSpeed: 'switchMedium' + } + }, + created: function () { + this.settings = clientSettings + }, + mounted: function () { + const vm = this + + this.resetSpriteSet() + + V2.onSpriteSetReset(this.resetSpriteSet) + + V2.initialize() + + V2.onPartyUpdate((party => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + })) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot'))) { + return clientSettings.params.getNumber('slot') - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot') - 1, + clientSettings.params.getNumber('fromSlot') - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/pkhex/party/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}.png') + }, + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/sword-shield-team/index.html b/v2/themes/sword-shield-team/index.html new file mode 100644 index 0000000..38481fa --- /dev/null +++ b/v2/themes/sword-shield-team/index.html @@ -0,0 +1,63 @@ + + + + + + Sword & Shield Team + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/trozei/assets/css/styles.css b/v2/themes/trozei/assets/css/styles.css new file mode 100644 index 0000000..4e26694 --- /dev/null +++ b/v2/themes/trozei/assets/css/styles.css @@ -0,0 +1,203 @@ +@import '../../../_shared/styles/heartGauge.css'; +html, body { + width: 100%; + height: 100%; + overflow: hidden; + padding: 0; + margin: 0; + background-color: transparent !important; +} +body { + /*background-color: #ccc !important;*/ +} + +.pokemon__slot { + float: left; + width: 120px; + margin-left: 1.5vw; + color: black; + min-height: 180px; + position: relative; + margin-top: 50px; +} + +.pokemon__image { + height: 111px; + position: relative; + white-space: nowrap; + z-index: 10; +} + +.pokemon__image.pokemon__egg img{ + max-height: 80px; +} + +.pokemon__image img{ + filter: grayscale(0); + transition: grayscale 0.5s; +} + +.pokemon__image img { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + height: 111px; + margin-top: 5px; +} + +.pokemon__nick-shiny { + color: red; +} + +.pokemon__nick { + font-size: 1.5rem; + font-family: 'Rubik Mono One', sans-serif; + letter-spacing: 0px; + text-align: center; + -webkit-text-stroke: .5px white; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.pokemon__level { + font-family: 'Rubik Mono One', sans-serif; + font-size: 2rem; + -webkit-text-stroke: 1px white; + position: relative; + margin-bottom: -25px; +} + +.progress-bar, .progress { + border-radius: 0px; + margin-bottom: 0; +} +.progress{ + background-color:#cecece; + border-radius: 14px; + border-style: solid; + border-color: #000000; + border-width: 2px; +} +.progress-bar.grey { background: #646464; } +.progress-bar.green { background-image: linear-gradient(to right, #00ff14 , #1cc121); } +.progress-bar.yellow { background: #d9bc19; } +.progress-bar.red { background: #c02020; } + +.pokemon__bar { + display: flex; + justify-content: center; + padding: 4px 0px; + min-height: 20px; +} + +.pokemon__bar > span { + font-family: 'Rubik Mono One', sans-serif; + -webkit-text-stroke: 1px black; + font-size: 1rem; + color: white; + text-shadow: 2px 2px 1px rgba(0,0,0,0.5); + border-radius: 14px; + padding: 0px; + width:100%; + text-align: center; + border-style: solid; + border-color: #000000; + border-width: 2px; +} + +.pokemon__hp { + font-family: 'Rubik Mono One', sans-serif; + text-align: center; + text-align: center; + margin-top: -15.01px; + font-size: 1.1rem; + -webkit-text-stroke: .5px white; +} + +.badges {} +.badge__slot { + display: block; + float: left; +} + +.badge__slot img { + width: 100px; +} +.badge__slot--inactive img { + -webkit-filter: grayscale(100%) brightness(0); + filter: grayscale(100%) brightness(0); + opacity: 0.6; +} + +.pokemon__types {} +.pokemon__types span, .pokemon__gender span { + font-family: "PT Sans Condensed", "Roboto Condensed", sans-serif; + font-size: 14px; + letter-spacing: 0; + line-height: 19px; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3), 1px -1px 1px rgba(0, 0, 0, 0.3), -1px 1px 0 rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.9), 0 2px 1px rgba(0, 0, 0, 0.5); + color: white; + border-radius: 6px; + box-shadow: 0px 2px 0px 1px rgba(0, 0, 0, 0.6); + border-top: 1px rgba(255, 255, 255, 0.5) solid; + border-bottom: 4px rgba(0, 0, 0, 0.5) solid; + margin: 2px; + font-weight: normal; + text-transform: uppercase; + min-width: 65px; + text-align: center; + padding: 5px 8px; +} +.pokemon__bar span:has(+ span) { + border-radius: 14px 0 0 14px; +} +.pokemon__bar span + span { + border-radius: 0 14px 14px 0; + margin-left: -2px; +} + +/* transitions stuffs */ +.switchSlow-move { + transition: transform 2s; +} + +.switchMedium-move { + transition: transform 1s; +} + +.switchFast-move { + transition: transform 0.5s; +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0,0,0,0.8); + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; + word-break: break-all; +} + +.browser-connected { + display: block !important; +} + +.pokemon__slot .heart-gauge { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background: rgba(0, 0, 0, 0.15); + border-radius: 0; + overflow: hidden; + overflow: hidden; +} diff --git a/v2/themes/trozei/assets/images/pokeball-icon-22.png b/v2/themes/trozei/assets/images/pokeball-icon-22.png new file mode 100644 index 0000000..ef955f7 Binary files /dev/null and b/v2/themes/trozei/assets/images/pokeball-icon-22.png differ diff --git a/v2/themes/trozei/assets/js/components/pokemon-card.vue.js b/v2/themes/trozei/assets/js/components/pokemon-card.vue.js new file mode 100644 index 0000000..fb3b09e --- /dev/null +++ b/v2/themes/trozei/assets/js/components/pokemon-card.vue.js @@ -0,0 +1,109 @@ +import { defineComponent } from 'vue'; +import { clientSettings, V2 } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+
{{ pokemon.level }}
+
+
+ + {{ this.pokemon.nickname || this.pokemon.translations.locale.speciesName }} +
+
+
+
+
+
+ {{ pokemon.hp.current }} / {{ pokemon.hp.max }} +
+
+
+ {{ type }} +
+ +
+
+
+ +
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: false + } + }, + data() { + return { + hide: { + level: false, + nickname: false, + hp: false, + types: false + } + }; + }, + mounted() { + this.hide.level = clientSettings.params.getBool('hideLevel', false); + this.hide.nickname = clientSettings.params.getBool('hideNickname', false); + this.hide.hp = clientSettings.params.getBool('hideHP', false); + this.hide.types = clientSettings.params.getBool('hideTypes', false); + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + } + }, + methods: { + getSprite() { + if (this.pokemon?.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.png'; + } + return V2.getSprite(this.pokemon); + }, + useFallback() { + V2.useFallback(this.$refs.pokemonImg, this.pokemon); + }, + healthBarPercent: function () { + if (!this.isValid) { + return 0; + } + if (this.pokemon.hp.max === this.pokemon.hp.current) { + return 100; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current; + }, + healthBarClass: function () { + var percent = this.healthBarPercent(); + if (percent == 0) { + return 'progress-bar grey'; + } + if (percent <= 25) { + return 'progress-bar red'; + } + if (percent <= 50) { + return 'progress-bar yellow'; + } + return 'progress-bar green'; + }, + getTypeColor: function (type) { + return V2.getTypeColor(type); + } + } +}); +//# sourceMappingURL=pokemon-card.vue.js.map \ No newline at end of file diff --git a/v2/themes/trozei/assets/js/components/pokemon-card.vue.js.map b/v2/themes/trozei/assets/js/components/pokemon-card.vue.js.map new file mode 100644 index 0000000..c74f80e --- /dev/null +++ b/v2/themes/trozei/assets/js/components/pokemon-card.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon-card.vue.js","sourceRoot":"","sources":["pokemon-card.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/trozei/assets/js/components/pokemon-card.vue.ts b/v2/themes/trozei/assets/js/components/pokemon-card.vue.ts new file mode 100644 index 0000000..9dda322 --- /dev/null +++ b/v2/themes/trozei/assets/js/components/pokemon-card.vue.ts @@ -0,0 +1,113 @@ +import {defineComponent, PropType} from 'vue' +import type {Pokemon} from 'v2Proto' +import {clientSettings, V2} from 'pokelink' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+
{{ pokemon.level }}
+
+
+ + {{ this.pokemon.nickname || this.pokemon.translations.locale.speciesName }} +
+
+
+
+
+
+ {{ pokemon.hp.current }} / {{ pokemon.hp.max }} +
+
+
+ {{ type }} +
+ +
+
+
+ +
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: false + } + }, + data() { + return { + hide: { + level: false, + nickname: false, + hp: false, + types: false + } + } + }, + mounted() { + this.hide.level = clientSettings.params.getBool('hideLevel', false) + this.hide.nickname = clientSettings.params.getBool('hideNickname', false) + this.hide.hp = clientSettings.params.getBool('hideHP', false) + this.hide.types = clientSettings.params.getBool('hideTypes', false) + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + } + }, + methods: { + getSprite() { + if (this.pokemon?.isEgg) { + return 'https://assets.pokelink.xyz/v2/sprites/egg.png' + } + return V2.getSprite(this.pokemon!) + }, + useFallback() { + V2.useFallback(this.$refs.pokemonImg as HTMLImageElement, this.pokemon!) + }, + healthBarPercent: function () { + if (!this.isValid) { + return 0 + } + if (this.pokemon!.hp!.max === this.pokemon!.hp!.current) { + return 100 + } + + return (100 / this.pokemon!.hp!.max) * this.pokemon!.hp!.current + }, + healthBarClass: function () { + var percent = this.healthBarPercent() + + if (percent == 0) { + return 'progress-bar grey' + } + if (percent <= 25) { + return 'progress-bar red' + } + if (percent <= 50) { + return 'progress-bar yellow' + } + + return 'progress-bar green' + }, + getTypeColor: function (type: string) { + return V2.getTypeColor(type) + } + } +}) diff --git a/v2/themes/trozei/assets/js/party.js b/v2/themes/trozei/assets/js/party.js new file mode 100644 index 0000000..c7578ab --- /dev/null +++ b/v2/themes/trozei/assets/js/party.js @@ -0,0 +1,75 @@ +import { createApp } from 'vue'; +import { V2, clientSettings, isDefined } from 'pokelink'; +import pokemonCard from './components/pokemon-card.vue.js'; +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + }; + }, + mounted: function () { + const vm = this; + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/trozei/{{ species }}.png'); + V2.initialize(); + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false); + this.settings.hp = clientSettings.params.getBool('hp', false); + V2.onPartyUpdate((party) => { + vm.party = party; + this.loaded = true; + vm.$forceUpdate(); + }); + V2.onConnect(() => { + vm.connected = true; + }); + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot'); + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6]; + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1; + } + return 0; + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]]; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined); + } + return this.party.filter(this.isDefined); + }, + showEmptySlots() { + if (this.singleSlot) { + return false; + } + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false); + } + if (this.party.length !== 6) { + return true; + } + return true; + } + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/trozei/assets/js/party.js.map b/v2/themes/trozei/assets/js/party.js.map new file mode 100644 index 0000000..f7793ef --- /dev/null +++ b/v2/themes/trozei/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/trozei/assets/js/party.ts b/v2/themes/trozei/assets/js/party.ts new file mode 100644 index 0000000..a06393d --- /dev/null +++ b/v2/themes/trozei/assets/js/party.ts @@ -0,0 +1,88 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import type {Nullable} from 'global' +import type {Pokemon} from 'v2Proto' +import pokemonCard from './components/pokemon-card.vue.js' + +(() => { + createApp({ + components: { + 'pokemon-card': pokemonCard + }, + data() { + return { + connected: false, + loaded: false, + settings: {}, + party: [], + switchSpeed: 'switchMedium' + } + }, + mounted: function () { + const vm = this + + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/trozei/{{ species }}.png') + + V2.initialize() + + this.settings.verticalPokemon = clientSettings.params.getBool('verticalPokemon', false) + this.settings.hp = clientSettings.params.getBool('hp', false) + + V2.onPartyUpdate((party: Nullable[]) => { + vm.party = party + this.loaded = true + vm.$forceUpdate() + }) + + V2.onConnect(() => { + vm.connected = true + }) + }, + computed: { + singleSlot() { + return clientSettings.params.hasKey('slot') + }, + slotId() { + let availableSlots = [1, 2, 3, 4, 5, 6] + if (clientSettings.params.hasKey('slot') && availableSlots.includes(clientSettings.params.getNumber('slot', 1))) { + return clientSettings.params.getNumber('slot', 1) - 1 + } + return 0 + }, + pokemonToShow() { + if (this.singleSlot) { + return [this.party[this.slotId]] + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.party.slice(clientSettings.params.getNumber('fromSlot', 1) - 1, + clientSettings.params.getNumber('fromSlot', 1) - + 1 + + clientSettings.params.getNumber('slots')).filter(this.isDefined) + } + + return this.party.filter(this.isDefined) + }, + showEmptySlots() { + if (this.singleSlot) { + return false + } + + if (clientSettings.params.hasKey('fromSlot') && clientSettings.params.hasKey('slots')) { + return this.pokemonToShow.includes(false) + } + + if (this.party.length !== 6) { + return true + } + + return true + } + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + } + }).mount('#party') +})() diff --git a/v2/themes/trozei/index.html b/v2/themes/trozei/index.html new file mode 100644 index 0000000..c50e4b8 --- /dev/null +++ b/v2/themes/trozei/index.html @@ -0,0 +1,64 @@ + + + + + + Trozei + + + + + +
+ +
+ + + + + + + + \ No newline at end of file diff --git a/v2/themes/tsconfig.json b/v2/themes/tsconfig.json new file mode 100644 index 0000000..c91c9a6 --- /dev/null +++ b/v2/themes/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ES2022", + "esModuleInterop": true, + "allowJs": false, + "strict": true, + "moduleResolution": "node", + "skipLibCheck": true, + "declaration": false, + "baseUrl": "./", + "sourceMap": true, + "paths": { + "pokelink": [ + "../assets/dist/pokelink" + ], + "global": [ + "../assets/dist/global" + ], + "v2Proto": [ + "../assets/dist/v2_pb" + ] + } + }, + "include": [ + "./**/*" + ], + "exclude": [ + "../assets" + ] +} diff --git a/v2/themes/twitch-plays-pokemon/assets/css/styles.css b/v2/themes/twitch-plays-pokemon/assets/css/styles.css new file mode 100644 index 0000000..4304b48 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/css/styles.css @@ -0,0 +1,247 @@ +@import '../../../_shared/styles/heartGauge.css'; +@font-face{font-family:PokemonGB;src:local("Pokemon GB"),url("../../../../assets/fonts/Pokemon GB.ttf")} + +.pokes { + +} + +.no-connection { + position: fixed; + width: 100vw; + height: 100vh; + z-index: 999; + display: table-cell; + text-align: center; + font-size: 5rem; + color: #fff; + vertical-align: middle; + text-shadow: 3px 3px 0px black; + top: 0; + font-family: monospace; +} +.pokes.browser-connected { + display: block !important; +} + +.pokemon__list { + width: 600px; + position: relative; +} + +.pokemon__list .pokemon { + display: block; + position: relative; + text-align: center; + height: 202px; + width: 570px; + padding: 5px; + overflow: hidden; + margin: 5px; +} + +.pokemon.isDead { + filter: grayscale(1); +} + +.pokemon .pokemon__hp { + content: " "; + z-index: 1; + position:absolute; + height: 100%; + width: 100%; + left: 0px; + top: 0px; +} + +.pokemon .pokemon__hp { + content: " "; + z-index: 1; + position:absolute; + height: 100%; + width: 100%; + left: 0px; + top: 0px; + background-color: #3c3c3c; +} + +.pokemon .pokemon__hp .hp__inner { + content: " "; + z-index: 5; + height: 100%; + left: 0px; + top: 0px; + background: linear-gradient(to right, lime, #8bf500); + transition: width 2s; +} + +.pokemon .pokemon__hp .hp__inner.low { + background: linear-gradient(to right, #ffcc00, #f1f500); +} +.pokemon .pokemon__hp .hp__inner.critical { + background: linear-gradient(to right, #d20000, #f51700); +} + +.pokemon .pokemon__hp .hp__inner.hp_egg { + background: linear-gradient(to right, #111, #333); +} + +.pokemon .pokemon__level { + position: absolute; + top: 5px; + right: 5px; + font-family: "PokemonGB"; + color: #fff; + z-index: 10; +} + +.pokemon .pokemon__level small { + font-size: 70%; +} + +.pokemon_bg { + border-radius: 0 0 0 45%; + background-color: black; + height: 200%; + width: 100%; + bottom: 20px; + left: 1px; + z-index: 5; + position: absolute; +} + +.pokemon__image { + z-index: 10; + position: absolute; + top: 25px; + left: 25px; + height: calc(100% - 25px); +} + +img.sprite { + height: 90%; +} + +.pokemon__name { + position: absolute; + top: 10px; + color: #fff; + left: 200px; + z-index: 10; + font-family: "PokemonGB"; + font-size: 27px; +} + +.hp__text-label { + bottom: 0; + z-index: 10; + font-size: 16px; + color: #fff; + position: absolute; + left: 228px; + font-family: "PokemonGB"; + transform: skewX(-23deg); + background-color: #b3b3b3; + padding: 3px 10px; + line-height: 19px; + height: 14px; +} + +.hp__text-values { + position: absolute; + bottom: 0px; + width: 100%; + text-align: center; + font-family: "PokemonGB"; + color: #fff; + z-index: 5; + text-indent: 251px; + -webkit-text-stroke: black 1px; + font-size: 17px; +} + +.pokemon__heldItem { + position: absolute; + bottom: 5px; + width: 23px; + height: 23px; + z-index: 5; + left: 5px; +} + +.exp { + right: 10px; + top: 45px; + z-index: 10; + position: absolute; + width: 365px; + height: 6px; + overflow: hidden; + background: #252525; +} + +.exp .exp__inner { + height: 100%; + background-color: cyan; + transition: width 2s; +} + +.heart-gauge { + right: 10px; + top: 45px; + z-index: 10; + position: absolute; + width: 365px; + height: 6px; + overflow: hidden; + background: #252525; +} + +.moves { + right: 10px; + position: absolute; + width: 420px; + top: 50px; + z-index: 10; + display: flex; + flex-wrap: wrap; +} + +.move { + width: 50%; + z-index: 10; + color: #ffff; + display: inline-block; + height: 35px; + margin-top: 16px; +} + +.move__icon, .move__name, .move__pp { + display: inline-block; + font-family: "PokemonGB"; +} + +.move__icon { + width: 30px; + height: 20px; + display: none; +} + +.move__name { + width: -webkit-fill-available; + height:-webkit-fill-available; +} + +.move__name svg { + width: -webkit-fill-available; + height:-webkit-fill-available; + color: #fff; +} + +.move__name text { + font-family: "PokemonGB"; +} + +.move__pp { + width: 43px; + display: none; +} \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.js b/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.js new file mode 100644 index 0000000..c98e806 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.js @@ -0,0 +1,53 @@ +import { defineComponent } from 'vue'; +import { V2, isDefined } from 'pokelink'; +import pokemon from './pokemon.vue.js'; +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false + }; + }, + created: function () { + this.loaded = true; + }, + mounted() { + let vm = this; + V2.onPartyUpdate((party => { + vm.party = party; + vm.$forceUpdate(); + })); + }, + methods: { + isDefined(obj) { + return isDefined(obj); + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined); + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {}; + }); + } + } +}); +//# sourceMappingURL=list.vue.js.map \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.js.map b/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.js.map new file mode 100644 index 0000000..8d4ebf2 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.vue.js","sourceRoot":"","sources":["list.vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAA;AACnC,OAAO,EAAC,EAAE,EAAkB,SAAS,EAAC,MAAM,UAAU,CAAA;AACtD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AAItC,eAAe,eAAe,CAAC;IAC3B,QAAQ,EAAE;;;;;;;;;KAST;IACD,UAAU,EAAE;QACR,SAAS,EAAE,OAAO;KACrB;IACD,IAAI;QACA,OAAO;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAyB;YAChC,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,KAAK;SACjB,CAAA;IACL,CAAC;IACD,OAAO,EAAE;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,OAAO;QACH,IAAI,EAAE,GAAG,IAAI,CAAA;QACb,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;YACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YAChB,EAAE,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,GAAkB;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,UAAU;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE;gBACR,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,CAAC,CAAC,CAAA;QACV,CAAC;KACJ;CACJ,CAAC,CAAA"} \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.ts b/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.ts new file mode 100644 index 0000000..5428204 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/components/list.vue.ts @@ -0,0 +1,55 @@ +import {defineComponent} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import pokemon from './pokemon.vue.js' +import {Nullable} from 'global' +import {Pokemon} from 'v2Proto' + +export default defineComponent({ + template: ` + + `, + components: { + 'pokemon': pokemon + }, + data() { + return { + loaded: false, + party: [] as Nullable[], + players: {}, + party_count: 0, + switchSpeed: 'switchMedium', + flipped: false + } + }, + created: function () { + this.loaded = true + }, + mounted() { + let vm = this + V2.onPartyUpdate((party => { + vm.party = party + vm.$forceUpdate() + })) + }, + methods: { + isDefined(obj: Nullable) { + return isDefined(obj) + } + }, + computed: { + partySlots() { + const filteredParty = this.party.filter(this.isDefined) + return [...new Array(6).keys()] + .map(slot => { + return filteredParty[slot] || {} + }) + } + } +}) \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.js b/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.js new file mode 100644 index 0000000..bae3ee9 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.js @@ -0,0 +1,175 @@ +import { defineComponent } from 'vue'; +import { clientSettings, isDefined, V2, V2DataTypes } from 'pokelink'; +import heartGauge from '../../../../_shared/components/heartGauge.vue.js'; +export default defineComponent({ + template: ` +
+
+ + +
+
+
+ +
+ + +
+ +
+ {{ nickname }} + + ♂ + + + ♀ + +
+ +
+ Lv{{pokemon.level}} +
+ +
+ +
{{pokemon.hp.current}} / {{pokemon.hp.max}}
+
HP:
+
+
+
+ +
+
+
+
+ + {{ move.locale.name }} {{ move.pp }} + +
+
{{move.pp}}
+
+
+ +
+ +
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object, + required: true + }, + key: {} + }, + mounted() { + const vm = this; + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate(); + }); + }, + methods: { + getViewBox(moveName) { + let wordLength = 0; + if (moveName) + wordLength = moveName.length; + let width = wordLength * 35; + if (width < 70) + width = 120; + return `0 0 ${width} 30`; + }, + isValidMoveName(moveName) { + return /[0-9a-zA-Z]+$/.test(moveName); + }, + getSprite() { + return V2.getSprite(this.pokemon); + }, + useFallback() { + V2.useFallback(this.$refs.pokemonImg, this.pokemon); + }, + isDefined(object) { + return isDefined(object); + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon); + }, + isMale() { + if (!this.isValid) { + return false; + } + return this.pokemon.gender === V2DataTypes.Gender.male; + }, + isFemale() { + if (!this.isValid) { + return false; + } + return this.pokemon.gender === V2DataTypes.Gender.female; + }, + healthPercent() { + if (!this.isValid) { + return '0%'; + } + if (this.pokemon.isEgg) { + return '100%'; + } + return (100 / this.pokemon.hp.max) * this.pokemon.hp.current + "%"; + }, + isDead() { + if (!this.isValid) { + return false; + } + return this.pokemon.hp.current === 0; + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations.locale.speciesName; + }, + ident() { + if (!this.isValid) { + return null; + } + return this.pokemon.species; + }, + opacity() { + if (!this.isValid) { + return '0.4'; + } + return '1'; + }, + hasItem() { + if (!this.isValid) { + return false; + } + return this.pokemon.heldItem !== 0; + }, + heldItemImage() { + return clientSettings.itemSpriteTemplate(this.pokemon); + }, + experienceRemaining() { + if (!this.isValid) { + return '0%'; + } + return this.pokemon.expPercentage + '%'; + }, + selectedPokemon: { + get: function () { + return this.nickname; + }, + set: function () { + this.$emit("change", this.nickname); + } + } + } +}); +//# sourceMappingURL=pokemon.vue.js.map \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.js.map b/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.js.map new file mode 100644 index 0000000..5331b3f --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pokemon.vue.js","sourceRoot":"","sources":["pokemon.vue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.ts b/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.ts new file mode 100644 index 0000000..77db7ba --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/components/pokemon.vue.ts @@ -0,0 +1,177 @@ +import {defineComponent, PropType} from 'vue' +import type {Pokemon} from 'v2Proto' +import {clientSettings, isDefined, V2, V2DataTypes} from 'pokelink' +import heartGauge from '../../../../_shared/components/heartGauge.vue.js' + +export default defineComponent({ + template: ` +
+
+ + +
+
+
+ +
+ + +
+ +
+ {{ nickname }} + + ♂ + + + ♀ + +
+ +
+ Lv{{pokemon.level}} +
+ +
+ +
{{pokemon.hp.current}} / {{pokemon.hp.max}}
+
HP:
+
+
+
+ +
+
+
+
+ + {{ move.locale.name }} {{ move.pp }} + +
+
{{move.pp}}
+
+
+ +
+ +
+
+
+ `, + components: { + 'heart-gauge': heartGauge + }, + props: { + pokemon: { + type: Object as PropType, + required: true + }, + key: {} + }, + mounted() { + const vm = this + V2.onSpriteTemplateUpdate(() => { + vm.$forceUpdate() + }) + }, + methods: { + getViewBox(moveName: string) { + let wordLength = 0 + if (moveName) wordLength = moveName.length + + let width = wordLength * 35 + + if (width < 70) width = 120 + return `0 0 ${width} 30` + }, + isValidMoveName (moveName: string) { + return /[0-9a-zA-Z]+$/.test(moveName) + }, + getSprite() { + return V2.getSprite(this.pokemon) + }, + useFallback() { + V2.useFallback(this.$refs.pokemonImg as HTMLImageElement, this.pokemon) + }, + isDefined(object: any) { + return isDefined(object) + } + }, + computed: { + isValid() { + return V2.isValidPokemon(this.pokemon) + }, + isMale() { + if (!this.isValid) { + return false + } + return this.pokemon.gender === V2DataTypes.Gender.male + }, + isFemale() { + if (!this.isValid) { + return false + } + + return this.pokemon.gender === V2DataTypes.Gender.female + }, + healthPercent() { + if (!this.isValid) { + return '0%' + } + + if (this.pokemon.isEgg) { + return '100%' + } + + return (100/this.pokemon.hp!.max) * this.pokemon.hp!.current + "%"; + }, + isDead () { + if (!this.isValid) { + return false + } + + return this.pokemon.hp!.current === 0 + }, + nickname() { + return this.pokemon.nickname || this.pokemon.translations!.locale!.speciesName; + }, + ident() { + if (!this.isValid) { return null; } + return this.pokemon.species; + }, + opacity() { + if (!this.isValid) { return '0.4'; } + return '1'; + }, + hasItem() { + if (!this.isValid) { return false; } + + return this.pokemon.heldItem !== 0; + }, + heldItemImage() { + return clientSettings.itemSpriteTemplate(this.pokemon) + }, + experienceRemaining () { + if (!this.isValid) { + return '0%' + } + + return this.pokemon.expPercentage + '%' + }, + + selectedPokemon: { + get: function() { + return this.nickname + }, + set: function() { + this.$emit( "change", this.nickname ) + } + } + } +}); diff --git a/v2/themes/twitch-plays-pokemon/assets/js/party.js b/v2/themes/twitch-plays-pokemon/assets/js/party.js new file mode 100644 index 0000000..a53f674 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/party.js @@ -0,0 +1,36 @@ +import { createApp } from 'vue'; +import { V2, clientSettings } from 'pokelink'; +import list from './components/list.vue.js'; +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + }; + }, + created: function () { + const vm = this; + this.resetSpriteSet(); + V2.onSpriteSetReset(this.resetSpriteSet); + V2.initialize(); + V2.onConnect(() => { + vm.connected = true; + this.loaded = true; + }); + this.settings = clientSettings; + }, + mounted: function () { + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/heartgold-soulsilver/{{ifElse isShiny "shiny" "normal"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}{{addFemaleTag this "-f"}}.png'); + } + } + }).mount('#party'); +})(); +//# sourceMappingURL=party.js.map \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/party.js.map b/v2/themes/twitch-plays-pokemon/assets/js/party.js.map new file mode 100644 index 0000000..31ceef1 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/party.js.map @@ -0,0 +1 @@ +{"version":3,"file":"party.js","sourceRoot":"","sources":["party.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,EAAE,EAAE,cAAc,EAAY,MAAM,UAAU,CAAA;AACtD,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,CAAC,GAAG,EAAE;IACF,SAAS,CAAC;QACN,UAAU,EAAE;YACR,MAAM,EAAE,IAAI;SACf;QACD,IAAI;YACA,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,EAAE;aACf,CAAA;QACL,CAAC;QACD,OAAO,EAAE;YACL,MAAM,EAAE,GAAG,IAAI,CAAA;YAEf,IAAI,CAAC,cAAc,EAAE,CAAA;YAErB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAExC,EAAE,CAAC,UAAU,EAAE,CAAA;YAEf,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;gBACd,EAAE,CAAC,SAAS,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAA;QAClC,CAAC;QACD,OAAO,EAAE;QACT,CAAC;QACD,OAAO,EAAE;YACL,cAAc;gBACV,EAAE,CAAC,oBAAoB,CAAC,8UAA8U,CAAC,CAAA;YAC3W,CAAC;SACJ;KACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/assets/js/party.ts b/v2/themes/twitch-plays-pokemon/assets/js/party.ts new file mode 100644 index 0000000..252ab8a --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/assets/js/party.ts @@ -0,0 +1,40 @@ +import {createApp} from 'vue' +import {V2, clientSettings, isDefined} from 'pokelink' +import list from './components/list.vue.js' + +(() => { + createApp({ + components: { + 'list': list + }, + data() { + return { + connected: false, + loaded: false, + settings: {} + } + }, + created: function () { + const vm = this + + this.resetSpriteSet() + + V2.onSpriteSetReset(this.resetSpriteSet) + + V2.initialize() + + V2.onConnect(() => { + vm.connected = true + this.loaded = true + }) + this.settings = clientSettings + }, + mounted: function () { + }, + methods: { + resetSpriteSet() { + V2.updateSpriteTemplate('https://assets.pokelink.xyz/v2/sprites/pokemon/heartgold-soulsilver/{{ifElse isShiny "shiny" "normal"}}/{{toLower (noSpaces (nidoranGender translations.english.speciesName "" "-f"))}}{{ifElse (isDefined translations.english.formName) (concat "-" (toLower (noSpaces translations.english.formName))) ""}}{{addFemaleTag this "-f"}}.png') + } + } + }).mount('#party') +})() \ No newline at end of file diff --git a/v2/themes/twitch-plays-pokemon/index.html b/v2/themes/twitch-plays-pokemon/index.html new file mode 100644 index 0000000..a4ca737 --- /dev/null +++ b/v2/themes/twitch-plays-pokemon/index.html @@ -0,0 +1,56 @@ + + + + + + Twitch Plays Pokemon + + + + +
+ +
+

Waiting for successful connection to Pokélink...

+

Attempting to connect on port {{ settings.port }}

+
+
+ + + + + + + + \ No newline at end of file diff --git a/v2/webpack.config.js b/v2/webpack.config.js new file mode 100644 index 0000000..80e035c --- /dev/null +++ b/v2/webpack.config.js @@ -0,0 +1,33 @@ +import path from 'path' +import {fileURLToPath} from 'url' + +import {EsbuildPlugin} from 'esbuild-loader' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +export default { + entry: './assets/js/pokelink.js', + mode: 'production', + devtool: false, + experiments: { + futureDefaults: true, + outputModule: true + }, + output: { + path: path.resolve(__dirname, 'assets/dist'), + filename: 'pokelink.js', + library: { + type: 'module' + }, + libraryTarget: 'module', + module: true, + chunkFormat: 'module' + }, + optimization: { + minimizer: [ + new EsbuildPlugin({ + keepNames: true + }) + ] + } +} \ No newline at end of file