From 934aa4c44398eecea043f13b39d4864862371bb4 Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Tue, 27 Jan 2026 14:16:40 -0600 Subject: [PATCH] Add CardService and card data conversion pipeline - Rename data/cards/ to data/raw/ for scraped data - Add data/definitions/ as authoritative card data source - Add convert_cards.py script to transform raw -> definitions - Generate 378 card definitions (344 Pokemon, 24 Trainers, 10 Energy) - Add CardService for loading and querying card definitions - In-memory indexes for fast lookups by type, set, pokemon_type - search() with multiple filter criteria - get_all_cards() for GameEngine integration - Add SetInfo model for set metadata - Update Attack model with damage_display field for variable damage - Update CardDefinition with image_path, illustrator, flavor_text - Add 45 tests (21 converter + 24 CardService) - Update scraper output path to data/raw/ Card data is JSON-authoritative (no database) to support offline fork goal. --- backend/app/core/models/card.py | 11 +- backend/app/services/__init__.py | 4 + backend/app/services/card_service.py | 379 +++ backend/data/definitions/README.md | 42 + backend/data/definitions/_index.json | 2296 +++++++++++++++++ .../energy/basic/energy-basic-colorless.json | 13 + .../energy/basic/energy-basic-darkness.json | 13 + .../energy/basic/energy-basic-dragon.json | 13 + .../energy/basic/energy-basic-fighting.json | 13 + .../energy/basic/energy-basic-fire.json | 13 + .../energy/basic/energy-basic-grass.json | 13 + .../energy/basic/energy-basic-lightning.json | 13 + .../energy/basic/energy-basic-metal.json | 13 + .../energy/basic/energy-basic-psychic.json | 13 + .../energy/basic/energy-basic-water.json | 13 + .../definitions/pokemon/a1/001-bulbasaur.json | 30 + .../definitions/pokemon/a1/002-ivysaur.json | 32 + .../definitions/pokemon/a1/003-venusaur.json | 34 + .../pokemon/a1/004-venusaur-ex.json | 44 + .../definitions/pokemon/a1/005-caterpie.json | 29 + .../definitions/pokemon/a1/006-metapod.json | 31 + .../pokemon/a1/007-butterfree.json | 39 + .../definitions/pokemon/a1/008-weedle.json | 29 + .../definitions/pokemon/a1/009-kakuna.json | 30 + .../definitions/pokemon/a1/010-beedrill.json | 30 + .../definitions/pokemon/a1/011-oddish.json | 27 + .../definitions/pokemon/a1/012-gloom.json | 31 + .../definitions/pokemon/a1/013-vileplume.json | 33 + .../definitions/pokemon/a1/014-paras.json | 30 + .../definitions/pokemon/a1/015-parasect.json | 32 + .../definitions/pokemon/a1/016-venonat.json | 29 + .../definitions/pokemon/a1/017-venomoth.json | 31 + .../pokemon/a1/018-bellsprout.json | 29 + .../pokemon/a1/019-weepinbell.json | 31 + .../pokemon/a1/020-victreebel.json | 38 + .../definitions/pokemon/a1/021-exeggcute.json | 27 + .../definitions/pokemon/a1/022-exeggutor.json | 32 + .../pokemon/a1/023-exeggutor-ex.json | 34 + .../definitions/pokemon/a1/024-tangela.json | 29 + .../definitions/pokemon/a1/025-scyther.json | 29 + .../definitions/pokemon/a1/026-pinsir.json | 34 + .../definitions/pokemon/a1/027-cottonee.json | 29 + .../pokemon/a1/028-whimsicott.json | 28 + .../definitions/pokemon/a1/029-petilil.json | 28 + .../definitions/pokemon/a1/030-lilligant.json | 30 + .../definitions/pokemon/a1/031-skiddo.json | 30 + .../definitions/pokemon/a1/032-gogoat.json | 32 + .../pokemon/a1/033-charmander.json | 28 + .../pokemon/a1/034-charmeleon.json | 30 + .../definitions/pokemon/a1/035-charizard.json | 34 + .../pokemon/a1/036-charizard-ex.json | 44 + .../definitions/pokemon/a1/037-vulpix.json | 29 + .../definitions/pokemon/a1/038-ninetales.json | 30 + .../definitions/pokemon/a1/039-growlithe.json | 30 + .../definitions/pokemon/a1/040-arcanine.json | 33 + .../pokemon/a1/041-arcanine-ex.json | 33 + .../definitions/pokemon/a1/042-ponyta.json | 27 + .../definitions/pokemon/a1/043-rapidash.json | 28 + .../definitions/pokemon/a1/044-magmar.json | 30 + .../definitions/pokemon/a1/045-flareon.json | 33 + .../definitions/pokemon/a1/046-moltres.json | 32 + .../pokemon/a1/047-moltres-ex.json | 39 + .../definitions/pokemon/a1/048-heatmor.json | 27 + .../definitions/pokemon/a1/049-salandit.json | 27 + .../definitions/pokemon/a1/050-salazzle.json | 31 + .../pokemon/a1/051-sizzlipede.json | 29 + .../pokemon/a1/052-centiskorch.json | 32 + .../definitions/pokemon/a1/053-squirtle.json | 29 + .../definitions/pokemon/a1/054-wartortle.json | 31 + .../definitions/pokemon/a1/055-blastoise.json | 36 + .../pokemon/a1/056-blastoise-ex.json | 45 + .../definitions/pokemon/a1/057-psyduck.json | 30 + .../definitions/pokemon/a1/058-golduck.json | 29 + .../definitions/pokemon/a1/059-poliwag.json | 29 + .../definitions/pokemon/a1/060-poliwhirl.json | 31 + .../definitions/pokemon/a1/061-poliwrath.json | 39 + .../definitions/pokemon/a1/062-tentacool.json | 29 + .../pokemon/a1/063-tentacruel.json | 32 + .../data/definitions/pokemon/a1/064-seel.json | 30 + .../definitions/pokemon/a1/065-dewgong.json | 32 + .../definitions/pokemon/a1/066-shellder.json | 29 + .../definitions/pokemon/a1/067-cloyster.json | 39 + .../definitions/pokemon/a1/068-krabby.json | 30 + .../definitions/pokemon/a1/069-kingler.json | 36 + .../definitions/pokemon/a1/070-horsea.json | 29 + .../definitions/pokemon/a1/071-seadra.json | 32 + .../definitions/pokemon/a1/072-goldeen.json | 29 + .../definitions/pokemon/a1/073-seaking.json | 29 + .../definitions/pokemon/a1/074-staryu.json | 27 + .../definitions/pokemon/a1/075-starmie.json | 30 + .../pokemon/a1/076-starmie-ex.json | 29 + .../definitions/pokemon/a1/077-magikarp.json | 27 + .../definitions/pokemon/a1/078-gyarados.json | 34 + .../definitions/pokemon/a1/079-lapras.json | 33 + .../definitions/pokemon/a1/080-vaporeon.json | 33 + .../definitions/pokemon/a1/081-omanyte.json | 28 + .../definitions/pokemon/a1/082-omastar.json | 33 + .../definitions/pokemon/a1/083-articuno.json | 32 + .../pokemon/a1/084-articuno-ex.json | 41 + .../definitions/pokemon/a1/085-ducklett.json | 30 + .../definitions/pokemon/a1/086-swanna.json | 32 + .../definitions/pokemon/a1/087-froakie.json | 27 + .../definitions/pokemon/a1/088-frogadier.json | 30 + .../definitions/pokemon/a1/089-greninja.json | 38 + .../definitions/pokemon/a1/090-pyukumuku.json | 27 + .../definitions/pokemon/a1/091-bruxish.json | 32 + .../data/definitions/pokemon/a1/092-snom.json | 29 + .../definitions/pokemon/a1/093-frosmoth.json | 32 + .../definitions/pokemon/a1/094-pikachu.json | 27 + .../definitions/pokemon/a1/095-raichu.json | 33 + .../pokemon/a1/096-pikachu-ex.json | 34 + .../definitions/pokemon/a1/097-magnemite.json | 27 + .../definitions/pokemon/a1/098-magneton.json | 40 + .../definitions/pokemon/a1/099-voltorb.json | 29 + .../definitions/pokemon/a1/100-electrode.json | 31 + .../pokemon/a1/101-electabuzz.json | 32 + .../definitions/pokemon/a1/102-jolteon.json | 35 + .../definitions/pokemon/a1/103-zapdos.json | 32 + .../definitions/pokemon/a1/104-zapdos-ex.json | 43 + .../definitions/pokemon/a1/105-blitzle.json | 27 + .../definitions/pokemon/a1/106-zebstrika.json | 30 + .../definitions/pokemon/a1/107-tynamo.json | 29 + .../definitions/pokemon/a1/108-eelektrik.json | 30 + .../pokemon/a1/109-eelektross.json | 33 + .../pokemon/a1/110-helioptile.json | 27 + .../definitions/pokemon/a1/111-heliolisk.json | 33 + .../pokemon/a1/112-pincurchin.json | 29 + .../definitions/pokemon/a1/113-clefairy.json | 29 + .../definitions/pokemon/a1/114-clefable.json | 30 + .../data/definitions/pokemon/a1/115-abra.json | 29 + .../definitions/pokemon/a1/116-kadabra.json | 30 + .../definitions/pokemon/a1/117-alakazam.json | 36 + .../definitions/pokemon/a1/118-slowpoke.json | 28 + .../definitions/pokemon/a1/119-slowbro.json | 30 + .../definitions/pokemon/a1/120-gastly.json | 27 + .../definitions/pokemon/a1/121-haunter.json | 28 + .../definitions/pokemon/a1/122-gengar.json | 31 + .../definitions/pokemon/a1/123-gengar-ex.json | 39 + .../definitions/pokemon/a1/124-drowzee.json | 28 + .../definitions/pokemon/a1/125-hypno.json | 39 + .../definitions/pokemon/a1/126-mr-mime.json | 31 + .../data/definitions/pokemon/a1/127-jynx.json | 34 + .../definitions/pokemon/a1/128-mewtwo.json | 33 + .../definitions/pokemon/a1/129-mewtwo-ex.json | 42 + .../definitions/pokemon/a1/130-ralts.json | 29 + .../definitions/pokemon/a1/131-kirlia.json | 31 + .../definitions/pokemon/a1/132-gardevoir.json | 39 + .../definitions/pokemon/a1/133-woobat.json | 27 + .../definitions/pokemon/a1/134-swoobat.json | 31 + .../definitions/pokemon/a1/135-golett.json | 31 + .../definitions/pokemon/a1/136-golurk.json | 37 + .../definitions/pokemon/a1/137-sandshrew.json | 27 + .../definitions/pokemon/a1/138-sandslash.json | 31 + .../definitions/pokemon/a1/139-diglett.json | 27 + .../definitions/pokemon/a1/140-dugtrio.json | 31 + .../definitions/pokemon/a1/141-mankey.json | 29 + .../definitions/pokemon/a1/142-primeape.json | 33 + .../definitions/pokemon/a1/143-machop.json | 27 + .../definitions/pokemon/a1/144-machoke.json | 29 + .../definitions/pokemon/a1/145-machamp.json | 32 + .../pokemon/a1/146-machamp-ex.json | 30 + .../definitions/pokemon/a1/147-geodude.json | 29 + .../definitions/pokemon/a1/148-graveler.json | 32 + .../definitions/pokemon/a1/149-golem.json | 34 + .../data/definitions/pokemon/a1/150-onix.json | 29 + .../definitions/pokemon/a1/151-cubone.json | 27 + .../definitions/pokemon/a1/152-marowak.json | 28 + .../pokemon/a1/153-marowak-ex.json | 35 + .../definitions/pokemon/a1/154-hitmonlee.json | 29 + .../pokemon/a1/155-hitmonchan.json | 29 + .../definitions/pokemon/a1/156-rhyhorn.json | 31 + .../definitions/pokemon/a1/157-rhydon.json | 31 + .../definitions/pokemon/a1/158-kabuto.json | 28 + .../definitions/pokemon/a1/159-kabutops.json | 31 + .../definitions/pokemon/a1/160-mienfoo.json | 27 + .../definitions/pokemon/a1/161-mienshao.json | 28 + .../definitions/pokemon/a1/162-clobbopus.json | 30 + .../definitions/pokemon/a1/163-grapploct.json | 33 + .../definitions/pokemon/a1/164-ekans.json | 27 + .../definitions/pokemon/a1/165-arbok.json | 30 + .../definitions/pokemon/a1/166-nidoran.json | 29 + .../definitions/pokemon/a1/167-nidorina.json | 28 + .../definitions/pokemon/a1/168-nidoqueen.json | 36 + .../definitions/pokemon/a1/169-nidoran.json | 27 + .../definitions/pokemon/a1/170-nidorino.json | 29 + .../definitions/pokemon/a1/171-nidoking.json | 33 + .../definitions/pokemon/a1/172-zubat.json | 29 + .../definitions/pokemon/a1/173-golbat.json | 30 + .../definitions/pokemon/a1/174-grimer.json | 30 + .../data/definitions/pokemon/a1/175-muk.json | 36 + .../definitions/pokemon/a1/176-koffing.json | 29 + .../definitions/pokemon/a1/177-weezing.json | 37 + .../definitions/pokemon/a1/178-mawile.json | 30 + .../definitions/pokemon/a1/179-pawniard.json | 27 + .../definitions/pokemon/a1/180-bisharp.json | 29 + .../definitions/pokemon/a1/181-meltan.json | 29 + .../definitions/pokemon/a1/182-melmetal.json | 40 + .../definitions/pokemon/a1/183-dratini.json | 26 + .../definitions/pokemon/a1/184-dragonair.json | 28 + .../definitions/pokemon/a1/185-dragonite.json | 29 + .../definitions/pokemon/a1/186-pidgey.json | 27 + .../definitions/pokemon/a1/187-pidgeotto.json | 28 + .../definitions/pokemon/a1/188-pidgeot.json | 36 + .../definitions/pokemon/a1/189-rattata.json | 29 + .../definitions/pokemon/a1/190-raticate.json | 30 + .../definitions/pokemon/a1/191-spearow.json | 29 + .../definitions/pokemon/a1/192-fearow.json | 30 + .../pokemon/a1/193-jigglypuff.json | 28 + .../pokemon/a1/194-wigglytuff.json | 29 + .../pokemon/a1/195-wigglytuff-ex.json | 33 + .../definitions/pokemon/a1/196-meowth.json | 28 + .../definitions/pokemon/a1/197-persian.json | 32 + .../definitions/pokemon/a1/198-farfetchd.json | 29 + .../definitions/pokemon/a1/199-doduo.json | 29 + .../definitions/pokemon/a1/200-dodrio.json | 30 + .../definitions/pokemon/a1/201-lickitung.json | 35 + .../definitions/pokemon/a1/202-chansey.json | 31 + .../pokemon/a1/203-kangaskhan.json | 33 + .../definitions/pokemon/a1/204-tauros.json | 28 + .../definitions/pokemon/a1/205-ditto.json | 29 + .../definitions/pokemon/a1/206-eevee.json | 27 + .../definitions/pokemon/a1/207-eevee.json | 27 + .../definitions/pokemon/a1/208-eevee.json | 27 + .../definitions/pokemon/a1/209-porygon.json | 34 + .../pokemon/a1/210-aerodactyl.json | 31 + .../definitions/pokemon/a1/211-snorlax.json | 32 + .../definitions/pokemon/a1/212-minccino.json | 27 + .../definitions/pokemon/a1/213-cinccino.json | 34 + .../definitions/pokemon/a1/214-wooloo.json | 28 + .../definitions/pokemon/a1/215-dubwool.json | 32 + .../definitions/pokemon/a1/227-bulbasaur.json | 30 + .../definitions/pokemon/a1/228-gloom.json | 31 + .../definitions/pokemon/a1/229-pinsir.json | 34 + .../pokemon/a1/230-charmander.json | 28 + .../definitions/pokemon/a1/231-rapidash.json | 30 + .../definitions/pokemon/a1/232-squirtle.json | 29 + .../definitions/pokemon/a1/233-gyarados.json | 34 + .../definitions/pokemon/a1/234-lapras.json | 33 + .../definitions/pokemon/a1/235-electrode.json | 31 + .../definitions/pokemon/a1/236-alakazam.json | 36 + .../definitions/pokemon/a1/237-slowpoke.json | 28 + .../definitions/pokemon/a1/238-diglett.json | 29 + .../definitions/pokemon/a1/239-cubone.json | 29 + .../definitions/pokemon/a1/240-nidoqueen.json | 36 + .../definitions/pokemon/a1/241-nidoking.json | 31 + .../definitions/pokemon/a1/242-golbat.json | 30 + .../definitions/pokemon/a1/243-weezing.json | 37 + .../definitions/pokemon/a1/244-dragonite.json | 29 + .../definitions/pokemon/a1/245-pidgeot.json | 36 + .../definitions/pokemon/a1/246-meowth.json | 30 + .../definitions/pokemon/a1/247-ditto.json | 29 + .../definitions/pokemon/a1/248-eevee.json | 29 + .../definitions/pokemon/a1/249-porygon.json | 36 + .../definitions/pokemon/a1/250-snorlax.json | 32 + .../pokemon/a1/251-venusaur-ex.json | 44 + .../pokemon/a1/252-exeggutor-ex.json | 34 + .../pokemon/a1/253-charizard-ex.json | 44 + .../pokemon/a1/254-arcanine-ex.json | 33 + .../pokemon/a1/255-moltres-ex.json | 39 + .../pokemon/a1/256-blastoise-ex.json | 45 + .../pokemon/a1/257-starmie-ex.json | 31 + .../pokemon/a1/258-articuno-ex.json | 41 + .../pokemon/a1/259-pikachu-ex.json | 34 + .../definitions/pokemon/a1/260-zapdos-ex.json | 43 + .../definitions/pokemon/a1/261-gengar-ex.json | 39 + .../definitions/pokemon/a1/262-mewtwo-ex.json | 42 + .../pokemon/a1/263-machamp-ex.json | 32 + .../pokemon/a1/264-marowak-ex.json | 35 + .../pokemon/a1/265-wigglytuff-ex.json | 33 + .../pokemon/a1/274-moltres-ex.json | 39 + .../pokemon/a1/275-articuno-ex.json | 41 + .../definitions/pokemon/a1/276-zapdos-ex.json | 43 + .../definitions/pokemon/a1/277-gengar-ex.json | 39 + .../pokemon/a1/278-machamp-ex.json | 32 + .../pokemon/a1/279-wigglytuff-ex.json | 33 + .../pokemon/a1/280-charizard-ex.json | 44 + .../pokemon/a1/281-pikachu-ex.json | 34 + .../definitions/pokemon/a1/282-mewtwo-ex.json | 42 + .../data/definitions/pokemon/a1/283-mew.json | 30 + .../pokemon/a1/284-charizard-ex.json | 44 + .../pokemon/a1/285-pikachu-ex.json | 32 + .../definitions/pokemon/a1/286-mewtwo-ex.json | 42 + .../pokemon/a1a/001-exeggcute.json | 27 + .../pokemon/a1a/002-exeggutor.json | 37 + .../pokemon/a1a/003-celebi-ex.json | 34 + .../definitions/pokemon/a1a/004-snivy.json | 30 + .../definitions/pokemon/a1a/005-servine.json | 31 + .../pokemon/a1a/006-serperior.json | 40 + .../definitions/pokemon/a1a/007-morelull.json | 29 + .../pokemon/a1a/008-shiinotic.json | 32 + .../definitions/pokemon/a1a/009-dhelmise.json | 33 + .../definitions/pokemon/a1a/010-ponyta.json | 33 + .../definitions/pokemon/a1a/011-rapidash.json | 35 + .../definitions/pokemon/a1a/012-magmar.json | 31 + .../definitions/pokemon/a1a/013-larvesta.json | 30 + .../pokemon/a1a/014-volcarona.json | 32 + .../definitions/pokemon/a1a/015-salandit.json | 33 + .../definitions/pokemon/a1a/016-salazzle.json | 31 + .../definitions/pokemon/a1a/017-magikarp.json | 27 + .../pokemon/a1a/018-gyarados-ex.json | 34 + .../definitions/pokemon/a1a/019-vaporeon.json | 37 + .../definitions/pokemon/a1a/020-finneon.json | 27 + .../definitions/pokemon/a1a/021-lumineon.json | 31 + .../definitions/pokemon/a1a/022-chewtle.json | 30 + .../definitions/pokemon/a1a/023-drednaw.json | 33 + .../pokemon/a1a/024-cramorant.json | 32 + .../definitions/pokemon/a1a/025-pikachu.json | 31 + .../definitions/pokemon/a1a/026-raichu.json | 33 + .../pokemon/a1a/027-electabuzz.json | 30 + .../definitions/pokemon/a1a/028-joltik.json | 29 + .../pokemon/a1a/029-galvantula.json | 30 + .../definitions/pokemon/a1a/030-dedenne.json | 30 + .../data/definitions/pokemon/a1a/031-mew.json | 30 + .../definitions/pokemon/a1a/032-mew-ex.json | 39 + .../definitions/pokemon/a1a/033-sigilyph.json | 28 + .../definitions/pokemon/a1a/034-elgyem.json | 29 + .../definitions/pokemon/a1a/035-beheeyem.json | 32 + .../definitions/pokemon/a1a/036-flabebe.json | 27 + .../definitions/pokemon/a1a/037-floette.json | 31 + .../definitions/pokemon/a1a/038-florges.json | 32 + .../definitions/pokemon/a1a/039-swirlix.json | 29 + .../definitions/pokemon/a1a/040-slurpuff.json | 29 + .../definitions/pokemon/a1a/041-mankey.json | 28 + .../definitions/pokemon/a1a/042-primeape.json | 28 + .../definitions/pokemon/a1a/043-geodude.json | 30 + .../definitions/pokemon/a1a/044-graveler.json | 31 + .../definitions/pokemon/a1a/045-golem.json | 34 + .../pokemon/a1a/046-aerodactyl-ex.json | 38 + .../pokemon/a1a/047-marshadow.json | 34 + .../pokemon/a1a/048-stonjourner.json | 29 + .../definitions/pokemon/a1a/049-koffing.json | 29 + .../definitions/pokemon/a1a/050-weezing.json | 30 + .../definitions/pokemon/a1a/051-purrloin.json | 27 + .../definitions/pokemon/a1a/052-liepard.json | 28 + .../definitions/pokemon/a1a/053-venipede.json | 29 + .../pokemon/a1a/054-whirlipede.json | 29 + .../pokemon/a1a/055-scolipede.json | 35 + .../pokemon/a1a/056-druddigon.json | 34 + .../definitions/pokemon/a1a/057-pidgey.json | 27 + .../pokemon/a1a/058-pidgeotto.json | 30 + .../pokemon/a1a/059-pidgeot-ex.json | 36 + .../definitions/pokemon/a1a/060-tauros.json | 35 + .../definitions/pokemon/a1a/061-eevee.json | 33 + .../definitions/pokemon/a1a/062-chatot.json | 29 + .../pokemon/a1a/069-exeggutor.json | 37 + .../pokemon/a1a/070-serperior.json | 40 + .../definitions/pokemon/a1a/071-salandit.json | 33 + .../definitions/pokemon/a1a/072-vaporeon.json | 39 + .../definitions/pokemon/a1a/073-dedenne.json | 30 + .../pokemon/a1a/074-marshadow.json | 34 + .../pokemon/a1a/075-celebi-ex.json | 34 + .../pokemon/a1a/076-gyarados-ex.json | 34 + .../definitions/pokemon/a1a/077-mew-ex.json | 39 + .../pokemon/a1a/078-aerodactyl-ex.json | 38 + .../pokemon/a1a/079-pidgeot-ex.json | 36 + .../definitions/pokemon/a1a/083-mew-ex.json | 39 + .../pokemon/a1a/084-aerodactyl-ex.json | 38 + .../pokemon/a1a/085-celebi-ex.json | 34 + .../definitions/pokemon/a1a/086-mew-ex.json | 39 + .../definitions/trainer/a1/219-erika.json | 10 + .../definitions/trainer/a1/220-misty.json | 10 + .../definitions/trainer/a1/221-blaine.json | 10 + .../data/definitions/trainer/a1/222-koga.json | 10 + .../definitions/trainer/a1/223-giovanni.json | 10 + .../definitions/trainer/a1/224-brock.json | 10 + .../definitions/trainer/a1/225-sabrina.json | 10 + .../definitions/trainer/a1/226-lt-surge.json | 10 + .../definitions/trainer/a1/266-erika.json | 10 + .../definitions/trainer/a1/267-misty.json | 10 + .../definitions/trainer/a1/268-blaine.json | 10 + .../data/definitions/trainer/a1/269-koga.json | 10 + .../definitions/trainer/a1/270-giovanni.json | 10 + .../definitions/trainer/a1/271-brock.json | 10 + .../definitions/trainer/a1/272-sabrina.json | 10 + .../definitions/trainer/a1/273-lt-surge.json | 10 + .../trainer/a1a/064-pokemon-flute.json | 10 + .../trainer/a1a/065-mythical-slab.json | 12 + .../trainer/a1a/066-budding-expeditioner.json | 10 + .../definitions/trainer/a1a/067-blue.json | 12 + .../definitions/trainer/a1a/068-leaf.json | 12 + .../trainer/a1a/080-budding-expeditioner.json | 12 + .../definitions/trainer/a1a/081-blue.json | 12 + .../definitions/trainer/a1a/082-leaf.json | 12 + backend/data/{cards => raw}/.gitkeep | 0 backend/data/raw/README.md | 24 + backend/data/{cards => raw}/_index.json | 0 .../data/{cards => raw}/a1/001-bulbasaur.json | 0 .../data/{cards => raw}/a1/002-ivysaur.json | 0 .../data/{cards => raw}/a1/003-venusaur.json | 0 .../{cards => raw}/a1/004-venusaur-ex.json | 0 .../data/{cards => raw}/a1/005-caterpie.json | 0 .../data/{cards => raw}/a1/006-metapod.json | 0 .../{cards => raw}/a1/007-butterfree.json | 0 .../data/{cards => raw}/a1/008-weedle.json | 0 .../data/{cards => raw}/a1/009-kakuna.json | 0 .../data/{cards => raw}/a1/010-beedrill.json | 0 .../data/{cards => raw}/a1/011-oddish.json | 0 backend/data/{cards => raw}/a1/012-gloom.json | 0 .../data/{cards => raw}/a1/013-vileplume.json | 0 backend/data/{cards => raw}/a1/014-paras.json | 0 .../data/{cards => raw}/a1/015-parasect.json | 0 .../data/{cards => raw}/a1/016-venonat.json | 0 .../data/{cards => raw}/a1/017-venomoth.json | 0 .../{cards => raw}/a1/018-bellsprout.json | 0 .../{cards => raw}/a1/019-weepinbell.json | 0 .../{cards => raw}/a1/020-victreebel.json | 0 .../data/{cards => raw}/a1/021-exeggcute.json | 0 .../data/{cards => raw}/a1/022-exeggutor.json | 0 .../{cards => raw}/a1/023-exeggutor-ex.json | 0 .../data/{cards => raw}/a1/024-tangela.json | 0 .../data/{cards => raw}/a1/025-scyther.json | 0 .../data/{cards => raw}/a1/026-pinsir.json | 0 .../data/{cards => raw}/a1/027-cottonee.json | 0 .../{cards => raw}/a1/028-whimsicott.json | 0 .../data/{cards => raw}/a1/029-petilil.json | 0 .../data/{cards => raw}/a1/030-lilligant.json | 0 .../data/{cards => raw}/a1/031-skiddo.json | 0 .../data/{cards => raw}/a1/032-gogoat.json | 0 .../{cards => raw}/a1/033-charmander.json | 0 .../{cards => raw}/a1/034-charmeleon.json | 0 .../data/{cards => raw}/a1/035-charizard.json | 0 .../{cards => raw}/a1/036-charizard-ex.json | 0 .../data/{cards => raw}/a1/037-vulpix.json | 0 .../data/{cards => raw}/a1/038-ninetales.json | 0 .../data/{cards => raw}/a1/039-growlithe.json | 0 .../data/{cards => raw}/a1/040-arcanine.json | 0 .../{cards => raw}/a1/041-arcanine-ex.json | 0 .../data/{cards => raw}/a1/042-ponyta.json | 0 .../data/{cards => raw}/a1/043-rapidash.json | 0 .../data/{cards => raw}/a1/044-magmar.json | 0 .../data/{cards => raw}/a1/045-flareon.json | 0 .../data/{cards => raw}/a1/046-moltres.json | 0 .../{cards => raw}/a1/047-moltres-ex.json | 0 .../data/{cards => raw}/a1/048-heatmor.json | 0 .../data/{cards => raw}/a1/049-salandit.json | 0 .../data/{cards => raw}/a1/050-salazzle.json | 0 .../{cards => raw}/a1/051-sizzlipede.json | 0 .../{cards => raw}/a1/052-centiskorch.json | 0 .../data/{cards => raw}/a1/053-squirtle.json | 0 .../data/{cards => raw}/a1/054-wartortle.json | 0 .../data/{cards => raw}/a1/055-blastoise.json | 0 .../{cards => raw}/a1/056-blastoise-ex.json | 0 .../data/{cards => raw}/a1/057-psyduck.json | 0 .../data/{cards => raw}/a1/058-golduck.json | 0 .../data/{cards => raw}/a1/059-poliwag.json | 0 .../data/{cards => raw}/a1/060-poliwhirl.json | 0 .../data/{cards => raw}/a1/061-poliwrath.json | 0 .../data/{cards => raw}/a1/062-tentacool.json | 0 .../{cards => raw}/a1/063-tentacruel.json | 0 backend/data/{cards => raw}/a1/064-seel.json | 0 .../data/{cards => raw}/a1/065-dewgong.json | 0 .../data/{cards => raw}/a1/066-shellder.json | 0 .../data/{cards => raw}/a1/067-cloyster.json | 0 .../data/{cards => raw}/a1/068-krabby.json | 0 .../data/{cards => raw}/a1/069-kingler.json | 0 .../data/{cards => raw}/a1/070-horsea.json | 0 .../data/{cards => raw}/a1/071-seadra.json | 0 .../data/{cards => raw}/a1/072-goldeen.json | 0 .../data/{cards => raw}/a1/073-seaking.json | 0 .../data/{cards => raw}/a1/074-staryu.json | 0 .../data/{cards => raw}/a1/075-starmie.json | 0 .../{cards => raw}/a1/076-starmie-ex.json | 0 .../data/{cards => raw}/a1/077-magikarp.json | 0 .../data/{cards => raw}/a1/078-gyarados.json | 0 .../data/{cards => raw}/a1/079-lapras.json | 0 .../data/{cards => raw}/a1/080-vaporeon.json | 0 .../data/{cards => raw}/a1/081-omanyte.json | 0 .../data/{cards => raw}/a1/082-omastar.json | 0 .../data/{cards => raw}/a1/083-articuno.json | 0 .../{cards => raw}/a1/084-articuno-ex.json | 0 .../data/{cards => raw}/a1/085-ducklett.json | 0 .../data/{cards => raw}/a1/086-swanna.json | 0 .../data/{cards => raw}/a1/087-froakie.json | 0 .../data/{cards => raw}/a1/088-frogadier.json | 0 .../data/{cards => raw}/a1/089-greninja.json | 0 .../data/{cards => raw}/a1/090-pyukumuku.json | 0 .../data/{cards => raw}/a1/091-bruxish.json | 0 backend/data/{cards => raw}/a1/092-snom.json | 0 .../data/{cards => raw}/a1/093-frosmoth.json | 0 .../data/{cards => raw}/a1/094-pikachu.json | 0 .../data/{cards => raw}/a1/095-raichu.json | 0 .../{cards => raw}/a1/096-pikachu-ex.json | 0 .../data/{cards => raw}/a1/097-magnemite.json | 0 .../data/{cards => raw}/a1/098-magneton.json | 0 .../data/{cards => raw}/a1/099-voltorb.json | 0 .../data/{cards => raw}/a1/100-electrode.json | 0 .../{cards => raw}/a1/101-electabuzz.json | 0 .../data/{cards => raw}/a1/102-jolteon.json | 0 .../data/{cards => raw}/a1/103-zapdos.json | 0 .../data/{cards => raw}/a1/104-zapdos-ex.json | 0 .../data/{cards => raw}/a1/105-blitzle.json | 0 .../data/{cards => raw}/a1/106-zebstrika.json | 0 .../data/{cards => raw}/a1/107-tynamo.json | 0 .../data/{cards => raw}/a1/108-eelektrik.json | 0 .../{cards => raw}/a1/109-eelektross.json | 0 .../{cards => raw}/a1/110-helioptile.json | 0 .../data/{cards => raw}/a1/111-heliolisk.json | 0 .../{cards => raw}/a1/112-pincurchin.json | 0 .../data/{cards => raw}/a1/113-clefairy.json | 0 .../data/{cards => raw}/a1/114-clefable.json | 0 backend/data/{cards => raw}/a1/115-abra.json | 0 .../data/{cards => raw}/a1/116-kadabra.json | 0 .../data/{cards => raw}/a1/117-alakazam.json | 0 .../data/{cards => raw}/a1/118-slowpoke.json | 0 .../data/{cards => raw}/a1/119-slowbro.json | 0 .../data/{cards => raw}/a1/120-gastly.json | 0 .../data/{cards => raw}/a1/121-haunter.json | 0 .../data/{cards => raw}/a1/122-gengar.json | 0 .../data/{cards => raw}/a1/123-gengar-ex.json | 0 .../data/{cards => raw}/a1/124-drowzee.json | 0 backend/data/{cards => raw}/a1/125-hypno.json | 0 .../data/{cards => raw}/a1/126-mr-mime.json | 0 backend/data/{cards => raw}/a1/127-jynx.json | 0 .../data/{cards => raw}/a1/128-mewtwo.json | 0 .../data/{cards => raw}/a1/129-mewtwo-ex.json | 0 backend/data/{cards => raw}/a1/130-ralts.json | 0 .../data/{cards => raw}/a1/131-kirlia.json | 0 .../data/{cards => raw}/a1/132-gardevoir.json | 0 .../data/{cards => raw}/a1/133-woobat.json | 0 .../data/{cards => raw}/a1/134-swoobat.json | 0 .../data/{cards => raw}/a1/135-golett.json | 0 .../data/{cards => raw}/a1/136-golurk.json | 0 .../data/{cards => raw}/a1/137-sandshrew.json | 0 .../data/{cards => raw}/a1/138-sandslash.json | 0 .../data/{cards => raw}/a1/139-diglett.json | 0 .../data/{cards => raw}/a1/140-dugtrio.json | 0 .../data/{cards => raw}/a1/141-mankey.json | 0 .../data/{cards => raw}/a1/142-primeape.json | 0 .../data/{cards => raw}/a1/143-machop.json | 0 .../data/{cards => raw}/a1/144-machoke.json | 0 .../data/{cards => raw}/a1/145-machamp.json | 0 .../{cards => raw}/a1/146-machamp-ex.json | 0 .../data/{cards => raw}/a1/147-geodude.json | 0 .../data/{cards => raw}/a1/148-graveler.json | 0 backend/data/{cards => raw}/a1/149-golem.json | 0 backend/data/{cards => raw}/a1/150-onix.json | 0 .../data/{cards => raw}/a1/151-cubone.json | 0 .../data/{cards => raw}/a1/152-marowak.json | 0 .../{cards => raw}/a1/153-marowak-ex.json | 0 .../data/{cards => raw}/a1/154-hitmonlee.json | 0 .../{cards => raw}/a1/155-hitmonchan.json | 0 .../data/{cards => raw}/a1/156-rhyhorn.json | 0 .../data/{cards => raw}/a1/157-rhydon.json | 0 .../data/{cards => raw}/a1/158-kabuto.json | 0 .../data/{cards => raw}/a1/159-kabutops.json | 0 .../data/{cards => raw}/a1/160-mienfoo.json | 0 .../data/{cards => raw}/a1/161-mienshao.json | 0 .../data/{cards => raw}/a1/162-clobbopus.json | 0 .../data/{cards => raw}/a1/163-grapploct.json | 0 backend/data/{cards => raw}/a1/164-ekans.json | 0 backend/data/{cards => raw}/a1/165-arbok.json | 0 .../data/{cards => raw}/a1/166-nidoran.json | 0 .../data/{cards => raw}/a1/167-nidorina.json | 0 .../data/{cards => raw}/a1/168-nidoqueen.json | 0 .../data/{cards => raw}/a1/169-nidoran.json | 0 .../data/{cards => raw}/a1/170-nidorino.json | 0 .../data/{cards => raw}/a1/171-nidoking.json | 0 backend/data/{cards => raw}/a1/172-zubat.json | 0 .../data/{cards => raw}/a1/173-golbat.json | 0 .../data/{cards => raw}/a1/174-grimer.json | 0 backend/data/{cards => raw}/a1/175-muk.json | 0 .../data/{cards => raw}/a1/176-koffing.json | 0 .../data/{cards => raw}/a1/177-weezing.json | 0 .../data/{cards => raw}/a1/178-mawile.json | 0 .../data/{cards => raw}/a1/179-pawniard.json | 0 .../data/{cards => raw}/a1/180-bisharp.json | 0 .../data/{cards => raw}/a1/181-meltan.json | 0 .../data/{cards => raw}/a1/182-melmetal.json | 0 .../data/{cards => raw}/a1/183-dratini.json | 0 .../data/{cards => raw}/a1/184-dragonair.json | 0 .../data/{cards => raw}/a1/185-dragonite.json | 0 .../data/{cards => raw}/a1/186-pidgey.json | 0 .../data/{cards => raw}/a1/187-pidgeotto.json | 0 .../data/{cards => raw}/a1/188-pidgeot.json | 0 .../data/{cards => raw}/a1/189-rattata.json | 0 .../data/{cards => raw}/a1/190-raticate.json | 0 .../data/{cards => raw}/a1/191-spearow.json | 0 .../data/{cards => raw}/a1/192-fearow.json | 0 .../{cards => raw}/a1/193-jigglypuff.json | 0 .../{cards => raw}/a1/194-wigglytuff.json | 0 .../{cards => raw}/a1/195-wigglytuff-ex.json | 0 .../data/{cards => raw}/a1/196-meowth.json | 0 .../data/{cards => raw}/a1/197-persian.json | 0 .../data/{cards => raw}/a1/198-farfetchd.json | 0 backend/data/{cards => raw}/a1/199-doduo.json | 0 .../data/{cards => raw}/a1/200-dodrio.json | 0 .../data/{cards => raw}/a1/201-lickitung.json | 0 .../data/{cards => raw}/a1/202-chansey.json | 0 .../{cards => raw}/a1/203-kangaskhan.json | 0 .../data/{cards => raw}/a1/204-tauros.json | 0 backend/data/{cards => raw}/a1/205-ditto.json | 0 backend/data/{cards => raw}/a1/206-eevee.json | 0 backend/data/{cards => raw}/a1/207-eevee.json | 0 backend/data/{cards => raw}/a1/208-eevee.json | 0 .../data/{cards => raw}/a1/209-porygon.json | 0 .../{cards => raw}/a1/210-aerodactyl.json | 0 .../data/{cards => raw}/a1/211-snorlax.json | 0 .../data/{cards => raw}/a1/212-minccino.json | 0 .../data/{cards => raw}/a1/213-cinccino.json | 0 .../data/{cards => raw}/a1/214-wooloo.json | 0 .../data/{cards => raw}/a1/215-dubwool.json | 0 .../{cards => raw}/a1/216-helix-fossil.json | 0 .../{cards => raw}/a1/217-dome-fossil.json | 0 .../data/{cards => raw}/a1/218-old-amber.json | 0 backend/data/{cards => raw}/a1/219-erika.json | 0 backend/data/{cards => raw}/a1/220-misty.json | 0 .../data/{cards => raw}/a1/221-blaine.json | 0 backend/data/{cards => raw}/a1/222-koga.json | 0 .../data/{cards => raw}/a1/223-giovanni.json | 0 backend/data/{cards => raw}/a1/224-brock.json | 0 .../data/{cards => raw}/a1/225-sabrina.json | 0 .../data/{cards => raw}/a1/226-lt-surge.json | 0 .../data/{cards => raw}/a1/227-bulbasaur.json | 0 backend/data/{cards => raw}/a1/228-gloom.json | 0 .../data/{cards => raw}/a1/229-pinsir.json | 0 .../{cards => raw}/a1/230-charmander.json | 0 .../data/{cards => raw}/a1/231-rapidash.json | 0 .../data/{cards => raw}/a1/232-squirtle.json | 0 .../data/{cards => raw}/a1/233-gyarados.json | 0 .../data/{cards => raw}/a1/234-lapras.json | 0 .../data/{cards => raw}/a1/235-electrode.json | 0 .../data/{cards => raw}/a1/236-alakazam.json | 0 .../data/{cards => raw}/a1/237-slowpoke.json | 0 .../data/{cards => raw}/a1/238-diglett.json | 0 .../data/{cards => raw}/a1/239-cubone.json | 0 .../data/{cards => raw}/a1/240-nidoqueen.json | 0 .../data/{cards => raw}/a1/241-nidoking.json | 0 .../data/{cards => raw}/a1/242-golbat.json | 0 .../data/{cards => raw}/a1/243-weezing.json | 0 .../data/{cards => raw}/a1/244-dragonite.json | 0 .../data/{cards => raw}/a1/245-pidgeot.json | 0 .../data/{cards => raw}/a1/246-meowth.json | 0 backend/data/{cards => raw}/a1/247-ditto.json | 0 backend/data/{cards => raw}/a1/248-eevee.json | 0 .../data/{cards => raw}/a1/249-porygon.json | 0 .../data/{cards => raw}/a1/250-snorlax.json | 0 .../{cards => raw}/a1/251-venusaur-ex.json | 0 .../{cards => raw}/a1/252-exeggutor-ex.json | 0 .../{cards => raw}/a1/253-charizard-ex.json | 0 .../{cards => raw}/a1/254-arcanine-ex.json | 0 .../{cards => raw}/a1/255-moltres-ex.json | 0 .../{cards => raw}/a1/256-blastoise-ex.json | 0 .../{cards => raw}/a1/257-starmie-ex.json | 0 .../{cards => raw}/a1/258-articuno-ex.json | 0 .../{cards => raw}/a1/259-pikachu-ex.json | 0 .../data/{cards => raw}/a1/260-zapdos-ex.json | 0 .../data/{cards => raw}/a1/261-gengar-ex.json | 0 .../data/{cards => raw}/a1/262-mewtwo-ex.json | 0 .../{cards => raw}/a1/263-machamp-ex.json | 0 .../{cards => raw}/a1/264-marowak-ex.json | 0 .../{cards => raw}/a1/265-wigglytuff-ex.json | 0 backend/data/{cards => raw}/a1/266-erika.json | 0 backend/data/{cards => raw}/a1/267-misty.json | 0 .../data/{cards => raw}/a1/268-blaine.json | 0 backend/data/{cards => raw}/a1/269-koga.json | 0 .../data/{cards => raw}/a1/270-giovanni.json | 0 backend/data/{cards => raw}/a1/271-brock.json | 0 .../data/{cards => raw}/a1/272-sabrina.json | 0 .../data/{cards => raw}/a1/273-lt-surge.json | 0 .../{cards => raw}/a1/274-moltres-ex.json | 0 .../{cards => raw}/a1/275-articuno-ex.json | 0 .../data/{cards => raw}/a1/276-zapdos-ex.json | 0 .../data/{cards => raw}/a1/277-gengar-ex.json | 0 .../{cards => raw}/a1/278-machamp-ex.json | 0 .../{cards => raw}/a1/279-wigglytuff-ex.json | 0 .../{cards => raw}/a1/280-charizard-ex.json | 0 .../{cards => raw}/a1/281-pikachu-ex.json | 0 .../data/{cards => raw}/a1/282-mewtwo-ex.json | 0 backend/data/{cards => raw}/a1/283-mew.json | 0 .../{cards => raw}/a1/284-charizard-ex.json | 0 .../{cards => raw}/a1/285-pikachu-ex.json | 0 .../data/{cards => raw}/a1/286-mewtwo-ex.json | 0 .../{cards => raw}/a1a/001-exeggcute.json | 0 .../{cards => raw}/a1a/002-exeggutor.json | 0 .../{cards => raw}/a1a/003-celebi-ex.json | 0 .../data/{cards => raw}/a1a/004-snivy.json | 0 .../data/{cards => raw}/a1a/005-servine.json | 0 .../{cards => raw}/a1a/006-serperior.json | 0 .../data/{cards => raw}/a1a/007-morelull.json | 0 .../{cards => raw}/a1a/008-shiinotic.json | 0 .../data/{cards => raw}/a1a/009-dhelmise.json | 0 .../data/{cards => raw}/a1a/010-ponyta.json | 0 .../data/{cards => raw}/a1a/011-rapidash.json | 0 .../data/{cards => raw}/a1a/012-magmar.json | 0 .../data/{cards => raw}/a1a/013-larvesta.json | 0 .../{cards => raw}/a1a/014-volcarona.json | 0 .../data/{cards => raw}/a1a/015-salandit.json | 0 .../data/{cards => raw}/a1a/016-salazzle.json | 0 .../data/{cards => raw}/a1a/017-magikarp.json | 0 .../{cards => raw}/a1a/018-gyarados-ex.json | 0 .../data/{cards => raw}/a1a/019-vaporeon.json | 0 .../data/{cards => raw}/a1a/020-finneon.json | 0 .../data/{cards => raw}/a1a/021-lumineon.json | 0 .../data/{cards => raw}/a1a/022-chewtle.json | 0 .../data/{cards => raw}/a1a/023-drednaw.json | 0 .../{cards => raw}/a1a/024-cramorant.json | 0 .../data/{cards => raw}/a1a/025-pikachu.json | 0 .../data/{cards => raw}/a1a/026-raichu.json | 0 .../{cards => raw}/a1a/027-electabuzz.json | 0 .../data/{cards => raw}/a1a/028-joltik.json | 0 .../{cards => raw}/a1a/029-galvantula.json | 0 .../data/{cards => raw}/a1a/030-dedenne.json | 0 backend/data/{cards => raw}/a1a/031-mew.json | 0 .../data/{cards => raw}/a1a/032-mew-ex.json | 0 .../data/{cards => raw}/a1a/033-sigilyph.json | 0 .../data/{cards => raw}/a1a/034-elgyem.json | 0 .../data/{cards => raw}/a1a/035-beheeyem.json | 0 .../data/{cards => raw}/a1a/036-flabebe.json | 0 .../data/{cards => raw}/a1a/037-floette.json | 0 .../data/{cards => raw}/a1a/038-florges.json | 0 .../data/{cards => raw}/a1a/039-swirlix.json | 0 .../data/{cards => raw}/a1a/040-slurpuff.json | 0 .../data/{cards => raw}/a1a/041-mankey.json | 0 .../data/{cards => raw}/a1a/042-primeape.json | 0 .../data/{cards => raw}/a1a/043-geodude.json | 0 .../data/{cards => raw}/a1a/044-graveler.json | 0 .../data/{cards => raw}/a1a/045-golem.json | 0 .../{cards => raw}/a1a/046-aerodactyl-ex.json | 0 .../{cards => raw}/a1a/047-marshadow.json | 0 .../{cards => raw}/a1a/048-stonjourner.json | 0 .../data/{cards => raw}/a1a/049-koffing.json | 0 .../data/{cards => raw}/a1a/050-weezing.json | 0 .../data/{cards => raw}/a1a/051-purrloin.json | 0 .../data/{cards => raw}/a1a/052-liepard.json | 0 .../data/{cards => raw}/a1a/053-venipede.json | 0 .../{cards => raw}/a1a/054-whirlipede.json | 0 .../{cards => raw}/a1a/055-scolipede.json | 0 .../{cards => raw}/a1a/056-druddigon.json | 0 .../data/{cards => raw}/a1a/057-pidgey.json | 0 .../{cards => raw}/a1a/058-pidgeotto.json | 0 .../{cards => raw}/a1a/059-pidgeot-ex.json | 0 .../data/{cards => raw}/a1a/060-tauros.json | 0 .../data/{cards => raw}/a1a/061-eevee.json | 0 .../data/{cards => raw}/a1a/062-chatot.json | 0 .../{cards => raw}/a1a/063-old-amber.json | 0 .../{cards => raw}/a1a/064-pokemon-flute.json | 0 .../{cards => raw}/a1a/065-mythical-slab.json | 0 .../a1a/066-budding-expeditioner.json | 0 backend/data/{cards => raw}/a1a/067-blue.json | 0 backend/data/{cards => raw}/a1a/068-leaf.json | 0 .../{cards => raw}/a1a/069-exeggutor.json | 0 .../{cards => raw}/a1a/070-serperior.json | 0 .../data/{cards => raw}/a1a/071-salandit.json | 0 .../data/{cards => raw}/a1a/072-vaporeon.json | 0 .../data/{cards => raw}/a1a/073-dedenne.json | 0 .../{cards => raw}/a1a/074-marshadow.json | 0 .../{cards => raw}/a1a/075-celebi-ex.json | 0 .../{cards => raw}/a1a/076-gyarados-ex.json | 0 .../data/{cards => raw}/a1a/077-mew-ex.json | 0 .../{cards => raw}/a1a/078-aerodactyl-ex.json | 0 .../{cards => raw}/a1a/079-pidgeot-ex.json | 0 .../a1a/080-budding-expeditioner.json | 0 backend/data/{cards => raw}/a1a/081-blue.json | 0 backend/data/{cards => raw}/a1a/082-leaf.json | 0 .../data/{cards => raw}/a1a/083-mew-ex.json | 0 .../{cards => raw}/a1a/084-aerodactyl-ex.json | 0 .../{cards => raw}/a1a/085-celebi-ex.json | 0 .../data/{cards => raw}/a1a/086-mew-ex.json | 0 backend/scripts/convert_cards.py | 616 +++++ backend/scripts/scrape_pokemon_pocket.py | 8 +- backend/tests/scripts/__init__.py | 1 + backend/tests/scripts/test_convert_cards.py | 486 ++++ backend/tests/services/test_card_service.py | 539 ++++ 763 files changed, 15762 insertions(+), 5 deletions(-) create mode 100644 backend/app/services/card_service.py create mode 100644 backend/data/definitions/README.md create mode 100644 backend/data/definitions/_index.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-colorless.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-darkness.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-dragon.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-fighting.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-fire.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-grass.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-lightning.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-metal.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-psychic.json create mode 100644 backend/data/definitions/energy/basic/energy-basic-water.json create mode 100644 backend/data/definitions/pokemon/a1/001-bulbasaur.json create mode 100644 backend/data/definitions/pokemon/a1/002-ivysaur.json create mode 100644 backend/data/definitions/pokemon/a1/003-venusaur.json create mode 100644 backend/data/definitions/pokemon/a1/004-venusaur-ex.json create mode 100644 backend/data/definitions/pokemon/a1/005-caterpie.json create mode 100644 backend/data/definitions/pokemon/a1/006-metapod.json create mode 100644 backend/data/definitions/pokemon/a1/007-butterfree.json create mode 100644 backend/data/definitions/pokemon/a1/008-weedle.json create mode 100644 backend/data/definitions/pokemon/a1/009-kakuna.json create mode 100644 backend/data/definitions/pokemon/a1/010-beedrill.json create mode 100644 backend/data/definitions/pokemon/a1/011-oddish.json create mode 100644 backend/data/definitions/pokemon/a1/012-gloom.json create mode 100644 backend/data/definitions/pokemon/a1/013-vileplume.json create mode 100644 backend/data/definitions/pokemon/a1/014-paras.json create mode 100644 backend/data/definitions/pokemon/a1/015-parasect.json create mode 100644 backend/data/definitions/pokemon/a1/016-venonat.json create mode 100644 backend/data/definitions/pokemon/a1/017-venomoth.json create mode 100644 backend/data/definitions/pokemon/a1/018-bellsprout.json create mode 100644 backend/data/definitions/pokemon/a1/019-weepinbell.json create mode 100644 backend/data/definitions/pokemon/a1/020-victreebel.json create mode 100644 backend/data/definitions/pokemon/a1/021-exeggcute.json create mode 100644 backend/data/definitions/pokemon/a1/022-exeggutor.json create mode 100644 backend/data/definitions/pokemon/a1/023-exeggutor-ex.json create mode 100644 backend/data/definitions/pokemon/a1/024-tangela.json create mode 100644 backend/data/definitions/pokemon/a1/025-scyther.json create mode 100644 backend/data/definitions/pokemon/a1/026-pinsir.json create mode 100644 backend/data/definitions/pokemon/a1/027-cottonee.json create mode 100644 backend/data/definitions/pokemon/a1/028-whimsicott.json create mode 100644 backend/data/definitions/pokemon/a1/029-petilil.json create mode 100644 backend/data/definitions/pokemon/a1/030-lilligant.json create mode 100644 backend/data/definitions/pokemon/a1/031-skiddo.json create mode 100644 backend/data/definitions/pokemon/a1/032-gogoat.json create mode 100644 backend/data/definitions/pokemon/a1/033-charmander.json create mode 100644 backend/data/definitions/pokemon/a1/034-charmeleon.json create mode 100644 backend/data/definitions/pokemon/a1/035-charizard.json create mode 100644 backend/data/definitions/pokemon/a1/036-charizard-ex.json create mode 100644 backend/data/definitions/pokemon/a1/037-vulpix.json create mode 100644 backend/data/definitions/pokemon/a1/038-ninetales.json create mode 100644 backend/data/definitions/pokemon/a1/039-growlithe.json create mode 100644 backend/data/definitions/pokemon/a1/040-arcanine.json create mode 100644 backend/data/definitions/pokemon/a1/041-arcanine-ex.json create mode 100644 backend/data/definitions/pokemon/a1/042-ponyta.json create mode 100644 backend/data/definitions/pokemon/a1/043-rapidash.json create mode 100644 backend/data/definitions/pokemon/a1/044-magmar.json create mode 100644 backend/data/definitions/pokemon/a1/045-flareon.json create mode 100644 backend/data/definitions/pokemon/a1/046-moltres.json create mode 100644 backend/data/definitions/pokemon/a1/047-moltres-ex.json create mode 100644 backend/data/definitions/pokemon/a1/048-heatmor.json create mode 100644 backend/data/definitions/pokemon/a1/049-salandit.json create mode 100644 backend/data/definitions/pokemon/a1/050-salazzle.json create mode 100644 backend/data/definitions/pokemon/a1/051-sizzlipede.json create mode 100644 backend/data/definitions/pokemon/a1/052-centiskorch.json create mode 100644 backend/data/definitions/pokemon/a1/053-squirtle.json create mode 100644 backend/data/definitions/pokemon/a1/054-wartortle.json create mode 100644 backend/data/definitions/pokemon/a1/055-blastoise.json create mode 100644 backend/data/definitions/pokemon/a1/056-blastoise-ex.json create mode 100644 backend/data/definitions/pokemon/a1/057-psyduck.json create mode 100644 backend/data/definitions/pokemon/a1/058-golduck.json create mode 100644 backend/data/definitions/pokemon/a1/059-poliwag.json create mode 100644 backend/data/definitions/pokemon/a1/060-poliwhirl.json create mode 100644 backend/data/definitions/pokemon/a1/061-poliwrath.json create mode 100644 backend/data/definitions/pokemon/a1/062-tentacool.json create mode 100644 backend/data/definitions/pokemon/a1/063-tentacruel.json create mode 100644 backend/data/definitions/pokemon/a1/064-seel.json create mode 100644 backend/data/definitions/pokemon/a1/065-dewgong.json create mode 100644 backend/data/definitions/pokemon/a1/066-shellder.json create mode 100644 backend/data/definitions/pokemon/a1/067-cloyster.json create mode 100644 backend/data/definitions/pokemon/a1/068-krabby.json create mode 100644 backend/data/definitions/pokemon/a1/069-kingler.json create mode 100644 backend/data/definitions/pokemon/a1/070-horsea.json create mode 100644 backend/data/definitions/pokemon/a1/071-seadra.json create mode 100644 backend/data/definitions/pokemon/a1/072-goldeen.json create mode 100644 backend/data/definitions/pokemon/a1/073-seaking.json create mode 100644 backend/data/definitions/pokemon/a1/074-staryu.json create mode 100644 backend/data/definitions/pokemon/a1/075-starmie.json create mode 100644 backend/data/definitions/pokemon/a1/076-starmie-ex.json create mode 100644 backend/data/definitions/pokemon/a1/077-magikarp.json create mode 100644 backend/data/definitions/pokemon/a1/078-gyarados.json create mode 100644 backend/data/definitions/pokemon/a1/079-lapras.json create mode 100644 backend/data/definitions/pokemon/a1/080-vaporeon.json create mode 100644 backend/data/definitions/pokemon/a1/081-omanyte.json create mode 100644 backend/data/definitions/pokemon/a1/082-omastar.json create mode 100644 backend/data/definitions/pokemon/a1/083-articuno.json create mode 100644 backend/data/definitions/pokemon/a1/084-articuno-ex.json create mode 100644 backend/data/definitions/pokemon/a1/085-ducklett.json create mode 100644 backend/data/definitions/pokemon/a1/086-swanna.json create mode 100644 backend/data/definitions/pokemon/a1/087-froakie.json create mode 100644 backend/data/definitions/pokemon/a1/088-frogadier.json create mode 100644 backend/data/definitions/pokemon/a1/089-greninja.json create mode 100644 backend/data/definitions/pokemon/a1/090-pyukumuku.json create mode 100644 backend/data/definitions/pokemon/a1/091-bruxish.json create mode 100644 backend/data/definitions/pokemon/a1/092-snom.json create mode 100644 backend/data/definitions/pokemon/a1/093-frosmoth.json create mode 100644 backend/data/definitions/pokemon/a1/094-pikachu.json create mode 100644 backend/data/definitions/pokemon/a1/095-raichu.json create mode 100644 backend/data/definitions/pokemon/a1/096-pikachu-ex.json create mode 100644 backend/data/definitions/pokemon/a1/097-magnemite.json create mode 100644 backend/data/definitions/pokemon/a1/098-magneton.json create mode 100644 backend/data/definitions/pokemon/a1/099-voltorb.json create mode 100644 backend/data/definitions/pokemon/a1/100-electrode.json create mode 100644 backend/data/definitions/pokemon/a1/101-electabuzz.json create mode 100644 backend/data/definitions/pokemon/a1/102-jolteon.json create mode 100644 backend/data/definitions/pokemon/a1/103-zapdos.json create mode 100644 backend/data/definitions/pokemon/a1/104-zapdos-ex.json create mode 100644 backend/data/definitions/pokemon/a1/105-blitzle.json create mode 100644 backend/data/definitions/pokemon/a1/106-zebstrika.json create mode 100644 backend/data/definitions/pokemon/a1/107-tynamo.json create mode 100644 backend/data/definitions/pokemon/a1/108-eelektrik.json create mode 100644 backend/data/definitions/pokemon/a1/109-eelektross.json create mode 100644 backend/data/definitions/pokemon/a1/110-helioptile.json create mode 100644 backend/data/definitions/pokemon/a1/111-heliolisk.json create mode 100644 backend/data/definitions/pokemon/a1/112-pincurchin.json create mode 100644 backend/data/definitions/pokemon/a1/113-clefairy.json create mode 100644 backend/data/definitions/pokemon/a1/114-clefable.json create mode 100644 backend/data/definitions/pokemon/a1/115-abra.json create mode 100644 backend/data/definitions/pokemon/a1/116-kadabra.json create mode 100644 backend/data/definitions/pokemon/a1/117-alakazam.json create mode 100644 backend/data/definitions/pokemon/a1/118-slowpoke.json create mode 100644 backend/data/definitions/pokemon/a1/119-slowbro.json create mode 100644 backend/data/definitions/pokemon/a1/120-gastly.json create mode 100644 backend/data/definitions/pokemon/a1/121-haunter.json create mode 100644 backend/data/definitions/pokemon/a1/122-gengar.json create mode 100644 backend/data/definitions/pokemon/a1/123-gengar-ex.json create mode 100644 backend/data/definitions/pokemon/a1/124-drowzee.json create mode 100644 backend/data/definitions/pokemon/a1/125-hypno.json create mode 100644 backend/data/definitions/pokemon/a1/126-mr-mime.json create mode 100644 backend/data/definitions/pokemon/a1/127-jynx.json create mode 100644 backend/data/definitions/pokemon/a1/128-mewtwo.json create mode 100644 backend/data/definitions/pokemon/a1/129-mewtwo-ex.json create mode 100644 backend/data/definitions/pokemon/a1/130-ralts.json create mode 100644 backend/data/definitions/pokemon/a1/131-kirlia.json create mode 100644 backend/data/definitions/pokemon/a1/132-gardevoir.json create mode 100644 backend/data/definitions/pokemon/a1/133-woobat.json create mode 100644 backend/data/definitions/pokemon/a1/134-swoobat.json create mode 100644 backend/data/definitions/pokemon/a1/135-golett.json create mode 100644 backend/data/definitions/pokemon/a1/136-golurk.json create mode 100644 backend/data/definitions/pokemon/a1/137-sandshrew.json create mode 100644 backend/data/definitions/pokemon/a1/138-sandslash.json create mode 100644 backend/data/definitions/pokemon/a1/139-diglett.json create mode 100644 backend/data/definitions/pokemon/a1/140-dugtrio.json create mode 100644 backend/data/definitions/pokemon/a1/141-mankey.json create mode 100644 backend/data/definitions/pokemon/a1/142-primeape.json create mode 100644 backend/data/definitions/pokemon/a1/143-machop.json create mode 100644 backend/data/definitions/pokemon/a1/144-machoke.json create mode 100644 backend/data/definitions/pokemon/a1/145-machamp.json create mode 100644 backend/data/definitions/pokemon/a1/146-machamp-ex.json create mode 100644 backend/data/definitions/pokemon/a1/147-geodude.json create mode 100644 backend/data/definitions/pokemon/a1/148-graveler.json create mode 100644 backend/data/definitions/pokemon/a1/149-golem.json create mode 100644 backend/data/definitions/pokemon/a1/150-onix.json create mode 100644 backend/data/definitions/pokemon/a1/151-cubone.json create mode 100644 backend/data/definitions/pokemon/a1/152-marowak.json create mode 100644 backend/data/definitions/pokemon/a1/153-marowak-ex.json create mode 100644 backend/data/definitions/pokemon/a1/154-hitmonlee.json create mode 100644 backend/data/definitions/pokemon/a1/155-hitmonchan.json create mode 100644 backend/data/definitions/pokemon/a1/156-rhyhorn.json create mode 100644 backend/data/definitions/pokemon/a1/157-rhydon.json create mode 100644 backend/data/definitions/pokemon/a1/158-kabuto.json create mode 100644 backend/data/definitions/pokemon/a1/159-kabutops.json create mode 100644 backend/data/definitions/pokemon/a1/160-mienfoo.json create mode 100644 backend/data/definitions/pokemon/a1/161-mienshao.json create mode 100644 backend/data/definitions/pokemon/a1/162-clobbopus.json create mode 100644 backend/data/definitions/pokemon/a1/163-grapploct.json create mode 100644 backend/data/definitions/pokemon/a1/164-ekans.json create mode 100644 backend/data/definitions/pokemon/a1/165-arbok.json create mode 100644 backend/data/definitions/pokemon/a1/166-nidoran.json create mode 100644 backend/data/definitions/pokemon/a1/167-nidorina.json create mode 100644 backend/data/definitions/pokemon/a1/168-nidoqueen.json create mode 100644 backend/data/definitions/pokemon/a1/169-nidoran.json create mode 100644 backend/data/definitions/pokemon/a1/170-nidorino.json create mode 100644 backend/data/definitions/pokemon/a1/171-nidoking.json create mode 100644 backend/data/definitions/pokemon/a1/172-zubat.json create mode 100644 backend/data/definitions/pokemon/a1/173-golbat.json create mode 100644 backend/data/definitions/pokemon/a1/174-grimer.json create mode 100644 backend/data/definitions/pokemon/a1/175-muk.json create mode 100644 backend/data/definitions/pokemon/a1/176-koffing.json create mode 100644 backend/data/definitions/pokemon/a1/177-weezing.json create mode 100644 backend/data/definitions/pokemon/a1/178-mawile.json create mode 100644 backend/data/definitions/pokemon/a1/179-pawniard.json create mode 100644 backend/data/definitions/pokemon/a1/180-bisharp.json create mode 100644 backend/data/definitions/pokemon/a1/181-meltan.json create mode 100644 backend/data/definitions/pokemon/a1/182-melmetal.json create mode 100644 backend/data/definitions/pokemon/a1/183-dratini.json create mode 100644 backend/data/definitions/pokemon/a1/184-dragonair.json create mode 100644 backend/data/definitions/pokemon/a1/185-dragonite.json create mode 100644 backend/data/definitions/pokemon/a1/186-pidgey.json create mode 100644 backend/data/definitions/pokemon/a1/187-pidgeotto.json create mode 100644 backend/data/definitions/pokemon/a1/188-pidgeot.json create mode 100644 backend/data/definitions/pokemon/a1/189-rattata.json create mode 100644 backend/data/definitions/pokemon/a1/190-raticate.json create mode 100644 backend/data/definitions/pokemon/a1/191-spearow.json create mode 100644 backend/data/definitions/pokemon/a1/192-fearow.json create mode 100644 backend/data/definitions/pokemon/a1/193-jigglypuff.json create mode 100644 backend/data/definitions/pokemon/a1/194-wigglytuff.json create mode 100644 backend/data/definitions/pokemon/a1/195-wigglytuff-ex.json create mode 100644 backend/data/definitions/pokemon/a1/196-meowth.json create mode 100644 backend/data/definitions/pokemon/a1/197-persian.json create mode 100644 backend/data/definitions/pokemon/a1/198-farfetchd.json create mode 100644 backend/data/definitions/pokemon/a1/199-doduo.json create mode 100644 backend/data/definitions/pokemon/a1/200-dodrio.json create mode 100644 backend/data/definitions/pokemon/a1/201-lickitung.json create mode 100644 backend/data/definitions/pokemon/a1/202-chansey.json create mode 100644 backend/data/definitions/pokemon/a1/203-kangaskhan.json create mode 100644 backend/data/definitions/pokemon/a1/204-tauros.json create mode 100644 backend/data/definitions/pokemon/a1/205-ditto.json create mode 100644 backend/data/definitions/pokemon/a1/206-eevee.json create mode 100644 backend/data/definitions/pokemon/a1/207-eevee.json create mode 100644 backend/data/definitions/pokemon/a1/208-eevee.json create mode 100644 backend/data/definitions/pokemon/a1/209-porygon.json create mode 100644 backend/data/definitions/pokemon/a1/210-aerodactyl.json create mode 100644 backend/data/definitions/pokemon/a1/211-snorlax.json create mode 100644 backend/data/definitions/pokemon/a1/212-minccino.json create mode 100644 backend/data/definitions/pokemon/a1/213-cinccino.json create mode 100644 backend/data/definitions/pokemon/a1/214-wooloo.json create mode 100644 backend/data/definitions/pokemon/a1/215-dubwool.json create mode 100644 backend/data/definitions/pokemon/a1/227-bulbasaur.json create mode 100644 backend/data/definitions/pokemon/a1/228-gloom.json create mode 100644 backend/data/definitions/pokemon/a1/229-pinsir.json create mode 100644 backend/data/definitions/pokemon/a1/230-charmander.json create mode 100644 backend/data/definitions/pokemon/a1/231-rapidash.json create mode 100644 backend/data/definitions/pokemon/a1/232-squirtle.json create mode 100644 backend/data/definitions/pokemon/a1/233-gyarados.json create mode 100644 backend/data/definitions/pokemon/a1/234-lapras.json create mode 100644 backend/data/definitions/pokemon/a1/235-electrode.json create mode 100644 backend/data/definitions/pokemon/a1/236-alakazam.json create mode 100644 backend/data/definitions/pokemon/a1/237-slowpoke.json create mode 100644 backend/data/definitions/pokemon/a1/238-diglett.json create mode 100644 backend/data/definitions/pokemon/a1/239-cubone.json create mode 100644 backend/data/definitions/pokemon/a1/240-nidoqueen.json create mode 100644 backend/data/definitions/pokemon/a1/241-nidoking.json create mode 100644 backend/data/definitions/pokemon/a1/242-golbat.json create mode 100644 backend/data/definitions/pokemon/a1/243-weezing.json create mode 100644 backend/data/definitions/pokemon/a1/244-dragonite.json create mode 100644 backend/data/definitions/pokemon/a1/245-pidgeot.json create mode 100644 backend/data/definitions/pokemon/a1/246-meowth.json create mode 100644 backend/data/definitions/pokemon/a1/247-ditto.json create mode 100644 backend/data/definitions/pokemon/a1/248-eevee.json create mode 100644 backend/data/definitions/pokemon/a1/249-porygon.json create mode 100644 backend/data/definitions/pokemon/a1/250-snorlax.json create mode 100644 backend/data/definitions/pokemon/a1/251-venusaur-ex.json create mode 100644 backend/data/definitions/pokemon/a1/252-exeggutor-ex.json create mode 100644 backend/data/definitions/pokemon/a1/253-charizard-ex.json create mode 100644 backend/data/definitions/pokemon/a1/254-arcanine-ex.json create mode 100644 backend/data/definitions/pokemon/a1/255-moltres-ex.json create mode 100644 backend/data/definitions/pokemon/a1/256-blastoise-ex.json create mode 100644 backend/data/definitions/pokemon/a1/257-starmie-ex.json create mode 100644 backend/data/definitions/pokemon/a1/258-articuno-ex.json create mode 100644 backend/data/definitions/pokemon/a1/259-pikachu-ex.json create mode 100644 backend/data/definitions/pokemon/a1/260-zapdos-ex.json create mode 100644 backend/data/definitions/pokemon/a1/261-gengar-ex.json create mode 100644 backend/data/definitions/pokemon/a1/262-mewtwo-ex.json create mode 100644 backend/data/definitions/pokemon/a1/263-machamp-ex.json create mode 100644 backend/data/definitions/pokemon/a1/264-marowak-ex.json create mode 100644 backend/data/definitions/pokemon/a1/265-wigglytuff-ex.json create mode 100644 backend/data/definitions/pokemon/a1/274-moltres-ex.json create mode 100644 backend/data/definitions/pokemon/a1/275-articuno-ex.json create mode 100644 backend/data/definitions/pokemon/a1/276-zapdos-ex.json create mode 100644 backend/data/definitions/pokemon/a1/277-gengar-ex.json create mode 100644 backend/data/definitions/pokemon/a1/278-machamp-ex.json create mode 100644 backend/data/definitions/pokemon/a1/279-wigglytuff-ex.json create mode 100644 backend/data/definitions/pokemon/a1/280-charizard-ex.json create mode 100644 backend/data/definitions/pokemon/a1/281-pikachu-ex.json create mode 100644 backend/data/definitions/pokemon/a1/282-mewtwo-ex.json create mode 100644 backend/data/definitions/pokemon/a1/283-mew.json create mode 100644 backend/data/definitions/pokemon/a1/284-charizard-ex.json create mode 100644 backend/data/definitions/pokemon/a1/285-pikachu-ex.json create mode 100644 backend/data/definitions/pokemon/a1/286-mewtwo-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/001-exeggcute.json create mode 100644 backend/data/definitions/pokemon/a1a/002-exeggutor.json create mode 100644 backend/data/definitions/pokemon/a1a/003-celebi-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/004-snivy.json create mode 100644 backend/data/definitions/pokemon/a1a/005-servine.json create mode 100644 backend/data/definitions/pokemon/a1a/006-serperior.json create mode 100644 backend/data/definitions/pokemon/a1a/007-morelull.json create mode 100644 backend/data/definitions/pokemon/a1a/008-shiinotic.json create mode 100644 backend/data/definitions/pokemon/a1a/009-dhelmise.json create mode 100644 backend/data/definitions/pokemon/a1a/010-ponyta.json create mode 100644 backend/data/definitions/pokemon/a1a/011-rapidash.json create mode 100644 backend/data/definitions/pokemon/a1a/012-magmar.json create mode 100644 backend/data/definitions/pokemon/a1a/013-larvesta.json create mode 100644 backend/data/definitions/pokemon/a1a/014-volcarona.json create mode 100644 backend/data/definitions/pokemon/a1a/015-salandit.json create mode 100644 backend/data/definitions/pokemon/a1a/016-salazzle.json create mode 100644 backend/data/definitions/pokemon/a1a/017-magikarp.json create mode 100644 backend/data/definitions/pokemon/a1a/018-gyarados-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/019-vaporeon.json create mode 100644 backend/data/definitions/pokemon/a1a/020-finneon.json create mode 100644 backend/data/definitions/pokemon/a1a/021-lumineon.json create mode 100644 backend/data/definitions/pokemon/a1a/022-chewtle.json create mode 100644 backend/data/definitions/pokemon/a1a/023-drednaw.json create mode 100644 backend/data/definitions/pokemon/a1a/024-cramorant.json create mode 100644 backend/data/definitions/pokemon/a1a/025-pikachu.json create mode 100644 backend/data/definitions/pokemon/a1a/026-raichu.json create mode 100644 backend/data/definitions/pokemon/a1a/027-electabuzz.json create mode 100644 backend/data/definitions/pokemon/a1a/028-joltik.json create mode 100644 backend/data/definitions/pokemon/a1a/029-galvantula.json create mode 100644 backend/data/definitions/pokemon/a1a/030-dedenne.json create mode 100644 backend/data/definitions/pokemon/a1a/031-mew.json create mode 100644 backend/data/definitions/pokemon/a1a/032-mew-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/033-sigilyph.json create mode 100644 backend/data/definitions/pokemon/a1a/034-elgyem.json create mode 100644 backend/data/definitions/pokemon/a1a/035-beheeyem.json create mode 100644 backend/data/definitions/pokemon/a1a/036-flabebe.json create mode 100644 backend/data/definitions/pokemon/a1a/037-floette.json create mode 100644 backend/data/definitions/pokemon/a1a/038-florges.json create mode 100644 backend/data/definitions/pokemon/a1a/039-swirlix.json create mode 100644 backend/data/definitions/pokemon/a1a/040-slurpuff.json create mode 100644 backend/data/definitions/pokemon/a1a/041-mankey.json create mode 100644 backend/data/definitions/pokemon/a1a/042-primeape.json create mode 100644 backend/data/definitions/pokemon/a1a/043-geodude.json create mode 100644 backend/data/definitions/pokemon/a1a/044-graveler.json create mode 100644 backend/data/definitions/pokemon/a1a/045-golem.json create mode 100644 backend/data/definitions/pokemon/a1a/046-aerodactyl-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/047-marshadow.json create mode 100644 backend/data/definitions/pokemon/a1a/048-stonjourner.json create mode 100644 backend/data/definitions/pokemon/a1a/049-koffing.json create mode 100644 backend/data/definitions/pokemon/a1a/050-weezing.json create mode 100644 backend/data/definitions/pokemon/a1a/051-purrloin.json create mode 100644 backend/data/definitions/pokemon/a1a/052-liepard.json create mode 100644 backend/data/definitions/pokemon/a1a/053-venipede.json create mode 100644 backend/data/definitions/pokemon/a1a/054-whirlipede.json create mode 100644 backend/data/definitions/pokemon/a1a/055-scolipede.json create mode 100644 backend/data/definitions/pokemon/a1a/056-druddigon.json create mode 100644 backend/data/definitions/pokemon/a1a/057-pidgey.json create mode 100644 backend/data/definitions/pokemon/a1a/058-pidgeotto.json create mode 100644 backend/data/definitions/pokemon/a1a/059-pidgeot-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/060-tauros.json create mode 100644 backend/data/definitions/pokemon/a1a/061-eevee.json create mode 100644 backend/data/definitions/pokemon/a1a/062-chatot.json create mode 100644 backend/data/definitions/pokemon/a1a/069-exeggutor.json create mode 100644 backend/data/definitions/pokemon/a1a/070-serperior.json create mode 100644 backend/data/definitions/pokemon/a1a/071-salandit.json create mode 100644 backend/data/definitions/pokemon/a1a/072-vaporeon.json create mode 100644 backend/data/definitions/pokemon/a1a/073-dedenne.json create mode 100644 backend/data/definitions/pokemon/a1a/074-marshadow.json create mode 100644 backend/data/definitions/pokemon/a1a/075-celebi-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/076-gyarados-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/077-mew-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/078-aerodactyl-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/079-pidgeot-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/083-mew-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/084-aerodactyl-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/085-celebi-ex.json create mode 100644 backend/data/definitions/pokemon/a1a/086-mew-ex.json create mode 100644 backend/data/definitions/trainer/a1/219-erika.json create mode 100644 backend/data/definitions/trainer/a1/220-misty.json create mode 100644 backend/data/definitions/trainer/a1/221-blaine.json create mode 100644 backend/data/definitions/trainer/a1/222-koga.json create mode 100644 backend/data/definitions/trainer/a1/223-giovanni.json create mode 100644 backend/data/definitions/trainer/a1/224-brock.json create mode 100644 backend/data/definitions/trainer/a1/225-sabrina.json create mode 100644 backend/data/definitions/trainer/a1/226-lt-surge.json create mode 100644 backend/data/definitions/trainer/a1/266-erika.json create mode 100644 backend/data/definitions/trainer/a1/267-misty.json create mode 100644 backend/data/definitions/trainer/a1/268-blaine.json create mode 100644 backend/data/definitions/trainer/a1/269-koga.json create mode 100644 backend/data/definitions/trainer/a1/270-giovanni.json create mode 100644 backend/data/definitions/trainer/a1/271-brock.json create mode 100644 backend/data/definitions/trainer/a1/272-sabrina.json create mode 100644 backend/data/definitions/trainer/a1/273-lt-surge.json create mode 100644 backend/data/definitions/trainer/a1a/064-pokemon-flute.json create mode 100644 backend/data/definitions/trainer/a1a/065-mythical-slab.json create mode 100644 backend/data/definitions/trainer/a1a/066-budding-expeditioner.json create mode 100644 backend/data/definitions/trainer/a1a/067-blue.json create mode 100644 backend/data/definitions/trainer/a1a/068-leaf.json create mode 100644 backend/data/definitions/trainer/a1a/080-budding-expeditioner.json create mode 100644 backend/data/definitions/trainer/a1a/081-blue.json create mode 100644 backend/data/definitions/trainer/a1a/082-leaf.json rename backend/data/{cards => raw}/.gitkeep (100%) create mode 100644 backend/data/raw/README.md rename backend/data/{cards => raw}/_index.json (100%) rename backend/data/{cards => raw}/a1/001-bulbasaur.json (100%) rename backend/data/{cards => raw}/a1/002-ivysaur.json (100%) rename backend/data/{cards => raw}/a1/003-venusaur.json (100%) rename backend/data/{cards => raw}/a1/004-venusaur-ex.json (100%) rename backend/data/{cards => raw}/a1/005-caterpie.json (100%) rename backend/data/{cards => raw}/a1/006-metapod.json (100%) rename backend/data/{cards => raw}/a1/007-butterfree.json (100%) rename backend/data/{cards => raw}/a1/008-weedle.json (100%) rename backend/data/{cards => raw}/a1/009-kakuna.json (100%) rename backend/data/{cards => raw}/a1/010-beedrill.json (100%) rename backend/data/{cards => raw}/a1/011-oddish.json (100%) rename backend/data/{cards => raw}/a1/012-gloom.json (100%) rename backend/data/{cards => raw}/a1/013-vileplume.json (100%) rename backend/data/{cards => raw}/a1/014-paras.json (100%) rename backend/data/{cards => raw}/a1/015-parasect.json (100%) rename backend/data/{cards => raw}/a1/016-venonat.json (100%) rename backend/data/{cards => raw}/a1/017-venomoth.json (100%) rename backend/data/{cards => raw}/a1/018-bellsprout.json (100%) rename backend/data/{cards => raw}/a1/019-weepinbell.json (100%) rename backend/data/{cards => raw}/a1/020-victreebel.json (100%) rename backend/data/{cards => raw}/a1/021-exeggcute.json (100%) rename backend/data/{cards => raw}/a1/022-exeggutor.json (100%) rename backend/data/{cards => raw}/a1/023-exeggutor-ex.json (100%) rename backend/data/{cards => raw}/a1/024-tangela.json (100%) rename backend/data/{cards => raw}/a1/025-scyther.json (100%) rename backend/data/{cards => raw}/a1/026-pinsir.json (100%) rename backend/data/{cards => raw}/a1/027-cottonee.json (100%) rename backend/data/{cards => raw}/a1/028-whimsicott.json (100%) rename backend/data/{cards => raw}/a1/029-petilil.json (100%) rename backend/data/{cards => raw}/a1/030-lilligant.json (100%) rename backend/data/{cards => raw}/a1/031-skiddo.json (100%) rename backend/data/{cards => raw}/a1/032-gogoat.json (100%) rename backend/data/{cards => raw}/a1/033-charmander.json (100%) rename backend/data/{cards => raw}/a1/034-charmeleon.json (100%) rename backend/data/{cards => raw}/a1/035-charizard.json (100%) rename backend/data/{cards => raw}/a1/036-charizard-ex.json (100%) rename backend/data/{cards => raw}/a1/037-vulpix.json (100%) rename backend/data/{cards => raw}/a1/038-ninetales.json (100%) rename backend/data/{cards => raw}/a1/039-growlithe.json (100%) rename backend/data/{cards => raw}/a1/040-arcanine.json (100%) rename backend/data/{cards => raw}/a1/041-arcanine-ex.json (100%) rename backend/data/{cards => raw}/a1/042-ponyta.json (100%) rename backend/data/{cards => raw}/a1/043-rapidash.json (100%) rename backend/data/{cards => raw}/a1/044-magmar.json (100%) rename backend/data/{cards => raw}/a1/045-flareon.json (100%) rename backend/data/{cards => raw}/a1/046-moltres.json (100%) rename backend/data/{cards => raw}/a1/047-moltres-ex.json (100%) rename backend/data/{cards => raw}/a1/048-heatmor.json (100%) rename backend/data/{cards => raw}/a1/049-salandit.json (100%) rename backend/data/{cards => raw}/a1/050-salazzle.json (100%) rename backend/data/{cards => raw}/a1/051-sizzlipede.json (100%) rename backend/data/{cards => raw}/a1/052-centiskorch.json (100%) rename backend/data/{cards => raw}/a1/053-squirtle.json (100%) rename backend/data/{cards => raw}/a1/054-wartortle.json (100%) rename backend/data/{cards => raw}/a1/055-blastoise.json (100%) rename backend/data/{cards => raw}/a1/056-blastoise-ex.json (100%) rename backend/data/{cards => raw}/a1/057-psyduck.json (100%) rename backend/data/{cards => raw}/a1/058-golduck.json (100%) rename backend/data/{cards => raw}/a1/059-poliwag.json (100%) rename backend/data/{cards => raw}/a1/060-poliwhirl.json (100%) rename backend/data/{cards => raw}/a1/061-poliwrath.json (100%) rename backend/data/{cards => raw}/a1/062-tentacool.json (100%) rename backend/data/{cards => raw}/a1/063-tentacruel.json (100%) rename backend/data/{cards => raw}/a1/064-seel.json (100%) rename backend/data/{cards => raw}/a1/065-dewgong.json (100%) rename backend/data/{cards => raw}/a1/066-shellder.json (100%) rename backend/data/{cards => raw}/a1/067-cloyster.json (100%) rename backend/data/{cards => raw}/a1/068-krabby.json (100%) rename backend/data/{cards => raw}/a1/069-kingler.json (100%) rename backend/data/{cards => raw}/a1/070-horsea.json (100%) rename backend/data/{cards => raw}/a1/071-seadra.json (100%) rename backend/data/{cards => raw}/a1/072-goldeen.json (100%) rename backend/data/{cards => raw}/a1/073-seaking.json (100%) rename backend/data/{cards => raw}/a1/074-staryu.json (100%) rename backend/data/{cards => raw}/a1/075-starmie.json (100%) rename backend/data/{cards => raw}/a1/076-starmie-ex.json (100%) rename backend/data/{cards => raw}/a1/077-magikarp.json (100%) rename backend/data/{cards => raw}/a1/078-gyarados.json (100%) rename backend/data/{cards => raw}/a1/079-lapras.json (100%) rename backend/data/{cards => raw}/a1/080-vaporeon.json (100%) rename backend/data/{cards => raw}/a1/081-omanyte.json (100%) rename backend/data/{cards => raw}/a1/082-omastar.json (100%) rename backend/data/{cards => raw}/a1/083-articuno.json (100%) rename backend/data/{cards => raw}/a1/084-articuno-ex.json (100%) rename backend/data/{cards => raw}/a1/085-ducklett.json (100%) rename backend/data/{cards => raw}/a1/086-swanna.json (100%) rename backend/data/{cards => raw}/a1/087-froakie.json (100%) rename backend/data/{cards => raw}/a1/088-frogadier.json (100%) rename backend/data/{cards => raw}/a1/089-greninja.json (100%) rename backend/data/{cards => raw}/a1/090-pyukumuku.json (100%) rename backend/data/{cards => raw}/a1/091-bruxish.json (100%) rename backend/data/{cards => raw}/a1/092-snom.json (100%) rename backend/data/{cards => raw}/a1/093-frosmoth.json (100%) rename backend/data/{cards => raw}/a1/094-pikachu.json (100%) rename backend/data/{cards => raw}/a1/095-raichu.json (100%) rename backend/data/{cards => raw}/a1/096-pikachu-ex.json (100%) rename backend/data/{cards => raw}/a1/097-magnemite.json (100%) rename backend/data/{cards => raw}/a1/098-magneton.json (100%) rename backend/data/{cards => raw}/a1/099-voltorb.json (100%) rename backend/data/{cards => raw}/a1/100-electrode.json (100%) rename backend/data/{cards => raw}/a1/101-electabuzz.json (100%) rename backend/data/{cards => raw}/a1/102-jolteon.json (100%) rename backend/data/{cards => raw}/a1/103-zapdos.json (100%) rename backend/data/{cards => raw}/a1/104-zapdos-ex.json (100%) rename backend/data/{cards => raw}/a1/105-blitzle.json (100%) rename backend/data/{cards => raw}/a1/106-zebstrika.json (100%) rename backend/data/{cards => raw}/a1/107-tynamo.json (100%) rename backend/data/{cards => raw}/a1/108-eelektrik.json (100%) rename backend/data/{cards => raw}/a1/109-eelektross.json (100%) rename backend/data/{cards => raw}/a1/110-helioptile.json (100%) rename backend/data/{cards => raw}/a1/111-heliolisk.json (100%) rename backend/data/{cards => raw}/a1/112-pincurchin.json (100%) rename backend/data/{cards => raw}/a1/113-clefairy.json (100%) rename backend/data/{cards => raw}/a1/114-clefable.json (100%) rename backend/data/{cards => raw}/a1/115-abra.json (100%) rename backend/data/{cards => raw}/a1/116-kadabra.json (100%) rename backend/data/{cards => raw}/a1/117-alakazam.json (100%) rename backend/data/{cards => raw}/a1/118-slowpoke.json (100%) rename backend/data/{cards => raw}/a1/119-slowbro.json (100%) rename backend/data/{cards => raw}/a1/120-gastly.json (100%) rename backend/data/{cards => raw}/a1/121-haunter.json (100%) rename backend/data/{cards => raw}/a1/122-gengar.json (100%) rename backend/data/{cards => raw}/a1/123-gengar-ex.json (100%) rename backend/data/{cards => raw}/a1/124-drowzee.json (100%) rename backend/data/{cards => raw}/a1/125-hypno.json (100%) rename backend/data/{cards => raw}/a1/126-mr-mime.json (100%) rename backend/data/{cards => raw}/a1/127-jynx.json (100%) rename backend/data/{cards => raw}/a1/128-mewtwo.json (100%) rename backend/data/{cards => raw}/a1/129-mewtwo-ex.json (100%) rename backend/data/{cards => raw}/a1/130-ralts.json (100%) rename backend/data/{cards => raw}/a1/131-kirlia.json (100%) rename backend/data/{cards => raw}/a1/132-gardevoir.json (100%) rename backend/data/{cards => raw}/a1/133-woobat.json (100%) rename backend/data/{cards => raw}/a1/134-swoobat.json (100%) rename backend/data/{cards => raw}/a1/135-golett.json (100%) rename backend/data/{cards => raw}/a1/136-golurk.json (100%) rename backend/data/{cards => raw}/a1/137-sandshrew.json (100%) rename backend/data/{cards => raw}/a1/138-sandslash.json (100%) rename backend/data/{cards => raw}/a1/139-diglett.json (100%) rename backend/data/{cards => raw}/a1/140-dugtrio.json (100%) rename backend/data/{cards => raw}/a1/141-mankey.json (100%) rename backend/data/{cards => raw}/a1/142-primeape.json (100%) rename backend/data/{cards => raw}/a1/143-machop.json (100%) rename backend/data/{cards => raw}/a1/144-machoke.json (100%) rename backend/data/{cards => raw}/a1/145-machamp.json (100%) rename backend/data/{cards => raw}/a1/146-machamp-ex.json (100%) rename backend/data/{cards => raw}/a1/147-geodude.json (100%) rename backend/data/{cards => raw}/a1/148-graveler.json (100%) rename backend/data/{cards => raw}/a1/149-golem.json (100%) rename backend/data/{cards => raw}/a1/150-onix.json (100%) rename backend/data/{cards => raw}/a1/151-cubone.json (100%) rename backend/data/{cards => raw}/a1/152-marowak.json (100%) rename backend/data/{cards => raw}/a1/153-marowak-ex.json (100%) rename backend/data/{cards => raw}/a1/154-hitmonlee.json (100%) rename backend/data/{cards => raw}/a1/155-hitmonchan.json (100%) rename backend/data/{cards => raw}/a1/156-rhyhorn.json (100%) rename backend/data/{cards => raw}/a1/157-rhydon.json (100%) rename backend/data/{cards => raw}/a1/158-kabuto.json (100%) rename backend/data/{cards => raw}/a1/159-kabutops.json (100%) rename backend/data/{cards => raw}/a1/160-mienfoo.json (100%) rename backend/data/{cards => raw}/a1/161-mienshao.json (100%) rename backend/data/{cards => raw}/a1/162-clobbopus.json (100%) rename backend/data/{cards => raw}/a1/163-grapploct.json (100%) rename backend/data/{cards => raw}/a1/164-ekans.json (100%) rename backend/data/{cards => raw}/a1/165-arbok.json (100%) rename backend/data/{cards => raw}/a1/166-nidoran.json (100%) rename backend/data/{cards => raw}/a1/167-nidorina.json (100%) rename backend/data/{cards => raw}/a1/168-nidoqueen.json (100%) rename backend/data/{cards => raw}/a1/169-nidoran.json (100%) rename backend/data/{cards => raw}/a1/170-nidorino.json (100%) rename backend/data/{cards => raw}/a1/171-nidoking.json (100%) rename backend/data/{cards => raw}/a1/172-zubat.json (100%) rename backend/data/{cards => raw}/a1/173-golbat.json (100%) rename backend/data/{cards => raw}/a1/174-grimer.json (100%) rename backend/data/{cards => raw}/a1/175-muk.json (100%) rename backend/data/{cards => raw}/a1/176-koffing.json (100%) rename backend/data/{cards => raw}/a1/177-weezing.json (100%) rename backend/data/{cards => raw}/a1/178-mawile.json (100%) rename backend/data/{cards => raw}/a1/179-pawniard.json (100%) rename backend/data/{cards => raw}/a1/180-bisharp.json (100%) rename backend/data/{cards => raw}/a1/181-meltan.json (100%) rename backend/data/{cards => raw}/a1/182-melmetal.json (100%) rename backend/data/{cards => raw}/a1/183-dratini.json (100%) rename backend/data/{cards => raw}/a1/184-dragonair.json (100%) rename backend/data/{cards => raw}/a1/185-dragonite.json (100%) rename backend/data/{cards => raw}/a1/186-pidgey.json (100%) rename backend/data/{cards => raw}/a1/187-pidgeotto.json (100%) rename backend/data/{cards => raw}/a1/188-pidgeot.json (100%) rename backend/data/{cards => raw}/a1/189-rattata.json (100%) rename backend/data/{cards => raw}/a1/190-raticate.json (100%) rename backend/data/{cards => raw}/a1/191-spearow.json (100%) rename backend/data/{cards => raw}/a1/192-fearow.json (100%) rename backend/data/{cards => raw}/a1/193-jigglypuff.json (100%) rename backend/data/{cards => raw}/a1/194-wigglytuff.json (100%) rename backend/data/{cards => raw}/a1/195-wigglytuff-ex.json (100%) rename backend/data/{cards => raw}/a1/196-meowth.json (100%) rename backend/data/{cards => raw}/a1/197-persian.json (100%) rename backend/data/{cards => raw}/a1/198-farfetchd.json (100%) rename backend/data/{cards => raw}/a1/199-doduo.json (100%) rename backend/data/{cards => raw}/a1/200-dodrio.json (100%) rename backend/data/{cards => raw}/a1/201-lickitung.json (100%) rename backend/data/{cards => raw}/a1/202-chansey.json (100%) rename backend/data/{cards => raw}/a1/203-kangaskhan.json (100%) rename backend/data/{cards => raw}/a1/204-tauros.json (100%) rename backend/data/{cards => raw}/a1/205-ditto.json (100%) rename backend/data/{cards => raw}/a1/206-eevee.json (100%) rename backend/data/{cards => raw}/a1/207-eevee.json (100%) rename backend/data/{cards => raw}/a1/208-eevee.json (100%) rename backend/data/{cards => raw}/a1/209-porygon.json (100%) rename backend/data/{cards => raw}/a1/210-aerodactyl.json (100%) rename backend/data/{cards => raw}/a1/211-snorlax.json (100%) rename backend/data/{cards => raw}/a1/212-minccino.json (100%) rename backend/data/{cards => raw}/a1/213-cinccino.json (100%) rename backend/data/{cards => raw}/a1/214-wooloo.json (100%) rename backend/data/{cards => raw}/a1/215-dubwool.json (100%) rename backend/data/{cards => raw}/a1/216-helix-fossil.json (100%) rename backend/data/{cards => raw}/a1/217-dome-fossil.json (100%) rename backend/data/{cards => raw}/a1/218-old-amber.json (100%) rename backend/data/{cards => raw}/a1/219-erika.json (100%) rename backend/data/{cards => raw}/a1/220-misty.json (100%) rename backend/data/{cards => raw}/a1/221-blaine.json (100%) rename backend/data/{cards => raw}/a1/222-koga.json (100%) rename backend/data/{cards => raw}/a1/223-giovanni.json (100%) rename backend/data/{cards => raw}/a1/224-brock.json (100%) rename backend/data/{cards => raw}/a1/225-sabrina.json (100%) rename backend/data/{cards => raw}/a1/226-lt-surge.json (100%) rename backend/data/{cards => raw}/a1/227-bulbasaur.json (100%) rename backend/data/{cards => raw}/a1/228-gloom.json (100%) rename backend/data/{cards => raw}/a1/229-pinsir.json (100%) rename backend/data/{cards => raw}/a1/230-charmander.json (100%) rename backend/data/{cards => raw}/a1/231-rapidash.json (100%) rename backend/data/{cards => raw}/a1/232-squirtle.json (100%) rename backend/data/{cards => raw}/a1/233-gyarados.json (100%) rename backend/data/{cards => raw}/a1/234-lapras.json (100%) rename backend/data/{cards => raw}/a1/235-electrode.json (100%) rename backend/data/{cards => raw}/a1/236-alakazam.json (100%) rename backend/data/{cards => raw}/a1/237-slowpoke.json (100%) rename backend/data/{cards => raw}/a1/238-diglett.json (100%) rename backend/data/{cards => raw}/a1/239-cubone.json (100%) rename backend/data/{cards => raw}/a1/240-nidoqueen.json (100%) rename backend/data/{cards => raw}/a1/241-nidoking.json (100%) rename backend/data/{cards => raw}/a1/242-golbat.json (100%) rename backend/data/{cards => raw}/a1/243-weezing.json (100%) rename backend/data/{cards => raw}/a1/244-dragonite.json (100%) rename backend/data/{cards => raw}/a1/245-pidgeot.json (100%) rename backend/data/{cards => raw}/a1/246-meowth.json (100%) rename backend/data/{cards => raw}/a1/247-ditto.json (100%) rename backend/data/{cards => raw}/a1/248-eevee.json (100%) rename backend/data/{cards => raw}/a1/249-porygon.json (100%) rename backend/data/{cards => raw}/a1/250-snorlax.json (100%) rename backend/data/{cards => raw}/a1/251-venusaur-ex.json (100%) rename backend/data/{cards => raw}/a1/252-exeggutor-ex.json (100%) rename backend/data/{cards => raw}/a1/253-charizard-ex.json (100%) rename backend/data/{cards => raw}/a1/254-arcanine-ex.json (100%) rename backend/data/{cards => raw}/a1/255-moltres-ex.json (100%) rename backend/data/{cards => raw}/a1/256-blastoise-ex.json (100%) rename backend/data/{cards => raw}/a1/257-starmie-ex.json (100%) rename backend/data/{cards => raw}/a1/258-articuno-ex.json (100%) rename backend/data/{cards => raw}/a1/259-pikachu-ex.json (100%) rename backend/data/{cards => raw}/a1/260-zapdos-ex.json (100%) rename backend/data/{cards => raw}/a1/261-gengar-ex.json (100%) rename backend/data/{cards => raw}/a1/262-mewtwo-ex.json (100%) rename backend/data/{cards => raw}/a1/263-machamp-ex.json (100%) rename backend/data/{cards => raw}/a1/264-marowak-ex.json (100%) rename backend/data/{cards => raw}/a1/265-wigglytuff-ex.json (100%) rename backend/data/{cards => raw}/a1/266-erika.json (100%) rename backend/data/{cards => raw}/a1/267-misty.json (100%) rename backend/data/{cards => raw}/a1/268-blaine.json (100%) rename backend/data/{cards => raw}/a1/269-koga.json (100%) rename backend/data/{cards => raw}/a1/270-giovanni.json (100%) rename backend/data/{cards => raw}/a1/271-brock.json (100%) rename backend/data/{cards => raw}/a1/272-sabrina.json (100%) rename backend/data/{cards => raw}/a1/273-lt-surge.json (100%) rename backend/data/{cards => raw}/a1/274-moltres-ex.json (100%) rename backend/data/{cards => raw}/a1/275-articuno-ex.json (100%) rename backend/data/{cards => raw}/a1/276-zapdos-ex.json (100%) rename backend/data/{cards => raw}/a1/277-gengar-ex.json (100%) rename backend/data/{cards => raw}/a1/278-machamp-ex.json (100%) rename backend/data/{cards => raw}/a1/279-wigglytuff-ex.json (100%) rename backend/data/{cards => raw}/a1/280-charizard-ex.json (100%) rename backend/data/{cards => raw}/a1/281-pikachu-ex.json (100%) rename backend/data/{cards => raw}/a1/282-mewtwo-ex.json (100%) rename backend/data/{cards => raw}/a1/283-mew.json (100%) rename backend/data/{cards => raw}/a1/284-charizard-ex.json (100%) rename backend/data/{cards => raw}/a1/285-pikachu-ex.json (100%) rename backend/data/{cards => raw}/a1/286-mewtwo-ex.json (100%) rename backend/data/{cards => raw}/a1a/001-exeggcute.json (100%) rename backend/data/{cards => raw}/a1a/002-exeggutor.json (100%) rename backend/data/{cards => raw}/a1a/003-celebi-ex.json (100%) rename backend/data/{cards => raw}/a1a/004-snivy.json (100%) rename backend/data/{cards => raw}/a1a/005-servine.json (100%) rename backend/data/{cards => raw}/a1a/006-serperior.json (100%) rename backend/data/{cards => raw}/a1a/007-morelull.json (100%) rename backend/data/{cards => raw}/a1a/008-shiinotic.json (100%) rename backend/data/{cards => raw}/a1a/009-dhelmise.json (100%) rename backend/data/{cards => raw}/a1a/010-ponyta.json (100%) rename backend/data/{cards => raw}/a1a/011-rapidash.json (100%) rename backend/data/{cards => raw}/a1a/012-magmar.json (100%) rename backend/data/{cards => raw}/a1a/013-larvesta.json (100%) rename backend/data/{cards => raw}/a1a/014-volcarona.json (100%) rename backend/data/{cards => raw}/a1a/015-salandit.json (100%) rename backend/data/{cards => raw}/a1a/016-salazzle.json (100%) rename backend/data/{cards => raw}/a1a/017-magikarp.json (100%) rename backend/data/{cards => raw}/a1a/018-gyarados-ex.json (100%) rename backend/data/{cards => raw}/a1a/019-vaporeon.json (100%) rename backend/data/{cards => raw}/a1a/020-finneon.json (100%) rename backend/data/{cards => raw}/a1a/021-lumineon.json (100%) rename backend/data/{cards => raw}/a1a/022-chewtle.json (100%) rename backend/data/{cards => raw}/a1a/023-drednaw.json (100%) rename backend/data/{cards => raw}/a1a/024-cramorant.json (100%) rename backend/data/{cards => raw}/a1a/025-pikachu.json (100%) rename backend/data/{cards => raw}/a1a/026-raichu.json (100%) rename backend/data/{cards => raw}/a1a/027-electabuzz.json (100%) rename backend/data/{cards => raw}/a1a/028-joltik.json (100%) rename backend/data/{cards => raw}/a1a/029-galvantula.json (100%) rename backend/data/{cards => raw}/a1a/030-dedenne.json (100%) rename backend/data/{cards => raw}/a1a/031-mew.json (100%) rename backend/data/{cards => raw}/a1a/032-mew-ex.json (100%) rename backend/data/{cards => raw}/a1a/033-sigilyph.json (100%) rename backend/data/{cards => raw}/a1a/034-elgyem.json (100%) rename backend/data/{cards => raw}/a1a/035-beheeyem.json (100%) rename backend/data/{cards => raw}/a1a/036-flabebe.json (100%) rename backend/data/{cards => raw}/a1a/037-floette.json (100%) rename backend/data/{cards => raw}/a1a/038-florges.json (100%) rename backend/data/{cards => raw}/a1a/039-swirlix.json (100%) rename backend/data/{cards => raw}/a1a/040-slurpuff.json (100%) rename backend/data/{cards => raw}/a1a/041-mankey.json (100%) rename backend/data/{cards => raw}/a1a/042-primeape.json (100%) rename backend/data/{cards => raw}/a1a/043-geodude.json (100%) rename backend/data/{cards => raw}/a1a/044-graveler.json (100%) rename backend/data/{cards => raw}/a1a/045-golem.json (100%) rename backend/data/{cards => raw}/a1a/046-aerodactyl-ex.json (100%) rename backend/data/{cards => raw}/a1a/047-marshadow.json (100%) rename backend/data/{cards => raw}/a1a/048-stonjourner.json (100%) rename backend/data/{cards => raw}/a1a/049-koffing.json (100%) rename backend/data/{cards => raw}/a1a/050-weezing.json (100%) rename backend/data/{cards => raw}/a1a/051-purrloin.json (100%) rename backend/data/{cards => raw}/a1a/052-liepard.json (100%) rename backend/data/{cards => raw}/a1a/053-venipede.json (100%) rename backend/data/{cards => raw}/a1a/054-whirlipede.json (100%) rename backend/data/{cards => raw}/a1a/055-scolipede.json (100%) rename backend/data/{cards => raw}/a1a/056-druddigon.json (100%) rename backend/data/{cards => raw}/a1a/057-pidgey.json (100%) rename backend/data/{cards => raw}/a1a/058-pidgeotto.json (100%) rename backend/data/{cards => raw}/a1a/059-pidgeot-ex.json (100%) rename backend/data/{cards => raw}/a1a/060-tauros.json (100%) rename backend/data/{cards => raw}/a1a/061-eevee.json (100%) rename backend/data/{cards => raw}/a1a/062-chatot.json (100%) rename backend/data/{cards => raw}/a1a/063-old-amber.json (100%) rename backend/data/{cards => raw}/a1a/064-pokemon-flute.json (100%) rename backend/data/{cards => raw}/a1a/065-mythical-slab.json (100%) rename backend/data/{cards => raw}/a1a/066-budding-expeditioner.json (100%) rename backend/data/{cards => raw}/a1a/067-blue.json (100%) rename backend/data/{cards => raw}/a1a/068-leaf.json (100%) rename backend/data/{cards => raw}/a1a/069-exeggutor.json (100%) rename backend/data/{cards => raw}/a1a/070-serperior.json (100%) rename backend/data/{cards => raw}/a1a/071-salandit.json (100%) rename backend/data/{cards => raw}/a1a/072-vaporeon.json (100%) rename backend/data/{cards => raw}/a1a/073-dedenne.json (100%) rename backend/data/{cards => raw}/a1a/074-marshadow.json (100%) rename backend/data/{cards => raw}/a1a/075-celebi-ex.json (100%) rename backend/data/{cards => raw}/a1a/076-gyarados-ex.json (100%) rename backend/data/{cards => raw}/a1a/077-mew-ex.json (100%) rename backend/data/{cards => raw}/a1a/078-aerodactyl-ex.json (100%) rename backend/data/{cards => raw}/a1a/079-pidgeot-ex.json (100%) rename backend/data/{cards => raw}/a1a/080-budding-expeditioner.json (100%) rename backend/data/{cards => raw}/a1a/081-blue.json (100%) rename backend/data/{cards => raw}/a1a/082-leaf.json (100%) rename backend/data/{cards => raw}/a1a/083-mew-ex.json (100%) rename backend/data/{cards => raw}/a1a/084-aerodactyl-ex.json (100%) rename backend/data/{cards => raw}/a1a/085-celebi-ex.json (100%) rename backend/data/{cards => raw}/a1a/086-mew-ex.json (100%) create mode 100644 backend/scripts/convert_cards.py create mode 100644 backend/tests/scripts/__init__.py create mode 100644 backend/tests/scripts/test_convert_cards.py create mode 100644 backend/tests/services/test_card_service.py diff --git a/backend/app/core/models/card.py b/backend/app/core/models/card.py index ae30098..2d3ac3a 100644 --- a/backend/app/core/models/card.py +++ b/backend/app/core/models/card.py @@ -55,6 +55,8 @@ class Attack(BaseModel): cost: List of energy types required to use this attack. Colorless can be satisfied by any energy type. damage: Base damage dealt by this attack. May be modified by effects. + damage_display: UI display string for variable damage (e.g., "30+", "50x"). + Used when damage can vary based on conditions. If None, just show damage value. effect_id: Optional reference to an effect handler for special effects. effect_params: Parameters passed to the effect handler. effect_description: Human-readable description of the effect. @@ -63,6 +65,7 @@ class Attack(BaseModel): name: str cost: list[EnergyType] = Field(default_factory=list) damage: int = 0 + damage_display: str | None = None effect_id: str | None = None effect_params: dict[str, Any] = Field(default_factory=dict) effect_description: str | None = None @@ -196,7 +199,10 @@ class CardDefinition(BaseModel): Basic energy provides one of its type. Special energy may provide multiple. rarity: Card rarity (common, uncommon, rare, etc.). set_id: Which card set this belongs to. - image_url: URL to the card image. + image_url: URL to the card image (CDN). + image_path: Local path to the card image (e.g., "pokemon/a1/001-bulbasaur.webp"). + illustrator: Artist who illustrated this card. + flavor_text: Flavor text on the card (Pokemon only, typically). """ id: str @@ -229,6 +235,9 @@ class CardDefinition(BaseModel): rarity: str = "common" set_id: str = "" image_url: str | None = None + image_path: str | None = None # Local path: "pokemon/a1/001-bulbasaur.webp" + illustrator: str | None = None + flavor_text: str | None = None @model_validator(mode="after") def validate_card_type_fields(self) -> "CardDefinition": diff --git a/backend/app/services/__init__.py b/backend/app/services/__init__.py index 1edcaaa..daf9ba5 100644 --- a/backend/app/services/__init__.py +++ b/backend/app/services/__init__.py @@ -11,9 +11,13 @@ Services in this module: - CardService: Load and lookup card definitions from bundled JSON """ +from app.services.card_service import CardService, SetInfo, get_card_service from app.services.game_state_manager import GameStateManager, game_state_manager __all__ = [ + "CardService", "GameStateManager", + "SetInfo", "game_state_manager", + "get_card_service", ] diff --git a/backend/app/services/card_service.py b/backend/app/services/card_service.py new file mode 100644 index 0000000..8e135ec --- /dev/null +++ b/backend/app/services/card_service.py @@ -0,0 +1,379 @@ +"""Card service for loading and serving card definitions. + +This service loads card definitions from JSON files in data/definitions/ and +serves them to the game engine and other parts of the application. + +Cards are loaded into memory at startup for fast lookups. The service maintains +several indexes for efficient querying by type, set, and other criteria. + +Usage: + card_service = CardService() + await card_service.load_all() + + # Get a single card + pikachu = card_service.get_card("a1-025-pikachu") + + # Get all cards for game engine + registry = card_service.get_all_cards() + + # Search cards + grass_pokemon = card_service.search( + card_type=CardType.POKEMON, + pokemon_type=EnergyType.GRASS, + ) +""" + +from __future__ import annotations + +import json +import logging +from pathlib import Path +from typing import TYPE_CHECKING + +from pydantic import BaseModel + +from app.core.enums import CardType, EnergyType, PokemonStage, PokemonVariant +from app.core.models.card import CardDefinition + +if TYPE_CHECKING: + pass + +logger = logging.getLogger(__name__) + +# TODO: Update CDN_BASE_URL when CDN is configured +CDN_BASE_URL = "https://cdn.mantimon.com/cards" + + +class SetInfo(BaseModel): + """Metadata about a card set. + + Attributes: + code: Unique identifier for the set (e.g., "a1"). + name: Display name of the set (e.g., "Genetic Apex"). + card_count: Total number of cards in this set. + """ + + code: str + name: str + card_count: int + + +class CardService: + """Load and serve card definitions from JSON files. + + This service loads all card definitions into memory at startup for fast + lookups. Cards are immutable after loading - all lookups are in-memory. + + The service maintains several indexes for efficient querying: + - By ID: O(1) lookup for any card + - By type: O(1) to get all Pokemon, Trainers, or Energy + - By set: O(1) to get all cards from a set + - By Pokemon type: O(1) to get all Pokemon of a specific type + + Attributes: + definitions_dir: Path to the definitions directory. + """ + + def __init__(self, definitions_dir: Path | None = None) -> None: + """Initialize the card service. + + Args: + definitions_dir: Path to the data/definitions directory. + If None, uses the default location relative to this file. + """ + if definitions_dir is None: + # Default: backend/data/definitions/ + self._definitions_dir = Path(__file__).parent.parent.parent / "data" / "definitions" + else: + self._definitions_dir = definitions_dir + + # Primary storage + self._cards: dict[str, CardDefinition] = {} + + # Indexes for fast querying + self._by_type: dict[CardType, list[str]] = {t: [] for t in CardType} + self._by_set: dict[str, list[str]] = {} + self._by_pokemon_type: dict[EnergyType, list[str]] = {t: [] for t in EnergyType} + + # Set metadata + self._sets: list[SetInfo] = [] + + # Load state + self._loaded: bool = False + + async def load_all(self) -> None: + """Load all card definitions into memory. + + This should be called once at application startup. After loading, + all card lookups are synchronous in-memory operations. + + Raises: + FileNotFoundError: If the definitions directory doesn't exist. + ValueError: If any card definition is invalid. + """ + if self._loaded: + logger.warning("CardService.load_all() called but cards already loaded") + return + + if not self._definitions_dir.exists(): + raise FileNotFoundError(f"Definitions directory not found: {self._definitions_dir}") + + # Load index file for set metadata + index_path = self._definitions_dir / "_index.json" + if index_path.exists(): + with open(index_path) as f: + index_data = json.load(f) + for set_code, set_info in index_data.get("sets", {}).items(): + self._sets.append( + SetInfo( + code=set_code, + name=set_info.get("name", set_code), + card_count=set_info.get("card_count", 0), + ) + ) + + # Load Pokemon cards + await self._load_card_type("pokemon", CardType.POKEMON) + + # Load Trainer cards + await self._load_card_type("trainer", CardType.TRAINER) + + # Load Energy cards + await self._load_energy_cards() + + self._loaded = True + logger.info( + f"CardService loaded {len(self._cards)} cards " + f"({len(self._by_type[CardType.POKEMON])} Pokemon, " + f"{len(self._by_type[CardType.TRAINER])} Trainers, " + f"{len(self._by_type[CardType.ENERGY])} Energy)" + ) + + async def _load_card_type(self, subdir: str, card_type: CardType) -> None: + """Load all cards of a specific type from a subdirectory. + + Args: + subdir: Subdirectory name (e.g., "pokemon", "trainer"). + card_type: The CardType these cards should be. + """ + type_dir = self._definitions_dir / subdir + if not type_dir.exists(): + logger.debug(f"Directory {type_dir} does not exist, skipping") + return + + for set_dir in type_dir.iterdir(): + if not set_dir.is_dir(): + continue + + set_code = set_dir.name + if set_code not in self._by_set: + self._by_set[set_code] = [] + + for card_file in set_dir.glob("*.json"): + card = await self._load_card_file(card_file) + if card: + self._index_card(card) + + async def _load_energy_cards(self) -> None: + """Load energy cards from the energy subdirectory.""" + energy_dir = self._definitions_dir / "energy" + if not energy_dir.exists(): + logger.debug(f"Directory {energy_dir} does not exist, skipping") + return + + # Energy can be in subdirectories (e.g., energy/basic/) or directly in energy/ + for item in energy_dir.iterdir(): + if item.is_file() and item.suffix == ".json": + card = await self._load_card_file(item) + if card: + self._index_card(card) + elif item.is_dir(): + for card_file in item.glob("*.json"): + card = await self._load_card_file(card_file) + if card: + self._index_card(card) + + async def _load_card_file(self, file_path: Path) -> CardDefinition | None: + """Load and validate a single card definition file. + + Args: + file_path: Path to the JSON file. + + Returns: + CardDefinition if valid, None if loading failed. + """ + try: + with open(file_path) as f: + card_data = json.load(f) + return CardDefinition.model_validate(card_data) + except Exception as e: + logger.error(f"Failed to load card from {file_path}: {e}") + return None + + def _index_card(self, card: CardDefinition) -> None: + """Add a card to all indexes. + + Args: + card: The CardDefinition to index. + """ + # Primary storage + self._cards[card.id] = card + + # Type index + self._by_type[card.card_type].append(card.id) + + # Set index + if card.set_id: + if card.set_id not in self._by_set: + self._by_set[card.set_id] = [] + self._by_set[card.set_id].append(card.id) + + # Pokemon type index (for Pokemon cards only) + if card.card_type == CardType.POKEMON and card.pokemon_type: + self._by_pokemon_type[card.pokemon_type].append(card.id) + + def get_card(self, card_id: str) -> CardDefinition | None: + """Get a card by its ID. + + Args: + card_id: Unique card identifier (e.g., "a1-025-pikachu"). + + Returns: + CardDefinition if found, None otherwise. + """ + return self._cards.get(card_id) + + def get_all_cards(self) -> dict[str, CardDefinition]: + """Get all cards as a registry dict. + + This is the format expected by GameEngine.create_game(). + + Returns: + Dictionary mapping card ID to CardDefinition. + """ + return self._cards.copy() + + def get_cards_by_ids(self, card_ids: list[str]) -> list[CardDefinition]: + """Get multiple cards by their IDs. + + Args: + card_ids: List of card IDs to retrieve. + + Returns: + List of CardDefinitions in the same order as input. + + Raises: + KeyError: If any card ID is not found. + """ + result = [] + for card_id in card_ids: + card = self._cards.get(card_id) + if card is None: + raise KeyError(f"Card not found: {card_id}") + result.append(card) + return result + + def search( + self, + name: str | None = None, + card_type: CardType | None = None, + pokemon_type: EnergyType | None = None, + set_id: str | None = None, + stage: PokemonStage | None = None, + variant: PokemonVariant | None = None, + ) -> list[CardDefinition]: + """Search cards by various criteria. + + All provided criteria are AND-ed together. Omitted criteria match all cards. + + Args: + name: Partial name match (case-insensitive). + card_type: Filter by card type (Pokemon, Trainer, Energy). + pokemon_type: Filter by Pokemon energy type (e.g., GRASS, FIRE). + set_id: Filter by set code (e.g., "a1"). + stage: Filter by Pokemon stage (BASIC, STAGE_1, STAGE_2). + variant: Filter by Pokemon variant (NORMAL, EX, etc.). + + Returns: + List of matching CardDefinitions. + """ + # Start with the smallest candidate set based on indexed filters + if pokemon_type is not None: + candidate_ids = set(self._by_pokemon_type.get(pokemon_type, [])) + elif card_type is not None: + candidate_ids = set(self._by_type.get(card_type, [])) + elif set_id is not None: + candidate_ids = set(self._by_set.get(set_id, [])) + else: + candidate_ids = set(self._cards.keys()) + + results = [] + for card_id in candidate_ids: + card = self._cards[card_id] + + # Apply all filters + if card_type is not None and card.card_type != card_type: + continue + if pokemon_type is not None and card.pokemon_type != pokemon_type: + continue + if set_id is not None and card.set_id != set_id: + continue + if stage is not None and card.stage != stage: + continue + if variant is not None and card.variant != variant: + continue + if name is not None and name.lower() not in card.name.lower(): + continue + + results.append(card) + + return results + + def get_set_cards(self, set_id: str) -> list[CardDefinition]: + """Get all cards from a specific set. + + Args: + set_id: Set code (e.g., "a1", "a1a"). + + Returns: + List of CardDefinitions from that set. + """ + card_ids = self._by_set.get(set_id, []) + return [self._cards[card_id] for card_id in card_ids] + + def get_sets(self) -> list[SetInfo]: + """Get list of available sets with metadata. + + Returns: + List of SetInfo objects. + """ + return self._sets.copy() + + @property + def card_count(self) -> int: + """Total number of loaded cards.""" + return len(self._cards) + + @property + def is_loaded(self) -> bool: + """Whether cards have been loaded.""" + return self._loaded + + +# Singleton instance for application use +_card_service: CardService | None = None + + +def get_card_service() -> CardService: + """Get the global CardService instance. + + Creates the instance if it doesn't exist. Note that load_all() must still + be called before using the service. + + Returns: + The global CardService instance. + """ + global _card_service + if _card_service is None: + _card_service = CardService() + return _card_service diff --git a/backend/data/definitions/README.md b/backend/data/definitions/README.md new file mode 100644 index 0000000..a2a8545 --- /dev/null +++ b/backend/data/definitions/README.md @@ -0,0 +1,42 @@ +# Card Definitions (Authoritative) + +These JSON files are the **authoritative source** for card data used by the game engine. +Edit these files for gameplay changes. + +## Structure + +``` +definitions/ +├── _index.json # Master index with all cards + set metadata +├── pokemon/ +│ ├── a1/ # Pokemon from Genetic Apex +│ └── a1a/ # Pokemon from Mythical Island +├── trainer/ +│ ├── a1/ # Trainers from Genetic Apex +│ └── a1a/ # Trainers from Mythical Island +└── energy/ + └── basic/ # Universal basic energy cards +``` + +## Generating Definitions + +Definitions are generated from raw scraped data: + +```bash +cd backend +python scripts/convert_cards.py +``` + +After generation, you can manually edit files for corrections or gameplay tweaks. + +## Schema + +Each JSON file conforms to the `CardDefinition` Pydantic model in `app/core/models/card.py`. + +Key fields: +- `id`: Unique identifier (e.g., "a1-001-bulbasaur") +- `name`: Display name +- `card_type`: "pokemon", "trainer", or "energy" +- `set_id`: Which set this card belongs to + +See the model documentation for complete field descriptions. diff --git a/backend/data/definitions/_index.json b/backend/data/definitions/_index.json new file mode 100644 index 0000000..6d9dada --- /dev/null +++ b/backend/data/definitions/_index.json @@ -0,0 +1,2296 @@ +{ + "generated_at": "2026-01-27T19:50:50.134913+00:00", + "schema_version": "1.0", + "total_cards": 378, + "sets": { + "a1": { + "name": "Genetic Apex", + "card_count": 283, + "pokemon_count": 267, + "trainer_count": 16 + }, + "a1a": { + "name": "Mythical Island", + "card_count": 85, + "pokemon_count": 77, + "trainer_count": 8 + }, + "basic": { + "name": "Basic Energy", + "card_count": 10, + "pokemon_count": 0, + "trainer_count": 0, + "energy_count": 10 + } + }, + "cards": [ + { + "id": "a1-001-bulbasaur", + "name": "Bulbasaur", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-002-ivysaur", + "name": "Ivysaur", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-003-venusaur", + "name": "Venusaur", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-004-venusaur-ex", + "name": "Venusaur ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-005-caterpie", + "name": "Caterpie", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-006-metapod", + "name": "Metapod", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-007-butterfree", + "name": "Butterfree", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-008-weedle", + "name": "Weedle", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-009-kakuna", + "name": "Kakuna", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-010-beedrill", + "name": "Beedrill", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-011-oddish", + "name": "Oddish", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-012-gloom", + "name": "Gloom", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-013-vileplume", + "name": "Vileplume", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-014-paras", + "name": "Paras", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-015-parasect", + "name": "Parasect", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-016-venonat", + "name": "Venonat", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-017-venomoth", + "name": "Venomoth", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-018-bellsprout", + "name": "Bellsprout", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-019-weepinbell", + "name": "Weepinbell", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-020-victreebel", + "name": "Victreebel", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-021-exeggcute", + "name": "Exeggcute", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-022-exeggutor", + "name": "Exeggutor", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-023-exeggutor-ex", + "name": "Exeggutor ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-024-tangela", + "name": "Tangela", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-025-scyther", + "name": "Scyther", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-026-pinsir", + "name": "Pinsir", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-027-cottonee", + "name": "Cottonee", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-028-whimsicott", + "name": "Whimsicott", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-029-petilil", + "name": "Petilil", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-030-lilligant", + "name": "Lilligant", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-031-skiddo", + "name": "Skiddo", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-032-gogoat", + "name": "Gogoat", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-033-charmander", + "name": "Charmander", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-034-charmeleon", + "name": "Charmeleon", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-035-charizard", + "name": "Charizard", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-036-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-037-vulpix", + "name": "Vulpix", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-038-ninetales", + "name": "Ninetales", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-039-growlithe", + "name": "Growlithe", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-040-arcanine", + "name": "Arcanine", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-041-arcanine-ex", + "name": "Arcanine ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-042-ponyta", + "name": "Ponyta", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-043-rapidash", + "name": "Rapidash", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-044-magmar", + "name": "Magmar", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-045-flareon", + "name": "Flareon", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-046-moltres", + "name": "Moltres", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-047-moltres-ex", + "name": "Moltres ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-048-heatmor", + "name": "Heatmor", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-049-salandit", + "name": "Salandit", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-050-salazzle", + "name": "Salazzle", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-051-sizzlipede", + "name": "Sizzlipede", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-052-centiskorch", + "name": "Centiskorch", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-053-squirtle", + "name": "Squirtle", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-054-wartortle", + "name": "Wartortle", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-055-blastoise", + "name": "Blastoise", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-056-blastoise-ex", + "name": "Blastoise ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-057-psyduck", + "name": "Psyduck", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-058-golduck", + "name": "Golduck", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-059-poliwag", + "name": "Poliwag", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-060-poliwhirl", + "name": "Poliwhirl", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-061-poliwrath", + "name": "Poliwrath", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-062-tentacool", + "name": "Tentacool", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-063-tentacruel", + "name": "Tentacruel", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-064-seel", + "name": "Seel", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-065-dewgong", + "name": "Dewgong", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-066-shellder", + "name": "Shellder", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-067-cloyster", + "name": "Cloyster", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-068-krabby", + "name": "Krabby", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-069-kingler", + "name": "Kingler", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-070-horsea", + "name": "Horsea", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-071-seadra", + "name": "Seadra", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-072-goldeen", + "name": "Goldeen", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-073-seaking", + "name": "Seaking", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-074-staryu", + "name": "Staryu", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-075-starmie", + "name": "Starmie", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-076-starmie-ex", + "name": "Starmie ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-077-magikarp", + "name": "Magikarp", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-078-gyarados", + "name": "Gyarados", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-079-lapras", + "name": "Lapras", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-080-vaporeon", + "name": "Vaporeon", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-081-omanyte", + "name": "Omanyte", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-082-omastar", + "name": "Omastar", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-083-articuno", + "name": "Articuno", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-084-articuno-ex", + "name": "Articuno ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-085-ducklett", + "name": "Ducklett", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-086-swanna", + "name": "Swanna", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-087-froakie", + "name": "Froakie", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-088-frogadier", + "name": "Frogadier", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-089-greninja", + "name": "Greninja", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-090-pyukumuku", + "name": "Pyukumuku", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-091-bruxish", + "name": "Bruxish", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-092-snom", + "name": "Snom", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-093-frosmoth", + "name": "Frosmoth", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-094-pikachu", + "name": "Pikachu", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-095-raichu", + "name": "Raichu", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-096-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-097-magnemite", + "name": "Magnemite", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-098-magneton", + "name": "Magneton", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-099-voltorb", + "name": "Voltorb", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-100-electrode", + "name": "Electrode", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-101-electabuzz", + "name": "Electabuzz", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-102-jolteon", + "name": "Jolteon", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-103-zapdos", + "name": "Zapdos", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-104-zapdos-ex", + "name": "Zapdos ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-105-blitzle", + "name": "Blitzle", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-106-zebstrika", + "name": "Zebstrika", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-107-tynamo", + "name": "Tynamo", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-108-eelektrik", + "name": "Eelektrik", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-109-eelektross", + "name": "Eelektross", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-110-helioptile", + "name": "Helioptile", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-111-heliolisk", + "name": "Heliolisk", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-112-pincurchin", + "name": "Pincurchin", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-113-clefairy", + "name": "Clefairy", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-114-clefable", + "name": "Clefable", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-115-abra", + "name": "Abra", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-116-kadabra", + "name": "Kadabra", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-117-alakazam", + "name": "Alakazam", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-118-slowpoke", + "name": "Slowpoke", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-119-slowbro", + "name": "Slowbro", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-120-gastly", + "name": "Gastly", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-121-haunter", + "name": "Haunter", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-122-gengar", + "name": "Gengar", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-123-gengar-ex", + "name": "Gengar ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-124-drowzee", + "name": "Drowzee", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-125-hypno", + "name": "Hypno", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-126-mr-mime", + "name": "Mr. Mime", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-127-jynx", + "name": "Jynx", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-128-mewtwo", + "name": "Mewtwo", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-129-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-130-ralts", + "name": "Ralts", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-131-kirlia", + "name": "Kirlia", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-132-gardevoir", + "name": "Gardevoir", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-133-woobat", + "name": "Woobat", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-134-swoobat", + "name": "Swoobat", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-135-golett", + "name": "Golett", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-136-golurk", + "name": "Golurk", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-137-sandshrew", + "name": "Sandshrew", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-138-sandslash", + "name": "Sandslash", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-139-diglett", + "name": "Diglett", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-140-dugtrio", + "name": "Dugtrio", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-141-mankey", + "name": "Mankey", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-142-primeape", + "name": "Primeape", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-143-machop", + "name": "Machop", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-144-machoke", + "name": "Machoke", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-145-machamp", + "name": "Machamp", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-146-machamp-ex", + "name": "Machamp ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-147-geodude", + "name": "Geodude", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-148-graveler", + "name": "Graveler", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-149-golem", + "name": "Golem", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-150-onix", + "name": "Onix", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-151-cubone", + "name": "Cubone", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-152-marowak", + "name": "Marowak", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-153-marowak-ex", + "name": "Marowak ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-154-hitmonlee", + "name": "Hitmonlee", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-155-hitmonchan", + "name": "Hitmonchan", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-156-rhyhorn", + "name": "Rhyhorn", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-157-rhydon", + "name": "Rhydon", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-158-kabuto", + "name": "Kabuto", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-159-kabutops", + "name": "Kabutops", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-160-mienfoo", + "name": "Mienfoo", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-161-mienshao", + "name": "Mienshao", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-162-clobbopus", + "name": "Clobbopus", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-163-grapploct", + "name": "Grapploct", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-164-ekans", + "name": "Ekans", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-165-arbok", + "name": "Arbok", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-166-nidoran", + "name": "Nidoran\u2640", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-167-nidorina", + "name": "Nidorina", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-168-nidoqueen", + "name": "Nidoqueen", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-169-nidoran", + "name": "Nidoran\u2642", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-170-nidorino", + "name": "Nidorino", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-171-nidoking", + "name": "Nidoking", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-172-zubat", + "name": "Zubat", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-173-golbat", + "name": "Golbat", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-174-grimer", + "name": "Grimer", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-175-muk", + "name": "Muk", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-176-koffing", + "name": "Koffing", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-177-weezing", + "name": "Weezing", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-178-mawile", + "name": "Mawile", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-179-pawniard", + "name": "Pawniard", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-180-bisharp", + "name": "Bisharp", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-181-meltan", + "name": "Meltan", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-182-melmetal", + "name": "Melmetal", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-183-dratini", + "name": "Dratini", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-184-dragonair", + "name": "Dragonair", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-185-dragonite", + "name": "Dragonite", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-186-pidgey", + "name": "Pidgey", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-187-pidgeotto", + "name": "Pidgeotto", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-188-pidgeot", + "name": "Pidgeot", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-189-rattata", + "name": "Rattata", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-190-raticate", + "name": "Raticate", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-191-spearow", + "name": "Spearow", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-192-fearow", + "name": "Fearow", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-193-jigglypuff", + "name": "Jigglypuff", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-194-wigglytuff", + "name": "Wigglytuff", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-195-wigglytuff-ex", + "name": "Wigglytuff ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-196-meowth", + "name": "Meowth", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-197-persian", + "name": "Persian", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-198-farfetchd", + "name": "Farfetch\u2019d", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-199-doduo", + "name": "Doduo", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-200-dodrio", + "name": "Dodrio", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-201-lickitung", + "name": "Lickitung", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-202-chansey", + "name": "Chansey", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-203-kangaskhan", + "name": "Kangaskhan", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-204-tauros", + "name": "Tauros", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-205-ditto", + "name": "Ditto", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-206-eevee", + "name": "Eevee", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-207-eevee", + "name": "Eevee", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-208-eevee", + "name": "Eevee", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-209-porygon", + "name": "Porygon", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-210-aerodactyl", + "name": "Aerodactyl", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-211-snorlax", + "name": "Snorlax", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-212-minccino", + "name": "Minccino", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-213-cinccino", + "name": "Cinccino", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-214-wooloo", + "name": "Wooloo", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-215-dubwool", + "name": "Dubwool", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-219-erika", + "name": "Erika", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-220-misty", + "name": "Misty", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-221-blaine", + "name": "Blaine", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-222-koga", + "name": "Koga", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-223-giovanni", + "name": "Giovanni", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-224-brock", + "name": "Brock", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-225-sabrina", + "name": "Sabrina", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-226-lt-surge", + "name": "Lt. Surge", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-227-bulbasaur", + "name": "Bulbasaur", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-228-gloom", + "name": "Gloom", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-229-pinsir", + "name": "Pinsir", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-230-charmander", + "name": "Charmander", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-231-rapidash", + "name": "Rapidash", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-232-squirtle", + "name": "Squirtle", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-233-gyarados", + "name": "Gyarados", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-234-lapras", + "name": "Lapras", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-235-electrode", + "name": "Electrode", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-236-alakazam", + "name": "Alakazam", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-237-slowpoke", + "name": "Slowpoke", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-238-diglett", + "name": "Diglett", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-239-cubone", + "name": "Cubone", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-240-nidoqueen", + "name": "Nidoqueen", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-241-nidoking", + "name": "Nidoking", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-242-golbat", + "name": "Golbat", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-243-weezing", + "name": "Weezing", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-244-dragonite", + "name": "Dragonite", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-245-pidgeot", + "name": "Pidgeot", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-246-meowth", + "name": "Meowth", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-247-ditto", + "name": "Ditto", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-248-eevee", + "name": "Eevee", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-249-porygon", + "name": "Porygon", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-250-snorlax", + "name": "Snorlax", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-251-venusaur-ex", + "name": "Venusaur ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-252-exeggutor-ex", + "name": "Exeggutor ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-253-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-254-arcanine-ex", + "name": "Arcanine ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-255-moltres-ex", + "name": "Moltres ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-256-blastoise-ex", + "name": "Blastoise ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-257-starmie-ex", + "name": "Starmie ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-258-articuno-ex", + "name": "Articuno ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-259-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-260-zapdos-ex", + "name": "Zapdos ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-261-gengar-ex", + "name": "Gengar ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-262-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-263-machamp-ex", + "name": "Machamp ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-264-marowak-ex", + "name": "Marowak ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-265-wigglytuff-ex", + "name": "Wigglytuff ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-266-erika", + "name": "Erika", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-267-misty", + "name": "Misty", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-268-blaine", + "name": "Blaine", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-269-koga", + "name": "Koga", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-270-giovanni", + "name": "Giovanni", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-271-brock", + "name": "Brock", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-272-sabrina", + "name": "Sabrina", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-273-lt-surge", + "name": "Lt. Surge", + "card_type": "trainer", + "set_id": "a1" + }, + { + "id": "a1-274-moltres-ex", + "name": "Moltres ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-275-articuno-ex", + "name": "Articuno ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-276-zapdos-ex", + "name": "Zapdos ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-277-gengar-ex", + "name": "Gengar ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-278-machamp-ex", + "name": "Machamp ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-279-wigglytuff-ex", + "name": "Wigglytuff ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-280-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-281-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-282-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-283-mew", + "name": "Mew", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-284-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-285-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1-286-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "set_id": "a1" + }, + { + "id": "a1a-001-exeggcute", + "name": "Exeggcute", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-002-exeggutor", + "name": "Exeggutor", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-003-celebi-ex", + "name": "Celebi ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-004-snivy", + "name": "Snivy", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-005-servine", + "name": "Servine", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-006-serperior", + "name": "Serperior", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-007-morelull", + "name": "Morelull", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-008-shiinotic", + "name": "Shiinotic", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-009-dhelmise", + "name": "Dhelmise", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-010-ponyta", + "name": "Ponyta", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-011-rapidash", + "name": "Rapidash", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-012-magmar", + "name": "Magmar", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-013-larvesta", + "name": "Larvesta", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-014-volcarona", + "name": "Volcarona", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-015-salandit", + "name": "Salandit", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-016-salazzle", + "name": "Salazzle", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-017-magikarp", + "name": "Magikarp", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-018-gyarados-ex", + "name": "Gyarados ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-019-vaporeon", + "name": "Vaporeon", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-020-finneon", + "name": "Finneon", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-021-lumineon", + "name": "Lumineon", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-022-chewtle", + "name": "Chewtle", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-023-drednaw", + "name": "Drednaw", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-024-cramorant", + "name": "Cramorant", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-025-pikachu", + "name": "Pikachu", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-026-raichu", + "name": "Raichu", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-027-electabuzz", + "name": "Electabuzz", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-028-joltik", + "name": "Joltik", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-029-galvantula", + "name": "Galvantula", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-030-dedenne", + "name": "Dedenne", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-031-mew", + "name": "Mew", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-032-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-033-sigilyph", + "name": "Sigilyph", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-034-elgyem", + "name": "Elgyem", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-035-beheeyem", + "name": "Beheeyem", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-036-flabebe", + "name": "Flab\u00e9b\u00e9", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-037-floette", + "name": "Floette", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-038-florges", + "name": "Florges", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-039-swirlix", + "name": "Swirlix", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-040-slurpuff", + "name": "Slurpuff", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-041-mankey", + "name": "Mankey", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-042-primeape", + "name": "Primeape", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-043-geodude", + "name": "Geodude", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-044-graveler", + "name": "Graveler", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-045-golem", + "name": "Golem", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-046-aerodactyl-ex", + "name": "Aerodactyl ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-047-marshadow", + "name": "Marshadow", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-048-stonjourner", + "name": "Stonjourner", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-049-koffing", + "name": "Koffing", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-050-weezing", + "name": "Weezing", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-051-purrloin", + "name": "Purrloin", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-052-liepard", + "name": "Liepard", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-053-venipede", + "name": "Venipede", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-054-whirlipede", + "name": "Whirlipede", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-055-scolipede", + "name": "Scolipede", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-056-druddigon", + "name": "Druddigon", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-057-pidgey", + "name": "Pidgey", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-058-pidgeotto", + "name": "Pidgeotto", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-059-pidgeot-ex", + "name": "Pidgeot ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-060-tauros", + "name": "Tauros", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-061-eevee", + "name": "Eevee", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-062-chatot", + "name": "Chatot", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-064-pokemon-flute", + "name": "Pok\u00e9mon Flute", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-065-mythical-slab", + "name": "Mythical Slab", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-066-budding-expeditioner", + "name": "Budding Expeditioner", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-067-blue", + "name": "Blue", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-068-leaf", + "name": "Leaf", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-069-exeggutor", + "name": "Exeggutor", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-070-serperior", + "name": "Serperior", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-071-salandit", + "name": "Salandit", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-072-vaporeon", + "name": "Vaporeon", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-073-dedenne", + "name": "Dedenne", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-074-marshadow", + "name": "Marshadow", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-075-celebi-ex", + "name": "Celebi ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-076-gyarados-ex", + "name": "Gyarados ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-077-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-078-aerodactyl-ex", + "name": "Aerodactyl ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-079-pidgeot-ex", + "name": "Pidgeot ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-080-budding-expeditioner", + "name": "Budding Expeditioner", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-081-blue", + "name": "Blue", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-082-leaf", + "name": "Leaf", + "card_type": "trainer", + "set_id": "a1a" + }, + { + "id": "a1a-083-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-084-aerodactyl-ex", + "name": "Aerodactyl ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-085-celebi-ex", + "name": "Celebi ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "a1a-086-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "set_id": "a1a" + }, + { + "id": "energy-basic-colorless", + "name": "Colorless Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-darkness", + "name": "Darkness Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-dragon", + "name": "Dragon Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-fighting", + "name": "Fighting Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-fire", + "name": "Fire Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-grass", + "name": "Grass Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-lightning", + "name": "Lightning Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-metal", + "name": "Metal Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-psychic", + "name": "Psychic Energy", + "card_type": "energy", + "set_id": "basic" + }, + { + "id": "energy-basic-water", + "name": "Water Energy", + "card_type": "energy", + "set_id": "basic" + } + ] +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-colorless.json b/backend/data/definitions/energy/basic/energy-basic-colorless.json new file mode 100644 index 0000000..d077ecb --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-colorless.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-colorless", + "name": "Colorless Energy", + "card_type": "energy", + "energy_type": "colorless", + "energy_provides": [ + "colorless" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/colorless.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/colorless.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-darkness.json b/backend/data/definitions/energy/basic/energy-basic-darkness.json new file mode 100644 index 0000000..7027227 --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-darkness.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-darkness", + "name": "Darkness Energy", + "card_type": "energy", + "energy_type": "darkness", + "energy_provides": [ + "darkness" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/darkness.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/darkness.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-dragon.json b/backend/data/definitions/energy/basic/energy-basic-dragon.json new file mode 100644 index 0000000..25a0bcf --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-dragon.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-dragon", + "name": "Dragon Energy", + "card_type": "energy", + "energy_type": "dragon", + "energy_provides": [ + "dragon" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/dragon.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/dragon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-fighting.json b/backend/data/definitions/energy/basic/energy-basic-fighting.json new file mode 100644 index 0000000..34702c6 --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-fighting.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-fighting", + "name": "Fighting Energy", + "card_type": "energy", + "energy_type": "fighting", + "energy_provides": [ + "fighting" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/fighting.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/fighting.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-fire.json b/backend/data/definitions/energy/basic/energy-basic-fire.json new file mode 100644 index 0000000..5c3c6db --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-fire.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-fire", + "name": "Fire Energy", + "card_type": "energy", + "energy_type": "fire", + "energy_provides": [ + "fire" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/fire.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/fire.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-grass.json b/backend/data/definitions/energy/basic/energy-basic-grass.json new file mode 100644 index 0000000..730a519 --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-grass.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-grass", + "name": "Grass Energy", + "card_type": "energy", + "energy_type": "grass", + "energy_provides": [ + "grass" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/grass.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/grass.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-lightning.json b/backend/data/definitions/energy/basic/energy-basic-lightning.json new file mode 100644 index 0000000..39a46d7 --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-lightning.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-lightning", + "name": "Lightning Energy", + "card_type": "energy", + "energy_type": "lightning", + "energy_provides": [ + "lightning" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/lightning.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/lightning.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-metal.json b/backend/data/definitions/energy/basic/energy-basic-metal.json new file mode 100644 index 0000000..88ff932 --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-metal.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-metal", + "name": "Metal Energy", + "card_type": "energy", + "energy_type": "metal", + "energy_provides": [ + "metal" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/metal.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/metal.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-psychic.json b/backend/data/definitions/energy/basic/energy-basic-psychic.json new file mode 100644 index 0000000..c929549 --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-psychic.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-psychic", + "name": "Psychic Energy", + "card_type": "energy", + "energy_type": "psychic", + "energy_provides": [ + "psychic" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/psychic.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/psychic.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/energy/basic/energy-basic-water.json b/backend/data/definitions/energy/basic/energy-basic-water.json new file mode 100644 index 0000000..2d399d6 --- /dev/null +++ b/backend/data/definitions/energy/basic/energy-basic-water.json @@ -0,0 +1,13 @@ +{ + "id": "energy-basic-water", + "name": "Water Energy", + "card_type": "energy", + "energy_type": "water", + "energy_provides": [ + "water" + ], + "rarity": "common", + "set_id": "basic", + "image_path": "energy/basic/water.webp", + "image_url": "https://cdn.mantimon.com/cards/energy/basic/water.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/001-bulbasaur.json b/backend/data/definitions/pokemon/a1/001-bulbasaur.json new file mode 100644 index 0000000..432158a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/001-bulbasaur.json @@ -0,0 +1,30 @@ +{ + "id": "a1-001-bulbasaur", + "name": "Bulbasaur", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Vine Whip", + "cost": [ + "grass", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Narumi Sato", + "image_path": "pokemon/a1/001-bulbasaur.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/001-bulbasaur.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/002-ivysaur.json b/backend/data/definitions/pokemon/a1/002-ivysaur.json new file mode 100644 index 0000000..04f1875 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/002-ivysaur.json @@ -0,0 +1,32 @@ +{ + "id": "a1-002-ivysaur", + "name": "Ivysaur", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Bulbasaur", + "attacks": [ + { + "name": "Razor Leaf", + "cost": [ + "grass", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Kurata So", + "image_path": "pokemon/a1/002-ivysaur.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/002-ivysaur.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/003-venusaur.json b/backend/data/definitions/pokemon/a1/003-venusaur.json new file mode 100644 index 0000000..3418840 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/003-venusaur.json @@ -0,0 +1,34 @@ +{ + "id": "a1-003-venusaur", + "name": "Venusaur", + "card_type": "pokemon", + "hp": 160, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Ivysaur", + "attacks": [ + { + "name": "Mega Drain", + "cost": [ + "grass", + "grass", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Heal 30 damage from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Ryota Murayama", + "image_path": "pokemon/a1/003-venusaur.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/003-venusaur.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/004-venusaur-ex.json b/backend/data/definitions/pokemon/a1/004-venusaur-ex.json new file mode 100644 index 0000000..be8c34a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/004-venusaur-ex.json @@ -0,0 +1,44 @@ +{ + "id": "a1-004-venusaur-ex", + "name": "Venusaur ex", + "card_type": "pokemon", + "hp": 190, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Ivysaur", + "attacks": [ + { + "name": "Razor Leaf", + "cost": [ + "grass", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + }, + { + "name": "Giant Bloom", + "cost": [ + "grass", + "grass", + "colorless", + "colorless" + ], + "damage": 100, + "damage_display": "100", + "effect_description": "Heal 30 damage from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/004-venusaur-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/004-venusaur-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/005-caterpie.json b/backend/data/definitions/pokemon/a1/005-caterpie.json new file mode 100644 index 0000000..09a3374 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/005-caterpie.json @@ -0,0 +1,29 @@ +{ + "id": "a1-005-caterpie", + "name": "Caterpie", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Find a Friend", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "Put 1 randomPok\u00e9mon from your deck into your hand." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Miki Tanaka", + "image_path": "pokemon/a1/005-caterpie.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/005-caterpie.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/006-metapod.json b/backend/data/definitions/pokemon/a1/006-metapod.json new file mode 100644 index 0000000..174e6ec --- /dev/null +++ b/backend/data/definitions/pokemon/a1/006-metapod.json @@ -0,0 +1,31 @@ +{ + "id": "a1-006-metapod", + "name": "Metapod", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Caterpie", + "attacks": [ + { + "name": "Bug Bite", + "cost": [ + "colorless", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Yuka Morii", + "image_path": "pokemon/a1/006-metapod.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/006-metapod.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/007-butterfree.json b/backend/data/definitions/pokemon/a1/007-butterfree.json new file mode 100644 index 0000000..de196d2 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/007-butterfree.json @@ -0,0 +1,39 @@ +{ + "id": "a1-007-butterfree", + "name": "Butterfree", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Metapod", + "attacks": [ + { + "name": "Gust", + "cost": [ + "grass", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "abilities": [ + { + "name": "Powder Heal", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may heal 20 damage from each of your Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Shin Nagasawa", + "image_path": "pokemon/a1/007-butterfree.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/007-butterfree.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/008-weedle.json b/backend/data/definitions/pokemon/a1/008-weedle.json new file mode 100644 index 0000000..691a700 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/008-weedle.json @@ -0,0 +1,29 @@ +{ + "id": "a1-008-weedle", + "name": "Weedle", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Sting", + "cost": [ + "grass" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Hajime Kusajima", + "image_path": "pokemon/a1/008-weedle.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/008-weedle.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/009-kakuna.json b/backend/data/definitions/pokemon/a1/009-kakuna.json new file mode 100644 index 0000000..757db74 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/009-kakuna.json @@ -0,0 +1,30 @@ +{ + "id": "a1-009-kakuna", + "name": "Kakuna", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Weedle", + "attacks": [ + { + "name": "Bug Bite", + "cost": [ + "grass" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "miki kudo", + "image_path": "pokemon/a1/009-kakuna.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/009-kakuna.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/010-beedrill.json b/backend/data/definitions/pokemon/a1/010-beedrill.json new file mode 100644 index 0000000..83cd2c4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/010-beedrill.json @@ -0,0 +1,30 @@ +{ + "id": "a1-010-beedrill", + "name": "Beedrill", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Kakuna", + "attacks": [ + { + "name": "Sharp Sting", + "cost": [ + "grass" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "You Iribi", + "image_path": "pokemon/a1/010-beedrill.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/010-beedrill.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/011-oddish.json b/backend/data/definitions/pokemon/a1/011-oddish.json new file mode 100644 index 0000000..d989311 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/011-oddish.json @@ -0,0 +1,27 @@ +{ + "id": "a1-011-oddish", + "name": "Oddish", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Ram", + "cost": [ + "grass" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "HYOGONOSUKE" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/012-gloom.json b/backend/data/definitions/pokemon/a1/012-gloom.json new file mode 100644 index 0000000..7f3e283 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/012-gloom.json @@ -0,0 +1,31 @@ +{ + "id": "a1-012-gloom", + "name": "Gloom", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Oddish", + "attacks": [ + { + "name": "Drool", + "cost": [ + "grass", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Anesaki Dynamic", + "image_path": "pokemon/a1/012-gloom.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/012-gloom.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/013-vileplume.json b/backend/data/definitions/pokemon/a1/013-vileplume.json new file mode 100644 index 0000000..b8ae74f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/013-vileplume.json @@ -0,0 +1,33 @@ +{ + "id": "a1-013-vileplume", + "name": "Vileplume", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Gloom", + "attacks": [ + { + "name": "Soothing Scent", + "cost": [ + "grass", + "grass", + "colorless" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Kyoko Umemoto", + "image_path": "pokemon/a1/013-vileplume.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/013-vileplume.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/014-paras.json b/backend/data/definitions/pokemon/a1/014-paras.json new file mode 100644 index 0000000..f633605 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/014-paras.json @@ -0,0 +1,30 @@ +{ + "id": "a1-014-paras", + "name": "Paras", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Scratch", + "cost": [ + "grass", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Naoyo Kimura", + "image_path": "pokemon/a1/014-paras.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/014-paras.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/015-parasect.json b/backend/data/definitions/pokemon/a1/015-parasect.json new file mode 100644 index 0000000..f2db346 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/015-parasect.json @@ -0,0 +1,32 @@ +{ + "id": "a1-015-parasect", + "name": "Parasect", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Paras", + "attacks": [ + { + "name": "Slash", + "cost": [ + "grass", + "grass", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Eri Yamaki", + "image_path": "pokemon/a1/015-parasect.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/015-parasect.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/016-venonat.json b/backend/data/definitions/pokemon/a1/016-venonat.json new file mode 100644 index 0000000..e2170fa --- /dev/null +++ b/backend/data/definitions/pokemon/a1/016-venonat.json @@ -0,0 +1,29 @@ +{ + "id": "a1-016-venonat", + "name": "Venonat", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "grass" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "HYOGONOSUKE", + "image_path": "pokemon/a1/016-venonat.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/016-venonat.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/017-venomoth.json b/backend/data/definitions/pokemon/a1/017-venomoth.json new file mode 100644 index 0000000..5250024 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/017-venomoth.json @@ -0,0 +1,31 @@ +{ + "id": "a1-017-venomoth", + "name": "Venomoth", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Venonat", + "attacks": [ + { + "name": "Poison Powder", + "cost": [ + "grass" + ], + "damage": 30, + "damage_display": "30", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Poisoned." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Mina Nakai", + "image_path": "pokemon/a1/017-venomoth.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/017-venomoth.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/018-bellsprout.json b/backend/data/definitions/pokemon/a1/018-bellsprout.json new file mode 100644 index 0000000..c59bb50 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/018-bellsprout.json @@ -0,0 +1,29 @@ +{ + "id": "a1-018-bellsprout", + "name": "Bellsprout", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Vine Whip", + "cost": [ + "grass" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "HYOGONOSUKE", + "image_path": "pokemon/a1/018-bellsprout.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/018-bellsprout.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/019-weepinbell.json b/backend/data/definitions/pokemon/a1/019-weepinbell.json new file mode 100644 index 0000000..e4a6adb --- /dev/null +++ b/backend/data/definitions/pokemon/a1/019-weepinbell.json @@ -0,0 +1,31 @@ +{ + "id": "a1-019-weepinbell", + "name": "Weepinbell", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Bellsprout", + "attacks": [ + { + "name": "Razor Leaf", + "cost": [ + "grass", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Miki Tanaka", + "image_path": "pokemon/a1/019-weepinbell.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/019-weepinbell.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/020-victreebel.json b/backend/data/definitions/pokemon/a1/020-victreebel.json new file mode 100644 index 0000000..d4b408c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/020-victreebel.json @@ -0,0 +1,38 @@ +{ + "id": "a1-020-victreebel", + "name": "Victreebel", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Weepinbell", + "attacks": [ + { + "name": "Vine Whip", + "cost": [ + "grass", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "abilities": [ + { + "name": "Fragrance Trap", + "effect_id": "unimplemented", + "effect_description": "If this Pok\u00e9mon is in the Active Spot, once during your turn, you may switch in 1 of your opponent\u2019s Benched Basic Pok\u00e9mon to the Active Spot." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Sumiyoshi Kizuki", + "image_path": "pokemon/a1/020-victreebel.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/020-victreebel.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/021-exeggcute.json b/backend/data/definitions/pokemon/a1/021-exeggcute.json new file mode 100644 index 0000000..29205aa --- /dev/null +++ b/backend/data/definitions/pokemon/a1/021-exeggcute.json @@ -0,0 +1,27 @@ +{ + "id": "a1-021-exeggcute", + "name": "Exeggcute", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Seed Bomb", + "cost": [ + "grass" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "kawayoo" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/022-exeggutor.json b/backend/data/definitions/pokemon/a1/022-exeggutor.json new file mode 100644 index 0000000..2a75d24 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/022-exeggutor.json @@ -0,0 +1,32 @@ +{ + "id": "a1-022-exeggutor", + "name": "Exeggutor", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Exeggcute", + "attacks": [ + { + "name": "Stomp", + "cost": [ + "grass" + ], + "damage": 30, + "damage_display": "30x", + "effect_description": "Flip a coin. If heads, this attack does 30 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Yukiko Baba" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/023-exeggutor-ex.json b/backend/data/definitions/pokemon/a1/023-exeggutor-ex.json new file mode 100644 index 0000000..44103e4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/023-exeggutor-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1-023-exeggutor-ex", + "name": "Exeggutor ex", + "card_type": "pokemon", + "hp": 160, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Exeggcute", + "attacks": [ + { + "name": "Tropical Swing", + "cost": [ + "grass" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "Flip a coin. If heads, this attack does 40 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/023-exeggutor-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/023-exeggutor-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/024-tangela.json b/backend/data/definitions/pokemon/a1/024-tangela.json new file mode 100644 index 0000000..8d0c58d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/024-tangela.json @@ -0,0 +1,29 @@ +{ + "id": "a1-024-tangela", + "name": "Tangela", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Absorb", + "cost": [ + "grass", + "colorless" + ], + "damage": 40, + "damage_display": "40", + "effect_description": "Heal 10 damage from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Midori Harada" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/025-scyther.json b/backend/data/definitions/pokemon/a1/025-scyther.json new file mode 100644 index 0000000..79634ee --- /dev/null +++ b/backend/data/definitions/pokemon/a1/025-scyther.json @@ -0,0 +1,29 @@ +{ + "id": "a1-025-scyther", + "name": "Scyther", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Sharp Scythe", + "cost": [ + "grass" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Hasuno", + "image_path": "pokemon/a1/025-scyther.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/025-scyther.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/026-pinsir.json b/backend/data/definitions/pokemon/a1/026-pinsir.json new file mode 100644 index 0000000..9d04e72 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/026-pinsir.json @@ -0,0 +1,34 @@ +{ + "id": "a1-026-pinsir", + "name": "Pinsir", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Double Horn", + "cost": [ + "grass", + "grass" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip 2 coins. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Eri Yamaki", + "image_path": "pokemon/a1/026-pinsir.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/026-pinsir.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/027-cottonee.json b/backend/data/definitions/pokemon/a1/027-cottonee.json new file mode 100644 index 0000000..cc68c53 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/027-cottonee.json @@ -0,0 +1,29 @@ +{ + "id": "a1-027-cottonee", + "name": "Cottonee", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Attach", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Kanako Eo", + "image_path": "pokemon/a1/027-cottonee.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/027-cottonee.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/028-whimsicott.json b/backend/data/definitions/pokemon/a1/028-whimsicott.json new file mode 100644 index 0000000..ac7ff99 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/028-whimsicott.json @@ -0,0 +1,28 @@ +{ + "id": "a1-028-whimsicott", + "name": "Whimsicott", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Cottonee", + "attacks": [ + { + "name": "Rolling Tackle", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Atsuko Nishida" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/029-petilil.json b/backend/data/definitions/pokemon/a1/029-petilil.json new file mode 100644 index 0000000..9243311 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/029-petilil.json @@ -0,0 +1,28 @@ +{ + "id": "a1-029-petilil", + "name": "Petilil", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Blot", + "cost": [ + "grass" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Heal 10 damage from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Naoyo Kimura" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/030-lilligant.json b/backend/data/definitions/pokemon/a1/030-lilligant.json new file mode 100644 index 0000000..1440b09 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/030-lilligant.json @@ -0,0 +1,30 @@ +{ + "id": "a1-030-lilligant", + "name": "Lilligant", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Petilil", + "attacks": [ + { + "name": "Leaf Supply", + "cost": [ + "grass", + "grass" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "Take aEnergy from your Energy Zone and attach it to 1 of your BenchedPok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "You Iribi" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/031-skiddo.json b/backend/data/definitions/pokemon/a1/031-skiddo.json new file mode 100644 index 0000000..436fec5 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/031-skiddo.json @@ -0,0 +1,30 @@ +{ + "id": "a1-031-skiddo", + "name": "Skiddo", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Surprise Attack", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40", + "effect_description": "Flip a coin. If tails, this attack does nothing." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Naoki Saito", + "image_path": "pokemon/a1/031-skiddo.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/031-skiddo.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/032-gogoat.json b/backend/data/definitions/pokemon/a1/032-gogoat.json new file mode 100644 index 0000000..9485977 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/032-gogoat.json @@ -0,0 +1,32 @@ +{ + "id": "a1-032-gogoat", + "name": "Gogoat", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Skiddo", + "attacks": [ + { + "name": "Razor Leaf", + "cost": [ + "grass", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "You Iribi", + "image_path": "pokemon/a1/032-gogoat.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/032-gogoat.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/033-charmander.json b/backend/data/definitions/pokemon/a1/033-charmander.json new file mode 100644 index 0000000..c1fd8a4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/033-charmander.json @@ -0,0 +1,28 @@ +{ + "id": "a1-033-charmander", + "name": "Charmander", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Ember", + "cost": [ + "fire" + ], + "damage": 30, + "damage_display": "30", + "effect_description": "Discard aEnergy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Teeziro" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/034-charmeleon.json b/backend/data/definitions/pokemon/a1/034-charmeleon.json new file mode 100644 index 0000000..ee5dce8 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/034-charmeleon.json @@ -0,0 +1,30 @@ +{ + "id": "a1-034-charmeleon", + "name": "Charmeleon", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Charmander", + "attacks": [ + { + "name": "Fire Claws", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "kantaro" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/035-charizard.json b/backend/data/definitions/pokemon/a1/035-charizard.json new file mode 100644 index 0000000..20a3651 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/035-charizard.json @@ -0,0 +1,34 @@ +{ + "id": "a1-035-charizard", + "name": "Charizard", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "fire", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Charmeleon", + "attacks": [ + { + "name": "Fire Spin", + "cost": [ + "fire", + "fire", + "colorless", + "colorless" + ], + "damage": 150, + "damage_display": "150", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "takuyoa", + "image_path": "pokemon/a1/035-charizard.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/035-charizard.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/036-charizard-ex.json b/backend/data/definitions/pokemon/a1/036-charizard-ex.json new file mode 100644 index 0000000..c53fa9a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/036-charizard-ex.json @@ -0,0 +1,44 @@ +{ + "id": "a1-036-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "fire", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Charmeleon", + "attacks": [ + { + "name": "Slash", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + }, + { + "name": "Crimson Storm", + "cost": [ + "fire", + "fire", + "colorless", + "colorless" + ], + "damage": 200, + "damage_display": "200", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "PLANETA Mochizuki", + "image_path": "pokemon/a1/036-charizard-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/036-charizard-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/037-vulpix.json b/backend/data/definitions/pokemon/a1/037-vulpix.json new file mode 100644 index 0000000..f4c941c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/037-vulpix.json @@ -0,0 +1,29 @@ +{ + "id": "a1-037-vulpix", + "name": "Vulpix", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tail Whip", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "Flip a coin. If heads, the Defending Pok\u00e9mon can\u2019t attack during your opponent\u2019s next turn." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Toshinao Aoki", + "image_path": "pokemon/a1/037-vulpix.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/037-vulpix.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/038-ninetales.json b/backend/data/definitions/pokemon/a1/038-ninetales.json new file mode 100644 index 0000000..9a7d21f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/038-ninetales.json @@ -0,0 +1,30 @@ +{ + "id": "a1-038-ninetales", + "name": "Ninetales", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Vulpix", + "attacks": [ + { + "name": "Flamethrower", + "cost": [ + "fire", + "fire" + ], + "damage": 90, + "damage_display": "90", + "effect_description": "Discard aEnergy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "You Iribi" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/039-growlithe.json b/backend/data/definitions/pokemon/a1/039-growlithe.json new file mode 100644 index 0000000..4923b26 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/039-growlithe.json @@ -0,0 +1,30 @@ +{ + "id": "a1-039-growlithe", + "name": "Growlithe", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Bite", + "cost": [ + "colorless", + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Mizue", + "image_path": "pokemon/a1/039-growlithe.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/039-growlithe.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/040-arcanine.json b/backend/data/definitions/pokemon/a1/040-arcanine.json new file mode 100644 index 0000000..984fe25 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/040-arcanine.json @@ -0,0 +1,33 @@ +{ + "id": "a1-040-arcanine", + "name": "Arcanine", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Growlithe", + "attacks": [ + { + "name": "Heat Tackle", + "cost": [ + "fire", + "fire", + "colorless" + ], + "damage": 100, + "damage_display": "100", + "effect_description": "This Pok\u00e9mon also does 20 damage to itself." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "kodama", + "image_path": "pokemon/a1/040-arcanine.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/040-arcanine.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/041-arcanine-ex.json b/backend/data/definitions/pokemon/a1/041-arcanine-ex.json new file mode 100644 index 0000000..048fcbe --- /dev/null +++ b/backend/data/definitions/pokemon/a1/041-arcanine-ex.json @@ -0,0 +1,33 @@ +{ + "id": "a1-041-arcanine-ex", + "name": "Arcanine ex", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Growlithe", + "attacks": [ + { + "name": "Inferno Onrush", + "cost": [ + "fire", + "fire", + "colorless" + ], + "damage": 120, + "damage_display": "120", + "effect_description": "This Pok\u00e9mon also does 20 damage to itself." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "PLANETA Saito", + "image_path": "pokemon/a1/041-arcanine-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/041-arcanine-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/042-ponyta.json b/backend/data/definitions/pokemon/a1/042-ponyta.json new file mode 100644 index 0000000..3571d93 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/042-ponyta.json @@ -0,0 +1,27 @@ +{ + "id": "a1-042-ponyta", + "name": "Ponyta", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Flare", + "cost": [ + "fire" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Uta" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/043-rapidash.json b/backend/data/definitions/pokemon/a1/043-rapidash.json new file mode 100644 index 0000000..c63bdb0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/043-rapidash.json @@ -0,0 +1,28 @@ +{ + "id": "a1-043-rapidash", + "name": "Rapidash", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Ponyta", + "attacks": [ + { + "name": "Fire Mane", + "cost": [ + "fire" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Misa Tsutsui" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/044-magmar.json b/backend/data/definitions/pokemon/a1/044-magmar.json new file mode 100644 index 0000000..c1e2f87 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/044-magmar.json @@ -0,0 +1,30 @@ +{ + "id": "a1-044-magmar", + "name": "Magmar", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Magma Punch", + "cost": [ + "fire", + "fire" + ], + "damage": 50, + "damage_display": "50" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Ryuta Fuse", + "image_path": "pokemon/a1/044-magmar.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/044-magmar.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/045-flareon.json b/backend/data/definitions/pokemon/a1/045-flareon.json new file mode 100644 index 0000000..2b95786 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/045-flareon.json @@ -0,0 +1,33 @@ +{ + "id": "a1-045-flareon", + "name": "Flareon", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Eevee", + "attacks": [ + { + "name": "Flamethrower", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 110, + "damage_display": "110", + "effect_description": "Discard aEnergy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "sui", + "image_path": "pokemon/a1/045-flareon.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/045-flareon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/046-moltres.json b/backend/data/definitions/pokemon/a1/046-moltres.json new file mode 100644 index 0000000..ba80172 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/046-moltres.json @@ -0,0 +1,32 @@ +{ + "id": "a1-046-moltres", + "name": "Moltres", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Sky Attack", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 130, + "damage_display": "130", + "effect_description": "Flip a coin. If tails, this attack does nothing." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Hitoshi Ariga", + "image_path": "pokemon/a1/046-moltres.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/046-moltres.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/047-moltres-ex.json b/backend/data/definitions/pokemon/a1/047-moltres-ex.json new file mode 100644 index 0000000..5d2c771 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/047-moltres-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1-047-moltres-ex", + "name": "Moltres ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fire", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "double rare", + "attacks": [ + { + "name": "Inferno Dance", + "cost": [ + "fire" + ], + "damage": 0, + "effect_description": "Flip 3 coins. Take an amount ofEnergy from your Energy Zone equal to the number of heads and attach it to your BenchedPok\u00e9mon in any way you like." + }, + { + "name": "Heat Blast", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Tsuji", + "image_path": "pokemon/a1/047-moltres-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/047-moltres-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/048-heatmor.json b/backend/data/definitions/pokemon/a1/048-heatmor.json new file mode 100644 index 0000000..5bb6424 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/048-heatmor.json @@ -0,0 +1,27 @@ +{ + "id": "a1-048-heatmor", + "name": "Heatmor", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Combustion", + "cost": [ + "fire" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Suwama Chiaki" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/049-salandit.json b/backend/data/definitions/pokemon/a1/049-salandit.json new file mode 100644 index 0000000..1ce5c53 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/049-salandit.json @@ -0,0 +1,27 @@ +{ + "id": "a1-049-salandit", + "name": "Salandit", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Scratch", + "cost": [ + "fire" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Kyoko Umemoto" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/050-salazzle.json b/backend/data/definitions/pokemon/a1/050-salazzle.json new file mode 100644 index 0000000..4e4e43c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/050-salazzle.json @@ -0,0 +1,31 @@ +{ + "id": "a1-050-salazzle", + "name": "Salazzle", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Salandit", + "attacks": [ + { + "name": "Fire Claws", + "cost": [ + "fire", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "hatachu", + "image_path": "pokemon/a1/050-salazzle.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/050-salazzle.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/051-sizzlipede.json b/backend/data/definitions/pokemon/a1/051-sizzlipede.json new file mode 100644 index 0000000..6d9725b --- /dev/null +++ b/backend/data/definitions/pokemon/a1/051-sizzlipede.json @@ -0,0 +1,29 @@ +{ + "id": "a1-051-sizzlipede", + "name": "Sizzlipede", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Gnaw", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Teeziro", + "image_path": "pokemon/a1/051-sizzlipede.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/051-sizzlipede.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/052-centiskorch.json b/backend/data/definitions/pokemon/a1/052-centiskorch.json new file mode 100644 index 0000000..24906d7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/052-centiskorch.json @@ -0,0 +1,32 @@ +{ + "id": "a1-052-centiskorch", + "name": "Centiskorch", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Sizzlipede", + "attacks": [ + { + "name": "Fire Blast", + "cost": [ + "fire", + "colorless", + "colorless", + "colorless" + ], + "damage": 130, + "damage_display": "130", + "effect_description": "Discard aEnergy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "GOSSAN" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/053-squirtle.json b/backend/data/definitions/pokemon/a1/053-squirtle.json new file mode 100644 index 0000000..28d2a7b --- /dev/null +++ b/backend/data/definitions/pokemon/a1/053-squirtle.json @@ -0,0 +1,29 @@ +{ + "id": "a1-053-squirtle", + "name": "Squirtle", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Water Gun", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Mizue", + "image_path": "pokemon/a1/053-squirtle.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/053-squirtle.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/054-wartortle.json b/backend/data/definitions/pokemon/a1/054-wartortle.json new file mode 100644 index 0000000..355d38d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/054-wartortle.json @@ -0,0 +1,31 @@ +{ + "id": "a1-054-wartortle", + "name": "Wartortle", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Squirtle", + "attacks": [ + { + "name": "Wave Splash", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Nelnal", + "image_path": "pokemon/a1/054-wartortle.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/054-wartortle.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/055-blastoise.json b/backend/data/definitions/pokemon/a1/055-blastoise.json new file mode 100644 index 0000000..b2e31ce --- /dev/null +++ b/backend/data/definitions/pokemon/a1/055-blastoise.json @@ -0,0 +1,36 @@ +{ + "id": "a1-055-blastoise", + "name": "Blastoise", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "water", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Wartortle", + "attacks": [ + { + "name": "Hydro Pump", + "cost": [ + "water", + "water", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "If this Pok\u00e9mon has at least 2 extraEnergy attached, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Nurikabe", + "image_path": "pokemon/a1/055-blastoise.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/055-blastoise.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/056-blastoise-ex.json b/backend/data/definitions/pokemon/a1/056-blastoise-ex.json new file mode 100644 index 0000000..41b3936 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/056-blastoise-ex.json @@ -0,0 +1,45 @@ +{ + "id": "a1-056-blastoise-ex", + "name": "Blastoise ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "water", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Wartortle", + "attacks": [ + { + "name": "Surf", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40" + }, + { + "name": "Hydro Bazooka", + "cost": [ + "water", + "water", + "colorless" + ], + "damage": 100, + "damage_display": "100x", + "effect_description": "If this Pok\u00e9mon has at least 2 extraEnergy attached, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Tsuji", + "image_path": "pokemon/a1/056-blastoise-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/056-blastoise-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/057-psyduck.json b/backend/data/definitions/pokemon/a1/057-psyduck.json new file mode 100644 index 0000000..4f00b71 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/057-psyduck.json @@ -0,0 +1,30 @@ +{ + "id": "a1-057-psyduck", + "name": "Psyduck", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Headache", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Your opponent can\u2019t use any Supporter cards from their hand during their next turn." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Shibuzoh.", + "image_path": "pokemon/a1/057-psyduck.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/057-psyduck.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/058-golduck.json b/backend/data/definitions/pokemon/a1/058-golduck.json new file mode 100644 index 0000000..15f1618 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/058-golduck.json @@ -0,0 +1,29 @@ +{ + "id": "a1-058-golduck", + "name": "Golduck", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Psyduck", + "attacks": [ + { + "name": "Aqua Edge", + "cost": [ + "water", + "water" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Naoki Saito" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/059-poliwag.json b/backend/data/definitions/pokemon/a1/059-poliwag.json new file mode 100644 index 0000000..6e7c6be --- /dev/null +++ b/backend/data/definitions/pokemon/a1/059-poliwag.json @@ -0,0 +1,29 @@ +{ + "id": "a1-059-poliwag", + "name": "Poliwag", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Razor Fin", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Shibuzoh.", + "image_path": "pokemon/a1/059-poliwag.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/059-poliwag.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/060-poliwhirl.json b/backend/data/definitions/pokemon/a1/060-poliwhirl.json new file mode 100644 index 0000000..4aa39ff --- /dev/null +++ b/backend/data/definitions/pokemon/a1/060-poliwhirl.json @@ -0,0 +1,31 @@ +{ + "id": "a1-060-poliwhirl", + "name": "Poliwhirl", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Poliwag", + "attacks": [ + { + "name": "Knuckle Punch", + "cost": [ + "colorless", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Yuka Morii", + "image_path": "pokemon/a1/060-poliwhirl.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/060-poliwhirl.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/061-poliwrath.json b/backend/data/definitions/pokemon/a1/061-poliwrath.json new file mode 100644 index 0000000..1e790c0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/061-poliwrath.json @@ -0,0 +1,39 @@ +{ + "id": "a1-061-poliwrath", + "name": "Poliwrath", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "water", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Poliwhirl", + "attacks": [ + { + "name": "Mega Punch", + "cost": [ + "water", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "abilities": [ + { + "name": "Counterattack", + "effect_id": "unimplemented", + "effect_description": "If this Pok\u00e9mon is in the Active Spot and is damaged by an attack from your opponent\u2019s Pok\u00e9mon, do 20 damage to the Attacking Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Akira Komayama", + "image_path": "pokemon/a1/061-poliwrath.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/061-poliwrath.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/062-tentacool.json b/backend/data/definitions/pokemon/a1/062-tentacool.json new file mode 100644 index 0000000..d02fec4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/062-tentacool.json @@ -0,0 +1,29 @@ +{ + "id": "a1-062-tentacool", + "name": "Tentacool", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Gentle Slap", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Shinya Komatsu", + "image_path": "pokemon/a1/062-tentacool.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/062-tentacool.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/063-tentacruel.json b/backend/data/definitions/pokemon/a1/063-tentacruel.json new file mode 100644 index 0000000..e0c257d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/063-tentacruel.json @@ -0,0 +1,32 @@ +{ + "id": "a1-063-tentacruel", + "name": "Tentacruel", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Tentacool", + "attacks": [ + { + "name": "Poison Tentacles", + "cost": [ + "water", + "colorless" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Poisoned." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "kodama", + "image_path": "pokemon/a1/063-tentacruel.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/063-tentacruel.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/064-seel.json b/backend/data/definitions/pokemon/a1/064-seel.json new file mode 100644 index 0000000..6abe62d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/064-seel.json @@ -0,0 +1,30 @@ +{ + "id": "a1-064-seel", + "name": "Seel", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Headbutt", + "cost": [ + "colorless", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Masako Yamashita", + "image_path": "pokemon/a1/064-seel.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/064-seel.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/065-dewgong.json b/backend/data/definitions/pokemon/a1/065-dewgong.json new file mode 100644 index 0000000..38c23fb --- /dev/null +++ b/backend/data/definitions/pokemon/a1/065-dewgong.json @@ -0,0 +1,32 @@ +{ + "id": "a1-065-dewgong", + "name": "Dewgong", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Seel", + "attacks": [ + { + "name": "Surf", + "cost": [ + "water", + "water", + "water" + ], + "damage": 90, + "damage_display": "90" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Kanako Eo", + "image_path": "pokemon/a1/065-dewgong.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/065-dewgong.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/066-shellder.json b/backend/data/definitions/pokemon/a1/066-shellder.json new file mode 100644 index 0000000..bc8914f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/066-shellder.json @@ -0,0 +1,29 @@ +{ + "id": "a1-066-shellder", + "name": "Shellder", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tongue Slap", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Sumiyoshi Kizuki", + "image_path": "pokemon/a1/066-shellder.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/066-shellder.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/067-cloyster.json b/backend/data/definitions/pokemon/a1/067-cloyster.json new file mode 100644 index 0000000..29b8d55 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/067-cloyster.json @@ -0,0 +1,39 @@ +{ + "id": "a1-067-cloyster", + "name": "Cloyster", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Shellder", + "attacks": [ + { + "name": "Surf", + "cost": [ + "water", + "water", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "abilities": [ + { + "name": "Shell Armor", + "effect_id": "unimplemented", + "effect_description": "This Pok\u00e9mon takes \u221210 damage from attacks." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Saya Tsuruta", + "image_path": "pokemon/a1/067-cloyster.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/067-cloyster.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/068-krabby.json b/backend/data/definitions/pokemon/a1/068-krabby.json new file mode 100644 index 0000000..e8af495 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/068-krabby.json @@ -0,0 +1,30 @@ +{ + "id": "a1-068-krabby", + "name": "Krabby", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Vise Grip", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Tomokazu Komiya", + "image_path": "pokemon/a1/068-krabby.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/068-krabby.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/069-kingler.json b/backend/data/definitions/pokemon/a1/069-kingler.json new file mode 100644 index 0000000..d384c81 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/069-kingler.json @@ -0,0 +1,36 @@ +{ + "id": "a1-069-kingler", + "name": "Kingler", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Krabby", + "attacks": [ + { + "name": "KO Crab", + "cost": [ + "water", + "water", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "Flip 2 coins. If both of them are heads, this attack does 80 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Shigenori Negishi", + "image_path": "pokemon/a1/069-kingler.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/069-kingler.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/070-horsea.json b/backend/data/definitions/pokemon/a1/070-horsea.json new file mode 100644 index 0000000..7e3f0f7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/070-horsea.json @@ -0,0 +1,29 @@ +{ + "id": "a1-070-horsea", + "name": "Horsea", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Water Gun", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Saya Tsuruta", + "image_path": "pokemon/a1/070-horsea.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/070-horsea.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/071-seadra.json b/backend/data/definitions/pokemon/a1/071-seadra.json new file mode 100644 index 0000000..ef9be87 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/071-seadra.json @@ -0,0 +1,32 @@ +{ + "id": "a1-071-seadra", + "name": "Seadra", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Horsea", + "attacks": [ + { + "name": "Water Arrow", + "cost": [ + "water", + "water", + "water" + ], + "damage": 0, + "effect_description": "This attack does 50 damage to 1 of your opponent\u2019s Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Sanosuke Sakuma", + "image_path": "pokemon/a1/071-seadra.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/071-seadra.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/072-goldeen.json b/backend/data/definitions/pokemon/a1/072-goldeen.json new file mode 100644 index 0000000..02c6472 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/072-goldeen.json @@ -0,0 +1,29 @@ +{ + "id": "a1-072-goldeen", + "name": "Goldeen", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Flop", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Kyoko Umemoto", + "image_path": "pokemon/a1/072-goldeen.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/072-goldeen.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/073-seaking.json b/backend/data/definitions/pokemon/a1/073-seaking.json new file mode 100644 index 0000000..298833f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/073-seaking.json @@ -0,0 +1,29 @@ +{ + "id": "a1-073-seaking", + "name": "Seaking", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Goldeen", + "attacks": [ + { + "name": "Horn Hazard", + "cost": [ + "water" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Flip a coin. If tails, this attack does nothing." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Kyoko Umemoto" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/074-staryu.json b/backend/data/definitions/pokemon/a1/074-staryu.json new file mode 100644 index 0000000..95fd03e --- /dev/null +++ b/backend/data/definitions/pokemon/a1/074-staryu.json @@ -0,0 +1,27 @@ +{ + "id": "a1-074-staryu", + "name": "Staryu", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Smack", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Hiroki Asanuma" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/075-starmie.json b/backend/data/definitions/pokemon/a1/075-starmie.json new file mode 100644 index 0000000..caccfb0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/075-starmie.json @@ -0,0 +1,30 @@ +{ + "id": "a1-075-starmie", + "name": "Starmie", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 0, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Staryu", + "attacks": [ + { + "name": "Wave Splash", + "cost": [ + "water" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Yukiko Baba", + "image_path": "pokemon/a1/075-starmie.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/075-starmie.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/076-starmie-ex.json b/backend/data/definitions/pokemon/a1/076-starmie-ex.json new file mode 100644 index 0000000..02d4804 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/076-starmie-ex.json @@ -0,0 +1,29 @@ +{ + "id": "a1-076-starmie-ex", + "name": "Starmie ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 0, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Staryu", + "attacks": [ + { + "name": "Hydro Splash", + "cost": [ + "water", + "water" + ], + "damage": 90, + "damage_display": "90" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Igarashi" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/077-magikarp.json b/backend/data/definitions/pokemon/a1/077-magikarp.json new file mode 100644 index 0000000..5736fb1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/077-magikarp.json @@ -0,0 +1,27 @@ +{ + "id": "a1-077-magikarp", + "name": "Magikarp", + "card_type": "pokemon", + "hp": 30, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Splash", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Sekio" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/078-gyarados.json b/backend/data/definitions/pokemon/a1/078-gyarados.json new file mode 100644 index 0000000..b687ed3 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/078-gyarados.json @@ -0,0 +1,34 @@ +{ + "id": "a1-078-gyarados", + "name": "Gyarados", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Magikarp", + "attacks": [ + { + "name": "Hyper Beam", + "cost": [ + "water", + "water", + "water", + "water" + ], + "damage": 100, + "damage_display": "100", + "effect_description": "Discard a random Energy from your opponent\u2019s Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Mitsuhiro Arita", + "image_path": "pokemon/a1/078-gyarados.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/078-gyarados.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/079-lapras.json b/backend/data/definitions/pokemon/a1/079-lapras.json new file mode 100644 index 0000000..0e6a245 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/079-lapras.json @@ -0,0 +1,33 @@ +{ + "id": "a1-079-lapras", + "name": "Lapras", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Hydro Pump", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20x", + "effect_description": "If this Pok\u00e9mon has at least 3 extraEnergy attached, this attack does 70 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Sekio", + "image_path": "pokemon/a1/079-lapras.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/079-lapras.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/080-vaporeon.json b/backend/data/definitions/pokemon/a1/080-vaporeon.json new file mode 100644 index 0000000..416515c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/080-vaporeon.json @@ -0,0 +1,33 @@ +{ + "id": "a1-080-vaporeon", + "name": "Vaporeon", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Eevee", + "attacks": [ + { + "name": "Bubble Drain", + "cost": [ + "water", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60", + "effect_description": "Heal 30 damage from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Kagemaru Himeno", + "image_path": "pokemon/a1/080-vaporeon.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/080-vaporeon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/081-omanyte.json b/backend/data/definitions/pokemon/a1/081-omanyte.json new file mode 100644 index 0000000..da13dd5 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/081-omanyte.json @@ -0,0 +1,28 @@ +{ + "id": "a1-081-omanyte", + "name": "Omanyte", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Helix Fossil", + "attacks": [ + { + "name": "Water Gun", + "cost": [ + "water" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Suwama Chiaki" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/082-omastar.json b/backend/data/definitions/pokemon/a1/082-omastar.json new file mode 100644 index 0000000..f4d0f76 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/082-omastar.json @@ -0,0 +1,33 @@ +{ + "id": "a1-082-omastar", + "name": "Omastar", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "water", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Omanyte", + "attacks": [ + { + "name": "Ancient Whirlpool", + "cost": [ + "water", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70", + "effect_description": "During your opponent\u2019s next turn, the Defending Pok\u00e9mon can\u2019t attack." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "kirisAki", + "image_path": "pokemon/a1/082-omastar.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/082-omastar.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/083-articuno.json b/backend/data/definitions/pokemon/a1/083-articuno.json new file mode 100644 index 0000000..49bc825 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/083-articuno.json @@ -0,0 +1,32 @@ +{ + "id": "a1-083-articuno", + "name": "Articuno", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Ice Beam", + "cost": [ + "water", + "water", + "colorless" + ], + "damage": 60, + "damage_display": "60", + "effect_description": "Flip a coin. If heads, your opponent\u2019s Active Pok\u00e9mon is now Paralyzed." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Hitoshi Ariga", + "image_path": "pokemon/a1/083-articuno.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/083-articuno.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/084-articuno-ex.json b/backend/data/definitions/pokemon/a1/084-articuno-ex.json new file mode 100644 index 0000000..c32e732 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/084-articuno-ex.json @@ -0,0 +1,41 @@ +{ + "id": "a1-084-articuno-ex", + "name": "Articuno ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "water", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "double rare", + "attacks": [ + { + "name": "Ice Wing", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40" + }, + { + "name": "Blizzard", + "cost": [ + "water", + "water", + "water" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "This attack also does 10 damage to each of your opponent\u2019s Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Saito", + "image_path": "pokemon/a1/084-articuno-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/084-articuno-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/085-ducklett.json b/backend/data/definitions/pokemon/a1/085-ducklett.json new file mode 100644 index 0000000..da1d0db --- /dev/null +++ b/backend/data/definitions/pokemon/a1/085-ducklett.json @@ -0,0 +1,30 @@ +{ + "id": "a1-085-ducklett", + "name": "Ducklett", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Flap", + "cost": [ + "colorless", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Yumi", + "image_path": "pokemon/a1/085-ducklett.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/085-ducklett.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/086-swanna.json b/backend/data/definitions/pokemon/a1/086-swanna.json new file mode 100644 index 0000000..6333517 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/086-swanna.json @@ -0,0 +1,32 @@ +{ + "id": "a1-086-swanna", + "name": "Swanna", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Ducklett", + "attacks": [ + { + "name": "Wing Attack", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "sui", + "image_path": "pokemon/a1/086-swanna.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/086-swanna.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/087-froakie.json b/backend/data/definitions/pokemon/a1/087-froakie.json new file mode 100644 index 0000000..850da11 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/087-froakie.json @@ -0,0 +1,27 @@ +{ + "id": "a1-087-froakie", + "name": "Froakie", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Flop", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Aya Kusube" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/088-frogadier.json b/backend/data/definitions/pokemon/a1/088-frogadier.json new file mode 100644 index 0000000..d72d8c1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/088-frogadier.json @@ -0,0 +1,30 @@ +{ + "id": "a1-088-frogadier", + "name": "Frogadier", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Froakie", + "attacks": [ + { + "name": "Water Drip", + "cost": [ + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Akira Komayama", + "image_path": "pokemon/a1/088-frogadier.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/088-frogadier.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/089-greninja.json b/backend/data/definitions/pokemon/a1/089-greninja.json new file mode 100644 index 0000000..3a073b1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/089-greninja.json @@ -0,0 +1,38 @@ +{ + "id": "a1-089-greninja", + "name": "Greninja", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "water", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Frogadier", + "attacks": [ + { + "name": "Mist Slash", + "cost": [ + "water", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "abilities": [ + { + "name": "Water Shuriken", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may do 20 damage to 1 of your opponent\u2019s Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "5ban Graphics", + "image_path": "pokemon/a1/089-greninja.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/089-greninja.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/090-pyukumuku.json b/backend/data/definitions/pokemon/a1/090-pyukumuku.json new file mode 100644 index 0000000..6245a32 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/090-pyukumuku.json @@ -0,0 +1,27 @@ +{ + "id": "a1-090-pyukumuku", + "name": "Pyukumuku", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Rain Splash", + "cost": [ + "water" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "OOYAMA" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/091-bruxish.json b/backend/data/definitions/pokemon/a1/091-bruxish.json new file mode 100644 index 0000000..1ee70ac --- /dev/null +++ b/backend/data/definitions/pokemon/a1/091-bruxish.json @@ -0,0 +1,32 @@ +{ + "id": "a1-091-bruxish", + "name": "Bruxish", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Second Strike", + "cost": [ + "water", + "colorless" + ], + "damage": 10, + "damage_display": "10x", + "effect_description": "If your opponent\u2019s Active Pok\u00e9mon has damage on it, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Mizue" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/092-snom.json b/backend/data/definitions/pokemon/a1/092-snom.json new file mode 100644 index 0000000..9bdc547 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/092-snom.json @@ -0,0 +1,29 @@ +{ + "id": "a1-092-snom", + "name": "Snom", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Ram", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "ryoma uratsuka", + "image_path": "pokemon/a1/092-snom.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/092-snom.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/093-frosmoth.json b/backend/data/definitions/pokemon/a1/093-frosmoth.json new file mode 100644 index 0000000..c50ab48 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/093-frosmoth.json @@ -0,0 +1,32 @@ +{ + "id": "a1-093-frosmoth", + "name": "Frosmoth", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Snom", + "attacks": [ + { + "name": "Powder Snow", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "aoki", + "image_path": "pokemon/a1/093-frosmoth.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/093-frosmoth.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/094-pikachu.json b/backend/data/definitions/pokemon/a1/094-pikachu.json new file mode 100644 index 0000000..8bbcee6 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/094-pikachu.json @@ -0,0 +1,27 @@ +{ + "id": "a1-094-pikachu", + "name": "Pikachu", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Gnaw", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Mitsuhiro Arita" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/095-raichu.json b/backend/data/definitions/pokemon/a1/095-raichu.json new file mode 100644 index 0000000..baba09a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/095-raichu.json @@ -0,0 +1,33 @@ +{ + "id": "a1-095-raichu", + "name": "Raichu", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Pikachu", + "attacks": [ + { + "name": "Thunderbolt", + "cost": [ + "lightning", + "lightning", + "lightning" + ], + "damage": 140, + "damage_display": "140", + "effect_description": "Discard all Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "AKIRA EGAWA", + "image_path": "pokemon/a1/095-raichu.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/095-raichu.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/096-pikachu-ex.json b/backend/data/definitions/pokemon/a1/096-pikachu-ex.json new file mode 100644 index 0000000..9bf09a6 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/096-pikachu-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1-096-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "double rare", + "attacks": [ + { + "name": "Circle Circuit", + "cost": [ + "lightning", + "lightning" + ], + "damage": 30, + "damage_display": "30+", + "effect_description": "This attack does 30 damage for each of your BenchedPok\u00e9mon.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/096-pikachu-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/096-pikachu-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/097-magnemite.json b/backend/data/definitions/pokemon/a1/097-magnemite.json new file mode 100644 index 0000000..7d14bdd --- /dev/null +++ b/backend/data/definitions/pokemon/a1/097-magnemite.json @@ -0,0 +1,27 @@ +{ + "id": "a1-097-magnemite", + "name": "Magnemite", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Lightning Ball", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "sowsow" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/098-magneton.json b/backend/data/definitions/pokemon/a1/098-magneton.json new file mode 100644 index 0000000..7d23746 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/098-magneton.json @@ -0,0 +1,40 @@ +{ + "id": "a1-098-magneton", + "name": "Magneton", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Magnemite", + "attacks": [ + { + "name": "Spinning Attack", + "cost": [ + "lightning", + "colorless", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "abilities": [ + { + "name": "Volt Charge", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may take aEnergy from your Energy Zone and attach it to this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "kirisAki", + "image_path": "pokemon/a1/098-magneton.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/098-magneton.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/099-voltorb.json b/backend/data/definitions/pokemon/a1/099-voltorb.json new file mode 100644 index 0000000..2b6e1c0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/099-voltorb.json @@ -0,0 +1,29 @@ +{ + "id": "a1-099-voltorb", + "name": "Voltorb", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "SATOSHI NAKAI", + "image_path": "pokemon/a1/099-voltorb.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/099-voltorb.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/100-electrode.json b/backend/data/definitions/pokemon/a1/100-electrode.json new file mode 100644 index 0000000..de29c92 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/100-electrode.json @@ -0,0 +1,31 @@ +{ + "id": "a1-100-electrode", + "name": "Electrode", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 0, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Voltorb", + "attacks": [ + { + "name": "Electro Ball", + "cost": [ + "lightning", + "lightning" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Asako Ito", + "image_path": "pokemon/a1/100-electrode.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/100-electrode.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/101-electabuzz.json b/backend/data/definitions/pokemon/a1/101-electabuzz.json new file mode 100644 index 0000000..3b67c0f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/101-electabuzz.json @@ -0,0 +1,32 @@ +{ + "id": "a1-101-electabuzz", + "name": "Electabuzz", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Thunder Punch", + "cost": [ + "lightning", + "lightning" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "Flip a coin. If heads, this attack does 40 more damage. If tails, this Pok\u00e9mon also does 20 damage to itself.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Ryuta Fuse" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/102-jolteon.json b/backend/data/definitions/pokemon/a1/102-jolteon.json new file mode 100644 index 0000000..1d16611 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/102-jolteon.json @@ -0,0 +1,35 @@ +{ + "id": "a1-102-jolteon", + "name": "Jolteon", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Eevee", + "attacks": [ + { + "name": "Pin Missile", + "cost": [ + "lightning", + "colorless" + ], + "damage": 40, + "damage_display": "40+", + "effect_description": "Flip 4 coins. This attack does 40 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Kouki Saitou", + "image_path": "pokemon/a1/102-jolteon.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/102-jolteon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/103-zapdos.json b/backend/data/definitions/pokemon/a1/103-zapdos.json new file mode 100644 index 0000000..bd31dc7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/103-zapdos.json @@ -0,0 +1,32 @@ +{ + "id": "a1-103-zapdos", + "name": "Zapdos", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Raging Thunder", + "cost": [ + "lightning", + "lightning", + "colorless" + ], + "damage": 100, + "damage_display": "100", + "effect_description": "This attack also does 30 damage to 1 of your Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Hitoshi Ariga", + "image_path": "pokemon/a1/103-zapdos.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/103-zapdos.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/104-zapdos-ex.json b/backend/data/definitions/pokemon/a1/104-zapdos-ex.json new file mode 100644 index 0000000..c55ab7d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/104-zapdos-ex.json @@ -0,0 +1,43 @@ +{ + "id": "a1-104-zapdos-ex", + "name": "Zapdos ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "double rare", + "attacks": [ + { + "name": "Peck", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + }, + { + "name": "Thundering Hurricane", + "cost": [ + "lightning", + "lightning", + "lightning" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip 4 coins. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/104-zapdos-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/104-zapdos-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/105-blitzle.json b/backend/data/definitions/pokemon/a1/105-blitzle.json new file mode 100644 index 0000000..5bf12c8 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/105-blitzle.json @@ -0,0 +1,27 @@ +{ + "id": "a1-105-blitzle", + "name": "Blitzle", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Zap Kick", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Shin Nagasawa" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/106-zebstrika.json b/backend/data/definitions/pokemon/a1/106-zebstrika.json new file mode 100644 index 0000000..61cfcc7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/106-zebstrika.json @@ -0,0 +1,30 @@ +{ + "id": "a1-106-zebstrika", + "name": "Zebstrika", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Blitzle", + "attacks": [ + { + "name": "Thunder Spear", + "cost": [ + "lightning" + ], + "damage": 0, + "effect_description": "This attack does 30 damage to 1 of your opponent\u2019s Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Misa Tsutsui", + "image_path": "pokemon/a1/106-zebstrika.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/106-zebstrika.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/107-tynamo.json b/backend/data/definitions/pokemon/a1/107-tynamo.json new file mode 100644 index 0000000..9d6fca6 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/107-tynamo.json @@ -0,0 +1,29 @@ +{ + "id": "a1-107-tynamo", + "name": "Tynamo", + "card_type": "pokemon", + "hp": 30, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tiny Charge", + "cost": [ + "lightning" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Asako Ito", + "image_path": "pokemon/a1/107-tynamo.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/107-tynamo.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/108-eelektrik.json b/backend/data/definitions/pokemon/a1/108-eelektrik.json new file mode 100644 index 0000000..6914f2d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/108-eelektrik.json @@ -0,0 +1,30 @@ +{ + "id": "a1-108-eelektrik", + "name": "Eelektrik", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Tynamo", + "attacks": [ + { + "name": "Head Bolt", + "cost": [ + "lightning" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Midori Harada", + "image_path": "pokemon/a1/108-eelektrik.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/108-eelektrik.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/109-eelektross.json b/backend/data/definitions/pokemon/a1/109-eelektross.json new file mode 100644 index 0000000..e5c8162 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/109-eelektross.json @@ -0,0 +1,33 @@ +{ + "id": "a1-109-eelektross", + "name": "Eelektross", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "lightning", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Eelektrik", + "attacks": [ + { + "name": "Thunder Fang", + "cost": [ + "lightning", + "lightning", + "colorless" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Flip a coin. If heads, your opponent\u2019s Active Pok\u00e9mon is now Paralyzed." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "hatachu", + "image_path": "pokemon/a1/109-eelektross.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/109-eelektross.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/110-helioptile.json b/backend/data/definitions/pokemon/a1/110-helioptile.json new file mode 100644 index 0000000..39236e4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/110-helioptile.json @@ -0,0 +1,27 @@ +{ + "id": "a1-110-helioptile", + "name": "Helioptile", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tail Whap", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "5ban Graphics" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/111-heliolisk.json b/backend/data/definitions/pokemon/a1/111-heliolisk.json new file mode 100644 index 0000000..1dce2dc --- /dev/null +++ b/backend/data/definitions/pokemon/a1/111-heliolisk.json @@ -0,0 +1,33 @@ +{ + "id": "a1-111-heliolisk", + "name": "Heliolisk", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Helioptile", + "attacks": [ + { + "name": "Quick Attack", + "cost": [ + "colorless", + "colorless" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "Flip a coin. If heads, this attack does 40 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "otumami" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/112-pincurchin.json b/backend/data/definitions/pokemon/a1/112-pincurchin.json new file mode 100644 index 0000000..1535ba0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/112-pincurchin.json @@ -0,0 +1,29 @@ +{ + "id": "a1-112-pincurchin", + "name": "Pincurchin", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Thunder Shock", + "cost": [ + "lightning", + "lightning" + ], + "damage": 30, + "damage_display": "30", + "effect_description": "Flip a coin. If heads, your opponent\u2019s Active Pok\u00e9mon is now Paralyzed." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Tika Matsuno" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/113-clefairy.json b/backend/data/definitions/pokemon/a1/113-clefairy.json new file mode 100644 index 0000000..c76a598 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/113-clefairy.json @@ -0,0 +1,29 @@ +{ + "id": "a1-113-clefairy", + "name": "Clefairy", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Slap", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "kirisAki", + "image_path": "pokemon/a1/113-clefairy.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/113-clefairy.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/114-clefable.json b/backend/data/definitions/pokemon/a1/114-clefable.json new file mode 100644 index 0000000..affce41 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/114-clefable.json @@ -0,0 +1,30 @@ +{ + "id": "a1-114-clefable", + "name": "Clefable", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Clefairy", + "attacks": [ + { + "name": "Magical Shot", + "cost": [ + "psychic" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "Sanosuke Sakuma", + "image_path": "pokemon/a1/114-clefable.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/114-clefable.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/115-abra.json b/backend/data/definitions/pokemon/a1/115-abra.json new file mode 100644 index 0000000..2849793 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/115-abra.json @@ -0,0 +1,29 @@ +{ + "id": "a1-115-abra", + "name": "Abra", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Teleport", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "Switch this Pok\u00e9mon with 1 of your Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Aya Kusube", + "image_path": "pokemon/a1/115-abra.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/115-abra.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/116-kadabra.json b/backend/data/definitions/pokemon/a1/116-kadabra.json new file mode 100644 index 0000000..bff54e1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/116-kadabra.json @@ -0,0 +1,30 @@ +{ + "id": "a1-116-kadabra", + "name": "Kadabra", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Abra", + "attacks": [ + { + "name": "Super Psy Bolt", + "cost": [ + "psychic", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Ken Sugimori" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/117-alakazam.json b/backend/data/definitions/pokemon/a1/117-alakazam.json new file mode 100644 index 0000000..20b31d6 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/117-alakazam.json @@ -0,0 +1,36 @@ +{ + "id": "a1-117-alakazam", + "name": "Alakazam", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Kadabra", + "attacks": [ + { + "name": "Psychic", + "cost": [ + "psychic", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60x", + "effect_description": "This attack does 30 more damage for each Energy attached to your opponent\u2019s Active Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Kouki Saitou", + "image_path": "pokemon/a1/117-alakazam.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/117-alakazam.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/118-slowpoke.json b/backend/data/definitions/pokemon/a1/118-slowpoke.json new file mode 100644 index 0000000..4c30aba --- /dev/null +++ b/backend/data/definitions/pokemon/a1/118-slowpoke.json @@ -0,0 +1,28 @@ +{ + "id": "a1-118-slowpoke", + "name": "Slowpoke", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tail Whap", + "cost": [ + "psychic", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Miki Tanaka" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/119-slowbro.json b/backend/data/definitions/pokemon/a1/119-slowbro.json new file mode 100644 index 0000000..204ace5 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/119-slowbro.json @@ -0,0 +1,30 @@ +{ + "id": "a1-119-slowbro", + "name": "Slowbro", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Slowpoke", + "attacks": [ + { + "name": "Super Psy Bolt", + "cost": [ + "psychic", + "psychic", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Kagemaru Himeno" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/120-gastly.json b/backend/data/definitions/pokemon/a1/120-gastly.json new file mode 100644 index 0000000..2545e45 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/120-gastly.json @@ -0,0 +1,27 @@ +{ + "id": "a1-120-gastly", + "name": "Gastly", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Suffocating Gas", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Masako Yamashita" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/121-haunter.json b/backend/data/definitions/pokemon/a1/121-haunter.json new file mode 100644 index 0000000..f3c0e62 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/121-haunter.json @@ -0,0 +1,28 @@ +{ + "id": "a1-121-haunter", + "name": "Haunter", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Gastly", + "attacks": [ + { + "name": "Will-O-Wisp", + "cost": [ + "psychic" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Nisota Niso" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/122-gengar.json b/backend/data/definitions/pokemon/a1/122-gengar.json new file mode 100644 index 0000000..c39ec5b --- /dev/null +++ b/backend/data/definitions/pokemon/a1/122-gengar.json @@ -0,0 +1,31 @@ +{ + "id": "a1-122-gengar", + "name": "Gengar", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Haunter", + "attacks": [ + { + "name": "Bother", + "cost": [ + "psychic" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "Your opponent can\u2019t use any Supporter cards from their hand during their next turn." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Naoyo Kimura", + "image_path": "pokemon/a1/122-gengar.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/122-gengar.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/123-gengar-ex.json b/backend/data/definitions/pokemon/a1/123-gengar-ex.json new file mode 100644 index 0000000..12ca6d1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/123-gengar-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1-123-gengar-ex", + "name": "Gengar ex", + "card_type": "pokemon", + "hp": 170, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Haunter", + "attacks": [ + { + "name": "Spooky Shot", + "cost": [ + "psychic", + "psychic", + "psychic" + ], + "damage": 100, + "damage_display": "100" + } + ], + "abilities": [ + { + "name": "Shadowy Spellbind", + "effect_id": "unimplemented", + "effect_description": "As long as this Pok\u00e9mon is in the Active Spot, your opponent can\u2019t use any Supporter cards from their hand." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/123-gengar-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/123-gengar-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/124-drowzee.json b/backend/data/definitions/pokemon/a1/124-drowzee.json new file mode 100644 index 0000000..7316609 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/124-drowzee.json @@ -0,0 +1,28 @@ +{ + "id": "a1-124-drowzee", + "name": "Drowzee", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Mumble", + "cost": [ + "psychic", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Yukiko Baba" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/125-hypno.json b/backend/data/definitions/pokemon/a1/125-hypno.json new file mode 100644 index 0000000..8d869c8 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/125-hypno.json @@ -0,0 +1,39 @@ +{ + "id": "a1-125-hypno", + "name": "Hypno", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Drowzee", + "attacks": [ + { + "name": "Psypunch", + "cost": [ + "psychic", + "psychic", + "colorless" + ], + "damage": 50, + "damage_display": "50" + } + ], + "abilities": [ + { + "name": "Sleep Pendulum", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may flip a coin. If heads, your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Shigenori Negishi", + "image_path": "pokemon/a1/125-hypno.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/125-hypno.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/126-mr-mime.json b/backend/data/definitions/pokemon/a1/126-mr-mime.json new file mode 100644 index 0000000..38041c4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/126-mr-mime.json @@ -0,0 +1,31 @@ +{ + "id": "a1-126-mr-mime", + "name": "Mr. Mime", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Barrier Attack", + "cost": [ + "psychic", + "colorless" + ], + "damage": 30, + "damage_display": "30", + "effect_description": "During your opponent\u2019s next turn, this Pok\u00e9mon takes \u221220 damage from attacks." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Kagemaru Himeno", + "image_path": "pokemon/a1/126-mr-mime.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/126-mr-mime.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/127-jynx.json b/backend/data/definitions/pokemon/a1/127-jynx.json new file mode 100644 index 0000000..fa9ddfc --- /dev/null +++ b/backend/data/definitions/pokemon/a1/127-jynx.json @@ -0,0 +1,34 @@ +{ + "id": "a1-127-jynx", + "name": "Jynx", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Psychic", + "cost": [ + "psychic", + "colorless" + ], + "damage": 30, + "damage_display": "30x", + "effect_description": "This attack does 20 more damage for each Energy attached to your opponent\u2019s Active Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Oswaldo KATO", + "image_path": "pokemon/a1/127-jynx.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/127-jynx.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/128-mewtwo.json b/backend/data/definitions/pokemon/a1/128-mewtwo.json new file mode 100644 index 0000000..6522b60 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/128-mewtwo.json @@ -0,0 +1,33 @@ +{ + "id": "a1-128-mewtwo", + "name": "Mewtwo", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Power Blast", + "cost": [ + "psychic", + "psychic", + "colorless", + "colorless" + ], + "damage": 120, + "damage_display": "120", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "kawayoo", + "image_path": "pokemon/a1/128-mewtwo.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/128-mewtwo.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/129-mewtwo-ex.json b/backend/data/definitions/pokemon/a1/129-mewtwo-ex.json new file mode 100644 index 0000000..ddbf5d9 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/129-mewtwo-ex.json @@ -0,0 +1,42 @@ +{ + "id": "a1-129-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "double rare", + "attacks": [ + { + "name": "Psychic Sphere", + "cost": [ + "psychic", + "colorless" + ], + "damage": 50, + "damage_display": "50" + }, + { + "name": "Psydrive", + "cost": [ + "psychic", + "psychic", + "colorless", + "colorless" + ], + "damage": 150, + "damage_display": "150", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA Mochizuki", + "image_path": "pokemon/a1/129-mewtwo-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/129-mewtwo-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/130-ralts.json b/backend/data/definitions/pokemon/a1/130-ralts.json new file mode 100644 index 0000000..6e5b690 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/130-ralts.json @@ -0,0 +1,29 @@ +{ + "id": "a1-130-ralts", + "name": "Ralts", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Ram", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Yuka Morii", + "image_path": "pokemon/a1/130-ralts.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/130-ralts.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/131-kirlia.json b/backend/data/definitions/pokemon/a1/131-kirlia.json new file mode 100644 index 0000000..955aa09 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/131-kirlia.json @@ -0,0 +1,31 @@ +{ + "id": "a1-131-kirlia", + "name": "Kirlia", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Ralts", + "attacks": [ + { + "name": "Smack", + "cost": [ + "psychic", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "sowsow", + "image_path": "pokemon/a1/131-kirlia.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/131-kirlia.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/132-gardevoir.json b/backend/data/definitions/pokemon/a1/132-gardevoir.json new file mode 100644 index 0000000..b0b124b --- /dev/null +++ b/backend/data/definitions/pokemon/a1/132-gardevoir.json @@ -0,0 +1,39 @@ +{ + "id": "a1-132-gardevoir", + "name": "Gardevoir", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Kirlia", + "attacks": [ + { + "name": "Psyshot", + "cost": [ + "psychic", + "psychic", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "abilities": [ + { + "name": "Psy Shadow", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may take aEnergy from your Energy Zone and attach it to thePok\u00e9mon in the Active Spot." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Yuu Nishida", + "image_path": "pokemon/a1/132-gardevoir.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/132-gardevoir.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/133-woobat.json b/backend/data/definitions/pokemon/a1/133-woobat.json new file mode 100644 index 0000000..17465d1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/133-woobat.json @@ -0,0 +1,27 @@ +{ + "id": "a1-133-woobat", + "name": "Woobat", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Gnaw", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "MAHOU" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/134-swoobat.json b/backend/data/definitions/pokemon/a1/134-swoobat.json new file mode 100644 index 0000000..3b8c5bf --- /dev/null +++ b/backend/data/definitions/pokemon/a1/134-swoobat.json @@ -0,0 +1,31 @@ +{ + "id": "a1-134-swoobat", + "name": "Swoobat", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Woobat", + "attacks": [ + { + "name": "Heart Stamp", + "cost": [ + "psychic", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Masakazu Fukuda", + "image_path": "pokemon/a1/134-swoobat.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/134-swoobat.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/135-golett.json b/backend/data/definitions/pokemon/a1/135-golett.json new file mode 100644 index 0000000..9b3b2bc --- /dev/null +++ b/backend/data/definitions/pokemon/a1/135-golett.json @@ -0,0 +1,31 @@ +{ + "id": "a1-135-golett", + "name": "Golett", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Mega Punch", + "cost": [ + "psychic", + "colorless", + "colorless" + ], + "damage": 50, + "damage_display": "50" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Kyoko Umemoto", + "image_path": "pokemon/a1/135-golett.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/135-golett.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/136-golurk.json b/backend/data/definitions/pokemon/a1/136-golurk.json new file mode 100644 index 0000000..d38a0e3 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/136-golurk.json @@ -0,0 +1,37 @@ +{ + "id": "a1-136-golurk", + "name": "Golurk", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Golett", + "attacks": [ + { + "name": "Double Lariat", + "cost": [ + "psychic", + "psychic", + "colorless", + "colorless" + ], + "damage": 100, + "damage_display": "100+", + "effect_description": "Flip 2 coins. This attack does 100 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "match", + "image_path": "pokemon/a1/136-golurk.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/136-golurk.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/137-sandshrew.json b/backend/data/definitions/pokemon/a1/137-sandshrew.json new file mode 100644 index 0000000..cea8e42 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/137-sandshrew.json @@ -0,0 +1,27 @@ +{ + "id": "a1-137-sandshrew", + "name": "Sandshrew", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Scratch", + "cost": [ + "fighting" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Miki Tanaka" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/138-sandslash.json b/backend/data/definitions/pokemon/a1/138-sandslash.json new file mode 100644 index 0000000..ff8a683 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/138-sandslash.json @@ -0,0 +1,31 @@ +{ + "id": "a1-138-sandslash", + "name": "Sandslash", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Sandshrew", + "attacks": [ + { + "name": "Slash", + "cost": [ + "fighting", + "fighting" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Miki Tanaka", + "image_path": "pokemon/a1/138-sandslash.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/138-sandslash.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/139-diglett.json b/backend/data/definitions/pokemon/a1/139-diglett.json new file mode 100644 index 0000000..a56e979 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/139-diglett.json @@ -0,0 +1,27 @@ +{ + "id": "a1-139-diglett", + "name": "Diglett", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Mud-Slap", + "cost": [ + "fighting" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Masako Yamashita" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/140-dugtrio.json b/backend/data/definitions/pokemon/a1/140-dugtrio.json new file mode 100644 index 0000000..e29c55c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/140-dugtrio.json @@ -0,0 +1,31 @@ +{ + "id": "a1-140-dugtrio", + "name": "Dugtrio", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Diglett", + "attacks": [ + { + "name": "Dig", + "cost": [ + "fighting" + ], + "damage": 40, + "damage_display": "40", + "effect_description": "Flip a coin. If heads, during your opponent\u2019s next turn, prevent all damage from\u2014and effects of\u2014attacks done to this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Akira Komayama", + "image_path": "pokemon/a1/140-dugtrio.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/140-dugtrio.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/141-mankey.json b/backend/data/definitions/pokemon/a1/141-mankey.json new file mode 100644 index 0000000..014a525 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/141-mankey.json @@ -0,0 +1,29 @@ +{ + "id": "a1-141-mankey", + "name": "Mankey", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Low Kick", + "cost": [ + "fighting" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Kanako Eo", + "image_path": "pokemon/a1/141-mankey.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/141-mankey.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/142-primeape.json b/backend/data/definitions/pokemon/a1/142-primeape.json new file mode 100644 index 0000000..e63346d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/142-primeape.json @@ -0,0 +1,33 @@ +{ + "id": "a1-142-primeape", + "name": "Primeape", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Mankey", + "attacks": [ + { + "name": "Fight Back", + "cost": [ + "fighting", + "fighting" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "If this Pok\u00e9mon has damage on it, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Kagemaru Himeno" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/143-machop.json b/backend/data/definitions/pokemon/a1/143-machop.json new file mode 100644 index 0000000..35e40c1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/143-machop.json @@ -0,0 +1,27 @@ +{ + "id": "a1-143-machop", + "name": "Machop", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Knuckle Punch", + "cost": [ + "fighting" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Kyoko Umemoto" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/144-machoke.json b/backend/data/definitions/pokemon/a1/144-machoke.json new file mode 100644 index 0000000..707b260 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/144-machoke.json @@ -0,0 +1,29 @@ +{ + "id": "a1-144-machoke", + "name": "Machoke", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Machop", + "attacks": [ + { + "name": "Strength", + "cost": [ + "fighting", + "fighting" + ], + "damage": 50, + "damage_display": "50" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "match" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/145-machamp.json b/backend/data/definitions/pokemon/a1/145-machamp.json new file mode 100644 index 0000000..3bbbf73 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/145-machamp.json @@ -0,0 +1,32 @@ +{ + "id": "a1-145-machamp", + "name": "Machamp", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "fighting", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Machoke", + "attacks": [ + { + "name": "Seismic Toss", + "cost": [ + "fighting", + "fighting", + "fighting" + ], + "damage": 100, + "damage_display": "100" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Hitoshi Ariga", + "image_path": "pokemon/a1/145-machamp.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/145-machamp.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/146-machamp-ex.json b/backend/data/definitions/pokemon/a1/146-machamp-ex.json new file mode 100644 index 0000000..02366ba --- /dev/null +++ b/backend/data/definitions/pokemon/a1/146-machamp-ex.json @@ -0,0 +1,30 @@ +{ + "id": "a1-146-machamp-ex", + "name": "Machamp ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "fighting", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Machoke", + "attacks": [ + { + "name": "Mega Punch", + "cost": [ + "fighting", + "fighting", + "fighting" + ], + "damage": 120, + "damage_display": "120" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "PLANETA CG Works" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/147-geodude.json b/backend/data/definitions/pokemon/a1/147-geodude.json new file mode 100644 index 0000000..cc568de --- /dev/null +++ b/backend/data/definitions/pokemon/a1/147-geodude.json @@ -0,0 +1,29 @@ +{ + "id": "a1-147-geodude", + "name": "Geodude", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "fighting" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Kouki Saitou", + "image_path": "pokemon/a1/147-geodude.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/147-geodude.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/148-graveler.json b/backend/data/definitions/pokemon/a1/148-graveler.json new file mode 100644 index 0000000..87b7e0f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/148-graveler.json @@ -0,0 +1,32 @@ +{ + "id": "a1-148-graveler", + "name": "Graveler", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Geodude", + "attacks": [ + { + "name": "Rollout", + "cost": [ + "fighting", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Naoyo Kimura", + "image_path": "pokemon/a1/148-graveler.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/148-graveler.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/149-golem.json b/backend/data/definitions/pokemon/a1/149-golem.json new file mode 100644 index 0000000..73a4849 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/149-golem.json @@ -0,0 +1,34 @@ +{ + "id": "a1-149-golem", + "name": "Golem", + "card_type": "pokemon", + "hp": 160, + "pokemon_type": "fighting", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Graveler", + "attacks": [ + { + "name": "Double-Edge", + "cost": [ + "fighting", + "colorless", + "colorless", + "colorless" + ], + "damage": 150, + "damage_display": "150", + "effect_description": "This Pok\u00e9mon also does 50 damage to itself." + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Sumiyoshi Kizuki", + "image_path": "pokemon/a1/149-golem.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/149-golem.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/150-onix.json b/backend/data/definitions/pokemon/a1/150-onix.json new file mode 100644 index 0000000..e73dbbf --- /dev/null +++ b/backend/data/definitions/pokemon/a1/150-onix.json @@ -0,0 +1,29 @@ +{ + "id": "a1-150-onix", + "name": "Onix", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Land Crush", + "cost": [ + "fighting", + "fighting", + "fighting" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "otumami" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/151-cubone.json b/backend/data/definitions/pokemon/a1/151-cubone.json new file mode 100644 index 0000000..d104b08 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/151-cubone.json @@ -0,0 +1,27 @@ +{ + "id": "a1-151-cubone", + "name": "Cubone", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Growl", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "During your opponent\u2019s next turn, attacks used by the Defending Pok\u00e9mon do \u221220 damage." + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "sowsow" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/152-marowak.json b/backend/data/definitions/pokemon/a1/152-marowak.json new file mode 100644 index 0000000..f0250eb --- /dev/null +++ b/backend/data/definitions/pokemon/a1/152-marowak.json @@ -0,0 +1,28 @@ +{ + "id": "a1-152-marowak", + "name": "Marowak", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Cubone", + "attacks": [ + { + "name": "Bone Beatdown", + "cost": [ + "fighting" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Shin Nagasawa" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/153-marowak-ex.json b/backend/data/definitions/pokemon/a1/153-marowak-ex.json new file mode 100644 index 0000000..531576f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/153-marowak-ex.json @@ -0,0 +1,35 @@ +{ + "id": "a1-153-marowak-ex", + "name": "Marowak ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Cubone", + "attacks": [ + { + "name": "Bonemerang", + "cost": [ + "fighting", + "fighting" + ], + "damage": 80, + "damage_display": "80+", + "effect_description": "Flip 2 coins. This attack does 80 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "PLANETA Mochizuki", + "image_path": "pokemon/a1/153-marowak-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/153-marowak-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/154-hitmonlee.json b/backend/data/definitions/pokemon/a1/154-hitmonlee.json new file mode 100644 index 0000000..5bf91d5 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/154-hitmonlee.json @@ -0,0 +1,29 @@ +{ + "id": "a1-154-hitmonlee", + "name": "Hitmonlee", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Stretch Kick", + "cost": [ + "fighting" + ], + "damage": 0, + "effect_description": "This attack does 30 damage to 1 of your opponent\u2019s Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Yukiko Baba", + "image_path": "pokemon/a1/154-hitmonlee.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/154-hitmonlee.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/155-hitmonchan.json b/backend/data/definitions/pokemon/a1/155-hitmonchan.json new file mode 100644 index 0000000..94c6388 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/155-hitmonchan.json @@ -0,0 +1,29 @@ +{ + "id": "a1-155-hitmonchan", + "name": "Hitmonchan", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Jab", + "cost": [ + "fighting" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Ken Sugimori", + "image_path": "pokemon/a1/155-hitmonchan.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/155-hitmonchan.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/156-rhyhorn.json b/backend/data/definitions/pokemon/a1/156-rhyhorn.json new file mode 100644 index 0000000..63727ba --- /dev/null +++ b/backend/data/definitions/pokemon/a1/156-rhyhorn.json @@ -0,0 +1,31 @@ +{ + "id": "a1-156-rhyhorn", + "name": "Rhyhorn", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "fighting", + "fighting", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Midori Harada", + "image_path": "pokemon/a1/156-rhyhorn.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/156-rhyhorn.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/157-rhydon.json b/backend/data/definitions/pokemon/a1/157-rhydon.json new file mode 100644 index 0000000..5353c9c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/157-rhydon.json @@ -0,0 +1,31 @@ +{ + "id": "a1-157-rhydon", + "name": "Rhydon", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Rhyhorn", + "attacks": [ + { + "name": "Horn Drill", + "cost": [ + "fighting", + "fighting", + "fighting", + "colorless" + ], + "damage": 100, + "damage_display": "100" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Masakazu Fukuda" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/158-kabuto.json b/backend/data/definitions/pokemon/a1/158-kabuto.json new file mode 100644 index 0000000..1fff9d7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/158-kabuto.json @@ -0,0 +1,28 @@ +{ + "id": "a1-158-kabuto", + "name": "Kabuto", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Dome Fossil", + "attacks": [ + { + "name": "Shell Attack", + "cost": [ + "fighting" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "sui" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/159-kabutops.json b/backend/data/definitions/pokemon/a1/159-kabutops.json new file mode 100644 index 0000000..edc1e0f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/159-kabutops.json @@ -0,0 +1,31 @@ +{ + "id": "a1-159-kabutops", + "name": "Kabutops", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fighting", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Kabuto", + "attacks": [ + { + "name": "Leech Life", + "cost": [ + "fighting" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "Heal from this Pok\u00e9mon the same amount of damage you did to your opponent\u2019s Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Shin Nagasawa", + "image_path": "pokemon/a1/159-kabutops.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/159-kabutops.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/160-mienfoo.json b/backend/data/definitions/pokemon/a1/160-mienfoo.json new file mode 100644 index 0000000..8e6e774 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/160-mienfoo.json @@ -0,0 +1,27 @@ +{ + "id": "a1-160-mienfoo", + "name": "Mienfoo", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Pound", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "match" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/161-mienshao.json b/backend/data/definitions/pokemon/a1/161-mienshao.json new file mode 100644 index 0000000..b8ea748 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/161-mienshao.json @@ -0,0 +1,28 @@ +{ + "id": "a1-161-mienshao", + "name": "Mienshao", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Mienfoo", + "attacks": [ + { + "name": "Spiral Kick", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Atsuko Nishida" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/162-clobbopus.json b/backend/data/definitions/pokemon/a1/162-clobbopus.json new file mode 100644 index 0000000..9cdd03c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/162-clobbopus.json @@ -0,0 +1,30 @@ +{ + "id": "a1-162-clobbopus", + "name": "Clobbopus", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Knuckle Punch", + "cost": [ + "fighting", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Yuu Nishida", + "image_path": "pokemon/a1/162-clobbopus.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/162-clobbopus.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/163-grapploct.json b/backend/data/definitions/pokemon/a1/163-grapploct.json new file mode 100644 index 0000000..11d97ea --- /dev/null +++ b/backend/data/definitions/pokemon/a1/163-grapploct.json @@ -0,0 +1,33 @@ +{ + "id": "a1-163-grapploct", + "name": "Grapploct", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Clobbopus", + "attacks": [ + { + "name": "Knock Back", + "cost": [ + "fighting", + "fighting", + "colorless" + ], + "damage": 70, + "damage_display": "70", + "effect_description": "Switch out your opponent\u2019s Active Pok\u00e9mon to the Bench.(Your opponent chooses the new Active Pok\u00e9mon.)" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "kurumitsu", + "image_path": "pokemon/a1/163-grapploct.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/163-grapploct.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/164-ekans.json b/backend/data/definitions/pokemon/a1/164-ekans.json new file mode 100644 index 0000000..e146ec9 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/164-ekans.json @@ -0,0 +1,27 @@ +{ + "id": "a1-164-ekans", + "name": "Ekans", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Bite", + "cost": [ + "darkness" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "MAHOU" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/165-arbok.json b/backend/data/definitions/pokemon/a1/165-arbok.json new file mode 100644 index 0000000..bc86f68 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/165-arbok.json @@ -0,0 +1,30 @@ +{ + "id": "a1-165-arbok", + "name": "Arbok", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Ekans", + "attacks": [ + { + "name": "Corner", + "cost": [ + "darkness", + "colorless" + ], + "damage": 60, + "damage_display": "60", + "effect_description": "During your opponent\u2019s next turn, the Defending Pok\u00e9mon can\u2019t retreat." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Naoki Saito" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/166-nidoran.json b/backend/data/definitions/pokemon/a1/166-nidoran.json new file mode 100644 index 0000000..4ef7e7a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/166-nidoran.json @@ -0,0 +1,29 @@ +{ + "id": "a1-166-nidoran", + "name": "Nidoran\u2640", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Call for Family", + "cost": [ + "darkness" + ], + "damage": 0, + "effect_description": "Put 1 randomNidoran\u2642from your deck onto your Bench." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Miki Tanaka", + "image_path": "pokemon/a1/166-nidoran.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/166-nidoran.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/167-nidorina.json b/backend/data/definitions/pokemon/a1/167-nidorina.json new file mode 100644 index 0000000..5f9b789 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/167-nidorina.json @@ -0,0 +1,28 @@ +{ + "id": "a1-167-nidorina", + "name": "Nidorina", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Nidoran\u2640", + "attacks": [ + { + "name": "Bite", + "cost": [ + "darkness" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Kagemaru Himeno" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/168-nidoqueen.json b/backend/data/definitions/pokemon/a1/168-nidoqueen.json new file mode 100644 index 0000000..525bf28 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/168-nidoqueen.json @@ -0,0 +1,36 @@ +{ + "id": "a1-168-nidoqueen", + "name": "Nidoqueen", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "darkness", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Nidorina", + "attacks": [ + { + "name": "Lovestrike", + "cost": [ + "darkness", + "darkness", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "This attack does 50 more damage for each of your BenchedNidoking.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "nagimiso", + "image_path": "pokemon/a1/168-nidoqueen.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/168-nidoqueen.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/169-nidoran.json b/backend/data/definitions/pokemon/a1/169-nidoran.json new file mode 100644 index 0000000..d33c938 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/169-nidoran.json @@ -0,0 +1,27 @@ +{ + "id": "a1-169-nidoran", + "name": "Nidoran\u2642", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Peck", + "cost": [ + "darkness" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Naoyo Kimura" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/170-nidorino.json b/backend/data/definitions/pokemon/a1/170-nidorino.json new file mode 100644 index 0000000..2acb06e --- /dev/null +++ b/backend/data/definitions/pokemon/a1/170-nidorino.json @@ -0,0 +1,29 @@ +{ + "id": "a1-170-nidorino", + "name": "Nidorino", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Nidoran\u2642", + "attacks": [ + { + "name": "Horn Attack", + "cost": [ + "darkness", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Kouki Saitou" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/171-nidoking.json b/backend/data/definitions/pokemon/a1/171-nidoking.json new file mode 100644 index 0000000..002c110 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/171-nidoking.json @@ -0,0 +1,33 @@ +{ + "id": "a1-171-nidoking", + "name": "Nidoking", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "darkness", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Nidorino", + "attacks": [ + { + "name": "Poison Horn", + "cost": [ + "darkness", + "darkness", + "colorless" + ], + "damage": 90, + "damage_display": "90", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Poisoned." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "kawayoo", + "image_path": "pokemon/a1/171-nidoking.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/171-nidoking.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/172-zubat.json b/backend/data/definitions/pokemon/a1/172-zubat.json new file mode 100644 index 0000000..09b21e8 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/172-zubat.json @@ -0,0 +1,29 @@ +{ + "id": "a1-172-zubat", + "name": "Zubat", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Glide", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "match", + "image_path": "pokemon/a1/172-zubat.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/172-zubat.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/173-golbat.json b/backend/data/definitions/pokemon/a1/173-golbat.json new file mode 100644 index 0000000..7d8eaea --- /dev/null +++ b/backend/data/definitions/pokemon/a1/173-golbat.json @@ -0,0 +1,30 @@ +{ + "id": "a1-173-golbat", + "name": "Golbat", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Zubat", + "attacks": [ + { + "name": "Wing Attack", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Masakazu Fukuda", + "image_path": "pokemon/a1/173-golbat.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/173-golbat.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/174-grimer.json b/backend/data/definitions/pokemon/a1/174-grimer.json new file mode 100644 index 0000000..de36e87 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/174-grimer.json @@ -0,0 +1,30 @@ +{ + "id": "a1-174-grimer", + "name": "Grimer", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Poison Gas", + "cost": [ + "darkness" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Poisoned." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Pani Kobayashi", + "image_path": "pokemon/a1/174-grimer.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/174-grimer.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/175-muk.json b/backend/data/definitions/pokemon/a1/175-muk.json new file mode 100644 index 0000000..64ecfbe --- /dev/null +++ b/backend/data/definitions/pokemon/a1/175-muk.json @@ -0,0 +1,36 @@ +{ + "id": "a1-175-muk", + "name": "Muk", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Grimer", + "attacks": [ + { + "name": "Venoshock", + "cost": [ + "darkness", + "darkness", + "colorless" + ], + "damage": 70, + "damage_display": "70x", + "effect_description": "If your opponent\u2019s Active Pok\u00e9mon is Poisoned, this attack does 50 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Hajime Kusajima", + "image_path": "pokemon/a1/175-muk.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/175-muk.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/176-koffing.json b/backend/data/definitions/pokemon/a1/176-koffing.json new file mode 100644 index 0000000..90bade5 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/176-koffing.json @@ -0,0 +1,29 @@ +{ + "id": "a1-176-koffing", + "name": "Koffing", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Suffocating Gas", + "cost": [ + "darkness" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Saya Tsuruta", + "image_path": "pokemon/a1/176-koffing.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/176-koffing.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/177-weezing.json b/backend/data/definitions/pokemon/a1/177-weezing.json new file mode 100644 index 0000000..c320e8a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/177-weezing.json @@ -0,0 +1,37 @@ +{ + "id": "a1-177-weezing", + "name": "Weezing", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Koffing", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "darkness" + ], + "damage": 30, + "damage_display": "30" + } + ], + "abilities": [ + { + "name": "Gas Leak", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, if this Pok\u00e9mon is in the Active Spot, you may make your opponent\u2019s Active Pok\u00e9mon Poisoned." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "OOYAMA", + "image_path": "pokemon/a1/177-weezing.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/177-weezing.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/178-mawile.json b/backend/data/definitions/pokemon/a1/178-mawile.json new file mode 100644 index 0000000..7d2638c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/178-mawile.json @@ -0,0 +1,30 @@ +{ + "id": "a1-178-mawile", + "name": "Mawile", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "metal", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Crunch", + "cost": [ + "metal" + ], + "damage": 20, + "damage_display": "20", + "effect_description": "Flip a coin. If heads, discard a random Energy from your opponent\u2019s Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Kagemaru Himeno", + "image_path": "pokemon/a1/178-mawile.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/178-mawile.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/179-pawniard.json b/backend/data/definitions/pokemon/a1/179-pawniard.json new file mode 100644 index 0000000..c5e8ff0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/179-pawniard.json @@ -0,0 +1,27 @@ +{ + "id": "a1-179-pawniard", + "name": "Pawniard", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "metal", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Pierce", + "cost": [ + "metal" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Kouki Saitou" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/180-bisharp.json b/backend/data/definitions/pokemon/a1/180-bisharp.json new file mode 100644 index 0000000..71438dd --- /dev/null +++ b/backend/data/definitions/pokemon/a1/180-bisharp.json @@ -0,0 +1,29 @@ +{ + "id": "a1-180-bisharp", + "name": "Bisharp", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "metal", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Pawniard", + "attacks": [ + { + "name": "Metal Claw", + "cost": [ + "metal", + "metal" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Anesaki Dynamic" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/181-meltan.json b/backend/data/definitions/pokemon/a1/181-meltan.json new file mode 100644 index 0000000..64fdda7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/181-meltan.json @@ -0,0 +1,29 @@ +{ + "id": "a1-181-meltan", + "name": "Meltan", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "metal", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Amass", + "cost": [ + "metal" + ], + "damage": 0, + "effect_description": "Take aEnergy from your Energy Zone and attach it to this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Shin Nagasawa", + "image_path": "pokemon/a1/181-meltan.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/181-meltan.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/182-melmetal.json b/backend/data/definitions/pokemon/a1/182-melmetal.json new file mode 100644 index 0000000..4341186 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/182-melmetal.json @@ -0,0 +1,40 @@ +{ + "id": "a1-182-melmetal", + "name": "Melmetal", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "metal", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Meltan", + "attacks": [ + { + "name": "Heavy Impact", + "cost": [ + "metal", + "metal", + "metal", + "colorless" + ], + "damage": 120, + "damage_display": "120" + } + ], + "abilities": [ + { + "name": "Hard Coat", + "effect_id": "unimplemented", + "effect_description": "This Pok\u00e9mon takes \u221220 damage from attacks." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Kouki Saitou", + "image_path": "pokemon/a1/182-melmetal.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/182-melmetal.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/183-dratini.json b/backend/data/definitions/pokemon/a1/183-dratini.json new file mode 100644 index 0000000..b09135e --- /dev/null +++ b/backend/data/definitions/pokemon/a1/183-dratini.json @@ -0,0 +1,26 @@ +{ + "id": "a1-183-dratini", + "name": "Dratini", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "dragon", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Ram", + "cost": [ + "water", + "lightning" + ], + "damage": 40, + "damage_display": "40" + } + ], + "illustrator": "Ayaka Yoshida", + "image_path": "pokemon/a1/183-dratini.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/183-dratini.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/184-dragonair.json b/backend/data/definitions/pokemon/a1/184-dragonair.json new file mode 100644 index 0000000..39c8790 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/184-dragonair.json @@ -0,0 +1,28 @@ +{ + "id": "a1-184-dragonair", + "name": "Dragonair", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "dragon", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Dratini", + "attacks": [ + { + "name": "Tail Smack", + "cost": [ + "water", + "lightning", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "illustrator": "kirisAki", + "image_path": "pokemon/a1/184-dragonair.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/184-dragonair.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/185-dragonite.json b/backend/data/definitions/pokemon/a1/185-dragonite.json new file mode 100644 index 0000000..7bddb70 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/185-dragonite.json @@ -0,0 +1,29 @@ +{ + "id": "a1-185-dragonite", + "name": "Dragonite", + "card_type": "pokemon", + "hp": 160, + "pokemon_type": "dragon", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Dragonair", + "attacks": [ + { + "name": "Draco Meteor", + "cost": [ + "water", + "lightning", + "colorless", + "colorless" + ], + "damage": 0, + "effect_description": "1 of your opponent\u2019s Pok\u00e9mon is chosen at random 4 times. For each time a Pok\u00e9mon was chosen, do 50 damage to it." + } + ], + "illustrator": "Hiroyuki Yamamoto", + "image_path": "pokemon/a1/185-dragonite.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/185-dragonite.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/186-pidgey.json b/backend/data/definitions/pokemon/a1/186-pidgey.json new file mode 100644 index 0000000..2da797c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/186-pidgey.json @@ -0,0 +1,27 @@ +{ + "id": "a1-186-pidgey", + "name": "Pidgey", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Gust", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Scav" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/187-pidgeotto.json b/backend/data/definitions/pokemon/a1/187-pidgeotto.json new file mode 100644 index 0000000..355af5b --- /dev/null +++ b/backend/data/definitions/pokemon/a1/187-pidgeotto.json @@ -0,0 +1,28 @@ +{ + "id": "a1-187-pidgeotto", + "name": "Pidgeotto", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Pidgey", + "attacks": [ + { + "name": "Gust", + "cost": [ + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Scav" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/188-pidgeot.json b/backend/data/definitions/pokemon/a1/188-pidgeot.json new file mode 100644 index 0000000..2d907f8 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/188-pidgeot.json @@ -0,0 +1,36 @@ +{ + "id": "a1-188-pidgeot", + "name": "Pidgeot", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "colorless", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Pidgeotto", + "attacks": [ + { + "name": "Wing Attack", + "cost": [ + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "abilities": [ + { + "name": "Drive Off", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may switch out your opponent\u2019s Active Pok\u00e9mon to the Bench.(Your opponent chooses the new Active Pok\u00e9mon.)" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Scav" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/189-rattata.json b/backend/data/definitions/pokemon/a1/189-rattata.json new file mode 100644 index 0000000..c3e7b66 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/189-rattata.json @@ -0,0 +1,29 @@ +{ + "id": "a1-189-rattata", + "name": "Rattata", + "card_type": "pokemon", + "hp": 40, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Gnaw", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Atsushi Furusawa", + "image_path": "pokemon/a1/189-rattata.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/189-rattata.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/190-raticate.json b/backend/data/definitions/pokemon/a1/190-raticate.json new file mode 100644 index 0000000..b50c65d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/190-raticate.json @@ -0,0 +1,30 @@ +{ + "id": "a1-190-raticate", + "name": "Raticate", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Rattata", + "attacks": [ + { + "name": "Bite", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Shigenori Negishi", + "image_path": "pokemon/a1/190-raticate.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/190-raticate.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/191-spearow.json b/backend/data/definitions/pokemon/a1/191-spearow.json new file mode 100644 index 0000000..4d403ef --- /dev/null +++ b/backend/data/definitions/pokemon/a1/191-spearow.json @@ -0,0 +1,29 @@ +{ + "id": "a1-191-spearow", + "name": "Spearow", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Peck", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Shiburingaru", + "image_path": "pokemon/a1/191-spearow.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/191-spearow.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/192-fearow.json b/backend/data/definitions/pokemon/a1/192-fearow.json new file mode 100644 index 0000000..2de0b43 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/192-fearow.json @@ -0,0 +1,30 @@ +{ + "id": "a1-192-fearow", + "name": "Fearow", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Spearow", + "attacks": [ + { + "name": "Drill Run", + "cost": [ + "colorless", + "colorless" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "Flip a coin. If heads, discard a random Energy from your opponent\u2019s Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Satoshi Shirai" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/193-jigglypuff.json b/backend/data/definitions/pokemon/a1/193-jigglypuff.json new file mode 100644 index 0000000..92b5017 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/193-jigglypuff.json @@ -0,0 +1,28 @@ +{ + "id": "a1-193-jigglypuff", + "name": "Jigglypuff", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Pound", + "cost": [ + "colorless", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Mizue" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/194-wigglytuff.json b/backend/data/definitions/pokemon/a1/194-wigglytuff.json new file mode 100644 index 0000000..588156e --- /dev/null +++ b/backend/data/definitions/pokemon/a1/194-wigglytuff.json @@ -0,0 +1,29 @@ +{ + "id": "a1-194-wigglytuff", + "name": "Wigglytuff", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Jigglypuff", + "attacks": [ + { + "name": "Hyper Voice", + "cost": [ + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Atsuko Nishida" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/195-wigglytuff-ex.json b/backend/data/definitions/pokemon/a1/195-wigglytuff-ex.json new file mode 100644 index 0000000..cafa118 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/195-wigglytuff-ex.json @@ -0,0 +1,33 @@ +{ + "id": "a1-195-wigglytuff-ex", + "name": "Wigglytuff ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "double rare", + "evolves_from": "Jigglypuff", + "attacks": [ + { + "name": "Sleepy Song", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "PLANETA Igarashi", + "image_path": "pokemon/a1/195-wigglytuff-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/195-wigglytuff-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/196-meowth.json b/backend/data/definitions/pokemon/a1/196-meowth.json new file mode 100644 index 0000000..7e08d95 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/196-meowth.json @@ -0,0 +1,28 @@ +{ + "id": "a1-196-meowth", + "name": "Meowth", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Pay Day", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Draw a card." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Mitsuhiro Arita" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/197-persian.json b/backend/data/definitions/pokemon/a1/197-persian.json new file mode 100644 index 0000000..386c449 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/197-persian.json @@ -0,0 +1,32 @@ +{ + "id": "a1-197-persian", + "name": "Persian", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Meowth", + "attacks": [ + { + "name": "Shadow Claw", + "cost": [ + "colorless", + "colorless" + ], + "damage": 40, + "damage_display": "40", + "effect_description": "Flip a coin. If heads, discard a random card from your opponent\u2019s hand." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "nagimiso", + "image_path": "pokemon/a1/197-persian.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/197-persian.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/198-farfetchd.json b/backend/data/definitions/pokemon/a1/198-farfetchd.json new file mode 100644 index 0000000..c523950 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/198-farfetchd.json @@ -0,0 +1,29 @@ +{ + "id": "a1-198-farfetchd", + "name": "Farfetch\u2019d", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Leek Slap", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Miki Tanaka", + "image_path": "pokemon/a1/198-farfetchd.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/198-farfetchd.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/199-doduo.json b/backend/data/definitions/pokemon/a1/199-doduo.json new file mode 100644 index 0000000..9e1af90 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/199-doduo.json @@ -0,0 +1,29 @@ +{ + "id": "a1-199-doduo", + "name": "Doduo", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Peck", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Yuya Oka", + "image_path": "pokemon/a1/199-doduo.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/199-doduo.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/200-dodrio.json b/backend/data/definitions/pokemon/a1/200-dodrio.json new file mode 100644 index 0000000..bdf74ce --- /dev/null +++ b/backend/data/definitions/pokemon/a1/200-dodrio.json @@ -0,0 +1,30 @@ +{ + "id": "a1-200-dodrio", + "name": "Dodrio", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 0, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Doduo", + "attacks": [ + { + "name": "Drill Peck", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Miki Tanaka", + "image_path": "pokemon/a1/200-dodrio.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/200-dodrio.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/201-lickitung.json b/backend/data/definitions/pokemon/a1/201-lickitung.json new file mode 100644 index 0000000..5baf502 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/201-lickitung.json @@ -0,0 +1,35 @@ +{ + "id": "a1-201-lickitung", + "name": "Lickitung", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Continuous Lick", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60+", + "effect_description": "Flip a coin until you get tails. This attack does 60 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Kagemaru Himeno", + "image_path": "pokemon/a1/201-lickitung.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/201-lickitung.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/202-chansey.json b/backend/data/definitions/pokemon/a1/202-chansey.json new file mode 100644 index 0000000..2d0131a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/202-chansey.json @@ -0,0 +1,31 @@ +{ + "id": "a1-202-chansey", + "name": "Chansey", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Gentle Slap", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "MAHOU", + "image_path": "pokemon/a1/202-chansey.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/202-chansey.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/203-kangaskhan.json b/backend/data/definitions/pokemon/a1/203-kangaskhan.json new file mode 100644 index 0000000..192d380 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/203-kangaskhan.json @@ -0,0 +1,33 @@ +{ + "id": "a1-203-kangaskhan", + "name": "Kangaskhan", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Dizzy Punch", + "cost": [ + "colorless" + ], + "damage": 30, + "damage_display": "30+", + "effect_description": "Flip 2 coins. This attack does 30 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Ken Sugimori", + "image_path": "pokemon/a1/203-kangaskhan.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/203-kangaskhan.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/204-tauros.json b/backend/data/definitions/pokemon/a1/204-tauros.json new file mode 100644 index 0000000..116ec7d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/204-tauros.json @@ -0,0 +1,28 @@ +{ + "id": "a1-204-tauros", + "name": "Tauros", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Horn Attack", + "cost": [ + "colorless", + "colorless" + ], + "damage": 50, + "damage_display": "50" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "kodama" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/205-ditto.json b/backend/data/definitions/pokemon/a1/205-ditto.json new file mode 100644 index 0000000..d5aabb3 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/205-ditto.json @@ -0,0 +1,29 @@ +{ + "id": "a1-205-ditto", + "name": "Ditto", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Copy Anything", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "Choose 1 of your opponent\u2019s Pok\u00e9mon\u2019s attacks and use it as this attack. If this Pok\u00e9mon doesn\u2019t have the necessary Energy to use that attack, this attack does nothing." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Miki Tanaka", + "image_path": "pokemon/a1/205-ditto.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/205-ditto.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/206-eevee.json b/backend/data/definitions/pokemon/a1/206-eevee.json new file mode 100644 index 0000000..45dc727 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/206-eevee.json @@ -0,0 +1,27 @@ +{ + "id": "a1-206-eevee", + "name": "Eevee", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Atsuko Nishida" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/207-eevee.json b/backend/data/definitions/pokemon/a1/207-eevee.json new file mode 100644 index 0000000..c036f0f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/207-eevee.json @@ -0,0 +1,27 @@ +{ + "id": "a1-207-eevee", + "name": "Eevee", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Hasuno" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/208-eevee.json b/backend/data/definitions/pokemon/a1/208-eevee.json new file mode 100644 index 0000000..53521d2 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/208-eevee.json @@ -0,0 +1,27 @@ +{ + "id": "a1-208-eevee", + "name": "Eevee", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Sekio" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/209-porygon.json b/backend/data/definitions/pokemon/a1/209-porygon.json new file mode 100644 index 0000000..9063961 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/209-porygon.json @@ -0,0 +1,34 @@ +{ + "id": "a1-209-porygon", + "name": "Porygon", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "attacks": [ + { + "name": "Sharpen", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "abilities": [ + { + "name": "Data Scan", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may look at the top card of your deck." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Ayaka Yoshida" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/210-aerodactyl.json b/backend/data/definitions/pokemon/a1/210-aerodactyl.json new file mode 100644 index 0000000..c5e51a0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/210-aerodactyl.json @@ -0,0 +1,31 @@ +{ + "id": "a1-210-aerodactyl", + "name": "Aerodactyl", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "rare", + "evolves_from": "Old Amber", + "attacks": [ + { + "name": "Primal Wingbeat", + "cost": [ + "colorless", + "colorless" + ], + "damage": 0, + "effect_description": "Flip a coin. If heads, your opponent shuffles their Active Pok\u00e9mon into their deck." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Naoyo Kimura", + "image_path": "pokemon/a1/210-aerodactyl.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/210-aerodactyl.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/211-snorlax.json b/backend/data/definitions/pokemon/a1/211-snorlax.json new file mode 100644 index 0000000..94813c9 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/211-snorlax.json @@ -0,0 +1,32 @@ +{ + "id": "a1-211-snorlax", + "name": "Snorlax", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "rare", + "attacks": [ + { + "name": "Rollout", + "cost": [ + "colorless", + "colorless", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Naoki Saito", + "image_path": "pokemon/a1/211-snorlax.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/211-snorlax.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/212-minccino.json b/backend/data/definitions/pokemon/a1/212-minccino.json new file mode 100644 index 0000000..96d2ef2 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/212-minccino.json @@ -0,0 +1,27 @@ +{ + "id": "a1-212-minccino", + "name": "Minccino", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tail Smack", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "sui" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/213-cinccino.json b/backend/data/definitions/pokemon/a1/213-cinccino.json new file mode 100644 index 0000000..77dbaa4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/213-cinccino.json @@ -0,0 +1,34 @@ +{ + "id": "a1-213-cinccino", + "name": "Cinccino", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "uncommon", + "evolves_from": "Minccino", + "attacks": [ + { + "name": "Do the Wave", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 30, + "damage_display": "30+", + "effect_description": "This attack does 30 damage for each of your Benched Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "0313" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/214-wooloo.json b/backend/data/definitions/pokemon/a1/214-wooloo.json new file mode 100644 index 0000000..4c64401 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/214-wooloo.json @@ -0,0 +1,28 @@ +{ + "id": "a1-214-wooloo", + "name": "Wooloo", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "common", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "colorless", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Yoriyuki Ikegami" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/215-dubwool.json b/backend/data/definitions/pokemon/a1/215-dubwool.json new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/215-dubwool.json @@ -0,0 +1,32 @@ +{ + "id": "a1-215-dubwool", + "name": "Dubwool", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "common", + "evolves_from": "Wooloo", + "attacks": [ + { + "name": "Rolling Tackle", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "saino misaki", + "image_path": "pokemon/a1/215-dubwool.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/215-dubwool.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/227-bulbasaur.json b/backend/data/definitions/pokemon/a1/227-bulbasaur.json new file mode 100644 index 0000000..61d3b2c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/227-bulbasaur.json @@ -0,0 +1,30 @@ +{ + "id": "a1-227-bulbasaur", + "name": "Bulbasaur", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Vine Whip", + "cost": [ + "grass", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Ryota Murayama", + "image_path": "pokemon/a1/227-bulbasaur.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/227-bulbasaur.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/228-gloom.json b/backend/data/definitions/pokemon/a1/228-gloom.json new file mode 100644 index 0000000..9008bc6 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/228-gloom.json @@ -0,0 +1,31 @@ +{ + "id": "a1-228-gloom", + "name": "Gloom", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Oddish", + "attacks": [ + { + "name": "Drool", + "cost": [ + "grass", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "OKACHEKE", + "image_path": "pokemon/a1/228-gloom.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/228-gloom.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/229-pinsir.json b/backend/data/definitions/pokemon/a1/229-pinsir.json new file mode 100644 index 0000000..dfab5da --- /dev/null +++ b/backend/data/definitions/pokemon/a1/229-pinsir.json @@ -0,0 +1,34 @@ +{ + "id": "a1-229-pinsir", + "name": "Pinsir", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Double Horn", + "cost": [ + "grass", + "grass" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip 2 coins. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Scav", + "image_path": "pokemon/a1/229-pinsir.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/229-pinsir.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/230-charmander.json b/backend/data/definitions/pokemon/a1/230-charmander.json new file mode 100644 index 0000000..ce532b1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/230-charmander.json @@ -0,0 +1,28 @@ +{ + "id": "a1-230-charmander", + "name": "Charmander", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Ember", + "cost": [ + "fire" + ], + "damage": 30, + "damage_display": "30", + "effect_description": "Discard aEnergy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "GIDORA" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/231-rapidash.json b/backend/data/definitions/pokemon/a1/231-rapidash.json new file mode 100644 index 0000000..d120061 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/231-rapidash.json @@ -0,0 +1,30 @@ +{ + "id": "a1-231-rapidash", + "name": "Rapidash", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Ponyta", + "attacks": [ + { + "name": "Fire Mane", + "cost": [ + "fire" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Taira Akitsu", + "image_path": "pokemon/a1/231-rapidash.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/231-rapidash.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/232-squirtle.json b/backend/data/definitions/pokemon/a1/232-squirtle.json new file mode 100644 index 0000000..d24ca31 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/232-squirtle.json @@ -0,0 +1,29 @@ +{ + "id": "a1-232-squirtle", + "name": "Squirtle", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Water Gun", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Taira Akitsu", + "image_path": "pokemon/a1/232-squirtle.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/232-squirtle.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/233-gyarados.json b/backend/data/definitions/pokemon/a1/233-gyarados.json new file mode 100644 index 0000000..6b61ca9 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/233-gyarados.json @@ -0,0 +1,34 @@ +{ + "id": "a1-233-gyarados", + "name": "Gyarados", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Magikarp", + "attacks": [ + { + "name": "Hyper Beam", + "cost": [ + "water", + "water", + "water", + "water" + ], + "damage": 100, + "damage_display": "100", + "effect_description": "Discard a random Energy from your opponent\u2019s Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Nurikabe", + "image_path": "pokemon/a1/233-gyarados.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/233-gyarados.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/234-lapras.json b/backend/data/definitions/pokemon/a1/234-lapras.json new file mode 100644 index 0000000..be6a9a2 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/234-lapras.json @@ -0,0 +1,33 @@ +{ + "id": "a1-234-lapras", + "name": "Lapras", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Hydro Pump", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20x", + "effect_description": "If this Pok\u00e9mon has at least 3 extraEnergy attached, this attack does 70 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Haru Akasaka", + "image_path": "pokemon/a1/234-lapras.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/234-lapras.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/235-electrode.json b/backend/data/definitions/pokemon/a1/235-electrode.json new file mode 100644 index 0000000..27824eb --- /dev/null +++ b/backend/data/definitions/pokemon/a1/235-electrode.json @@ -0,0 +1,31 @@ +{ + "id": "a1-235-electrode", + "name": "Electrode", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 0, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Voltorb", + "attacks": [ + { + "name": "Electro Ball", + "cost": [ + "lightning", + "lightning" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "DOM", + "image_path": "pokemon/a1/235-electrode.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/235-electrode.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/236-alakazam.json b/backend/data/definitions/pokemon/a1/236-alakazam.json new file mode 100644 index 0000000..d89f953 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/236-alakazam.json @@ -0,0 +1,36 @@ +{ + "id": "a1-236-alakazam", + "name": "Alakazam", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Kadabra", + "attacks": [ + { + "name": "Psychic", + "cost": [ + "psychic", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60x", + "effect_description": "This attack does 30 more damage for each Energy attached to your opponent\u2019s Active Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "AKIRA EGAWA", + "image_path": "pokemon/a1/236-alakazam.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/236-alakazam.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/237-slowpoke.json b/backend/data/definitions/pokemon/a1/237-slowpoke.json new file mode 100644 index 0000000..ba005ae --- /dev/null +++ b/backend/data/definitions/pokemon/a1/237-slowpoke.json @@ -0,0 +1,28 @@ +{ + "id": "a1-237-slowpoke", + "name": "Slowpoke", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Tail Whap", + "cost": [ + "psychic", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Miki Tanaka" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/238-diglett.json b/backend/data/definitions/pokemon/a1/238-diglett.json new file mode 100644 index 0000000..57e2972 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/238-diglett.json @@ -0,0 +1,29 @@ +{ + "id": "a1-238-diglett", + "name": "Diglett", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Mud-Slap", + "cost": [ + "fighting" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Shinya Komatsu", + "image_path": "pokemon/a1/238-diglett.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/238-diglett.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/239-cubone.json b/backend/data/definitions/pokemon/a1/239-cubone.json new file mode 100644 index 0000000..9c0bb27 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/239-cubone.json @@ -0,0 +1,29 @@ +{ + "id": "a1-239-cubone", + "name": "Cubone", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Growl", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "During your opponent\u2019s next turn, attacks used by the Defending Pok\u00e9mon do \u221220 damage." + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Teeziro", + "image_path": "pokemon/a1/239-cubone.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/239-cubone.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/240-nidoqueen.json b/backend/data/definitions/pokemon/a1/240-nidoqueen.json new file mode 100644 index 0000000..ec88c1e --- /dev/null +++ b/backend/data/definitions/pokemon/a1/240-nidoqueen.json @@ -0,0 +1,36 @@ +{ + "id": "a1-240-nidoqueen", + "name": "Nidoqueen", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "darkness", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Nidorina", + "attacks": [ + { + "name": "Lovestrike", + "cost": [ + "darkness", + "darkness", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "This attack does 50 more damage for each of your BenchedNidoking.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "aoki", + "image_path": "pokemon/a1/240-nidoqueen.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/240-nidoqueen.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/241-nidoking.json b/backend/data/definitions/pokemon/a1/241-nidoking.json new file mode 100644 index 0000000..2911a63 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/241-nidoking.json @@ -0,0 +1,31 @@ +{ + "id": "a1-241-nidoking", + "name": "Nidoking", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "darkness", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Nidorino", + "attacks": [ + { + "name": "Poison Horn", + "cost": [ + "darkness", + "darkness", + "colorless" + ], + "damage": 90, + "damage_display": "90", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Poisoned." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "nagimiso" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/242-golbat.json b/backend/data/definitions/pokemon/a1/242-golbat.json new file mode 100644 index 0000000..e467d7c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/242-golbat.json @@ -0,0 +1,30 @@ +{ + "id": "a1-242-golbat", + "name": "Golbat", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Zubat", + "attacks": [ + { + "name": "Wing Attack", + "cost": [ + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Tomokazu Komiya", + "image_path": "pokemon/a1/242-golbat.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/242-golbat.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/243-weezing.json b/backend/data/definitions/pokemon/a1/243-weezing.json new file mode 100644 index 0000000..da1ad40 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/243-weezing.json @@ -0,0 +1,37 @@ +{ + "id": "a1-243-weezing", + "name": "Weezing", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Koffing", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "darkness" + ], + "damage": 30, + "damage_display": "30" + } + ], + "abilities": [ + { + "name": "Gas Leak", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, if this Pok\u00e9mon is in the Active Spot, you may make your opponent\u2019s Active Pok\u00e9mon Poisoned." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "KEIICHIRO ITO", + "image_path": "pokemon/a1/243-weezing.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/243-weezing.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/244-dragonite.json b/backend/data/definitions/pokemon/a1/244-dragonite.json new file mode 100644 index 0000000..2016615 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/244-dragonite.json @@ -0,0 +1,29 @@ +{ + "id": "a1-244-dragonite", + "name": "Dragonite", + "card_type": "pokemon", + "hp": 160, + "pokemon_type": "dragon", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Dragonair", + "attacks": [ + { + "name": "Draco Meteor", + "cost": [ + "water", + "lightning", + "colorless", + "colorless" + ], + "damage": 0, + "effect_description": "1 of your opponent\u2019s Pok\u00e9mon is chosen at random 4 times. For each time a Pok\u00e9mon was chosen, do 50 damage to it." + } + ], + "illustrator": "Gemi", + "image_path": "pokemon/a1/244-dragonite.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/244-dragonite.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/245-pidgeot.json b/backend/data/definitions/pokemon/a1/245-pidgeot.json new file mode 100644 index 0000000..00d5570 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/245-pidgeot.json @@ -0,0 +1,36 @@ +{ + "id": "a1-245-pidgeot", + "name": "Pidgeot", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "colorless", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "evolves_from": "Pidgeotto", + "attacks": [ + { + "name": "Wing Attack", + "cost": [ + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "abilities": [ + { + "name": "Drive Off", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may switch out your opponent\u2019s Active Pok\u00e9mon to the Bench.(Your opponent chooses the new Active Pok\u00e9mon.)" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Anesaki Dynamic" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/246-meowth.json b/backend/data/definitions/pokemon/a1/246-meowth.json new file mode 100644 index 0000000..ad73e8b --- /dev/null +++ b/backend/data/definitions/pokemon/a1/246-meowth.json @@ -0,0 +1,30 @@ +{ + "id": "a1-246-meowth", + "name": "Meowth", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Pay Day", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Draw a card." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Mina Nakai", + "image_path": "pokemon/a1/246-meowth.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/246-meowth.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/247-ditto.json b/backend/data/definitions/pokemon/a1/247-ditto.json new file mode 100644 index 0000000..e728683 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/247-ditto.json @@ -0,0 +1,29 @@ +{ + "id": "a1-247-ditto", + "name": "Ditto", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Copy Anything", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "Choose 1 of your opponent\u2019s Pok\u00e9mon\u2019s attacks and use it as this attack. If this Pok\u00e9mon doesn\u2019t have the necessary Energy to use that attack, this attack does nothing." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Jerky", + "image_path": "pokemon/a1/247-ditto.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/247-ditto.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/248-eevee.json b/backend/data/definitions/pokemon/a1/248-eevee.json new file mode 100644 index 0000000..9080079 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/248-eevee.json @@ -0,0 +1,29 @@ +{ + "id": "a1-248-eevee", + "name": "Eevee", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Tackle", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "sowsow", + "image_path": "pokemon/a1/248-eevee.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/248-eevee.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/249-porygon.json b/backend/data/definitions/pokemon/a1/249-porygon.json new file mode 100644 index 0000000..b30e15b --- /dev/null +++ b/backend/data/definitions/pokemon/a1/249-porygon.json @@ -0,0 +1,36 @@ +{ + "id": "a1-249-porygon", + "name": "Porygon", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Sharpen", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "abilities": [ + { + "name": "Data Scan", + "effect_id": "unimplemented", + "effect_description": "Once during your turn, you may look at the top card of your deck." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Akira Komayama", + "image_path": "pokemon/a1/249-porygon.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/249-porygon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/250-snorlax.json b/backend/data/definitions/pokemon/a1/250-snorlax.json new file mode 100644 index 0000000..39bf3a4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/250-snorlax.json @@ -0,0 +1,32 @@ +{ + "id": "a1-250-snorlax", + "name": "Snorlax", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 4, + "set_id": "a1", + "rarity": "art rare", + "attacks": [ + { + "name": "Rollout", + "cost": [ + "colorless", + "colorless", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "HYOGONOSUKE", + "image_path": "pokemon/a1/250-snorlax.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/250-snorlax.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/251-venusaur-ex.json b/backend/data/definitions/pokemon/a1/251-venusaur-ex.json new file mode 100644 index 0000000..137a925 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/251-venusaur-ex.json @@ -0,0 +1,44 @@ +{ + "id": "a1-251-venusaur-ex", + "name": "Venusaur ex", + "card_type": "pokemon", + "hp": 190, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Ivysaur", + "attacks": [ + { + "name": "Razor Leaf", + "cost": [ + "grass", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + }, + { + "name": "Giant Bloom", + "cost": [ + "grass", + "grass", + "colorless", + "colorless" + ], + "damage": 100, + "damage_display": "100", + "effect_description": "Heal 30 damage from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/251-venusaur-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/251-venusaur-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/252-exeggutor-ex.json b/backend/data/definitions/pokemon/a1/252-exeggutor-ex.json new file mode 100644 index 0000000..98d7507 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/252-exeggutor-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1-252-exeggutor-ex", + "name": "Exeggutor ex", + "card_type": "pokemon", + "hp": 160, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Exeggcute", + "attacks": [ + { + "name": "Tropical Swing", + "cost": [ + "grass" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "Flip a coin. If heads, this attack does 40 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/252-exeggutor-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/252-exeggutor-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/253-charizard-ex.json b/backend/data/definitions/pokemon/a1/253-charizard-ex.json new file mode 100644 index 0000000..aa433d9 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/253-charizard-ex.json @@ -0,0 +1,44 @@ +{ + "id": "a1-253-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "fire", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Charmeleon", + "attacks": [ + { + "name": "Slash", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + }, + { + "name": "Crimson Storm", + "cost": [ + "fire", + "fire", + "colorless", + "colorless" + ], + "damage": 200, + "damage_display": "200", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/253-charizard-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/253-charizard-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/254-arcanine-ex.json b/backend/data/definitions/pokemon/a1/254-arcanine-ex.json new file mode 100644 index 0000000..e6da35d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/254-arcanine-ex.json @@ -0,0 +1,33 @@ +{ + "id": "a1-254-arcanine-ex", + "name": "Arcanine ex", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Growlithe", + "attacks": [ + { + "name": "Inferno Onrush", + "cost": [ + "fire", + "fire", + "colorless" + ], + "damage": 120, + "damage_display": "120", + "effect_description": "This Pok\u00e9mon also does 20 damage to itself." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "PLANETA Saito", + "image_path": "pokemon/a1/254-arcanine-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/254-arcanine-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/255-moltres-ex.json b/backend/data/definitions/pokemon/a1/255-moltres-ex.json new file mode 100644 index 0000000..6b4c104 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/255-moltres-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1-255-moltres-ex", + "name": "Moltres ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fire", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "special art rare", + "attacks": [ + { + "name": "Inferno Dance", + "cost": [ + "fire" + ], + "damage": 0, + "effect_description": "Flip 3 coins. Take an amount ofEnergy from your Energy Zone equal to the number of heads and attach it to your BenchedPok\u00e9mon in any way you like." + }, + { + "name": "Heat Blast", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Saito", + "image_path": "pokemon/a1/255-moltres-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/255-moltres-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/256-blastoise-ex.json b/backend/data/definitions/pokemon/a1/256-blastoise-ex.json new file mode 100644 index 0000000..61e9ea2 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/256-blastoise-ex.json @@ -0,0 +1,45 @@ +{ + "id": "a1-256-blastoise-ex", + "name": "Blastoise ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "water", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Wartortle", + "attacks": [ + { + "name": "Surf", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40" + }, + { + "name": "Hydro Bazooka", + "cost": [ + "water", + "water", + "colorless" + ], + "damage": 100, + "damage_display": "100x", + "effect_description": "If this Pok\u00e9mon has at least 2 extraEnergy attached, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/256-blastoise-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/256-blastoise-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/257-starmie-ex.json b/backend/data/definitions/pokemon/a1/257-starmie-ex.json new file mode 100644 index 0000000..b2a243a --- /dev/null +++ b/backend/data/definitions/pokemon/a1/257-starmie-ex.json @@ -0,0 +1,31 @@ +{ + "id": "a1-257-starmie-ex", + "name": "Starmie ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 0, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Staryu", + "attacks": [ + { + "name": "Hydro Splash", + "cost": [ + "water", + "water" + ], + "damage": 90, + "damage_display": "90" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Igarashi", + "image_path": "pokemon/a1/257-starmie-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/257-starmie-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/258-articuno-ex.json b/backend/data/definitions/pokemon/a1/258-articuno-ex.json new file mode 100644 index 0000000..c579f09 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/258-articuno-ex.json @@ -0,0 +1,41 @@ +{ + "id": "a1-258-articuno-ex", + "name": "Articuno ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "water", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "special art rare", + "attacks": [ + { + "name": "Ice Wing", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40" + }, + { + "name": "Blizzard", + "cost": [ + "water", + "water", + "water" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "This attack also does 10 damage to each of your opponent\u2019s Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Saito", + "image_path": "pokemon/a1/258-articuno-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/258-articuno-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/259-pikachu-ex.json b/backend/data/definitions/pokemon/a1/259-pikachu-ex.json new file mode 100644 index 0000000..acc4ff0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/259-pikachu-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1-259-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "special art rare", + "attacks": [ + { + "name": "Circle Circuit", + "cost": [ + "lightning", + "lightning" + ], + "damage": 30, + "damage_display": "30+", + "effect_description": "This attack does 30 damage for each of your BenchedPok\u00e9mon.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/259-pikachu-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/259-pikachu-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/260-zapdos-ex.json b/backend/data/definitions/pokemon/a1/260-zapdos-ex.json new file mode 100644 index 0000000..4684b89 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/260-zapdos-ex.json @@ -0,0 +1,43 @@ +{ + "id": "a1-260-zapdos-ex", + "name": "Zapdos ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "special art rare", + "attacks": [ + { + "name": "Peck", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + }, + { + "name": "Thundering Hurricane", + "cost": [ + "lightning", + "lightning", + "lightning" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip 4 coins. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA Saito", + "image_path": "pokemon/a1/260-zapdos-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/260-zapdos-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/261-gengar-ex.json b/backend/data/definitions/pokemon/a1/261-gengar-ex.json new file mode 100644 index 0000000..524d389 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/261-gengar-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1-261-gengar-ex", + "name": "Gengar ex", + "card_type": "pokemon", + "hp": 170, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Haunter", + "attacks": [ + { + "name": "Spooky Shot", + "cost": [ + "psychic", + "psychic", + "psychic" + ], + "damage": 100, + "damage_display": "100" + } + ], + "abilities": [ + { + "name": "Shadowy Spellbind", + "effect_id": "unimplemented", + "effect_description": "As long as this Pok\u00e9mon is in the Active Spot, your opponent can\u2019t use any Supporter cards from their hand." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/261-gengar-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/261-gengar-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/262-mewtwo-ex.json b/backend/data/definitions/pokemon/a1/262-mewtwo-ex.json new file mode 100644 index 0000000..a423977 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/262-mewtwo-ex.json @@ -0,0 +1,42 @@ +{ + "id": "a1-262-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "special art rare", + "attacks": [ + { + "name": "Psychic Sphere", + "cost": [ + "psychic", + "colorless" + ], + "damage": 50, + "damage_display": "50" + }, + { + "name": "Psydrive", + "cost": [ + "psychic", + "psychic", + "colorless", + "colorless" + ], + "damage": 150, + "damage_display": "150", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA Mochizuki", + "image_path": "pokemon/a1/262-mewtwo-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/262-mewtwo-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/263-machamp-ex.json b/backend/data/definitions/pokemon/a1/263-machamp-ex.json new file mode 100644 index 0000000..9e2b14f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/263-machamp-ex.json @@ -0,0 +1,32 @@ +{ + "id": "a1-263-machamp-ex", + "name": "Machamp ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "fighting", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Machoke", + "attacks": [ + { + "name": "Mega Punch", + "cost": [ + "fighting", + "fighting", + "fighting" + ], + "damage": 120, + "damage_display": "120" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "PLANETA Igarashi", + "image_path": "pokemon/a1/263-machamp-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/263-machamp-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/264-marowak-ex.json b/backend/data/definitions/pokemon/a1/264-marowak-ex.json new file mode 100644 index 0000000..a402f19 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/264-marowak-ex.json @@ -0,0 +1,35 @@ +{ + "id": "a1-264-marowak-ex", + "name": "Marowak ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Cubone", + "attacks": [ + { + "name": "Bonemerang", + "cost": [ + "fighting", + "fighting" + ], + "damage": 80, + "damage_display": "80+", + "effect_description": "Flip 2 coins. This attack does 80 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "PLANETA Mochizuki", + "image_path": "pokemon/a1/264-marowak-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/264-marowak-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/265-wigglytuff-ex.json b/backend/data/definitions/pokemon/a1/265-wigglytuff-ex.json new file mode 100644 index 0000000..24089d7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/265-wigglytuff-ex.json @@ -0,0 +1,33 @@ +{ + "id": "a1-265-wigglytuff-ex", + "name": "Wigglytuff ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "special art rare", + "evolves_from": "Jigglypuff", + "attacks": [ + { + "name": "Sleepy Song", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "PLANETA Igarashi", + "image_path": "pokemon/a1/265-wigglytuff-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/265-wigglytuff-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/274-moltres-ex.json b/backend/data/definitions/pokemon/a1/274-moltres-ex.json new file mode 100644 index 0000000..73c2aef --- /dev/null +++ b/backend/data/definitions/pokemon/a1/274-moltres-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1-274-moltres-ex", + "name": "Moltres ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fire", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "sr", + "attacks": [ + { + "name": "Inferno Dance", + "cost": [ + "fire" + ], + "damage": 0, + "effect_description": "Flip 3 coins. Take an amount ofEnergy from your Energy Zone equal to the number of heads and attach it to your BenchedPok\u00e9mon in any way you like." + }, + { + "name": "Heat Blast", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "hncl", + "image_path": "pokemon/a1/274-moltres-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/274-moltres-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/275-articuno-ex.json b/backend/data/definitions/pokemon/a1/275-articuno-ex.json new file mode 100644 index 0000000..d385069 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/275-articuno-ex.json @@ -0,0 +1,41 @@ +{ + "id": "a1-275-articuno-ex", + "name": "Articuno ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "water", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "sr", + "attacks": [ + { + "name": "Ice Wing", + "cost": [ + "water", + "colorless" + ], + "damage": 40, + "damage_display": "40" + }, + { + "name": "Blizzard", + "cost": [ + "water", + "water", + "water" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "This attack also does 10 damage to each of your opponent\u2019s Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "kodama", + "image_path": "pokemon/a1/275-articuno-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/275-articuno-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/276-zapdos-ex.json b/backend/data/definitions/pokemon/a1/276-zapdos-ex.json new file mode 100644 index 0000000..19318f6 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/276-zapdos-ex.json @@ -0,0 +1,43 @@ +{ + "id": "a1-276-zapdos-ex", + "name": "Zapdos ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "sr", + "attacks": [ + { + "name": "Peck", + "cost": [ + "lightning" + ], + "damage": 20, + "damage_display": "20" + }, + { + "name": "Thundering Hurricane", + "cost": [ + "lightning", + "lightning", + "lightning" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip 4 coins. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "GOSSAN", + "image_path": "pokemon/a1/276-zapdos-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/276-zapdos-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/277-gengar-ex.json b/backend/data/definitions/pokemon/a1/277-gengar-ex.json new file mode 100644 index 0000000..bc44fcb --- /dev/null +++ b/backend/data/definitions/pokemon/a1/277-gengar-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1-277-gengar-ex", + "name": "Gengar ex", + "card_type": "pokemon", + "hp": 170, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "sr", + "evolves_from": "Haunter", + "attacks": [ + { + "name": "Spooky Shot", + "cost": [ + "psychic", + "psychic", + "psychic" + ], + "damage": 100, + "damage_display": "100" + } + ], + "abilities": [ + { + "name": "Shadowy Spellbind", + "effect_id": "unimplemented", + "effect_description": "As long as this Pok\u00e9mon is in the Active Spot, your opponent can\u2019t use any Supporter cards from their hand." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "NC Empire", + "image_path": "pokemon/a1/277-gengar-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/277-gengar-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/278-machamp-ex.json b/backend/data/definitions/pokemon/a1/278-machamp-ex.json new file mode 100644 index 0000000..af681ba --- /dev/null +++ b/backend/data/definitions/pokemon/a1/278-machamp-ex.json @@ -0,0 +1,32 @@ +{ + "id": "a1-278-machamp-ex", + "name": "Machamp ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "fighting", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1", + "rarity": "sr", + "evolves_from": "Machoke", + "attacks": [ + { + "name": "Mega Punch", + "cost": [ + "fighting", + "fighting", + "fighting" + ], + "damage": 120, + "damage_display": "120" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "AKIRA EGAWA", + "image_path": "pokemon/a1/278-machamp-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/278-machamp-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/279-wigglytuff-ex.json b/backend/data/definitions/pokemon/a1/279-wigglytuff-ex.json new file mode 100644 index 0000000..dfec2f7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/279-wigglytuff-ex.json @@ -0,0 +1,33 @@ +{ + "id": "a1-279-wigglytuff-ex", + "name": "Wigglytuff ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "sr", + "evolves_from": "Jigglypuff", + "attacks": [ + { + "name": "Sleepy Song", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Shibuzoh.", + "image_path": "pokemon/a1/279-wigglytuff-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/279-wigglytuff-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/280-charizard-ex.json b/backend/data/definitions/pokemon/a1/280-charizard-ex.json new file mode 100644 index 0000000..ba53f6f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/280-charizard-ex.json @@ -0,0 +1,44 @@ +{ + "id": "a1-280-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "fire", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "immersive", + "evolves_from": "Charmeleon", + "attacks": [ + { + "name": "Slash", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + }, + { + "name": "Crimson Storm", + "cost": [ + "fire", + "fire", + "colorless", + "colorless" + ], + "damage": 200, + "damage_display": "200", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "kantaro", + "image_path": "pokemon/a1/280-charizard-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/280-charizard-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/281-pikachu-ex.json b/backend/data/definitions/pokemon/a1/281-pikachu-ex.json new file mode 100644 index 0000000..49355fb --- /dev/null +++ b/backend/data/definitions/pokemon/a1/281-pikachu-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1-281-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "immersive", + "attacks": [ + { + "name": "Circle Circuit", + "cost": [ + "lightning", + "lightning" + ], + "damage": 30, + "damage_display": "30+", + "effect_description": "This attack does 30 damage for each of your BenchedPok\u00e9mon.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Ryota Murayama", + "image_path": "pokemon/a1/281-pikachu-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/281-pikachu-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/282-mewtwo-ex.json b/backend/data/definitions/pokemon/a1/282-mewtwo-ex.json new file mode 100644 index 0000000..9cd2ed0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/282-mewtwo-ex.json @@ -0,0 +1,42 @@ +{ + "id": "a1-282-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "immersive", + "attacks": [ + { + "name": "Psychic Sphere", + "cost": [ + "psychic", + "colorless" + ], + "damage": 50, + "damage_display": "50" + }, + { + "name": "Psydrive", + "cost": [ + "psychic", + "psychic", + "colorless", + "colorless" + ], + "damage": 150, + "damage_display": "150", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Nurikabe", + "image_path": "pokemon/a1/282-mewtwo-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/282-mewtwo-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/283-mew.json b/backend/data/definitions/pokemon/a1/283-mew.json new file mode 100644 index 0000000..a2d970d --- /dev/null +++ b/backend/data/definitions/pokemon/a1/283-mew.json @@ -0,0 +1,30 @@ +{ + "id": "a1-283-mew", + "name": "Mew", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "immersive", + "attacks": [ + { + "name": "Psy Report", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20", + "effect_description": "Your opponent reveals their hand." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Amelicart", + "image_path": "pokemon/a1/283-mew.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/283-mew.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/284-charizard-ex.json b/backend/data/definitions/pokemon/a1/284-charizard-ex.json new file mode 100644 index 0000000..767ee9c --- /dev/null +++ b/backend/data/definitions/pokemon/a1/284-charizard-ex.json @@ -0,0 +1,44 @@ +{ + "id": "a1-284-charizard-ex", + "name": "Charizard ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "fire", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "ultra rare", + "evolves_from": "Charmeleon", + "attacks": [ + { + "name": "Slash", + "cost": [ + "fire", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + }, + { + "name": "Crimson Storm", + "cost": [ + "fire", + "fire", + "colorless", + "colorless" + ], + "damage": 200, + "damage_display": "200", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1/284-charizard-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/284-charizard-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/285-pikachu-ex.json b/backend/data/definitions/pokemon/a1/285-pikachu-ex.json new file mode 100644 index 0000000..a617012 --- /dev/null +++ b/backend/data/definitions/pokemon/a1/285-pikachu-ex.json @@ -0,0 +1,32 @@ +{ + "id": "a1-285-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1", + "rarity": "ultra rare", + "attacks": [ + { + "name": "Circle Circuit", + "cost": [ + "lightning", + "lightning" + ], + "damage": 30, + "damage_display": "30+", + "effect_description": "This attack does 30 damage for each of your BenchedPok\u00e9mon.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "PLANETA CG Works" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1/286-mewtwo-ex.json b/backend/data/definitions/pokemon/a1/286-mewtwo-ex.json new file mode 100644 index 0000000..a7f9f5f --- /dev/null +++ b/backend/data/definitions/pokemon/a1/286-mewtwo-ex.json @@ -0,0 +1,42 @@ +{ + "id": "a1-286-mewtwo-ex", + "name": "Mewtwo ex", + "card_type": "pokemon", + "hp": 150, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 2, + "set_id": "a1", + "rarity": "ultra rare", + "attacks": [ + { + "name": "Psychic Sphere", + "cost": [ + "psychic", + "colorless" + ], + "damage": 50, + "damage_display": "50" + }, + { + "name": "Psydrive", + "cost": [ + "psychic", + "psychic", + "colorless", + "colorless" + ], + "damage": 150, + "damage_display": "150", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA Mochizuki", + "image_path": "pokemon/a1/286-mewtwo-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1/286-mewtwo-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/001-exeggcute.json b/backend/data/definitions/pokemon/a1a/001-exeggcute.json new file mode 100644 index 0000000..b90398f --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/001-exeggcute.json @@ -0,0 +1,27 @@ +{ + "id": "a1a-001-exeggcute", + "name": "Exeggcute", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Growth Spurt", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "Take aEnergy from your Energy Zone and attach it to this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Yuka Morii" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/002-exeggutor.json b/backend/data/definitions/pokemon/a1a/002-exeggutor.json new file mode 100644 index 0000000..e22f727 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/002-exeggutor.json @@ -0,0 +1,37 @@ +{ + "id": "a1a-002-exeggutor", + "name": "Exeggutor", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Exeggcute", + "attacks": [ + { + "name": "Psychic", + "cost": [ + "grass", + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "This attack does 20 more damage for each Energy attached to your opponent\u2019s Active Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Masakazu Fukuda", + "image_path": "pokemon/a1a/002-exeggutor.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/002-exeggutor.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/003-celebi-ex.json b/backend/data/definitions/pokemon/a1a/003-celebi-ex.json new file mode 100644 index 0000000..828f78d --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/003-celebi-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-003-celebi-ex", + "name": "Celebi ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "grass", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "double rare", + "attacks": [ + { + "name": "Powerful Bloom", + "cost": [ + "grass", + "colorless" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip a coin for each Energy attached to this Pok\u00e9mon. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/003-celebi-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/003-celebi-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/004-snivy.json b/backend/data/definitions/pokemon/a1a/004-snivy.json new file mode 100644 index 0000000..43a7662 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/004-snivy.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-004-snivy", + "name": "Snivy", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Vine Whip", + "cost": [ + "grass", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Kagemaru Himeno", + "image_path": "pokemon/a1a/004-snivy.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/004-snivy.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/005-servine.json b/backend/data/definitions/pokemon/a1a/005-servine.json new file mode 100644 index 0000000..4b891f2 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/005-servine.json @@ -0,0 +1,31 @@ +{ + "id": "a1a-005-servine", + "name": "Servine", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Snivy", + "attacks": [ + { + "name": "Vine Whip", + "cost": [ + "grass", + "colorless" + ], + "damage": 50, + "damage_display": "50" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Shigenori Negishi", + "image_path": "pokemon/a1a/005-servine.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/005-servine.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/006-serperior.json b/backend/data/definitions/pokemon/a1a/006-serperior.json new file mode 100644 index 0000000..cb00cc8 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/006-serperior.json @@ -0,0 +1,40 @@ +{ + "id": "a1a-006-serperior", + "name": "Serperior", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "rare", + "evolves_from": "Servine", + "attacks": [ + { + "name": "Solar Beam", + "cost": [ + "grass", + "colorless", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "abilities": [ + { + "name": "Jungle Totem", + "effect_id": "unimplemented", + "effect_description": "EachEnergy attached to yourPok\u00e9mon provides 2Energy. This effect doesn\u2019t stack." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Yoshioka", + "image_path": "pokemon/a1a/006-serperior.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/006-serperior.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/007-morelull.json b/backend/data/definitions/pokemon/a1a/007-morelull.json new file mode 100644 index 0000000..4c6de8e --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/007-morelull.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-007-morelull", + "name": "Morelull", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Ram", + "cost": [ + "grass" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Saya Tsuruta", + "image_path": "pokemon/a1a/007-morelull.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/007-morelull.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/008-shiinotic.json b/backend/data/definitions/pokemon/a1a/008-shiinotic.json new file mode 100644 index 0000000..4971ae8 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/008-shiinotic.json @@ -0,0 +1,32 @@ +{ + "id": "a1a-008-shiinotic", + "name": "Shiinotic", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Morelull", + "attacks": [ + { + "name": "Flickering Spores", + "cost": [ + "grass", + "grass" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Mizue", + "image_path": "pokemon/a1a/008-shiinotic.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/008-shiinotic.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/009-dhelmise.json b/backend/data/definitions/pokemon/a1a/009-dhelmise.json new file mode 100644 index 0000000..4abc918 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/009-dhelmise.json @@ -0,0 +1,33 @@ +{ + "id": "a1a-009-dhelmise", + "name": "Dhelmise", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "grass", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "uncommon", + "attacks": [ + { + "name": "Energy Whip", + "cost": [ + "grass" + ], + "damage": 20, + "damage_display": "20x", + "effect_description": "If this Pok\u00e9mon has at least 3 extraEnergy attached, this attack does 70 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Hasuno", + "image_path": "pokemon/a1a/009-dhelmise.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/009-dhelmise.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/010-ponyta.json b/backend/data/definitions/pokemon/a1a/010-ponyta.json new file mode 100644 index 0000000..d7a0051 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/010-ponyta.json @@ -0,0 +1,33 @@ +{ + "id": "a1a-010-ponyta", + "name": "Ponyta", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Stomp", + "cost": [ + "fire" + ], + "damage": 10, + "damage_display": "10x", + "effect_description": "Flip a coin. If heads, this attack does 30 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Tomokazu Komiya", + "image_path": "pokemon/a1a/010-ponyta.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/010-ponyta.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/011-rapidash.json b/backend/data/definitions/pokemon/a1a/011-rapidash.json new file mode 100644 index 0000000..9d348f4 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/011-rapidash.json @@ -0,0 +1,35 @@ +{ + "id": "a1a-011-rapidash", + "name": "Rapidash", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Ponyta", + "attacks": [ + { + "name": "Rising Lunge", + "cost": [ + "fire", + "colorless" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "Flip a coin. If heads, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "AKIRA EGAWA", + "image_path": "pokemon/a1a/011-rapidash.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/011-rapidash.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/012-magmar.json b/backend/data/definitions/pokemon/a1a/012-magmar.json new file mode 100644 index 0000000..b8b4cee --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/012-magmar.json @@ -0,0 +1,31 @@ +{ + "id": "a1a-012-magmar", + "name": "Magmar", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "uncommon", + "attacks": [ + { + "name": "Fire Blast", + "cost": [ + "fire", + "fire" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Discard 2Energy from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "sui", + "image_path": "pokemon/a1a/012-magmar.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/012-magmar.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/013-larvesta.json b/backend/data/definitions/pokemon/a1a/013-larvesta.json new file mode 100644 index 0000000..e5b2d1c --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/013-larvesta.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-013-larvesta", + "name": "Larvesta", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Combustion", + "cost": [ + "fire", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "kawayoo", + "image_path": "pokemon/a1a/013-larvesta.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/013-larvesta.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/014-volcarona.json b/backend/data/definitions/pokemon/a1a/014-volcarona.json new file mode 100644 index 0000000..1ca2e9e --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/014-volcarona.json @@ -0,0 +1,32 @@ +{ + "id": "a1a-014-volcarona", + "name": "Volcarona", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "rare", + "evolves_from": "Larvesta", + "attacks": [ + { + "name": "Volcanic Ash", + "cost": [ + "fire", + "fire", + "colorless" + ], + "damage": 0, + "effect_description": "Discard 2Energy from this Pok\u00e9mon. This attack does 80 damage to 1 of your opponent\u2019s Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "DOM", + "image_path": "pokemon/a1a/014-volcarona.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/014-volcarona.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/015-salandit.json b/backend/data/definitions/pokemon/a1a/015-salandit.json new file mode 100644 index 0000000..d3f771f --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/015-salandit.json @@ -0,0 +1,33 @@ +{ + "id": "a1a-015-salandit", + "name": "Salandit", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Venoshock", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10x", + "effect_description": "If your opponent\u2019s Active Pok\u00e9mon is Poisoned, this attack does 40 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Naoki Saito", + "image_path": "pokemon/a1a/015-salandit.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/015-salandit.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/016-salazzle.json b/backend/data/definitions/pokemon/a1a/016-salazzle.json new file mode 100644 index 0000000..f648062 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/016-salazzle.json @@ -0,0 +1,31 @@ +{ + "id": "a1a-016-salazzle", + "name": "Salazzle", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fire", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "evolves_from": "Salandit", + "attacks": [ + { + "name": "Poison Claws", + "cost": [ + "fire" + ], + "damage": 30, + "damage_display": "30", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Poisoned." + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Mitsuhiro Arita", + "image_path": "pokemon/a1a/016-salazzle.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/016-salazzle.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/017-magikarp.json b/backend/data/definitions/pokemon/a1a/017-magikarp.json new file mode 100644 index 0000000..f1723dc --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/017-magikarp.json @@ -0,0 +1,27 @@ +{ + "id": "a1a-017-magikarp", + "name": "Magikarp", + "card_type": "pokemon", + "hp": 30, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Leap Out", + "cost": [ + "water" + ], + "damage": 0, + "effect_description": "Switch this Pok\u00e9mon with 1 of your Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Mitsuhiro Arita" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/018-gyarados-ex.json b/backend/data/definitions/pokemon/a1a/018-gyarados-ex.json new file mode 100644 index 0000000..675c83c --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/018-gyarados-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-018-gyarados-ex", + "name": "Gyarados ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "double rare", + "evolves_from": "Magikarp", + "attacks": [ + { + "name": "Rampaging Whirlpool", + "cost": [ + "water", + "water", + "water", + "colorless" + ], + "damage": 140, + "damage_display": "140", + "effect_description": "Discard a random Energy from among the Energy attached to all Pok\u00e9mon (both yours and your opponent\u2019s)." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/018-gyarados-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/018-gyarados-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/019-vaporeon.json b/backend/data/definitions/pokemon/a1a/019-vaporeon.json new file mode 100644 index 0000000..410d0e3 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/019-vaporeon.json @@ -0,0 +1,37 @@ +{ + "id": "a1a-019-vaporeon", + "name": "Vaporeon", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "rare", + "evolves_from": "Eevee", + "attacks": [ + { + "name": "Wave Splash", + "cost": [ + "water", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "abilities": [ + { + "name": "Wash Out", + "effect_id": "unimplemented", + "effect_description": "As often as you like during your turn, you may move aEnergy from 1 of your BenchedPok\u00e9mon to your ActivePok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "LINNE" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/020-finneon.json b/backend/data/definitions/pokemon/a1a/020-finneon.json new file mode 100644 index 0000000..46f5e14 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/020-finneon.json @@ -0,0 +1,27 @@ +{ + "id": "a1a-020-finneon", + "name": "Finneon", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Water Gun", + "cost": [ + "water" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "sui" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/021-lumineon.json b/backend/data/definitions/pokemon/a1a/021-lumineon.json new file mode 100644 index 0000000..17061f6 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/021-lumineon.json @@ -0,0 +1,31 @@ +{ + "id": "a1a-021-lumineon", + "name": "Lumineon", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 0, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Finneon", + "attacks": [ + { + "name": "Aqua Liner", + "cost": [ + "water", + "water" + ], + "damage": 0, + "effect_description": "This attack does 50 damage to 1 of your opponent\u2019s Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Sekio", + "image_path": "pokemon/a1a/021-lumineon.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/021-lumineon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/022-chewtle.json b/backend/data/definitions/pokemon/a1a/022-chewtle.json new file mode 100644 index 0000000..6f63077 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/022-chewtle.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-022-chewtle", + "name": "Chewtle", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Bite", + "cost": [ + "water", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Taiga Kayama", + "image_path": "pokemon/a1a/022-chewtle.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/022-chewtle.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/023-drednaw.json b/backend/data/definitions/pokemon/a1a/023-drednaw.json new file mode 100644 index 0000000..61e2e6d --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/023-drednaw.json @@ -0,0 +1,33 @@ +{ + "id": "a1a-023-drednaw", + "name": "Drednaw", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Chewtle", + "attacks": [ + { + "name": "Crunch", + "cost": [ + "water", + "water", + "water" + ], + "damage": 70, + "damage_display": "70", + "effect_description": "Flip a coin. If heads, discard a random Energy from your opponent\u2019s Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "nisimono", + "image_path": "pokemon/a1a/023-drednaw.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/023-drednaw.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/024-cramorant.json b/backend/data/definitions/pokemon/a1a/024-cramorant.json new file mode 100644 index 0000000..8a67e4a --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/024-cramorant.json @@ -0,0 +1,32 @@ +{ + "id": "a1a-024-cramorant", + "name": "Cramorant", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "water", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Dive", + "cost": [ + "water", + "water", + "colorless" + ], + "damage": 60, + "damage_display": "60", + "effect_description": "Flip a coin. If heads, during your opponent\u2019s next turn, prevent all damage from\u2014and effects of\u2014attacks done to this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Jerky", + "image_path": "pokemon/a1a/024-cramorant.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/024-cramorant.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/025-pikachu.json b/backend/data/definitions/pokemon/a1a/025-pikachu.json new file mode 100644 index 0000000..ebab178 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/025-pikachu.json @@ -0,0 +1,31 @@ +{ + "id": "a1a-025-pikachu", + "name": "Pikachu", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Circle Circuit", + "cost": [ + "lightning" + ], + "damage": 10, + "damage_display": "10+", + "effect_description": "This attack does 10 damage for each of your BenchedPok\u00e9mon.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Naoyo Kimura" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/026-raichu.json b/backend/data/definitions/pokemon/a1a/026-raichu.json new file mode 100644 index 0000000..18ffbbb --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/026-raichu.json @@ -0,0 +1,33 @@ +{ + "id": "a1a-026-raichu", + "name": "Raichu", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "rare", + "evolves_from": "Pikachu", + "attacks": [ + { + "name": "Gigashock", + "cost": [ + "lightning", + "lightning", + "lightning" + ], + "damage": 60, + "damage_display": "60", + "effect_description": "This attack also does 20 damage to each of your opponent\u2019s Benched Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "hncl", + "image_path": "pokemon/a1a/026-raichu.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/026-raichu.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/027-electabuzz.json b/backend/data/definitions/pokemon/a1a/027-electabuzz.json new file mode 100644 index 0000000..b980eb3 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/027-electabuzz.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-027-electabuzz", + "name": "Electabuzz", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "uncommon", + "attacks": [ + { + "name": "Thunder Spear", + "cost": [ + "lightning", + "lightning" + ], + "damage": 0, + "effect_description": "This attack does 40 damage to 1 of your opponent\u2019s Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Naoyo Kimura", + "image_path": "pokemon/a1a/027-electabuzz.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/027-electabuzz.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/028-joltik.json b/backend/data/definitions/pokemon/a1a/028-joltik.json new file mode 100644 index 0000000..56296d9 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/028-joltik.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-028-joltik", + "name": "Joltik", + "card_type": "pokemon", + "hp": 40, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Bug Bite", + "cost": [ + "lightning" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "MINAMINAMI Take", + "image_path": "pokemon/a1a/028-joltik.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/028-joltik.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/029-galvantula.json b/backend/data/definitions/pokemon/a1a/029-galvantula.json new file mode 100644 index 0000000..9d8864b --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/029-galvantula.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-029-galvantula", + "name": "Galvantula", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "lightning", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 0, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Joltik", + "attacks": [ + { + "name": "Electroweb", + "cost": [ + "lightning", + "lightning" + ], + "damage": 70, + "damage_display": "70", + "effect_description": "During your opponent\u2019s next turn, the Defending Pok\u00e9mon can\u2019t retreat." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Mitsuhiro Arita" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/030-dedenne.json b/backend/data/definitions/pokemon/a1a/030-dedenne.json new file mode 100644 index 0000000..dd98bdf --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/030-dedenne.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-030-dedenne", + "name": "Dedenne", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Thunder Shock", + "cost": [ + "lightning" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Flip a coin. If heads, your opponent\u2019s Active Pok\u00e9mon is now Paralyzed." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Taiga Kayama", + "image_path": "pokemon/a1a/030-dedenne.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/030-dedenne.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/031-mew.json b/backend/data/definitions/pokemon/a1a/031-mew.json new file mode 100644 index 0000000..dbc34f0 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/031-mew.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-031-mew", + "name": "Mew", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "rare", + "attacks": [ + { + "name": "Psy Report", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20", + "effect_description": "Your opponent reveals their hand." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Saya Tsuruta", + "image_path": "pokemon/a1a/031-mew.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/031-mew.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/032-mew-ex.json b/backend/data/definitions/pokemon/a1a/032-mew-ex.json new file mode 100644 index 0000000..44a7293 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/032-mew-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1a-032-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "double rare", + "attacks": [ + { + "name": "Psyshot", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + }, + { + "name": "Genome Hacking", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 0, + "effect_description": "Choose 1 of your opponent\u2019s Active Pok\u00e9mon\u2019s attacks and use it as this attack." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/032-mew-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/032-mew-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/033-sigilyph.json b/backend/data/definitions/pokemon/a1a/033-sigilyph.json new file mode 100644 index 0000000..33ccc14 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/033-sigilyph.json @@ -0,0 +1,28 @@ +{ + "id": "a1a-033-sigilyph", + "name": "Sigilyph", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "uncommon", + "attacks": [ + { + "name": "Spike Draw", + "cost": [ + "psychic" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Draw a card." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Shigenori Negishi" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/034-elgyem.json b/backend/data/definitions/pokemon/a1a/034-elgyem.json new file mode 100644 index 0000000..c8dd9bf --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/034-elgyem.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-034-elgyem", + "name": "Elgyem", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Headbutt", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "Kouki Saitou", + "image_path": "pokemon/a1a/034-elgyem.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/034-elgyem.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/035-beheeyem.json b/backend/data/definitions/pokemon/a1a/035-beheeyem.json new file mode 100644 index 0000000..d4aa232 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/035-beheeyem.json @@ -0,0 +1,32 @@ +{ + "id": "a1a-035-beheeyem", + "name": "Beheeyem", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Elgyem", + "attacks": [ + { + "name": "Mind Jack", + "cost": [ + "psychic" + ], + "damage": 10, + "damage_display": "10x", + "effect_description": "This attack does 20 more damage for each of your opponent\u2019s Benched Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "sowsow" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/036-flabebe.json b/backend/data/definitions/pokemon/a1a/036-flabebe.json new file mode 100644 index 0000000..cf54a99 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/036-flabebe.json @@ -0,0 +1,27 @@ +{ + "id": "a1a-036-flabebe", + "name": "Flab\u00e9b\u00e9", + "card_type": "pokemon", + "hp": 40, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Hypnotic Gaze", + "cost": [ + "psychic" + ], + "damage": 0, + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Asleep." + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "Cona Nitanda" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/037-floette.json b/backend/data/definitions/pokemon/a1a/037-floette.json new file mode 100644 index 0000000..5199e61 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/037-floette.json @@ -0,0 +1,31 @@ +{ + "id": "a1a-037-floette", + "name": "Floette", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "evolves_from": "Flab\u00e9b\u00e9", + "attacks": [ + { + "name": "Leaf Drain", + "cost": [ + "psychic" + ], + "damage": 40, + "damage_display": "40", + "effect_description": "Heal 10 damage from this Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "Cona Nitanda", + "image_path": "pokemon/a1a/037-floette.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/037-floette.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/038-florges.json b/backend/data/definitions/pokemon/a1a/038-florges.json new file mode 100644 index 0000000..cf16139 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/038-florges.json @@ -0,0 +1,32 @@ +{ + "id": "a1a-038-florges", + "name": "Florges", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "psychic", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Floette", + "attacks": [ + { + "name": "Bloomshine", + "cost": [ + "psychic", + "psychic" + ], + "damage": 80, + "damage_display": "80", + "effect_description": "Heal 20 damage from each of your Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "Cona Nitanda", + "image_path": "pokemon/a1a/038-florges.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/038-florges.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/039-swirlix.json b/backend/data/definitions/pokemon/a1a/039-swirlix.json new file mode 100644 index 0000000..394e09e --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/039-swirlix.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-039-swirlix", + "name": "Swirlix", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Fairy Wind", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "5ban Graphics", + "image_path": "pokemon/a1a/039-swirlix.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/039-swirlix.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/040-slurpuff.json b/backend/data/definitions/pokemon/a1a/040-slurpuff.json new file mode 100644 index 0000000..61b089f --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/040-slurpuff.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-040-slurpuff", + "name": "Slurpuff", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "psychic", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "common", + "evolves_from": "Swirlix", + "attacks": [ + { + "name": "Magical Shot", + "cost": [ + "psychic", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "weakness": { + "energy_type": "metal", + "value": 20 + }, + "illustrator": "Kagemaru Himeno" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/041-mankey.json b/backend/data/definitions/pokemon/a1a/041-mankey.json new file mode 100644 index 0000000..be91368 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/041-mankey.json @@ -0,0 +1,28 @@ +{ + "id": "a1a-041-mankey", + "name": "Mankey", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Focus Fist", + "cost": [ + "fighting" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "Flip a coin. If tails, this attack does nothing." + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Akira Komayama" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/042-primeape.json b/backend/data/definitions/pokemon/a1a/042-primeape.json new file mode 100644 index 0000000..5fc7313 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/042-primeape.json @@ -0,0 +1,28 @@ +{ + "id": "a1a-042-primeape", + "name": "Primeape", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "evolves_from": "Mankey", + "attacks": [ + { + "name": "Punch", + "cost": [ + "fighting" + ], + "damage": 50, + "damage_display": "50" + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "Taiga Kayama" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/043-geodude.json b/backend/data/definitions/pokemon/a1a/043-geodude.json new file mode 100644 index 0000000..de397f7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/043-geodude.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-043-geodude", + "name": "Geodude", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Light Punch", + "cost": [ + "fighting", + "colorless" + ], + "damage": 30, + "damage_display": "30" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "GOSSAN", + "image_path": "pokemon/a1a/043-geodude.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/043-geodude.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/044-graveler.json b/backend/data/definitions/pokemon/a1a/044-graveler.json new file mode 100644 index 0000000..fff3d45 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/044-graveler.json @@ -0,0 +1,31 @@ +{ + "id": "a1a-044-graveler", + "name": "Graveler", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Geodude", + "attacks": [ + { + "name": "Lunge Out", + "cost": [ + "fighting", + "colorless" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Ayaka Yoshida", + "image_path": "pokemon/a1a/044-graveler.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/044-graveler.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/045-golem.json b/backend/data/definitions/pokemon/a1a/045-golem.json new file mode 100644 index 0000000..d71337f --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/045-golem.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-045-golem", + "name": "Golem", + "card_type": "pokemon", + "hp": 160, + "pokemon_type": "fighting", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "rare", + "evolves_from": "Graveler", + "attacks": [ + { + "name": "Guard Press", + "cost": [ + "fighting", + "fighting", + "fighting", + "colorless" + ], + "damage": 120, + "damage_display": "120", + "effect_description": "During your opponent\u2019s next turn, this Pok\u00e9mon takes \u221230 damage from attacks." + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Masakazu Fukuda", + "image_path": "pokemon/a1a/045-golem.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/045-golem.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/046-aerodactyl-ex.json b/backend/data/definitions/pokemon/a1a/046-aerodactyl-ex.json new file mode 100644 index 0000000..07b7b03 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/046-aerodactyl-ex.json @@ -0,0 +1,38 @@ +{ + "id": "a1a-046-aerodactyl-ex", + "name": "Aerodactyl ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "double rare", + "evolves_from": "Old Amber", + "attacks": [ + { + "name": "Land Crush", + "cost": [ + "fighting", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "abilities": [ + { + "name": "Primeval Law", + "effect_id": "unimplemented", + "effect_description": "Your opponent can\u2019t play any Pok\u00e9mon from their hand to evolve their Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/046-aerodactyl-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/046-aerodactyl-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/047-marshadow.json b/backend/data/definitions/pokemon/a1a/047-marshadow.json new file mode 100644 index 0000000..5180af7 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/047-marshadow.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-047-marshadow", + "name": "Marshadow", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "rare", + "attacks": [ + { + "name": "Revenge", + "cost": [ + "fighting", + "colorless" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "If any of your Pok\u00e9mon were Knocked Out by damage from an attack during your opponent\u2019s last turn, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "kantaro", + "image_path": "pokemon/a1a/047-marshadow.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/047-marshadow.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/048-stonjourner.json b/backend/data/definitions/pokemon/a1a/048-stonjourner.json new file mode 100644 index 0000000..6e4c9a1 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/048-stonjourner.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-048-stonjourner", + "name": "Stonjourner", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "uncommon", + "attacks": [ + { + "name": "Mega Kick", + "cost": [ + "fighting", + "fighting", + "fighting" + ], + "damage": 90, + "damage_display": "90" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Teeziro" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/049-koffing.json b/backend/data/definitions/pokemon/a1a/049-koffing.json new file mode 100644 index 0000000..c7b2329 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/049-koffing.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-049-koffing", + "name": "Koffing", + "card_type": "pokemon", + "hp": 70, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Division", + "cost": [ + "darkness" + ], + "damage": 0, + "effect_description": "Put 1 randomKoffingfrom your deck onto your Bench." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Naoyo Kimura", + "image_path": "pokemon/a1a/049-koffing.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/049-koffing.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/050-weezing.json b/backend/data/definitions/pokemon/a1a/050-weezing.json new file mode 100644 index 0000000..eacb2fc --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/050-weezing.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-050-weezing", + "name": "Weezing", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Koffing", + "attacks": [ + { + "name": "Smokescreen", + "cost": [ + "darkness", + "darkness" + ], + "damage": 50, + "damage_display": "50", + "effect_description": "During your opponent\u2019s next turn, if the Defending Pok\u00e9mon tries to use an attack, your opponent flips a coin. If tails, that attack doesn\u2019t happen." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Mousho" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/051-purrloin.json b/backend/data/definitions/pokemon/a1a/051-purrloin.json new file mode 100644 index 0000000..5181c5c --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/051-purrloin.json @@ -0,0 +1,27 @@ +{ + "id": "a1a-051-purrloin", + "name": "Purrloin", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Scratch", + "cost": [ + "darkness" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "Kagemaru Himeno" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/052-liepard.json b/backend/data/definitions/pokemon/a1a/052-liepard.json new file mode 100644 index 0000000..988c534 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/052-liepard.json @@ -0,0 +1,28 @@ +{ + "id": "a1a-052-liepard", + "name": "Liepard", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "evolves_from": "Purrloin", + "attacks": [ + { + "name": "Slash", + "cost": [ + "darkness" + ], + "damage": 40, + "damage_display": "40" + } + ], + "weakness": { + "energy_type": "grass", + "value": 20 + }, + "illustrator": "GIDORA" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/053-venipede.json b/backend/data/definitions/pokemon/a1a/053-venipede.json new file mode 100644 index 0000000..a087193 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/053-venipede.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-053-venipede", + "name": "Venipede", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "darkness", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Ram", + "cost": [ + "darkness" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Yukiko Baba", + "image_path": "pokemon/a1a/053-venipede.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/053-venipede.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/054-whirlipede.json b/backend/data/definitions/pokemon/a1a/054-whirlipede.json new file mode 100644 index 0000000..27c4511 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/054-whirlipede.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-054-whirlipede", + "name": "Whirlipede", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "darkness", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "common", + "evolves_from": "Venipede", + "attacks": [ + { + "name": "Poison Sting", + "cost": [ + "darkness" + ], + "damage": 20, + "damage_display": "20", + "effect_description": "Your opponent\u2019s Active Pok\u00e9mon is now Poisoned." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Shin Nagasawa" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/055-scolipede.json b/backend/data/definitions/pokemon/a1a/055-scolipede.json new file mode 100644 index 0000000..580ba70 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/055-scolipede.json @@ -0,0 +1,35 @@ +{ + "id": "a1a-055-scolipede", + "name": "Scolipede", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "darkness", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "uncommon", + "evolves_from": "Whirlipede", + "attacks": [ + { + "name": "Venoshock", + "cost": [ + "darkness", + "colorless" + ], + "damage": 70, + "damage_display": "70x", + "effect_description": "If your opponent\u2019s Active Pok\u00e9mon is Poisoned, this attack does 50 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "5ban Graphics", + "image_path": "pokemon/a1a/055-scolipede.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/055-scolipede.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/056-druddigon.json b/backend/data/definitions/pokemon/a1a/056-druddigon.json new file mode 100644 index 0000000..e42d0dc --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/056-druddigon.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-056-druddigon", + "name": "Druddigon", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "dragon", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "uncommon", + "attacks": [ + { + "name": "Dragon Claw", + "cost": [ + "fire", + "water", + "colorless" + ], + "damage": 90, + "damage_display": "90" + } + ], + "abilities": [ + { + "name": "Rough Skin", + "effect_id": "unimplemented", + "effect_description": "If this Pok\u00e9mon is in the Active Spot and is damaged by an attack from your opponent\u2019s Pok\u00e9mon, do 20 damage to the Attacking Pok\u00e9mon." + } + ], + "illustrator": "Ryota Murayama", + "image_path": "pokemon/a1a/056-druddigon.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/056-druddigon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/057-pidgey.json b/backend/data/definitions/pokemon/a1a/057-pidgey.json new file mode 100644 index 0000000..3969613 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/057-pidgey.json @@ -0,0 +1,27 @@ +{ + "id": "a1a-057-pidgey", + "name": "Pidgey", + "card_type": "pokemon", + "hp": 50, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Flap", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Shigenori Negishi" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/058-pidgeotto.json b/backend/data/definitions/pokemon/a1a/058-pidgeotto.json new file mode 100644 index 0000000..c83b146 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/058-pidgeotto.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-058-pidgeotto", + "name": "Pidgeotto", + "card_type": "pokemon", + "hp": 90, + "pokemon_type": "colorless", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "evolves_from": "Pidgey", + "attacks": [ + { + "name": "Wing Attack", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 50, + "damage_display": "50" + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Taiga Kayama" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/059-pidgeot-ex.json b/backend/data/definitions/pokemon/a1a/059-pidgeot-ex.json new file mode 100644 index 0000000..559ca26 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/059-pidgeot-ex.json @@ -0,0 +1,36 @@ +{ + "id": "a1a-059-pidgeot-ex", + "name": "Pidgeot ex", + "card_type": "pokemon", + "hp": 170, + "pokemon_type": "colorless", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "double rare", + "evolves_from": "Pidgeotto", + "attacks": [ + { + "name": "Scattering Cyclone", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "This attack does 20 more damage for each of your opponent\u2019s Benched Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/059-pidgeot-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/059-pidgeot-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/060-tauros.json b/backend/data/definitions/pokemon/a1a/060-tauros.json new file mode 100644 index 0000000..9007c57 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/060-tauros.json @@ -0,0 +1,35 @@ +{ + "id": "a1a-060-tauros", + "name": "Tauros", + "card_type": "pokemon", + "hp": 100, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "rare", + "attacks": [ + { + "name": "Fighting Tackle", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "If your opponent\u2019s Active Pok\u00e9mon is a Pok\u00e9monex, this attack does 80 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "KEIICHIRO ITO", + "image_path": "pokemon/a1a/060-tauros.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/060-tauros.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/061-eevee.json b/backend/data/definitions/pokemon/a1a/061-eevee.json new file mode 100644 index 0000000..d9f6e0f --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/061-eevee.json @@ -0,0 +1,33 @@ +{ + "id": "a1a-061-eevee", + "name": "Eevee", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Continuous Steps", + "cost": [ + "colorless" + ], + "damage": 20, + "damage_display": "20+", + "effect_description": "Flip a coin until you get tails. This attack does 20 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Hitoshi Ariga", + "image_path": "pokemon/a1a/061-eevee.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/061-eevee.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/062-chatot.json b/backend/data/definitions/pokemon/a1a/062-chatot.json new file mode 100644 index 0000000..2f0a03d --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/062-chatot.json @@ -0,0 +1,29 @@ +{ + "id": "a1a-062-chatot", + "name": "Chatot", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "colorless", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "common", + "attacks": [ + { + "name": "Mimic", + "cost": [ + "colorless" + ], + "damage": 0, + "effect_description": "Shuffle your hand into your deck. Draw a card for each card in your opponent\u2019s hand." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "Masako Tomii", + "image_path": "pokemon/a1a/062-chatot.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/062-chatot.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/069-exeggutor.json b/backend/data/definitions/pokemon/a1a/069-exeggutor.json new file mode 100644 index 0000000..0734800 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/069-exeggutor.json @@ -0,0 +1,37 @@ +{ + "id": "a1a-069-exeggutor", + "name": "Exeggutor", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "grass", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "art rare", + "evolves_from": "Exeggcute", + "attacks": [ + { + "name": "Psychic", + "cost": [ + "grass", + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "This attack does 20 more damage for each Energy attached to your opponent\u2019s Active Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "Gapao", + "image_path": "pokemon/a1a/069-exeggutor.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/069-exeggutor.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/070-serperior.json b/backend/data/definitions/pokemon/a1a/070-serperior.json new file mode 100644 index 0000000..63f858e --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/070-serperior.json @@ -0,0 +1,40 @@ +{ + "id": "a1a-070-serperior", + "name": "Serperior", + "card_type": "pokemon", + "hp": 110, + "pokemon_type": "grass", + "stage": "stage_2", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "art rare", + "evolves_from": "Servine", + "attacks": [ + { + "name": "Solar Beam", + "cost": [ + "grass", + "colorless", + "colorless", + "colorless" + ], + "damage": 70, + "damage_display": "70" + } + ], + "abilities": [ + { + "name": "Jungle Totem", + "effect_id": "unimplemented", + "effect_description": "EachEnergy attached to yourPok\u00e9mon provides 2Energy. This effect doesn\u2019t stack." + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "rika", + "image_path": "pokemon/a1a/070-serperior.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/070-serperior.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/071-salandit.json b/backend/data/definitions/pokemon/a1a/071-salandit.json new file mode 100644 index 0000000..e24e041 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/071-salandit.json @@ -0,0 +1,33 @@ +{ + "id": "a1a-071-salandit", + "name": "Salandit", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "art rare", + "attacks": [ + { + "name": "Venoshock", + "cost": [ + "colorless" + ], + "damage": 10, + "damage_display": "10x", + "effect_description": "If your opponent\u2019s Active Pok\u00e9mon is Poisoned, this attack does 40 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "water", + "value": 20 + }, + "illustrator": "Nurikabe", + "image_path": "pokemon/a1a/071-salandit.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/071-salandit.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/072-vaporeon.json b/backend/data/definitions/pokemon/a1a/072-vaporeon.json new file mode 100644 index 0000000..af32462 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/072-vaporeon.json @@ -0,0 +1,39 @@ +{ + "id": "a1a-072-vaporeon", + "name": "Vaporeon", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "normal", + "retreat_cost": 2, + "set_id": "a1a", + "rarity": "art rare", + "evolves_from": "Eevee", + "attacks": [ + { + "name": "Wave Splash", + "cost": [ + "water", + "colorless", + "colorless" + ], + "damage": 60, + "damage_display": "60" + } + ], + "abilities": [ + { + "name": "Wash Out", + "effect_id": "unimplemented", + "effect_description": "As often as you like during your turn, you may move aEnergy from 1 of your BenchedPok\u00e9mon to your ActivePok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "aspara", + "image_path": "pokemon/a1a/072-vaporeon.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/072-vaporeon.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/073-dedenne.json b/backend/data/definitions/pokemon/a1a/073-dedenne.json new file mode 100644 index 0000000..e09e0bb --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/073-dedenne.json @@ -0,0 +1,30 @@ +{ + "id": "a1a-073-dedenne", + "name": "Dedenne", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "art rare", + "attacks": [ + { + "name": "Thunder Shock", + "cost": [ + "lightning" + ], + "damage": 10, + "damage_display": "10", + "effect_description": "Flip a coin. If heads, your opponent\u2019s Active Pok\u00e9mon is now Paralyzed." + } + ], + "weakness": { + "energy_type": "fighting", + "value": 20 + }, + "illustrator": "Yuu Nishida", + "image_path": "pokemon/a1a/073-dedenne.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/073-dedenne.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/074-marshadow.json b/backend/data/definitions/pokemon/a1a/074-marshadow.json new file mode 100644 index 0000000..de6b8c2 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/074-marshadow.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-074-marshadow", + "name": "Marshadow", + "card_type": "pokemon", + "hp": 80, + "pokemon_type": "fighting", + "stage": "basic", + "variant": "normal", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "art rare", + "attacks": [ + { + "name": "Revenge", + "cost": [ + "fighting", + "colorless" + ], + "damage": 40, + "damage_display": "40x", + "effect_description": "If any of your Pok\u00e9mon were Knocked Out by damage from an attack during your opponent\u2019s last turn, this attack does 60 more damage.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "psychic", + "value": 20 + }, + "illustrator": "OKACHEKE", + "image_path": "pokemon/a1a/074-marshadow.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/074-marshadow.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/075-celebi-ex.json b/backend/data/definitions/pokemon/a1a/075-celebi-ex.json new file mode 100644 index 0000000..f4d5c95 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/075-celebi-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-075-celebi-ex", + "name": "Celebi ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "grass", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "special art rare", + "attacks": [ + { + "name": "Powerful Bloom", + "cost": [ + "grass", + "colorless" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip a coin for each Energy attached to this Pok\u00e9mon. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/075-celebi-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/075-celebi-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/076-gyarados-ex.json b/backend/data/definitions/pokemon/a1a/076-gyarados-ex.json new file mode 100644 index 0000000..71ca984 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/076-gyarados-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-076-gyarados-ex", + "name": "Gyarados ex", + "card_type": "pokemon", + "hp": 180, + "pokemon_type": "water", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 3, + "set_id": "a1a", + "rarity": "special art rare", + "evolves_from": "Magikarp", + "attacks": [ + { + "name": "Rampaging Whirlpool", + "cost": [ + "water", + "water", + "water", + "colorless" + ], + "damage": 140, + "damage_display": "140", + "effect_description": "Discard a random Energy from among the Energy attached to all Pok\u00e9mon (both yours and your opponent\u2019s)." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/076-gyarados-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/076-gyarados-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/077-mew-ex.json b/backend/data/definitions/pokemon/a1a/077-mew-ex.json new file mode 100644 index 0000000..d644025 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/077-mew-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1a-077-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "special art rare", + "attacks": [ + { + "name": "Psyshot", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + }, + { + "name": "Genome Hacking", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 0, + "effect_description": "Choose 1 of your opponent\u2019s Active Pok\u00e9mon\u2019s attacks and use it as this attack." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/077-mew-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/077-mew-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/078-aerodactyl-ex.json b/backend/data/definitions/pokemon/a1a/078-aerodactyl-ex.json new file mode 100644 index 0000000..9eeeb0b --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/078-aerodactyl-ex.json @@ -0,0 +1,38 @@ +{ + "id": "a1a-078-aerodactyl-ex", + "name": "Aerodactyl ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "special art rare", + "evolves_from": "Old Amber", + "attacks": [ + { + "name": "Land Crush", + "cost": [ + "fighting", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "abilities": [ + { + "name": "Primeval Law", + "effect_id": "unimplemented", + "effect_description": "Your opponent can\u2019t play any Pok\u00e9mon from their hand to evolve their Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/078-aerodactyl-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/078-aerodactyl-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/079-pidgeot-ex.json b/backend/data/definitions/pokemon/a1a/079-pidgeot-ex.json new file mode 100644 index 0000000..4c21142 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/079-pidgeot-ex.json @@ -0,0 +1,36 @@ +{ + "id": "a1a-079-pidgeot-ex", + "name": "Pidgeot ex", + "card_type": "pokemon", + "hp": 170, + "pokemon_type": "colorless", + "stage": "stage_2", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "special art rare", + "evolves_from": "Pidgeotto", + "attacks": [ + { + "name": "Scattering Cyclone", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 80, + "damage_display": "80x", + "effect_description": "This attack does 20 more damage for each of your opponent\u2019s Benched Pok\u00e9mon.", + "effect_params": { + "damage_modifier": "x" + } + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/079-pidgeot-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/079-pidgeot-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/083-mew-ex.json b/backend/data/definitions/pokemon/a1a/083-mew-ex.json new file mode 100644 index 0000000..3124b0d --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/083-mew-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1a-083-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "sr", + "attacks": [ + { + "name": "Psyshot", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + }, + { + "name": "Genome Hacking", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 0, + "effect_description": "Choose 1 of your opponent\u2019s Active Pok\u00e9mon\u2019s attacks and use it as this attack." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "HYOGONOSUKE", + "image_path": "pokemon/a1a/083-mew-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/083-mew-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/084-aerodactyl-ex.json b/backend/data/definitions/pokemon/a1a/084-aerodactyl-ex.json new file mode 100644 index 0000000..dddcc94 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/084-aerodactyl-ex.json @@ -0,0 +1,38 @@ +{ + "id": "a1a-084-aerodactyl-ex", + "name": "Aerodactyl ex", + "card_type": "pokemon", + "hp": 140, + "pokemon_type": "fighting", + "stage": "stage_1", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "sr", + "evolves_from": "Old Amber", + "attacks": [ + { + "name": "Land Crush", + "cost": [ + "fighting", + "colorless" + ], + "damage": 80, + "damage_display": "80" + } + ], + "abilities": [ + { + "name": "Primeval Law", + "effect_id": "unimplemented", + "effect_description": "Your opponent can\u2019t play any Pok\u00e9mon from their hand to evolve their Active Pok\u00e9mon." + } + ], + "weakness": { + "energy_type": "lightning", + "value": 20 + }, + "illustrator": "danciao", + "image_path": "pokemon/a1a/084-aerodactyl-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/084-aerodactyl-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/085-celebi-ex.json b/backend/data/definitions/pokemon/a1a/085-celebi-ex.json new file mode 100644 index 0000000..a4f6f58 --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/085-celebi-ex.json @@ -0,0 +1,34 @@ +{ + "id": "a1a-085-celebi-ex", + "name": "Celebi ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "grass", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "immersive", + "attacks": [ + { + "name": "Powerful Bloom", + "cost": [ + "grass", + "colorless" + ], + "damage": 50, + "damage_display": "50+", + "effect_description": "Flip a coin for each Energy attached to this Pok\u00e9mon. This attack does 50 damage for each heads.", + "effect_params": { + "damage_modifier": "+" + } + } + ], + "weakness": { + "energy_type": "fire", + "value": 20 + }, + "illustrator": "kantaro", + "image_path": "pokemon/a1a/085-celebi-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/085-celebi-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/pokemon/a1a/086-mew-ex.json b/backend/data/definitions/pokemon/a1a/086-mew-ex.json new file mode 100644 index 0000000..f6b78bb --- /dev/null +++ b/backend/data/definitions/pokemon/a1a/086-mew-ex.json @@ -0,0 +1,39 @@ +{ + "id": "a1a-086-mew-ex", + "name": "Mew ex", + "card_type": "pokemon", + "hp": 130, + "pokemon_type": "psychic", + "stage": "basic", + "variant": "ex", + "retreat_cost": 1, + "set_id": "a1a", + "rarity": "ultra rare", + "attacks": [ + { + "name": "Psyshot", + "cost": [ + "psychic" + ], + "damage": 20, + "damage_display": "20" + }, + { + "name": "Genome Hacking", + "cost": [ + "colorless", + "colorless", + "colorless" + ], + "damage": 0, + "effect_description": "Choose 1 of your opponent\u2019s Active Pok\u00e9mon\u2019s attacks and use it as this attack." + } + ], + "weakness": { + "energy_type": "darkness", + "value": 20 + }, + "illustrator": "PLANETA CG Works", + "image_path": "pokemon/a1a/086-mew-ex.webp", + "image_url": "https://cdn.mantimon.com/cards/pokemon/a1a/086-mew-ex.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/219-erika.json b/backend/data/definitions/trainer/a1/219-erika.json new file mode 100644 index 0000000..072c687 --- /dev/null +++ b/backend/data/definitions/trainer/a1/219-erika.json @@ -0,0 +1,10 @@ +{ + "id": "a1-219-erika", + "name": "Erika", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "Heal 50 damage from 1 of yourPok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "kirisAki" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/220-misty.json b/backend/data/definitions/trainer/a1/220-misty.json new file mode 100644 index 0000000..8e137f1 --- /dev/null +++ b/backend/data/definitions/trainer/a1/220-misty.json @@ -0,0 +1,10 @@ +{ + "id": "a1-220-misty", + "name": "Misty", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "Choose 1 of yourPok\u00e9mon, and flip a coin until you get tails. For each heads, take aEnergy from your Energy Zone and attach it to that Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "Sanosuke Sakuma" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/221-blaine.json b/backend/data/definitions/trainer/a1/221-blaine.json new file mode 100644 index 0000000..a1ef47d --- /dev/null +++ b/backend/data/definitions/trainer/a1/221-blaine.json @@ -0,0 +1,10 @@ +{ + "id": "a1-221-blaine", + "name": "Blaine", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "During this turn, attacks used by yourNinetales,Rapidash, orMagmardo +30 damage to your opponent\u2019s Active Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "GOSSAN" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/222-koga.json b/backend/data/definitions/trainer/a1/222-koga.json new file mode 100644 index 0000000..a6bd057 --- /dev/null +++ b/backend/data/definitions/trainer/a1/222-koga.json @@ -0,0 +1,10 @@ +{ + "id": "a1-222-koga", + "name": "Koga", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "Put yourMukorWeezingin the Active Spot into your hand.You may play only 1 Supporter card during your turn.", + "illustrator": "Souichirou Gunjima" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/223-giovanni.json b/backend/data/definitions/trainer/a1/223-giovanni.json new file mode 100644 index 0000000..139964c --- /dev/null +++ b/backend/data/definitions/trainer/a1/223-giovanni.json @@ -0,0 +1,10 @@ +{ + "id": "a1-223-giovanni", + "name": "Giovanni", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "During this turn, attacks used by your Pok\u00e9mon do +10 damage to your opponent\u2019s Active Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "Hideki Ishikawa" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/224-brock.json b/backend/data/definitions/trainer/a1/224-brock.json new file mode 100644 index 0000000..c72b198 --- /dev/null +++ b/backend/data/definitions/trainer/a1/224-brock.json @@ -0,0 +1,10 @@ +{ + "id": "a1-224-brock", + "name": "Brock", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "Take aEnergy from your Energy Zone and attach it toGolemorOnix.You may play only 1 Supporter card during your turn.", + "illustrator": "Taira Akitsu" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/225-sabrina.json b/backend/data/definitions/trainer/a1/225-sabrina.json new file mode 100644 index 0000000..ece5081 --- /dev/null +++ b/backend/data/definitions/trainer/a1/225-sabrina.json @@ -0,0 +1,10 @@ +{ + "id": "a1-225-sabrina", + "name": "Sabrina", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "Switch out your opponent\u2019s Active Pok\u00e9mon to the Bench.(Your opponent chooses the new Active Pok\u00e9mon.)You may play only 1 Supporter card during your turn.", + "illustrator": "Yuu Nishida" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/226-lt-surge.json b/backend/data/definitions/trainer/a1/226-lt-surge.json new file mode 100644 index 0000000..cdfd730 --- /dev/null +++ b/backend/data/definitions/trainer/a1/226-lt-surge.json @@ -0,0 +1,10 @@ +{ + "id": "a1-226-lt-surge", + "name": "Lt. Surge", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "uncommon", + "effect_description": "Move allEnergy from your Benched Pok\u00e9mon to yourRaichu,Electrode, orElectabuzzin the Active Spot.You may play only 1 Supporter card during your turn.", + "illustrator": "nagimiso" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/266-erika.json b/backend/data/definitions/trainer/a1/266-erika.json new file mode 100644 index 0000000..b1c45c5 --- /dev/null +++ b/backend/data/definitions/trainer/a1/266-erika.json @@ -0,0 +1,10 @@ +{ + "id": "a1-266-erika", + "name": "Erika", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "Heal 50 damage from 1 of yourPok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "saino misaki" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/267-misty.json b/backend/data/definitions/trainer/a1/267-misty.json new file mode 100644 index 0000000..fcd451a --- /dev/null +++ b/backend/data/definitions/trainer/a1/267-misty.json @@ -0,0 +1,10 @@ +{ + "id": "a1-267-misty", + "name": "Misty", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "Choose 1 of yourPok\u00e9mon, and flip a coin until you get tails. For each heads, take aEnergy from your Energy Zone and attach it to that Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "Sanosuke Sakuma" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/268-blaine.json b/backend/data/definitions/trainer/a1/268-blaine.json new file mode 100644 index 0000000..a9a74f3 --- /dev/null +++ b/backend/data/definitions/trainer/a1/268-blaine.json @@ -0,0 +1,10 @@ +{ + "id": "a1-268-blaine", + "name": "Blaine", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "During this turn, attacks used by yourNinetales,Rapidash, orMagmardo +30 damage to your opponent\u2019s Active Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "GOSSAN" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/269-koga.json b/backend/data/definitions/trainer/a1/269-koga.json new file mode 100644 index 0000000..b813a27 --- /dev/null +++ b/backend/data/definitions/trainer/a1/269-koga.json @@ -0,0 +1,10 @@ +{ + "id": "a1-269-koga", + "name": "Koga", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "Put yourMukorWeezingin the Active Spot into your hand.You may play only 1 Supporter card during your turn.", + "illustrator": "Souichirou Gunjima" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/270-giovanni.json b/backend/data/definitions/trainer/a1/270-giovanni.json new file mode 100644 index 0000000..c79c3b8 --- /dev/null +++ b/backend/data/definitions/trainer/a1/270-giovanni.json @@ -0,0 +1,10 @@ +{ + "id": "a1-270-giovanni", + "name": "Giovanni", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "During this turn, attacks used by your Pok\u00e9mon do +10 damage to your opponent\u2019s Active Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "Hideki Ishikawa" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/271-brock.json b/backend/data/definitions/trainer/a1/271-brock.json new file mode 100644 index 0000000..6eb24ac --- /dev/null +++ b/backend/data/definitions/trainer/a1/271-brock.json @@ -0,0 +1,10 @@ +{ + "id": "a1-271-brock", + "name": "Brock", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "Take aEnergy from your Energy Zone and attach it toGolemorOnix.You may play only 1 Supporter card during your turn.", + "illustrator": "Ryuta Fuse" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/272-sabrina.json b/backend/data/definitions/trainer/a1/272-sabrina.json new file mode 100644 index 0000000..d8e79aa --- /dev/null +++ b/backend/data/definitions/trainer/a1/272-sabrina.json @@ -0,0 +1,10 @@ +{ + "id": "a1-272-sabrina", + "name": "Sabrina", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "Switch out your opponent\u2019s Active Pok\u00e9mon to the Bench.(Your opponent chooses the new Active Pok\u00e9mon.)You may play only 1 Supporter card during your turn.", + "illustrator": "GIDORA" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1/273-lt-surge.json b/backend/data/definitions/trainer/a1/273-lt-surge.json new file mode 100644 index 0000000..12445e2 --- /dev/null +++ b/backend/data/definitions/trainer/a1/273-lt-surge.json @@ -0,0 +1,10 @@ +{ + "id": "a1-273-lt-surge", + "name": "Lt. Surge", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1", + "rarity": "special art rare", + "effect_description": "Move allEnergy from your Benched Pok\u00e9mon to yourRaichu,Electrode, orElectabuzzin the Active Spot.You may play only 1 Supporter card during your turn.", + "illustrator": "nagimiso" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/064-pokemon-flute.json b/backend/data/definitions/trainer/a1a/064-pokemon-flute.json new file mode 100644 index 0000000..edd2539 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/064-pokemon-flute.json @@ -0,0 +1,10 @@ +{ + "id": "a1a-064-pokemon-flute", + "name": "Pok\u00e9mon Flute", + "card_type": "trainer", + "trainer_type": "item", + "set_id": "a1a", + "rarity": "uncommon", + "effect_description": "Put a Basic Pok\u00e9mon from your opponent\u2019s discard pile onto their Bench.You may play any number of Item cards during your turn.", + "illustrator": "Toyste Beach" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/065-mythical-slab.json b/backend/data/definitions/trainer/a1a/065-mythical-slab.json new file mode 100644 index 0000000..891c8d1 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/065-mythical-slab.json @@ -0,0 +1,12 @@ +{ + "id": "a1a-065-mythical-slab", + "name": "Mythical Slab", + "card_type": "trainer", + "trainer_type": "item", + "set_id": "a1a", + "rarity": "uncommon", + "effect_description": "Look at the top card of your deck. If that card is aPok\u00e9mon, put it into your hand. If it is not aPok\u00e9mon, put it on the bottom of your deck.You may play any number of Item cards during your turn.", + "illustrator": "AYUMI ODASHIMA", + "image_path": "trainer/a1a/065-mythical-slab.webp", + "image_url": "https://cdn.mantimon.com/cards/trainer/a1a/065-mythical-slab.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/066-budding-expeditioner.json b/backend/data/definitions/trainer/a1a/066-budding-expeditioner.json new file mode 100644 index 0000000..f209af3 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/066-budding-expeditioner.json @@ -0,0 +1,10 @@ +{ + "id": "a1a-066-budding-expeditioner", + "name": "Budding Expeditioner", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1a", + "rarity": "uncommon", + "effect_description": "Put yourMew exin the Active Spot into your hand.You may play only 1 Supporter card during your turn.", + "illustrator": "Yuu Nishida" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/067-blue.json b/backend/data/definitions/trainer/a1a/067-blue.json new file mode 100644 index 0000000..3d205b1 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/067-blue.json @@ -0,0 +1,12 @@ +{ + "id": "a1a-067-blue", + "name": "Blue", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1a", + "rarity": "uncommon", + "effect_description": "During your opponent\u2019s next turn, all of your Pok\u00e9mon take \u221210 damage from attacks from your opponent\u2019s Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "Ryuta Fuse", + "image_path": "trainer/a1a/067-blue.webp", + "image_url": "https://cdn.mantimon.com/cards/trainer/a1a/067-blue.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/068-leaf.json b/backend/data/definitions/trainer/a1a/068-leaf.json new file mode 100644 index 0000000..f3ee258 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/068-leaf.json @@ -0,0 +1,12 @@ +{ + "id": "a1a-068-leaf", + "name": "Leaf", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1a", + "rarity": "uncommon", + "effect_description": "During this turn, the Retreat Cost of your Active Pok\u00e9mon is 2 less.You may play only 1 Supporter card during your turn.", + "illustrator": "En Morikura", + "image_path": "trainer/a1a/068-leaf.webp", + "image_url": "https://cdn.mantimon.com/cards/trainer/a1a/068-leaf.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/080-budding-expeditioner.json b/backend/data/definitions/trainer/a1a/080-budding-expeditioner.json new file mode 100644 index 0000000..72287e6 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/080-budding-expeditioner.json @@ -0,0 +1,12 @@ +{ + "id": "a1a-080-budding-expeditioner", + "name": "Budding Expeditioner", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1a", + "rarity": "special art rare", + "effect_description": "Put yourMew exin the Active Spot into your hand.You may play only 1 Supporter card during your turn.", + "illustrator": "Yuu Nishida", + "image_path": "trainer/a1a/080-budding-expeditioner.webp", + "image_url": "https://cdn.mantimon.com/cards/trainer/a1a/080-budding-expeditioner.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/081-blue.json b/backend/data/definitions/trainer/a1a/081-blue.json new file mode 100644 index 0000000..afe4c68 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/081-blue.json @@ -0,0 +1,12 @@ +{ + "id": "a1a-081-blue", + "name": "Blue", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1a", + "rarity": "special art rare", + "effect_description": "During your opponent\u2019s next turn, all of your Pok\u00e9mon take \u221210 damage from attacks from your opponent\u2019s Pok\u00e9mon.You may play only 1 Supporter card during your turn.", + "illustrator": "Ryuta Fuse", + "image_path": "trainer/a1a/081-blue.webp", + "image_url": "https://cdn.mantimon.com/cards/trainer/a1a/081-blue.webp" +} \ No newline at end of file diff --git a/backend/data/definitions/trainer/a1a/082-leaf.json b/backend/data/definitions/trainer/a1a/082-leaf.json new file mode 100644 index 0000000..1f77e81 --- /dev/null +++ b/backend/data/definitions/trainer/a1a/082-leaf.json @@ -0,0 +1,12 @@ +{ + "id": "a1a-082-leaf", + "name": "Leaf", + "card_type": "trainer", + "trainer_type": "supporter", + "set_id": "a1a", + "rarity": "special art rare", + "effect_description": "During this turn, the Retreat Cost of your Active Pok\u00e9mon is 2 less.You may play only 1 Supporter card during your turn.", + "illustrator": "En Morikura", + "image_path": "trainer/a1a/082-leaf.webp", + "image_url": "https://cdn.mantimon.com/cards/trainer/a1a/082-leaf.webp" +} \ No newline at end of file diff --git a/backend/data/cards/.gitkeep b/backend/data/raw/.gitkeep similarity index 100% rename from backend/data/cards/.gitkeep rename to backend/data/raw/.gitkeep diff --git a/backend/data/raw/README.md b/backend/data/raw/README.md new file mode 100644 index 0000000..14d580b --- /dev/null +++ b/backend/data/raw/README.md @@ -0,0 +1,24 @@ +# Raw Scraped Data + +Scraped from pokemon-zone.com. **Reference only - do not edit.** + +Run `scripts/scrape_pokemon_pocket.py` to update this data. + +For authoritative card definitions used by the game engine, see `../definitions/`. + +## Structure + +``` +raw/ +├── _index.json # Index of all scraped cards +├── a1/ # Genetic Apex set +│ └── *.json # Individual card files +└── a1a/ # Mythical Island set + └── *.json # Individual card files +``` + +## Notes + +- This data is the raw output from the scraper +- Schema may differ from the game engine's CardDefinition model +- Use `scripts/convert_cards.py` to transform this data into definitions diff --git a/backend/data/cards/_index.json b/backend/data/raw/_index.json similarity index 100% rename from backend/data/cards/_index.json rename to backend/data/raw/_index.json diff --git a/backend/data/cards/a1/001-bulbasaur.json b/backend/data/raw/a1/001-bulbasaur.json similarity index 100% rename from backend/data/cards/a1/001-bulbasaur.json rename to backend/data/raw/a1/001-bulbasaur.json diff --git a/backend/data/cards/a1/002-ivysaur.json b/backend/data/raw/a1/002-ivysaur.json similarity index 100% rename from backend/data/cards/a1/002-ivysaur.json rename to backend/data/raw/a1/002-ivysaur.json diff --git a/backend/data/cards/a1/003-venusaur.json b/backend/data/raw/a1/003-venusaur.json similarity index 100% rename from backend/data/cards/a1/003-venusaur.json rename to backend/data/raw/a1/003-venusaur.json diff --git a/backend/data/cards/a1/004-venusaur-ex.json b/backend/data/raw/a1/004-venusaur-ex.json similarity index 100% rename from backend/data/cards/a1/004-venusaur-ex.json rename to backend/data/raw/a1/004-venusaur-ex.json diff --git a/backend/data/cards/a1/005-caterpie.json b/backend/data/raw/a1/005-caterpie.json similarity index 100% rename from backend/data/cards/a1/005-caterpie.json rename to backend/data/raw/a1/005-caterpie.json diff --git a/backend/data/cards/a1/006-metapod.json b/backend/data/raw/a1/006-metapod.json similarity index 100% rename from backend/data/cards/a1/006-metapod.json rename to backend/data/raw/a1/006-metapod.json diff --git a/backend/data/cards/a1/007-butterfree.json b/backend/data/raw/a1/007-butterfree.json similarity index 100% rename from backend/data/cards/a1/007-butterfree.json rename to backend/data/raw/a1/007-butterfree.json diff --git a/backend/data/cards/a1/008-weedle.json b/backend/data/raw/a1/008-weedle.json similarity index 100% rename from backend/data/cards/a1/008-weedle.json rename to backend/data/raw/a1/008-weedle.json diff --git a/backend/data/cards/a1/009-kakuna.json b/backend/data/raw/a1/009-kakuna.json similarity index 100% rename from backend/data/cards/a1/009-kakuna.json rename to backend/data/raw/a1/009-kakuna.json diff --git a/backend/data/cards/a1/010-beedrill.json b/backend/data/raw/a1/010-beedrill.json similarity index 100% rename from backend/data/cards/a1/010-beedrill.json rename to backend/data/raw/a1/010-beedrill.json diff --git a/backend/data/cards/a1/011-oddish.json b/backend/data/raw/a1/011-oddish.json similarity index 100% rename from backend/data/cards/a1/011-oddish.json rename to backend/data/raw/a1/011-oddish.json diff --git a/backend/data/cards/a1/012-gloom.json b/backend/data/raw/a1/012-gloom.json similarity index 100% rename from backend/data/cards/a1/012-gloom.json rename to backend/data/raw/a1/012-gloom.json diff --git a/backend/data/cards/a1/013-vileplume.json b/backend/data/raw/a1/013-vileplume.json similarity index 100% rename from backend/data/cards/a1/013-vileplume.json rename to backend/data/raw/a1/013-vileplume.json diff --git a/backend/data/cards/a1/014-paras.json b/backend/data/raw/a1/014-paras.json similarity index 100% rename from backend/data/cards/a1/014-paras.json rename to backend/data/raw/a1/014-paras.json diff --git a/backend/data/cards/a1/015-parasect.json b/backend/data/raw/a1/015-parasect.json similarity index 100% rename from backend/data/cards/a1/015-parasect.json rename to backend/data/raw/a1/015-parasect.json diff --git a/backend/data/cards/a1/016-venonat.json b/backend/data/raw/a1/016-venonat.json similarity index 100% rename from backend/data/cards/a1/016-venonat.json rename to backend/data/raw/a1/016-venonat.json diff --git a/backend/data/cards/a1/017-venomoth.json b/backend/data/raw/a1/017-venomoth.json similarity index 100% rename from backend/data/cards/a1/017-venomoth.json rename to backend/data/raw/a1/017-venomoth.json diff --git a/backend/data/cards/a1/018-bellsprout.json b/backend/data/raw/a1/018-bellsprout.json similarity index 100% rename from backend/data/cards/a1/018-bellsprout.json rename to backend/data/raw/a1/018-bellsprout.json diff --git a/backend/data/cards/a1/019-weepinbell.json b/backend/data/raw/a1/019-weepinbell.json similarity index 100% rename from backend/data/cards/a1/019-weepinbell.json rename to backend/data/raw/a1/019-weepinbell.json diff --git a/backend/data/cards/a1/020-victreebel.json b/backend/data/raw/a1/020-victreebel.json similarity index 100% rename from backend/data/cards/a1/020-victreebel.json rename to backend/data/raw/a1/020-victreebel.json diff --git a/backend/data/cards/a1/021-exeggcute.json b/backend/data/raw/a1/021-exeggcute.json similarity index 100% rename from backend/data/cards/a1/021-exeggcute.json rename to backend/data/raw/a1/021-exeggcute.json diff --git a/backend/data/cards/a1/022-exeggutor.json b/backend/data/raw/a1/022-exeggutor.json similarity index 100% rename from backend/data/cards/a1/022-exeggutor.json rename to backend/data/raw/a1/022-exeggutor.json diff --git a/backend/data/cards/a1/023-exeggutor-ex.json b/backend/data/raw/a1/023-exeggutor-ex.json similarity index 100% rename from backend/data/cards/a1/023-exeggutor-ex.json rename to backend/data/raw/a1/023-exeggutor-ex.json diff --git a/backend/data/cards/a1/024-tangela.json b/backend/data/raw/a1/024-tangela.json similarity index 100% rename from backend/data/cards/a1/024-tangela.json rename to backend/data/raw/a1/024-tangela.json diff --git a/backend/data/cards/a1/025-scyther.json b/backend/data/raw/a1/025-scyther.json similarity index 100% rename from backend/data/cards/a1/025-scyther.json rename to backend/data/raw/a1/025-scyther.json diff --git a/backend/data/cards/a1/026-pinsir.json b/backend/data/raw/a1/026-pinsir.json similarity index 100% rename from backend/data/cards/a1/026-pinsir.json rename to backend/data/raw/a1/026-pinsir.json diff --git a/backend/data/cards/a1/027-cottonee.json b/backend/data/raw/a1/027-cottonee.json similarity index 100% rename from backend/data/cards/a1/027-cottonee.json rename to backend/data/raw/a1/027-cottonee.json diff --git a/backend/data/cards/a1/028-whimsicott.json b/backend/data/raw/a1/028-whimsicott.json similarity index 100% rename from backend/data/cards/a1/028-whimsicott.json rename to backend/data/raw/a1/028-whimsicott.json diff --git a/backend/data/cards/a1/029-petilil.json b/backend/data/raw/a1/029-petilil.json similarity index 100% rename from backend/data/cards/a1/029-petilil.json rename to backend/data/raw/a1/029-petilil.json diff --git a/backend/data/cards/a1/030-lilligant.json b/backend/data/raw/a1/030-lilligant.json similarity index 100% rename from backend/data/cards/a1/030-lilligant.json rename to backend/data/raw/a1/030-lilligant.json diff --git a/backend/data/cards/a1/031-skiddo.json b/backend/data/raw/a1/031-skiddo.json similarity index 100% rename from backend/data/cards/a1/031-skiddo.json rename to backend/data/raw/a1/031-skiddo.json diff --git a/backend/data/cards/a1/032-gogoat.json b/backend/data/raw/a1/032-gogoat.json similarity index 100% rename from backend/data/cards/a1/032-gogoat.json rename to backend/data/raw/a1/032-gogoat.json diff --git a/backend/data/cards/a1/033-charmander.json b/backend/data/raw/a1/033-charmander.json similarity index 100% rename from backend/data/cards/a1/033-charmander.json rename to backend/data/raw/a1/033-charmander.json diff --git a/backend/data/cards/a1/034-charmeleon.json b/backend/data/raw/a1/034-charmeleon.json similarity index 100% rename from backend/data/cards/a1/034-charmeleon.json rename to backend/data/raw/a1/034-charmeleon.json diff --git a/backend/data/cards/a1/035-charizard.json b/backend/data/raw/a1/035-charizard.json similarity index 100% rename from backend/data/cards/a1/035-charizard.json rename to backend/data/raw/a1/035-charizard.json diff --git a/backend/data/cards/a1/036-charizard-ex.json b/backend/data/raw/a1/036-charizard-ex.json similarity index 100% rename from backend/data/cards/a1/036-charizard-ex.json rename to backend/data/raw/a1/036-charizard-ex.json diff --git a/backend/data/cards/a1/037-vulpix.json b/backend/data/raw/a1/037-vulpix.json similarity index 100% rename from backend/data/cards/a1/037-vulpix.json rename to backend/data/raw/a1/037-vulpix.json diff --git a/backend/data/cards/a1/038-ninetales.json b/backend/data/raw/a1/038-ninetales.json similarity index 100% rename from backend/data/cards/a1/038-ninetales.json rename to backend/data/raw/a1/038-ninetales.json diff --git a/backend/data/cards/a1/039-growlithe.json b/backend/data/raw/a1/039-growlithe.json similarity index 100% rename from backend/data/cards/a1/039-growlithe.json rename to backend/data/raw/a1/039-growlithe.json diff --git a/backend/data/cards/a1/040-arcanine.json b/backend/data/raw/a1/040-arcanine.json similarity index 100% rename from backend/data/cards/a1/040-arcanine.json rename to backend/data/raw/a1/040-arcanine.json diff --git a/backend/data/cards/a1/041-arcanine-ex.json b/backend/data/raw/a1/041-arcanine-ex.json similarity index 100% rename from backend/data/cards/a1/041-arcanine-ex.json rename to backend/data/raw/a1/041-arcanine-ex.json diff --git a/backend/data/cards/a1/042-ponyta.json b/backend/data/raw/a1/042-ponyta.json similarity index 100% rename from backend/data/cards/a1/042-ponyta.json rename to backend/data/raw/a1/042-ponyta.json diff --git a/backend/data/cards/a1/043-rapidash.json b/backend/data/raw/a1/043-rapidash.json similarity index 100% rename from backend/data/cards/a1/043-rapidash.json rename to backend/data/raw/a1/043-rapidash.json diff --git a/backend/data/cards/a1/044-magmar.json b/backend/data/raw/a1/044-magmar.json similarity index 100% rename from backend/data/cards/a1/044-magmar.json rename to backend/data/raw/a1/044-magmar.json diff --git a/backend/data/cards/a1/045-flareon.json b/backend/data/raw/a1/045-flareon.json similarity index 100% rename from backend/data/cards/a1/045-flareon.json rename to backend/data/raw/a1/045-flareon.json diff --git a/backend/data/cards/a1/046-moltres.json b/backend/data/raw/a1/046-moltres.json similarity index 100% rename from backend/data/cards/a1/046-moltres.json rename to backend/data/raw/a1/046-moltres.json diff --git a/backend/data/cards/a1/047-moltres-ex.json b/backend/data/raw/a1/047-moltres-ex.json similarity index 100% rename from backend/data/cards/a1/047-moltres-ex.json rename to backend/data/raw/a1/047-moltres-ex.json diff --git a/backend/data/cards/a1/048-heatmor.json b/backend/data/raw/a1/048-heatmor.json similarity index 100% rename from backend/data/cards/a1/048-heatmor.json rename to backend/data/raw/a1/048-heatmor.json diff --git a/backend/data/cards/a1/049-salandit.json b/backend/data/raw/a1/049-salandit.json similarity index 100% rename from backend/data/cards/a1/049-salandit.json rename to backend/data/raw/a1/049-salandit.json diff --git a/backend/data/cards/a1/050-salazzle.json b/backend/data/raw/a1/050-salazzle.json similarity index 100% rename from backend/data/cards/a1/050-salazzle.json rename to backend/data/raw/a1/050-salazzle.json diff --git a/backend/data/cards/a1/051-sizzlipede.json b/backend/data/raw/a1/051-sizzlipede.json similarity index 100% rename from backend/data/cards/a1/051-sizzlipede.json rename to backend/data/raw/a1/051-sizzlipede.json diff --git a/backend/data/cards/a1/052-centiskorch.json b/backend/data/raw/a1/052-centiskorch.json similarity index 100% rename from backend/data/cards/a1/052-centiskorch.json rename to backend/data/raw/a1/052-centiskorch.json diff --git a/backend/data/cards/a1/053-squirtle.json b/backend/data/raw/a1/053-squirtle.json similarity index 100% rename from backend/data/cards/a1/053-squirtle.json rename to backend/data/raw/a1/053-squirtle.json diff --git a/backend/data/cards/a1/054-wartortle.json b/backend/data/raw/a1/054-wartortle.json similarity index 100% rename from backend/data/cards/a1/054-wartortle.json rename to backend/data/raw/a1/054-wartortle.json diff --git a/backend/data/cards/a1/055-blastoise.json b/backend/data/raw/a1/055-blastoise.json similarity index 100% rename from backend/data/cards/a1/055-blastoise.json rename to backend/data/raw/a1/055-blastoise.json diff --git a/backend/data/cards/a1/056-blastoise-ex.json b/backend/data/raw/a1/056-blastoise-ex.json similarity index 100% rename from backend/data/cards/a1/056-blastoise-ex.json rename to backend/data/raw/a1/056-blastoise-ex.json diff --git a/backend/data/cards/a1/057-psyduck.json b/backend/data/raw/a1/057-psyduck.json similarity index 100% rename from backend/data/cards/a1/057-psyduck.json rename to backend/data/raw/a1/057-psyduck.json diff --git a/backend/data/cards/a1/058-golduck.json b/backend/data/raw/a1/058-golduck.json similarity index 100% rename from backend/data/cards/a1/058-golduck.json rename to backend/data/raw/a1/058-golduck.json diff --git a/backend/data/cards/a1/059-poliwag.json b/backend/data/raw/a1/059-poliwag.json similarity index 100% rename from backend/data/cards/a1/059-poliwag.json rename to backend/data/raw/a1/059-poliwag.json diff --git a/backend/data/cards/a1/060-poliwhirl.json b/backend/data/raw/a1/060-poliwhirl.json similarity index 100% rename from backend/data/cards/a1/060-poliwhirl.json rename to backend/data/raw/a1/060-poliwhirl.json diff --git a/backend/data/cards/a1/061-poliwrath.json b/backend/data/raw/a1/061-poliwrath.json similarity index 100% rename from backend/data/cards/a1/061-poliwrath.json rename to backend/data/raw/a1/061-poliwrath.json diff --git a/backend/data/cards/a1/062-tentacool.json b/backend/data/raw/a1/062-tentacool.json similarity index 100% rename from backend/data/cards/a1/062-tentacool.json rename to backend/data/raw/a1/062-tentacool.json diff --git a/backend/data/cards/a1/063-tentacruel.json b/backend/data/raw/a1/063-tentacruel.json similarity index 100% rename from backend/data/cards/a1/063-tentacruel.json rename to backend/data/raw/a1/063-tentacruel.json diff --git a/backend/data/cards/a1/064-seel.json b/backend/data/raw/a1/064-seel.json similarity index 100% rename from backend/data/cards/a1/064-seel.json rename to backend/data/raw/a1/064-seel.json diff --git a/backend/data/cards/a1/065-dewgong.json b/backend/data/raw/a1/065-dewgong.json similarity index 100% rename from backend/data/cards/a1/065-dewgong.json rename to backend/data/raw/a1/065-dewgong.json diff --git a/backend/data/cards/a1/066-shellder.json b/backend/data/raw/a1/066-shellder.json similarity index 100% rename from backend/data/cards/a1/066-shellder.json rename to backend/data/raw/a1/066-shellder.json diff --git a/backend/data/cards/a1/067-cloyster.json b/backend/data/raw/a1/067-cloyster.json similarity index 100% rename from backend/data/cards/a1/067-cloyster.json rename to backend/data/raw/a1/067-cloyster.json diff --git a/backend/data/cards/a1/068-krabby.json b/backend/data/raw/a1/068-krabby.json similarity index 100% rename from backend/data/cards/a1/068-krabby.json rename to backend/data/raw/a1/068-krabby.json diff --git a/backend/data/cards/a1/069-kingler.json b/backend/data/raw/a1/069-kingler.json similarity index 100% rename from backend/data/cards/a1/069-kingler.json rename to backend/data/raw/a1/069-kingler.json diff --git a/backend/data/cards/a1/070-horsea.json b/backend/data/raw/a1/070-horsea.json similarity index 100% rename from backend/data/cards/a1/070-horsea.json rename to backend/data/raw/a1/070-horsea.json diff --git a/backend/data/cards/a1/071-seadra.json b/backend/data/raw/a1/071-seadra.json similarity index 100% rename from backend/data/cards/a1/071-seadra.json rename to backend/data/raw/a1/071-seadra.json diff --git a/backend/data/cards/a1/072-goldeen.json b/backend/data/raw/a1/072-goldeen.json similarity index 100% rename from backend/data/cards/a1/072-goldeen.json rename to backend/data/raw/a1/072-goldeen.json diff --git a/backend/data/cards/a1/073-seaking.json b/backend/data/raw/a1/073-seaking.json similarity index 100% rename from backend/data/cards/a1/073-seaking.json rename to backend/data/raw/a1/073-seaking.json diff --git a/backend/data/cards/a1/074-staryu.json b/backend/data/raw/a1/074-staryu.json similarity index 100% rename from backend/data/cards/a1/074-staryu.json rename to backend/data/raw/a1/074-staryu.json diff --git a/backend/data/cards/a1/075-starmie.json b/backend/data/raw/a1/075-starmie.json similarity index 100% rename from backend/data/cards/a1/075-starmie.json rename to backend/data/raw/a1/075-starmie.json diff --git a/backend/data/cards/a1/076-starmie-ex.json b/backend/data/raw/a1/076-starmie-ex.json similarity index 100% rename from backend/data/cards/a1/076-starmie-ex.json rename to backend/data/raw/a1/076-starmie-ex.json diff --git a/backend/data/cards/a1/077-magikarp.json b/backend/data/raw/a1/077-magikarp.json similarity index 100% rename from backend/data/cards/a1/077-magikarp.json rename to backend/data/raw/a1/077-magikarp.json diff --git a/backend/data/cards/a1/078-gyarados.json b/backend/data/raw/a1/078-gyarados.json similarity index 100% rename from backend/data/cards/a1/078-gyarados.json rename to backend/data/raw/a1/078-gyarados.json diff --git a/backend/data/cards/a1/079-lapras.json b/backend/data/raw/a1/079-lapras.json similarity index 100% rename from backend/data/cards/a1/079-lapras.json rename to backend/data/raw/a1/079-lapras.json diff --git a/backend/data/cards/a1/080-vaporeon.json b/backend/data/raw/a1/080-vaporeon.json similarity index 100% rename from backend/data/cards/a1/080-vaporeon.json rename to backend/data/raw/a1/080-vaporeon.json diff --git a/backend/data/cards/a1/081-omanyte.json b/backend/data/raw/a1/081-omanyte.json similarity index 100% rename from backend/data/cards/a1/081-omanyte.json rename to backend/data/raw/a1/081-omanyte.json diff --git a/backend/data/cards/a1/082-omastar.json b/backend/data/raw/a1/082-omastar.json similarity index 100% rename from backend/data/cards/a1/082-omastar.json rename to backend/data/raw/a1/082-omastar.json diff --git a/backend/data/cards/a1/083-articuno.json b/backend/data/raw/a1/083-articuno.json similarity index 100% rename from backend/data/cards/a1/083-articuno.json rename to backend/data/raw/a1/083-articuno.json diff --git a/backend/data/cards/a1/084-articuno-ex.json b/backend/data/raw/a1/084-articuno-ex.json similarity index 100% rename from backend/data/cards/a1/084-articuno-ex.json rename to backend/data/raw/a1/084-articuno-ex.json diff --git a/backend/data/cards/a1/085-ducklett.json b/backend/data/raw/a1/085-ducklett.json similarity index 100% rename from backend/data/cards/a1/085-ducklett.json rename to backend/data/raw/a1/085-ducklett.json diff --git a/backend/data/cards/a1/086-swanna.json b/backend/data/raw/a1/086-swanna.json similarity index 100% rename from backend/data/cards/a1/086-swanna.json rename to backend/data/raw/a1/086-swanna.json diff --git a/backend/data/cards/a1/087-froakie.json b/backend/data/raw/a1/087-froakie.json similarity index 100% rename from backend/data/cards/a1/087-froakie.json rename to backend/data/raw/a1/087-froakie.json diff --git a/backend/data/cards/a1/088-frogadier.json b/backend/data/raw/a1/088-frogadier.json similarity index 100% rename from backend/data/cards/a1/088-frogadier.json rename to backend/data/raw/a1/088-frogadier.json diff --git a/backend/data/cards/a1/089-greninja.json b/backend/data/raw/a1/089-greninja.json similarity index 100% rename from backend/data/cards/a1/089-greninja.json rename to backend/data/raw/a1/089-greninja.json diff --git a/backend/data/cards/a1/090-pyukumuku.json b/backend/data/raw/a1/090-pyukumuku.json similarity index 100% rename from backend/data/cards/a1/090-pyukumuku.json rename to backend/data/raw/a1/090-pyukumuku.json diff --git a/backend/data/cards/a1/091-bruxish.json b/backend/data/raw/a1/091-bruxish.json similarity index 100% rename from backend/data/cards/a1/091-bruxish.json rename to backend/data/raw/a1/091-bruxish.json diff --git a/backend/data/cards/a1/092-snom.json b/backend/data/raw/a1/092-snom.json similarity index 100% rename from backend/data/cards/a1/092-snom.json rename to backend/data/raw/a1/092-snom.json diff --git a/backend/data/cards/a1/093-frosmoth.json b/backend/data/raw/a1/093-frosmoth.json similarity index 100% rename from backend/data/cards/a1/093-frosmoth.json rename to backend/data/raw/a1/093-frosmoth.json diff --git a/backend/data/cards/a1/094-pikachu.json b/backend/data/raw/a1/094-pikachu.json similarity index 100% rename from backend/data/cards/a1/094-pikachu.json rename to backend/data/raw/a1/094-pikachu.json diff --git a/backend/data/cards/a1/095-raichu.json b/backend/data/raw/a1/095-raichu.json similarity index 100% rename from backend/data/cards/a1/095-raichu.json rename to backend/data/raw/a1/095-raichu.json diff --git a/backend/data/cards/a1/096-pikachu-ex.json b/backend/data/raw/a1/096-pikachu-ex.json similarity index 100% rename from backend/data/cards/a1/096-pikachu-ex.json rename to backend/data/raw/a1/096-pikachu-ex.json diff --git a/backend/data/cards/a1/097-magnemite.json b/backend/data/raw/a1/097-magnemite.json similarity index 100% rename from backend/data/cards/a1/097-magnemite.json rename to backend/data/raw/a1/097-magnemite.json diff --git a/backend/data/cards/a1/098-magneton.json b/backend/data/raw/a1/098-magneton.json similarity index 100% rename from backend/data/cards/a1/098-magneton.json rename to backend/data/raw/a1/098-magneton.json diff --git a/backend/data/cards/a1/099-voltorb.json b/backend/data/raw/a1/099-voltorb.json similarity index 100% rename from backend/data/cards/a1/099-voltorb.json rename to backend/data/raw/a1/099-voltorb.json diff --git a/backend/data/cards/a1/100-electrode.json b/backend/data/raw/a1/100-electrode.json similarity index 100% rename from backend/data/cards/a1/100-electrode.json rename to backend/data/raw/a1/100-electrode.json diff --git a/backend/data/cards/a1/101-electabuzz.json b/backend/data/raw/a1/101-electabuzz.json similarity index 100% rename from backend/data/cards/a1/101-electabuzz.json rename to backend/data/raw/a1/101-electabuzz.json diff --git a/backend/data/cards/a1/102-jolteon.json b/backend/data/raw/a1/102-jolteon.json similarity index 100% rename from backend/data/cards/a1/102-jolteon.json rename to backend/data/raw/a1/102-jolteon.json diff --git a/backend/data/cards/a1/103-zapdos.json b/backend/data/raw/a1/103-zapdos.json similarity index 100% rename from backend/data/cards/a1/103-zapdos.json rename to backend/data/raw/a1/103-zapdos.json diff --git a/backend/data/cards/a1/104-zapdos-ex.json b/backend/data/raw/a1/104-zapdos-ex.json similarity index 100% rename from backend/data/cards/a1/104-zapdos-ex.json rename to backend/data/raw/a1/104-zapdos-ex.json diff --git a/backend/data/cards/a1/105-blitzle.json b/backend/data/raw/a1/105-blitzle.json similarity index 100% rename from backend/data/cards/a1/105-blitzle.json rename to backend/data/raw/a1/105-blitzle.json diff --git a/backend/data/cards/a1/106-zebstrika.json b/backend/data/raw/a1/106-zebstrika.json similarity index 100% rename from backend/data/cards/a1/106-zebstrika.json rename to backend/data/raw/a1/106-zebstrika.json diff --git a/backend/data/cards/a1/107-tynamo.json b/backend/data/raw/a1/107-tynamo.json similarity index 100% rename from backend/data/cards/a1/107-tynamo.json rename to backend/data/raw/a1/107-tynamo.json diff --git a/backend/data/cards/a1/108-eelektrik.json b/backend/data/raw/a1/108-eelektrik.json similarity index 100% rename from backend/data/cards/a1/108-eelektrik.json rename to backend/data/raw/a1/108-eelektrik.json diff --git a/backend/data/cards/a1/109-eelektross.json b/backend/data/raw/a1/109-eelektross.json similarity index 100% rename from backend/data/cards/a1/109-eelektross.json rename to backend/data/raw/a1/109-eelektross.json diff --git a/backend/data/cards/a1/110-helioptile.json b/backend/data/raw/a1/110-helioptile.json similarity index 100% rename from backend/data/cards/a1/110-helioptile.json rename to backend/data/raw/a1/110-helioptile.json diff --git a/backend/data/cards/a1/111-heliolisk.json b/backend/data/raw/a1/111-heliolisk.json similarity index 100% rename from backend/data/cards/a1/111-heliolisk.json rename to backend/data/raw/a1/111-heliolisk.json diff --git a/backend/data/cards/a1/112-pincurchin.json b/backend/data/raw/a1/112-pincurchin.json similarity index 100% rename from backend/data/cards/a1/112-pincurchin.json rename to backend/data/raw/a1/112-pincurchin.json diff --git a/backend/data/cards/a1/113-clefairy.json b/backend/data/raw/a1/113-clefairy.json similarity index 100% rename from backend/data/cards/a1/113-clefairy.json rename to backend/data/raw/a1/113-clefairy.json diff --git a/backend/data/cards/a1/114-clefable.json b/backend/data/raw/a1/114-clefable.json similarity index 100% rename from backend/data/cards/a1/114-clefable.json rename to backend/data/raw/a1/114-clefable.json diff --git a/backend/data/cards/a1/115-abra.json b/backend/data/raw/a1/115-abra.json similarity index 100% rename from backend/data/cards/a1/115-abra.json rename to backend/data/raw/a1/115-abra.json diff --git a/backend/data/cards/a1/116-kadabra.json b/backend/data/raw/a1/116-kadabra.json similarity index 100% rename from backend/data/cards/a1/116-kadabra.json rename to backend/data/raw/a1/116-kadabra.json diff --git a/backend/data/cards/a1/117-alakazam.json b/backend/data/raw/a1/117-alakazam.json similarity index 100% rename from backend/data/cards/a1/117-alakazam.json rename to backend/data/raw/a1/117-alakazam.json diff --git a/backend/data/cards/a1/118-slowpoke.json b/backend/data/raw/a1/118-slowpoke.json similarity index 100% rename from backend/data/cards/a1/118-slowpoke.json rename to backend/data/raw/a1/118-slowpoke.json diff --git a/backend/data/cards/a1/119-slowbro.json b/backend/data/raw/a1/119-slowbro.json similarity index 100% rename from backend/data/cards/a1/119-slowbro.json rename to backend/data/raw/a1/119-slowbro.json diff --git a/backend/data/cards/a1/120-gastly.json b/backend/data/raw/a1/120-gastly.json similarity index 100% rename from backend/data/cards/a1/120-gastly.json rename to backend/data/raw/a1/120-gastly.json diff --git a/backend/data/cards/a1/121-haunter.json b/backend/data/raw/a1/121-haunter.json similarity index 100% rename from backend/data/cards/a1/121-haunter.json rename to backend/data/raw/a1/121-haunter.json diff --git a/backend/data/cards/a1/122-gengar.json b/backend/data/raw/a1/122-gengar.json similarity index 100% rename from backend/data/cards/a1/122-gengar.json rename to backend/data/raw/a1/122-gengar.json diff --git a/backend/data/cards/a1/123-gengar-ex.json b/backend/data/raw/a1/123-gengar-ex.json similarity index 100% rename from backend/data/cards/a1/123-gengar-ex.json rename to backend/data/raw/a1/123-gengar-ex.json diff --git a/backend/data/cards/a1/124-drowzee.json b/backend/data/raw/a1/124-drowzee.json similarity index 100% rename from backend/data/cards/a1/124-drowzee.json rename to backend/data/raw/a1/124-drowzee.json diff --git a/backend/data/cards/a1/125-hypno.json b/backend/data/raw/a1/125-hypno.json similarity index 100% rename from backend/data/cards/a1/125-hypno.json rename to backend/data/raw/a1/125-hypno.json diff --git a/backend/data/cards/a1/126-mr-mime.json b/backend/data/raw/a1/126-mr-mime.json similarity index 100% rename from backend/data/cards/a1/126-mr-mime.json rename to backend/data/raw/a1/126-mr-mime.json diff --git a/backend/data/cards/a1/127-jynx.json b/backend/data/raw/a1/127-jynx.json similarity index 100% rename from backend/data/cards/a1/127-jynx.json rename to backend/data/raw/a1/127-jynx.json diff --git a/backend/data/cards/a1/128-mewtwo.json b/backend/data/raw/a1/128-mewtwo.json similarity index 100% rename from backend/data/cards/a1/128-mewtwo.json rename to backend/data/raw/a1/128-mewtwo.json diff --git a/backend/data/cards/a1/129-mewtwo-ex.json b/backend/data/raw/a1/129-mewtwo-ex.json similarity index 100% rename from backend/data/cards/a1/129-mewtwo-ex.json rename to backend/data/raw/a1/129-mewtwo-ex.json diff --git a/backend/data/cards/a1/130-ralts.json b/backend/data/raw/a1/130-ralts.json similarity index 100% rename from backend/data/cards/a1/130-ralts.json rename to backend/data/raw/a1/130-ralts.json diff --git a/backend/data/cards/a1/131-kirlia.json b/backend/data/raw/a1/131-kirlia.json similarity index 100% rename from backend/data/cards/a1/131-kirlia.json rename to backend/data/raw/a1/131-kirlia.json diff --git a/backend/data/cards/a1/132-gardevoir.json b/backend/data/raw/a1/132-gardevoir.json similarity index 100% rename from backend/data/cards/a1/132-gardevoir.json rename to backend/data/raw/a1/132-gardevoir.json diff --git a/backend/data/cards/a1/133-woobat.json b/backend/data/raw/a1/133-woobat.json similarity index 100% rename from backend/data/cards/a1/133-woobat.json rename to backend/data/raw/a1/133-woobat.json diff --git a/backend/data/cards/a1/134-swoobat.json b/backend/data/raw/a1/134-swoobat.json similarity index 100% rename from backend/data/cards/a1/134-swoobat.json rename to backend/data/raw/a1/134-swoobat.json diff --git a/backend/data/cards/a1/135-golett.json b/backend/data/raw/a1/135-golett.json similarity index 100% rename from backend/data/cards/a1/135-golett.json rename to backend/data/raw/a1/135-golett.json diff --git a/backend/data/cards/a1/136-golurk.json b/backend/data/raw/a1/136-golurk.json similarity index 100% rename from backend/data/cards/a1/136-golurk.json rename to backend/data/raw/a1/136-golurk.json diff --git a/backend/data/cards/a1/137-sandshrew.json b/backend/data/raw/a1/137-sandshrew.json similarity index 100% rename from backend/data/cards/a1/137-sandshrew.json rename to backend/data/raw/a1/137-sandshrew.json diff --git a/backend/data/cards/a1/138-sandslash.json b/backend/data/raw/a1/138-sandslash.json similarity index 100% rename from backend/data/cards/a1/138-sandslash.json rename to backend/data/raw/a1/138-sandslash.json diff --git a/backend/data/cards/a1/139-diglett.json b/backend/data/raw/a1/139-diglett.json similarity index 100% rename from backend/data/cards/a1/139-diglett.json rename to backend/data/raw/a1/139-diglett.json diff --git a/backend/data/cards/a1/140-dugtrio.json b/backend/data/raw/a1/140-dugtrio.json similarity index 100% rename from backend/data/cards/a1/140-dugtrio.json rename to backend/data/raw/a1/140-dugtrio.json diff --git a/backend/data/cards/a1/141-mankey.json b/backend/data/raw/a1/141-mankey.json similarity index 100% rename from backend/data/cards/a1/141-mankey.json rename to backend/data/raw/a1/141-mankey.json diff --git a/backend/data/cards/a1/142-primeape.json b/backend/data/raw/a1/142-primeape.json similarity index 100% rename from backend/data/cards/a1/142-primeape.json rename to backend/data/raw/a1/142-primeape.json diff --git a/backend/data/cards/a1/143-machop.json b/backend/data/raw/a1/143-machop.json similarity index 100% rename from backend/data/cards/a1/143-machop.json rename to backend/data/raw/a1/143-machop.json diff --git a/backend/data/cards/a1/144-machoke.json b/backend/data/raw/a1/144-machoke.json similarity index 100% rename from backend/data/cards/a1/144-machoke.json rename to backend/data/raw/a1/144-machoke.json diff --git a/backend/data/cards/a1/145-machamp.json b/backend/data/raw/a1/145-machamp.json similarity index 100% rename from backend/data/cards/a1/145-machamp.json rename to backend/data/raw/a1/145-machamp.json diff --git a/backend/data/cards/a1/146-machamp-ex.json b/backend/data/raw/a1/146-machamp-ex.json similarity index 100% rename from backend/data/cards/a1/146-machamp-ex.json rename to backend/data/raw/a1/146-machamp-ex.json diff --git a/backend/data/cards/a1/147-geodude.json b/backend/data/raw/a1/147-geodude.json similarity index 100% rename from backend/data/cards/a1/147-geodude.json rename to backend/data/raw/a1/147-geodude.json diff --git a/backend/data/cards/a1/148-graveler.json b/backend/data/raw/a1/148-graveler.json similarity index 100% rename from backend/data/cards/a1/148-graveler.json rename to backend/data/raw/a1/148-graveler.json diff --git a/backend/data/cards/a1/149-golem.json b/backend/data/raw/a1/149-golem.json similarity index 100% rename from backend/data/cards/a1/149-golem.json rename to backend/data/raw/a1/149-golem.json diff --git a/backend/data/cards/a1/150-onix.json b/backend/data/raw/a1/150-onix.json similarity index 100% rename from backend/data/cards/a1/150-onix.json rename to backend/data/raw/a1/150-onix.json diff --git a/backend/data/cards/a1/151-cubone.json b/backend/data/raw/a1/151-cubone.json similarity index 100% rename from backend/data/cards/a1/151-cubone.json rename to backend/data/raw/a1/151-cubone.json diff --git a/backend/data/cards/a1/152-marowak.json b/backend/data/raw/a1/152-marowak.json similarity index 100% rename from backend/data/cards/a1/152-marowak.json rename to backend/data/raw/a1/152-marowak.json diff --git a/backend/data/cards/a1/153-marowak-ex.json b/backend/data/raw/a1/153-marowak-ex.json similarity index 100% rename from backend/data/cards/a1/153-marowak-ex.json rename to backend/data/raw/a1/153-marowak-ex.json diff --git a/backend/data/cards/a1/154-hitmonlee.json b/backend/data/raw/a1/154-hitmonlee.json similarity index 100% rename from backend/data/cards/a1/154-hitmonlee.json rename to backend/data/raw/a1/154-hitmonlee.json diff --git a/backend/data/cards/a1/155-hitmonchan.json b/backend/data/raw/a1/155-hitmonchan.json similarity index 100% rename from backend/data/cards/a1/155-hitmonchan.json rename to backend/data/raw/a1/155-hitmonchan.json diff --git a/backend/data/cards/a1/156-rhyhorn.json b/backend/data/raw/a1/156-rhyhorn.json similarity index 100% rename from backend/data/cards/a1/156-rhyhorn.json rename to backend/data/raw/a1/156-rhyhorn.json diff --git a/backend/data/cards/a1/157-rhydon.json b/backend/data/raw/a1/157-rhydon.json similarity index 100% rename from backend/data/cards/a1/157-rhydon.json rename to backend/data/raw/a1/157-rhydon.json diff --git a/backend/data/cards/a1/158-kabuto.json b/backend/data/raw/a1/158-kabuto.json similarity index 100% rename from backend/data/cards/a1/158-kabuto.json rename to backend/data/raw/a1/158-kabuto.json diff --git a/backend/data/cards/a1/159-kabutops.json b/backend/data/raw/a1/159-kabutops.json similarity index 100% rename from backend/data/cards/a1/159-kabutops.json rename to backend/data/raw/a1/159-kabutops.json diff --git a/backend/data/cards/a1/160-mienfoo.json b/backend/data/raw/a1/160-mienfoo.json similarity index 100% rename from backend/data/cards/a1/160-mienfoo.json rename to backend/data/raw/a1/160-mienfoo.json diff --git a/backend/data/cards/a1/161-mienshao.json b/backend/data/raw/a1/161-mienshao.json similarity index 100% rename from backend/data/cards/a1/161-mienshao.json rename to backend/data/raw/a1/161-mienshao.json diff --git a/backend/data/cards/a1/162-clobbopus.json b/backend/data/raw/a1/162-clobbopus.json similarity index 100% rename from backend/data/cards/a1/162-clobbopus.json rename to backend/data/raw/a1/162-clobbopus.json diff --git a/backend/data/cards/a1/163-grapploct.json b/backend/data/raw/a1/163-grapploct.json similarity index 100% rename from backend/data/cards/a1/163-grapploct.json rename to backend/data/raw/a1/163-grapploct.json diff --git a/backend/data/cards/a1/164-ekans.json b/backend/data/raw/a1/164-ekans.json similarity index 100% rename from backend/data/cards/a1/164-ekans.json rename to backend/data/raw/a1/164-ekans.json diff --git a/backend/data/cards/a1/165-arbok.json b/backend/data/raw/a1/165-arbok.json similarity index 100% rename from backend/data/cards/a1/165-arbok.json rename to backend/data/raw/a1/165-arbok.json diff --git a/backend/data/cards/a1/166-nidoran.json b/backend/data/raw/a1/166-nidoran.json similarity index 100% rename from backend/data/cards/a1/166-nidoran.json rename to backend/data/raw/a1/166-nidoran.json diff --git a/backend/data/cards/a1/167-nidorina.json b/backend/data/raw/a1/167-nidorina.json similarity index 100% rename from backend/data/cards/a1/167-nidorina.json rename to backend/data/raw/a1/167-nidorina.json diff --git a/backend/data/cards/a1/168-nidoqueen.json b/backend/data/raw/a1/168-nidoqueen.json similarity index 100% rename from backend/data/cards/a1/168-nidoqueen.json rename to backend/data/raw/a1/168-nidoqueen.json diff --git a/backend/data/cards/a1/169-nidoran.json b/backend/data/raw/a1/169-nidoran.json similarity index 100% rename from backend/data/cards/a1/169-nidoran.json rename to backend/data/raw/a1/169-nidoran.json diff --git a/backend/data/cards/a1/170-nidorino.json b/backend/data/raw/a1/170-nidorino.json similarity index 100% rename from backend/data/cards/a1/170-nidorino.json rename to backend/data/raw/a1/170-nidorino.json diff --git a/backend/data/cards/a1/171-nidoking.json b/backend/data/raw/a1/171-nidoking.json similarity index 100% rename from backend/data/cards/a1/171-nidoking.json rename to backend/data/raw/a1/171-nidoking.json diff --git a/backend/data/cards/a1/172-zubat.json b/backend/data/raw/a1/172-zubat.json similarity index 100% rename from backend/data/cards/a1/172-zubat.json rename to backend/data/raw/a1/172-zubat.json diff --git a/backend/data/cards/a1/173-golbat.json b/backend/data/raw/a1/173-golbat.json similarity index 100% rename from backend/data/cards/a1/173-golbat.json rename to backend/data/raw/a1/173-golbat.json diff --git a/backend/data/cards/a1/174-grimer.json b/backend/data/raw/a1/174-grimer.json similarity index 100% rename from backend/data/cards/a1/174-grimer.json rename to backend/data/raw/a1/174-grimer.json diff --git a/backend/data/cards/a1/175-muk.json b/backend/data/raw/a1/175-muk.json similarity index 100% rename from backend/data/cards/a1/175-muk.json rename to backend/data/raw/a1/175-muk.json diff --git a/backend/data/cards/a1/176-koffing.json b/backend/data/raw/a1/176-koffing.json similarity index 100% rename from backend/data/cards/a1/176-koffing.json rename to backend/data/raw/a1/176-koffing.json diff --git a/backend/data/cards/a1/177-weezing.json b/backend/data/raw/a1/177-weezing.json similarity index 100% rename from backend/data/cards/a1/177-weezing.json rename to backend/data/raw/a1/177-weezing.json diff --git a/backend/data/cards/a1/178-mawile.json b/backend/data/raw/a1/178-mawile.json similarity index 100% rename from backend/data/cards/a1/178-mawile.json rename to backend/data/raw/a1/178-mawile.json diff --git a/backend/data/cards/a1/179-pawniard.json b/backend/data/raw/a1/179-pawniard.json similarity index 100% rename from backend/data/cards/a1/179-pawniard.json rename to backend/data/raw/a1/179-pawniard.json diff --git a/backend/data/cards/a1/180-bisharp.json b/backend/data/raw/a1/180-bisharp.json similarity index 100% rename from backend/data/cards/a1/180-bisharp.json rename to backend/data/raw/a1/180-bisharp.json diff --git a/backend/data/cards/a1/181-meltan.json b/backend/data/raw/a1/181-meltan.json similarity index 100% rename from backend/data/cards/a1/181-meltan.json rename to backend/data/raw/a1/181-meltan.json diff --git a/backend/data/cards/a1/182-melmetal.json b/backend/data/raw/a1/182-melmetal.json similarity index 100% rename from backend/data/cards/a1/182-melmetal.json rename to backend/data/raw/a1/182-melmetal.json diff --git a/backend/data/cards/a1/183-dratini.json b/backend/data/raw/a1/183-dratini.json similarity index 100% rename from backend/data/cards/a1/183-dratini.json rename to backend/data/raw/a1/183-dratini.json diff --git a/backend/data/cards/a1/184-dragonair.json b/backend/data/raw/a1/184-dragonair.json similarity index 100% rename from backend/data/cards/a1/184-dragonair.json rename to backend/data/raw/a1/184-dragonair.json diff --git a/backend/data/cards/a1/185-dragonite.json b/backend/data/raw/a1/185-dragonite.json similarity index 100% rename from backend/data/cards/a1/185-dragonite.json rename to backend/data/raw/a1/185-dragonite.json diff --git a/backend/data/cards/a1/186-pidgey.json b/backend/data/raw/a1/186-pidgey.json similarity index 100% rename from backend/data/cards/a1/186-pidgey.json rename to backend/data/raw/a1/186-pidgey.json diff --git a/backend/data/cards/a1/187-pidgeotto.json b/backend/data/raw/a1/187-pidgeotto.json similarity index 100% rename from backend/data/cards/a1/187-pidgeotto.json rename to backend/data/raw/a1/187-pidgeotto.json diff --git a/backend/data/cards/a1/188-pidgeot.json b/backend/data/raw/a1/188-pidgeot.json similarity index 100% rename from backend/data/cards/a1/188-pidgeot.json rename to backend/data/raw/a1/188-pidgeot.json diff --git a/backend/data/cards/a1/189-rattata.json b/backend/data/raw/a1/189-rattata.json similarity index 100% rename from backend/data/cards/a1/189-rattata.json rename to backend/data/raw/a1/189-rattata.json diff --git a/backend/data/cards/a1/190-raticate.json b/backend/data/raw/a1/190-raticate.json similarity index 100% rename from backend/data/cards/a1/190-raticate.json rename to backend/data/raw/a1/190-raticate.json diff --git a/backend/data/cards/a1/191-spearow.json b/backend/data/raw/a1/191-spearow.json similarity index 100% rename from backend/data/cards/a1/191-spearow.json rename to backend/data/raw/a1/191-spearow.json diff --git a/backend/data/cards/a1/192-fearow.json b/backend/data/raw/a1/192-fearow.json similarity index 100% rename from backend/data/cards/a1/192-fearow.json rename to backend/data/raw/a1/192-fearow.json diff --git a/backend/data/cards/a1/193-jigglypuff.json b/backend/data/raw/a1/193-jigglypuff.json similarity index 100% rename from backend/data/cards/a1/193-jigglypuff.json rename to backend/data/raw/a1/193-jigglypuff.json diff --git a/backend/data/cards/a1/194-wigglytuff.json b/backend/data/raw/a1/194-wigglytuff.json similarity index 100% rename from backend/data/cards/a1/194-wigglytuff.json rename to backend/data/raw/a1/194-wigglytuff.json diff --git a/backend/data/cards/a1/195-wigglytuff-ex.json b/backend/data/raw/a1/195-wigglytuff-ex.json similarity index 100% rename from backend/data/cards/a1/195-wigglytuff-ex.json rename to backend/data/raw/a1/195-wigglytuff-ex.json diff --git a/backend/data/cards/a1/196-meowth.json b/backend/data/raw/a1/196-meowth.json similarity index 100% rename from backend/data/cards/a1/196-meowth.json rename to backend/data/raw/a1/196-meowth.json diff --git a/backend/data/cards/a1/197-persian.json b/backend/data/raw/a1/197-persian.json similarity index 100% rename from backend/data/cards/a1/197-persian.json rename to backend/data/raw/a1/197-persian.json diff --git a/backend/data/cards/a1/198-farfetchd.json b/backend/data/raw/a1/198-farfetchd.json similarity index 100% rename from backend/data/cards/a1/198-farfetchd.json rename to backend/data/raw/a1/198-farfetchd.json diff --git a/backend/data/cards/a1/199-doduo.json b/backend/data/raw/a1/199-doduo.json similarity index 100% rename from backend/data/cards/a1/199-doduo.json rename to backend/data/raw/a1/199-doduo.json diff --git a/backend/data/cards/a1/200-dodrio.json b/backend/data/raw/a1/200-dodrio.json similarity index 100% rename from backend/data/cards/a1/200-dodrio.json rename to backend/data/raw/a1/200-dodrio.json diff --git a/backend/data/cards/a1/201-lickitung.json b/backend/data/raw/a1/201-lickitung.json similarity index 100% rename from backend/data/cards/a1/201-lickitung.json rename to backend/data/raw/a1/201-lickitung.json diff --git a/backend/data/cards/a1/202-chansey.json b/backend/data/raw/a1/202-chansey.json similarity index 100% rename from backend/data/cards/a1/202-chansey.json rename to backend/data/raw/a1/202-chansey.json diff --git a/backend/data/cards/a1/203-kangaskhan.json b/backend/data/raw/a1/203-kangaskhan.json similarity index 100% rename from backend/data/cards/a1/203-kangaskhan.json rename to backend/data/raw/a1/203-kangaskhan.json diff --git a/backend/data/cards/a1/204-tauros.json b/backend/data/raw/a1/204-tauros.json similarity index 100% rename from backend/data/cards/a1/204-tauros.json rename to backend/data/raw/a1/204-tauros.json diff --git a/backend/data/cards/a1/205-ditto.json b/backend/data/raw/a1/205-ditto.json similarity index 100% rename from backend/data/cards/a1/205-ditto.json rename to backend/data/raw/a1/205-ditto.json diff --git a/backend/data/cards/a1/206-eevee.json b/backend/data/raw/a1/206-eevee.json similarity index 100% rename from backend/data/cards/a1/206-eevee.json rename to backend/data/raw/a1/206-eevee.json diff --git a/backend/data/cards/a1/207-eevee.json b/backend/data/raw/a1/207-eevee.json similarity index 100% rename from backend/data/cards/a1/207-eevee.json rename to backend/data/raw/a1/207-eevee.json diff --git a/backend/data/cards/a1/208-eevee.json b/backend/data/raw/a1/208-eevee.json similarity index 100% rename from backend/data/cards/a1/208-eevee.json rename to backend/data/raw/a1/208-eevee.json diff --git a/backend/data/cards/a1/209-porygon.json b/backend/data/raw/a1/209-porygon.json similarity index 100% rename from backend/data/cards/a1/209-porygon.json rename to backend/data/raw/a1/209-porygon.json diff --git a/backend/data/cards/a1/210-aerodactyl.json b/backend/data/raw/a1/210-aerodactyl.json similarity index 100% rename from backend/data/cards/a1/210-aerodactyl.json rename to backend/data/raw/a1/210-aerodactyl.json diff --git a/backend/data/cards/a1/211-snorlax.json b/backend/data/raw/a1/211-snorlax.json similarity index 100% rename from backend/data/cards/a1/211-snorlax.json rename to backend/data/raw/a1/211-snorlax.json diff --git a/backend/data/cards/a1/212-minccino.json b/backend/data/raw/a1/212-minccino.json similarity index 100% rename from backend/data/cards/a1/212-minccino.json rename to backend/data/raw/a1/212-minccino.json diff --git a/backend/data/cards/a1/213-cinccino.json b/backend/data/raw/a1/213-cinccino.json similarity index 100% rename from backend/data/cards/a1/213-cinccino.json rename to backend/data/raw/a1/213-cinccino.json diff --git a/backend/data/cards/a1/214-wooloo.json b/backend/data/raw/a1/214-wooloo.json similarity index 100% rename from backend/data/cards/a1/214-wooloo.json rename to backend/data/raw/a1/214-wooloo.json diff --git a/backend/data/cards/a1/215-dubwool.json b/backend/data/raw/a1/215-dubwool.json similarity index 100% rename from backend/data/cards/a1/215-dubwool.json rename to backend/data/raw/a1/215-dubwool.json diff --git a/backend/data/cards/a1/216-helix-fossil.json b/backend/data/raw/a1/216-helix-fossil.json similarity index 100% rename from backend/data/cards/a1/216-helix-fossil.json rename to backend/data/raw/a1/216-helix-fossil.json diff --git a/backend/data/cards/a1/217-dome-fossil.json b/backend/data/raw/a1/217-dome-fossil.json similarity index 100% rename from backend/data/cards/a1/217-dome-fossil.json rename to backend/data/raw/a1/217-dome-fossil.json diff --git a/backend/data/cards/a1/218-old-amber.json b/backend/data/raw/a1/218-old-amber.json similarity index 100% rename from backend/data/cards/a1/218-old-amber.json rename to backend/data/raw/a1/218-old-amber.json diff --git a/backend/data/cards/a1/219-erika.json b/backend/data/raw/a1/219-erika.json similarity index 100% rename from backend/data/cards/a1/219-erika.json rename to backend/data/raw/a1/219-erika.json diff --git a/backend/data/cards/a1/220-misty.json b/backend/data/raw/a1/220-misty.json similarity index 100% rename from backend/data/cards/a1/220-misty.json rename to backend/data/raw/a1/220-misty.json diff --git a/backend/data/cards/a1/221-blaine.json b/backend/data/raw/a1/221-blaine.json similarity index 100% rename from backend/data/cards/a1/221-blaine.json rename to backend/data/raw/a1/221-blaine.json diff --git a/backend/data/cards/a1/222-koga.json b/backend/data/raw/a1/222-koga.json similarity index 100% rename from backend/data/cards/a1/222-koga.json rename to backend/data/raw/a1/222-koga.json diff --git a/backend/data/cards/a1/223-giovanni.json b/backend/data/raw/a1/223-giovanni.json similarity index 100% rename from backend/data/cards/a1/223-giovanni.json rename to backend/data/raw/a1/223-giovanni.json diff --git a/backend/data/cards/a1/224-brock.json b/backend/data/raw/a1/224-brock.json similarity index 100% rename from backend/data/cards/a1/224-brock.json rename to backend/data/raw/a1/224-brock.json diff --git a/backend/data/cards/a1/225-sabrina.json b/backend/data/raw/a1/225-sabrina.json similarity index 100% rename from backend/data/cards/a1/225-sabrina.json rename to backend/data/raw/a1/225-sabrina.json diff --git a/backend/data/cards/a1/226-lt-surge.json b/backend/data/raw/a1/226-lt-surge.json similarity index 100% rename from backend/data/cards/a1/226-lt-surge.json rename to backend/data/raw/a1/226-lt-surge.json diff --git a/backend/data/cards/a1/227-bulbasaur.json b/backend/data/raw/a1/227-bulbasaur.json similarity index 100% rename from backend/data/cards/a1/227-bulbasaur.json rename to backend/data/raw/a1/227-bulbasaur.json diff --git a/backend/data/cards/a1/228-gloom.json b/backend/data/raw/a1/228-gloom.json similarity index 100% rename from backend/data/cards/a1/228-gloom.json rename to backend/data/raw/a1/228-gloom.json diff --git a/backend/data/cards/a1/229-pinsir.json b/backend/data/raw/a1/229-pinsir.json similarity index 100% rename from backend/data/cards/a1/229-pinsir.json rename to backend/data/raw/a1/229-pinsir.json diff --git a/backend/data/cards/a1/230-charmander.json b/backend/data/raw/a1/230-charmander.json similarity index 100% rename from backend/data/cards/a1/230-charmander.json rename to backend/data/raw/a1/230-charmander.json diff --git a/backend/data/cards/a1/231-rapidash.json b/backend/data/raw/a1/231-rapidash.json similarity index 100% rename from backend/data/cards/a1/231-rapidash.json rename to backend/data/raw/a1/231-rapidash.json diff --git a/backend/data/cards/a1/232-squirtle.json b/backend/data/raw/a1/232-squirtle.json similarity index 100% rename from backend/data/cards/a1/232-squirtle.json rename to backend/data/raw/a1/232-squirtle.json diff --git a/backend/data/cards/a1/233-gyarados.json b/backend/data/raw/a1/233-gyarados.json similarity index 100% rename from backend/data/cards/a1/233-gyarados.json rename to backend/data/raw/a1/233-gyarados.json diff --git a/backend/data/cards/a1/234-lapras.json b/backend/data/raw/a1/234-lapras.json similarity index 100% rename from backend/data/cards/a1/234-lapras.json rename to backend/data/raw/a1/234-lapras.json diff --git a/backend/data/cards/a1/235-electrode.json b/backend/data/raw/a1/235-electrode.json similarity index 100% rename from backend/data/cards/a1/235-electrode.json rename to backend/data/raw/a1/235-electrode.json diff --git a/backend/data/cards/a1/236-alakazam.json b/backend/data/raw/a1/236-alakazam.json similarity index 100% rename from backend/data/cards/a1/236-alakazam.json rename to backend/data/raw/a1/236-alakazam.json diff --git a/backend/data/cards/a1/237-slowpoke.json b/backend/data/raw/a1/237-slowpoke.json similarity index 100% rename from backend/data/cards/a1/237-slowpoke.json rename to backend/data/raw/a1/237-slowpoke.json diff --git a/backend/data/cards/a1/238-diglett.json b/backend/data/raw/a1/238-diglett.json similarity index 100% rename from backend/data/cards/a1/238-diglett.json rename to backend/data/raw/a1/238-diglett.json diff --git a/backend/data/cards/a1/239-cubone.json b/backend/data/raw/a1/239-cubone.json similarity index 100% rename from backend/data/cards/a1/239-cubone.json rename to backend/data/raw/a1/239-cubone.json diff --git a/backend/data/cards/a1/240-nidoqueen.json b/backend/data/raw/a1/240-nidoqueen.json similarity index 100% rename from backend/data/cards/a1/240-nidoqueen.json rename to backend/data/raw/a1/240-nidoqueen.json diff --git a/backend/data/cards/a1/241-nidoking.json b/backend/data/raw/a1/241-nidoking.json similarity index 100% rename from backend/data/cards/a1/241-nidoking.json rename to backend/data/raw/a1/241-nidoking.json diff --git a/backend/data/cards/a1/242-golbat.json b/backend/data/raw/a1/242-golbat.json similarity index 100% rename from backend/data/cards/a1/242-golbat.json rename to backend/data/raw/a1/242-golbat.json diff --git a/backend/data/cards/a1/243-weezing.json b/backend/data/raw/a1/243-weezing.json similarity index 100% rename from backend/data/cards/a1/243-weezing.json rename to backend/data/raw/a1/243-weezing.json diff --git a/backend/data/cards/a1/244-dragonite.json b/backend/data/raw/a1/244-dragonite.json similarity index 100% rename from backend/data/cards/a1/244-dragonite.json rename to backend/data/raw/a1/244-dragonite.json diff --git a/backend/data/cards/a1/245-pidgeot.json b/backend/data/raw/a1/245-pidgeot.json similarity index 100% rename from backend/data/cards/a1/245-pidgeot.json rename to backend/data/raw/a1/245-pidgeot.json diff --git a/backend/data/cards/a1/246-meowth.json b/backend/data/raw/a1/246-meowth.json similarity index 100% rename from backend/data/cards/a1/246-meowth.json rename to backend/data/raw/a1/246-meowth.json diff --git a/backend/data/cards/a1/247-ditto.json b/backend/data/raw/a1/247-ditto.json similarity index 100% rename from backend/data/cards/a1/247-ditto.json rename to backend/data/raw/a1/247-ditto.json diff --git a/backend/data/cards/a1/248-eevee.json b/backend/data/raw/a1/248-eevee.json similarity index 100% rename from backend/data/cards/a1/248-eevee.json rename to backend/data/raw/a1/248-eevee.json diff --git a/backend/data/cards/a1/249-porygon.json b/backend/data/raw/a1/249-porygon.json similarity index 100% rename from backend/data/cards/a1/249-porygon.json rename to backend/data/raw/a1/249-porygon.json diff --git a/backend/data/cards/a1/250-snorlax.json b/backend/data/raw/a1/250-snorlax.json similarity index 100% rename from backend/data/cards/a1/250-snorlax.json rename to backend/data/raw/a1/250-snorlax.json diff --git a/backend/data/cards/a1/251-venusaur-ex.json b/backend/data/raw/a1/251-venusaur-ex.json similarity index 100% rename from backend/data/cards/a1/251-venusaur-ex.json rename to backend/data/raw/a1/251-venusaur-ex.json diff --git a/backend/data/cards/a1/252-exeggutor-ex.json b/backend/data/raw/a1/252-exeggutor-ex.json similarity index 100% rename from backend/data/cards/a1/252-exeggutor-ex.json rename to backend/data/raw/a1/252-exeggutor-ex.json diff --git a/backend/data/cards/a1/253-charizard-ex.json b/backend/data/raw/a1/253-charizard-ex.json similarity index 100% rename from backend/data/cards/a1/253-charizard-ex.json rename to backend/data/raw/a1/253-charizard-ex.json diff --git a/backend/data/cards/a1/254-arcanine-ex.json b/backend/data/raw/a1/254-arcanine-ex.json similarity index 100% rename from backend/data/cards/a1/254-arcanine-ex.json rename to backend/data/raw/a1/254-arcanine-ex.json diff --git a/backend/data/cards/a1/255-moltres-ex.json b/backend/data/raw/a1/255-moltres-ex.json similarity index 100% rename from backend/data/cards/a1/255-moltres-ex.json rename to backend/data/raw/a1/255-moltres-ex.json diff --git a/backend/data/cards/a1/256-blastoise-ex.json b/backend/data/raw/a1/256-blastoise-ex.json similarity index 100% rename from backend/data/cards/a1/256-blastoise-ex.json rename to backend/data/raw/a1/256-blastoise-ex.json diff --git a/backend/data/cards/a1/257-starmie-ex.json b/backend/data/raw/a1/257-starmie-ex.json similarity index 100% rename from backend/data/cards/a1/257-starmie-ex.json rename to backend/data/raw/a1/257-starmie-ex.json diff --git a/backend/data/cards/a1/258-articuno-ex.json b/backend/data/raw/a1/258-articuno-ex.json similarity index 100% rename from backend/data/cards/a1/258-articuno-ex.json rename to backend/data/raw/a1/258-articuno-ex.json diff --git a/backend/data/cards/a1/259-pikachu-ex.json b/backend/data/raw/a1/259-pikachu-ex.json similarity index 100% rename from backend/data/cards/a1/259-pikachu-ex.json rename to backend/data/raw/a1/259-pikachu-ex.json diff --git a/backend/data/cards/a1/260-zapdos-ex.json b/backend/data/raw/a1/260-zapdos-ex.json similarity index 100% rename from backend/data/cards/a1/260-zapdos-ex.json rename to backend/data/raw/a1/260-zapdos-ex.json diff --git a/backend/data/cards/a1/261-gengar-ex.json b/backend/data/raw/a1/261-gengar-ex.json similarity index 100% rename from backend/data/cards/a1/261-gengar-ex.json rename to backend/data/raw/a1/261-gengar-ex.json diff --git a/backend/data/cards/a1/262-mewtwo-ex.json b/backend/data/raw/a1/262-mewtwo-ex.json similarity index 100% rename from backend/data/cards/a1/262-mewtwo-ex.json rename to backend/data/raw/a1/262-mewtwo-ex.json diff --git a/backend/data/cards/a1/263-machamp-ex.json b/backend/data/raw/a1/263-machamp-ex.json similarity index 100% rename from backend/data/cards/a1/263-machamp-ex.json rename to backend/data/raw/a1/263-machamp-ex.json diff --git a/backend/data/cards/a1/264-marowak-ex.json b/backend/data/raw/a1/264-marowak-ex.json similarity index 100% rename from backend/data/cards/a1/264-marowak-ex.json rename to backend/data/raw/a1/264-marowak-ex.json diff --git a/backend/data/cards/a1/265-wigglytuff-ex.json b/backend/data/raw/a1/265-wigglytuff-ex.json similarity index 100% rename from backend/data/cards/a1/265-wigglytuff-ex.json rename to backend/data/raw/a1/265-wigglytuff-ex.json diff --git a/backend/data/cards/a1/266-erika.json b/backend/data/raw/a1/266-erika.json similarity index 100% rename from backend/data/cards/a1/266-erika.json rename to backend/data/raw/a1/266-erika.json diff --git a/backend/data/cards/a1/267-misty.json b/backend/data/raw/a1/267-misty.json similarity index 100% rename from backend/data/cards/a1/267-misty.json rename to backend/data/raw/a1/267-misty.json diff --git a/backend/data/cards/a1/268-blaine.json b/backend/data/raw/a1/268-blaine.json similarity index 100% rename from backend/data/cards/a1/268-blaine.json rename to backend/data/raw/a1/268-blaine.json diff --git a/backend/data/cards/a1/269-koga.json b/backend/data/raw/a1/269-koga.json similarity index 100% rename from backend/data/cards/a1/269-koga.json rename to backend/data/raw/a1/269-koga.json diff --git a/backend/data/cards/a1/270-giovanni.json b/backend/data/raw/a1/270-giovanni.json similarity index 100% rename from backend/data/cards/a1/270-giovanni.json rename to backend/data/raw/a1/270-giovanni.json diff --git a/backend/data/cards/a1/271-brock.json b/backend/data/raw/a1/271-brock.json similarity index 100% rename from backend/data/cards/a1/271-brock.json rename to backend/data/raw/a1/271-brock.json diff --git a/backend/data/cards/a1/272-sabrina.json b/backend/data/raw/a1/272-sabrina.json similarity index 100% rename from backend/data/cards/a1/272-sabrina.json rename to backend/data/raw/a1/272-sabrina.json diff --git a/backend/data/cards/a1/273-lt-surge.json b/backend/data/raw/a1/273-lt-surge.json similarity index 100% rename from backend/data/cards/a1/273-lt-surge.json rename to backend/data/raw/a1/273-lt-surge.json diff --git a/backend/data/cards/a1/274-moltres-ex.json b/backend/data/raw/a1/274-moltres-ex.json similarity index 100% rename from backend/data/cards/a1/274-moltres-ex.json rename to backend/data/raw/a1/274-moltres-ex.json diff --git a/backend/data/cards/a1/275-articuno-ex.json b/backend/data/raw/a1/275-articuno-ex.json similarity index 100% rename from backend/data/cards/a1/275-articuno-ex.json rename to backend/data/raw/a1/275-articuno-ex.json diff --git a/backend/data/cards/a1/276-zapdos-ex.json b/backend/data/raw/a1/276-zapdos-ex.json similarity index 100% rename from backend/data/cards/a1/276-zapdos-ex.json rename to backend/data/raw/a1/276-zapdos-ex.json diff --git a/backend/data/cards/a1/277-gengar-ex.json b/backend/data/raw/a1/277-gengar-ex.json similarity index 100% rename from backend/data/cards/a1/277-gengar-ex.json rename to backend/data/raw/a1/277-gengar-ex.json diff --git a/backend/data/cards/a1/278-machamp-ex.json b/backend/data/raw/a1/278-machamp-ex.json similarity index 100% rename from backend/data/cards/a1/278-machamp-ex.json rename to backend/data/raw/a1/278-machamp-ex.json diff --git a/backend/data/cards/a1/279-wigglytuff-ex.json b/backend/data/raw/a1/279-wigglytuff-ex.json similarity index 100% rename from backend/data/cards/a1/279-wigglytuff-ex.json rename to backend/data/raw/a1/279-wigglytuff-ex.json diff --git a/backend/data/cards/a1/280-charizard-ex.json b/backend/data/raw/a1/280-charizard-ex.json similarity index 100% rename from backend/data/cards/a1/280-charizard-ex.json rename to backend/data/raw/a1/280-charizard-ex.json diff --git a/backend/data/cards/a1/281-pikachu-ex.json b/backend/data/raw/a1/281-pikachu-ex.json similarity index 100% rename from backend/data/cards/a1/281-pikachu-ex.json rename to backend/data/raw/a1/281-pikachu-ex.json diff --git a/backend/data/cards/a1/282-mewtwo-ex.json b/backend/data/raw/a1/282-mewtwo-ex.json similarity index 100% rename from backend/data/cards/a1/282-mewtwo-ex.json rename to backend/data/raw/a1/282-mewtwo-ex.json diff --git a/backend/data/cards/a1/283-mew.json b/backend/data/raw/a1/283-mew.json similarity index 100% rename from backend/data/cards/a1/283-mew.json rename to backend/data/raw/a1/283-mew.json diff --git a/backend/data/cards/a1/284-charizard-ex.json b/backend/data/raw/a1/284-charizard-ex.json similarity index 100% rename from backend/data/cards/a1/284-charizard-ex.json rename to backend/data/raw/a1/284-charizard-ex.json diff --git a/backend/data/cards/a1/285-pikachu-ex.json b/backend/data/raw/a1/285-pikachu-ex.json similarity index 100% rename from backend/data/cards/a1/285-pikachu-ex.json rename to backend/data/raw/a1/285-pikachu-ex.json diff --git a/backend/data/cards/a1/286-mewtwo-ex.json b/backend/data/raw/a1/286-mewtwo-ex.json similarity index 100% rename from backend/data/cards/a1/286-mewtwo-ex.json rename to backend/data/raw/a1/286-mewtwo-ex.json diff --git a/backend/data/cards/a1a/001-exeggcute.json b/backend/data/raw/a1a/001-exeggcute.json similarity index 100% rename from backend/data/cards/a1a/001-exeggcute.json rename to backend/data/raw/a1a/001-exeggcute.json diff --git a/backend/data/cards/a1a/002-exeggutor.json b/backend/data/raw/a1a/002-exeggutor.json similarity index 100% rename from backend/data/cards/a1a/002-exeggutor.json rename to backend/data/raw/a1a/002-exeggutor.json diff --git a/backend/data/cards/a1a/003-celebi-ex.json b/backend/data/raw/a1a/003-celebi-ex.json similarity index 100% rename from backend/data/cards/a1a/003-celebi-ex.json rename to backend/data/raw/a1a/003-celebi-ex.json diff --git a/backend/data/cards/a1a/004-snivy.json b/backend/data/raw/a1a/004-snivy.json similarity index 100% rename from backend/data/cards/a1a/004-snivy.json rename to backend/data/raw/a1a/004-snivy.json diff --git a/backend/data/cards/a1a/005-servine.json b/backend/data/raw/a1a/005-servine.json similarity index 100% rename from backend/data/cards/a1a/005-servine.json rename to backend/data/raw/a1a/005-servine.json diff --git a/backend/data/cards/a1a/006-serperior.json b/backend/data/raw/a1a/006-serperior.json similarity index 100% rename from backend/data/cards/a1a/006-serperior.json rename to backend/data/raw/a1a/006-serperior.json diff --git a/backend/data/cards/a1a/007-morelull.json b/backend/data/raw/a1a/007-morelull.json similarity index 100% rename from backend/data/cards/a1a/007-morelull.json rename to backend/data/raw/a1a/007-morelull.json diff --git a/backend/data/cards/a1a/008-shiinotic.json b/backend/data/raw/a1a/008-shiinotic.json similarity index 100% rename from backend/data/cards/a1a/008-shiinotic.json rename to backend/data/raw/a1a/008-shiinotic.json diff --git a/backend/data/cards/a1a/009-dhelmise.json b/backend/data/raw/a1a/009-dhelmise.json similarity index 100% rename from backend/data/cards/a1a/009-dhelmise.json rename to backend/data/raw/a1a/009-dhelmise.json diff --git a/backend/data/cards/a1a/010-ponyta.json b/backend/data/raw/a1a/010-ponyta.json similarity index 100% rename from backend/data/cards/a1a/010-ponyta.json rename to backend/data/raw/a1a/010-ponyta.json diff --git a/backend/data/cards/a1a/011-rapidash.json b/backend/data/raw/a1a/011-rapidash.json similarity index 100% rename from backend/data/cards/a1a/011-rapidash.json rename to backend/data/raw/a1a/011-rapidash.json diff --git a/backend/data/cards/a1a/012-magmar.json b/backend/data/raw/a1a/012-magmar.json similarity index 100% rename from backend/data/cards/a1a/012-magmar.json rename to backend/data/raw/a1a/012-magmar.json diff --git a/backend/data/cards/a1a/013-larvesta.json b/backend/data/raw/a1a/013-larvesta.json similarity index 100% rename from backend/data/cards/a1a/013-larvesta.json rename to backend/data/raw/a1a/013-larvesta.json diff --git a/backend/data/cards/a1a/014-volcarona.json b/backend/data/raw/a1a/014-volcarona.json similarity index 100% rename from backend/data/cards/a1a/014-volcarona.json rename to backend/data/raw/a1a/014-volcarona.json diff --git a/backend/data/cards/a1a/015-salandit.json b/backend/data/raw/a1a/015-salandit.json similarity index 100% rename from backend/data/cards/a1a/015-salandit.json rename to backend/data/raw/a1a/015-salandit.json diff --git a/backend/data/cards/a1a/016-salazzle.json b/backend/data/raw/a1a/016-salazzle.json similarity index 100% rename from backend/data/cards/a1a/016-salazzle.json rename to backend/data/raw/a1a/016-salazzle.json diff --git a/backend/data/cards/a1a/017-magikarp.json b/backend/data/raw/a1a/017-magikarp.json similarity index 100% rename from backend/data/cards/a1a/017-magikarp.json rename to backend/data/raw/a1a/017-magikarp.json diff --git a/backend/data/cards/a1a/018-gyarados-ex.json b/backend/data/raw/a1a/018-gyarados-ex.json similarity index 100% rename from backend/data/cards/a1a/018-gyarados-ex.json rename to backend/data/raw/a1a/018-gyarados-ex.json diff --git a/backend/data/cards/a1a/019-vaporeon.json b/backend/data/raw/a1a/019-vaporeon.json similarity index 100% rename from backend/data/cards/a1a/019-vaporeon.json rename to backend/data/raw/a1a/019-vaporeon.json diff --git a/backend/data/cards/a1a/020-finneon.json b/backend/data/raw/a1a/020-finneon.json similarity index 100% rename from backend/data/cards/a1a/020-finneon.json rename to backend/data/raw/a1a/020-finneon.json diff --git a/backend/data/cards/a1a/021-lumineon.json b/backend/data/raw/a1a/021-lumineon.json similarity index 100% rename from backend/data/cards/a1a/021-lumineon.json rename to backend/data/raw/a1a/021-lumineon.json diff --git a/backend/data/cards/a1a/022-chewtle.json b/backend/data/raw/a1a/022-chewtle.json similarity index 100% rename from backend/data/cards/a1a/022-chewtle.json rename to backend/data/raw/a1a/022-chewtle.json diff --git a/backend/data/cards/a1a/023-drednaw.json b/backend/data/raw/a1a/023-drednaw.json similarity index 100% rename from backend/data/cards/a1a/023-drednaw.json rename to backend/data/raw/a1a/023-drednaw.json diff --git a/backend/data/cards/a1a/024-cramorant.json b/backend/data/raw/a1a/024-cramorant.json similarity index 100% rename from backend/data/cards/a1a/024-cramorant.json rename to backend/data/raw/a1a/024-cramorant.json diff --git a/backend/data/cards/a1a/025-pikachu.json b/backend/data/raw/a1a/025-pikachu.json similarity index 100% rename from backend/data/cards/a1a/025-pikachu.json rename to backend/data/raw/a1a/025-pikachu.json diff --git a/backend/data/cards/a1a/026-raichu.json b/backend/data/raw/a1a/026-raichu.json similarity index 100% rename from backend/data/cards/a1a/026-raichu.json rename to backend/data/raw/a1a/026-raichu.json diff --git a/backend/data/cards/a1a/027-electabuzz.json b/backend/data/raw/a1a/027-electabuzz.json similarity index 100% rename from backend/data/cards/a1a/027-electabuzz.json rename to backend/data/raw/a1a/027-electabuzz.json diff --git a/backend/data/cards/a1a/028-joltik.json b/backend/data/raw/a1a/028-joltik.json similarity index 100% rename from backend/data/cards/a1a/028-joltik.json rename to backend/data/raw/a1a/028-joltik.json diff --git a/backend/data/cards/a1a/029-galvantula.json b/backend/data/raw/a1a/029-galvantula.json similarity index 100% rename from backend/data/cards/a1a/029-galvantula.json rename to backend/data/raw/a1a/029-galvantula.json diff --git a/backend/data/cards/a1a/030-dedenne.json b/backend/data/raw/a1a/030-dedenne.json similarity index 100% rename from backend/data/cards/a1a/030-dedenne.json rename to backend/data/raw/a1a/030-dedenne.json diff --git a/backend/data/cards/a1a/031-mew.json b/backend/data/raw/a1a/031-mew.json similarity index 100% rename from backend/data/cards/a1a/031-mew.json rename to backend/data/raw/a1a/031-mew.json diff --git a/backend/data/cards/a1a/032-mew-ex.json b/backend/data/raw/a1a/032-mew-ex.json similarity index 100% rename from backend/data/cards/a1a/032-mew-ex.json rename to backend/data/raw/a1a/032-mew-ex.json diff --git a/backend/data/cards/a1a/033-sigilyph.json b/backend/data/raw/a1a/033-sigilyph.json similarity index 100% rename from backend/data/cards/a1a/033-sigilyph.json rename to backend/data/raw/a1a/033-sigilyph.json diff --git a/backend/data/cards/a1a/034-elgyem.json b/backend/data/raw/a1a/034-elgyem.json similarity index 100% rename from backend/data/cards/a1a/034-elgyem.json rename to backend/data/raw/a1a/034-elgyem.json diff --git a/backend/data/cards/a1a/035-beheeyem.json b/backend/data/raw/a1a/035-beheeyem.json similarity index 100% rename from backend/data/cards/a1a/035-beheeyem.json rename to backend/data/raw/a1a/035-beheeyem.json diff --git a/backend/data/cards/a1a/036-flabebe.json b/backend/data/raw/a1a/036-flabebe.json similarity index 100% rename from backend/data/cards/a1a/036-flabebe.json rename to backend/data/raw/a1a/036-flabebe.json diff --git a/backend/data/cards/a1a/037-floette.json b/backend/data/raw/a1a/037-floette.json similarity index 100% rename from backend/data/cards/a1a/037-floette.json rename to backend/data/raw/a1a/037-floette.json diff --git a/backend/data/cards/a1a/038-florges.json b/backend/data/raw/a1a/038-florges.json similarity index 100% rename from backend/data/cards/a1a/038-florges.json rename to backend/data/raw/a1a/038-florges.json diff --git a/backend/data/cards/a1a/039-swirlix.json b/backend/data/raw/a1a/039-swirlix.json similarity index 100% rename from backend/data/cards/a1a/039-swirlix.json rename to backend/data/raw/a1a/039-swirlix.json diff --git a/backend/data/cards/a1a/040-slurpuff.json b/backend/data/raw/a1a/040-slurpuff.json similarity index 100% rename from backend/data/cards/a1a/040-slurpuff.json rename to backend/data/raw/a1a/040-slurpuff.json diff --git a/backend/data/cards/a1a/041-mankey.json b/backend/data/raw/a1a/041-mankey.json similarity index 100% rename from backend/data/cards/a1a/041-mankey.json rename to backend/data/raw/a1a/041-mankey.json diff --git a/backend/data/cards/a1a/042-primeape.json b/backend/data/raw/a1a/042-primeape.json similarity index 100% rename from backend/data/cards/a1a/042-primeape.json rename to backend/data/raw/a1a/042-primeape.json diff --git a/backend/data/cards/a1a/043-geodude.json b/backend/data/raw/a1a/043-geodude.json similarity index 100% rename from backend/data/cards/a1a/043-geodude.json rename to backend/data/raw/a1a/043-geodude.json diff --git a/backend/data/cards/a1a/044-graveler.json b/backend/data/raw/a1a/044-graveler.json similarity index 100% rename from backend/data/cards/a1a/044-graveler.json rename to backend/data/raw/a1a/044-graveler.json diff --git a/backend/data/cards/a1a/045-golem.json b/backend/data/raw/a1a/045-golem.json similarity index 100% rename from backend/data/cards/a1a/045-golem.json rename to backend/data/raw/a1a/045-golem.json diff --git a/backend/data/cards/a1a/046-aerodactyl-ex.json b/backend/data/raw/a1a/046-aerodactyl-ex.json similarity index 100% rename from backend/data/cards/a1a/046-aerodactyl-ex.json rename to backend/data/raw/a1a/046-aerodactyl-ex.json diff --git a/backend/data/cards/a1a/047-marshadow.json b/backend/data/raw/a1a/047-marshadow.json similarity index 100% rename from backend/data/cards/a1a/047-marshadow.json rename to backend/data/raw/a1a/047-marshadow.json diff --git a/backend/data/cards/a1a/048-stonjourner.json b/backend/data/raw/a1a/048-stonjourner.json similarity index 100% rename from backend/data/cards/a1a/048-stonjourner.json rename to backend/data/raw/a1a/048-stonjourner.json diff --git a/backend/data/cards/a1a/049-koffing.json b/backend/data/raw/a1a/049-koffing.json similarity index 100% rename from backend/data/cards/a1a/049-koffing.json rename to backend/data/raw/a1a/049-koffing.json diff --git a/backend/data/cards/a1a/050-weezing.json b/backend/data/raw/a1a/050-weezing.json similarity index 100% rename from backend/data/cards/a1a/050-weezing.json rename to backend/data/raw/a1a/050-weezing.json diff --git a/backend/data/cards/a1a/051-purrloin.json b/backend/data/raw/a1a/051-purrloin.json similarity index 100% rename from backend/data/cards/a1a/051-purrloin.json rename to backend/data/raw/a1a/051-purrloin.json diff --git a/backend/data/cards/a1a/052-liepard.json b/backend/data/raw/a1a/052-liepard.json similarity index 100% rename from backend/data/cards/a1a/052-liepard.json rename to backend/data/raw/a1a/052-liepard.json diff --git a/backend/data/cards/a1a/053-venipede.json b/backend/data/raw/a1a/053-venipede.json similarity index 100% rename from backend/data/cards/a1a/053-venipede.json rename to backend/data/raw/a1a/053-venipede.json diff --git a/backend/data/cards/a1a/054-whirlipede.json b/backend/data/raw/a1a/054-whirlipede.json similarity index 100% rename from backend/data/cards/a1a/054-whirlipede.json rename to backend/data/raw/a1a/054-whirlipede.json diff --git a/backend/data/cards/a1a/055-scolipede.json b/backend/data/raw/a1a/055-scolipede.json similarity index 100% rename from backend/data/cards/a1a/055-scolipede.json rename to backend/data/raw/a1a/055-scolipede.json diff --git a/backend/data/cards/a1a/056-druddigon.json b/backend/data/raw/a1a/056-druddigon.json similarity index 100% rename from backend/data/cards/a1a/056-druddigon.json rename to backend/data/raw/a1a/056-druddigon.json diff --git a/backend/data/cards/a1a/057-pidgey.json b/backend/data/raw/a1a/057-pidgey.json similarity index 100% rename from backend/data/cards/a1a/057-pidgey.json rename to backend/data/raw/a1a/057-pidgey.json diff --git a/backend/data/cards/a1a/058-pidgeotto.json b/backend/data/raw/a1a/058-pidgeotto.json similarity index 100% rename from backend/data/cards/a1a/058-pidgeotto.json rename to backend/data/raw/a1a/058-pidgeotto.json diff --git a/backend/data/cards/a1a/059-pidgeot-ex.json b/backend/data/raw/a1a/059-pidgeot-ex.json similarity index 100% rename from backend/data/cards/a1a/059-pidgeot-ex.json rename to backend/data/raw/a1a/059-pidgeot-ex.json diff --git a/backend/data/cards/a1a/060-tauros.json b/backend/data/raw/a1a/060-tauros.json similarity index 100% rename from backend/data/cards/a1a/060-tauros.json rename to backend/data/raw/a1a/060-tauros.json diff --git a/backend/data/cards/a1a/061-eevee.json b/backend/data/raw/a1a/061-eevee.json similarity index 100% rename from backend/data/cards/a1a/061-eevee.json rename to backend/data/raw/a1a/061-eevee.json diff --git a/backend/data/cards/a1a/062-chatot.json b/backend/data/raw/a1a/062-chatot.json similarity index 100% rename from backend/data/cards/a1a/062-chatot.json rename to backend/data/raw/a1a/062-chatot.json diff --git a/backend/data/cards/a1a/063-old-amber.json b/backend/data/raw/a1a/063-old-amber.json similarity index 100% rename from backend/data/cards/a1a/063-old-amber.json rename to backend/data/raw/a1a/063-old-amber.json diff --git a/backend/data/cards/a1a/064-pokemon-flute.json b/backend/data/raw/a1a/064-pokemon-flute.json similarity index 100% rename from backend/data/cards/a1a/064-pokemon-flute.json rename to backend/data/raw/a1a/064-pokemon-flute.json diff --git a/backend/data/cards/a1a/065-mythical-slab.json b/backend/data/raw/a1a/065-mythical-slab.json similarity index 100% rename from backend/data/cards/a1a/065-mythical-slab.json rename to backend/data/raw/a1a/065-mythical-slab.json diff --git a/backend/data/cards/a1a/066-budding-expeditioner.json b/backend/data/raw/a1a/066-budding-expeditioner.json similarity index 100% rename from backend/data/cards/a1a/066-budding-expeditioner.json rename to backend/data/raw/a1a/066-budding-expeditioner.json diff --git a/backend/data/cards/a1a/067-blue.json b/backend/data/raw/a1a/067-blue.json similarity index 100% rename from backend/data/cards/a1a/067-blue.json rename to backend/data/raw/a1a/067-blue.json diff --git a/backend/data/cards/a1a/068-leaf.json b/backend/data/raw/a1a/068-leaf.json similarity index 100% rename from backend/data/cards/a1a/068-leaf.json rename to backend/data/raw/a1a/068-leaf.json diff --git a/backend/data/cards/a1a/069-exeggutor.json b/backend/data/raw/a1a/069-exeggutor.json similarity index 100% rename from backend/data/cards/a1a/069-exeggutor.json rename to backend/data/raw/a1a/069-exeggutor.json diff --git a/backend/data/cards/a1a/070-serperior.json b/backend/data/raw/a1a/070-serperior.json similarity index 100% rename from backend/data/cards/a1a/070-serperior.json rename to backend/data/raw/a1a/070-serperior.json diff --git a/backend/data/cards/a1a/071-salandit.json b/backend/data/raw/a1a/071-salandit.json similarity index 100% rename from backend/data/cards/a1a/071-salandit.json rename to backend/data/raw/a1a/071-salandit.json diff --git a/backend/data/cards/a1a/072-vaporeon.json b/backend/data/raw/a1a/072-vaporeon.json similarity index 100% rename from backend/data/cards/a1a/072-vaporeon.json rename to backend/data/raw/a1a/072-vaporeon.json diff --git a/backend/data/cards/a1a/073-dedenne.json b/backend/data/raw/a1a/073-dedenne.json similarity index 100% rename from backend/data/cards/a1a/073-dedenne.json rename to backend/data/raw/a1a/073-dedenne.json diff --git a/backend/data/cards/a1a/074-marshadow.json b/backend/data/raw/a1a/074-marshadow.json similarity index 100% rename from backend/data/cards/a1a/074-marshadow.json rename to backend/data/raw/a1a/074-marshadow.json diff --git a/backend/data/cards/a1a/075-celebi-ex.json b/backend/data/raw/a1a/075-celebi-ex.json similarity index 100% rename from backend/data/cards/a1a/075-celebi-ex.json rename to backend/data/raw/a1a/075-celebi-ex.json diff --git a/backend/data/cards/a1a/076-gyarados-ex.json b/backend/data/raw/a1a/076-gyarados-ex.json similarity index 100% rename from backend/data/cards/a1a/076-gyarados-ex.json rename to backend/data/raw/a1a/076-gyarados-ex.json diff --git a/backend/data/cards/a1a/077-mew-ex.json b/backend/data/raw/a1a/077-mew-ex.json similarity index 100% rename from backend/data/cards/a1a/077-mew-ex.json rename to backend/data/raw/a1a/077-mew-ex.json diff --git a/backend/data/cards/a1a/078-aerodactyl-ex.json b/backend/data/raw/a1a/078-aerodactyl-ex.json similarity index 100% rename from backend/data/cards/a1a/078-aerodactyl-ex.json rename to backend/data/raw/a1a/078-aerodactyl-ex.json diff --git a/backend/data/cards/a1a/079-pidgeot-ex.json b/backend/data/raw/a1a/079-pidgeot-ex.json similarity index 100% rename from backend/data/cards/a1a/079-pidgeot-ex.json rename to backend/data/raw/a1a/079-pidgeot-ex.json diff --git a/backend/data/cards/a1a/080-budding-expeditioner.json b/backend/data/raw/a1a/080-budding-expeditioner.json similarity index 100% rename from backend/data/cards/a1a/080-budding-expeditioner.json rename to backend/data/raw/a1a/080-budding-expeditioner.json diff --git a/backend/data/cards/a1a/081-blue.json b/backend/data/raw/a1a/081-blue.json similarity index 100% rename from backend/data/cards/a1a/081-blue.json rename to backend/data/raw/a1a/081-blue.json diff --git a/backend/data/cards/a1a/082-leaf.json b/backend/data/raw/a1a/082-leaf.json similarity index 100% rename from backend/data/cards/a1a/082-leaf.json rename to backend/data/raw/a1a/082-leaf.json diff --git a/backend/data/cards/a1a/083-mew-ex.json b/backend/data/raw/a1a/083-mew-ex.json similarity index 100% rename from backend/data/cards/a1a/083-mew-ex.json rename to backend/data/raw/a1a/083-mew-ex.json diff --git a/backend/data/cards/a1a/084-aerodactyl-ex.json b/backend/data/raw/a1a/084-aerodactyl-ex.json similarity index 100% rename from backend/data/cards/a1a/084-aerodactyl-ex.json rename to backend/data/raw/a1a/084-aerodactyl-ex.json diff --git a/backend/data/cards/a1a/085-celebi-ex.json b/backend/data/raw/a1a/085-celebi-ex.json similarity index 100% rename from backend/data/cards/a1a/085-celebi-ex.json rename to backend/data/raw/a1a/085-celebi-ex.json diff --git a/backend/data/cards/a1a/086-mew-ex.json b/backend/data/raw/a1a/086-mew-ex.json similarity index 100% rename from backend/data/cards/a1a/086-mew-ex.json rename to backend/data/raw/a1a/086-mew-ex.json diff --git a/backend/scripts/convert_cards.py b/backend/scripts/convert_cards.py new file mode 100644 index 0000000..7ee6d1e --- /dev/null +++ b/backend/scripts/convert_cards.py @@ -0,0 +1,616 @@ +#!/usr/bin/env python3 +"""Convert raw scraped card data to CardDefinition-compatible JSON. + +This script transforms card data from data/raw/ (scraped from pokemon-zone.com) +into the CardDefinition format expected by the game engine, writing output to +data/definitions/. + +Usage: + python scripts/convert_cards.py # Convert all cards + python scripts/convert_cards.py --set a1 # Convert one set only + python scripts/convert_cards.py --validate-only # Validate without writing + python scripts/convert_cards.py --verbose # Show detailed progress + +The script also generates basic energy card definitions. +""" + +from __future__ import annotations + +import argparse +import json +import sys +from datetime import UTC, datetime +from pathlib import Path +from typing import Any + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from app.core.enums import CardType, PokemonVariant +from app.core.models.card import CardDefinition + +# TODO: Update CDN_BASE_URL when CDN is configured +CDN_BASE_URL = "https://cdn.mantimon.com/cards" + +# Paths +SCRIPT_DIR = Path(__file__).parent +BACKEND_DIR = SCRIPT_DIR.parent +RAW_DATA_DIR = BACKEND_DIR / "data" / "raw" +DEFINITIONS_DIR = BACKEND_DIR / "data" / "definitions" + +# Basic energy types to generate +ENERGY_TYPES = [ + ("colorless", "Colorless Energy"), + ("darkness", "Darkness Energy"), + ("dragon", "Dragon Energy"), + ("fighting", "Fighting Energy"), + ("fire", "Fire Energy"), + ("grass", "Grass Energy"), + ("lightning", "Lightning Energy"), + ("metal", "Metal Energy"), + ("psychic", "Psychic Energy"), + ("water", "Water Energy"), +] + +# Set metadata (from raw index) +SET_METADATA: dict[str, dict[str, Any]] = {} + + +def load_raw_index() -> dict[str, Any]: + """Load the raw data index file. + + Returns: + Index data containing set information and card listing. + """ + index_path = RAW_DATA_DIR / "_index.json" + if not index_path.exists(): + raise FileNotFoundError(f"Raw index not found: {index_path}") + + with open(index_path) as f: + return json.load(f) + + +def transform_attack(raw_attack: dict[str, Any]) -> dict[str, Any]: + """Transform a raw attack to CardDefinition Attack format. + + Args: + raw_attack: Attack data from scraped JSON. + + Returns: + Attack data compatible with the Attack model. + """ + damage = raw_attack.get("damage") or 0 + damage_modifier = raw_attack.get("damage_modifier") + + # Build damage_display string + damage_display = None + if damage > 0: + if damage_modifier: + damage_display = f"{damage}{damage_modifier}" + else: + damage_display = str(damage) + elif damage_modifier: + # Edge case: modifier but no base damage (e.g., "x" for coin flip damage) + damage_display = f"0{damage_modifier}" + + # Build effect_params + effect_params: dict[str, Any] = {} + if damage_modifier: + effect_params["damage_modifier"] = damage_modifier + + attack = { + "name": raw_attack["name"], + "cost": raw_attack.get("cost", []), + "damage": damage, + } + + if damage_display: + attack["damage_display"] = damage_display + + if raw_attack.get("effect_text"): + attack["effect_description"] = raw_attack["effect_text"] + + if raw_attack.get("effect_id"): + attack["effect_id"] = raw_attack["effect_id"] + + if effect_params: + attack["effect_params"] = effect_params + + return attack + + +def transform_weakness_resistance(raw_wr: dict[str, Any] | None) -> dict[str, Any] | None: + """Transform weakness/resistance to CardDefinition format. + + Args: + raw_wr: Weakness or resistance data with 'type' and 'value' keys. + + Returns: + WeaknessResistance-compatible dict or None. + """ + if raw_wr is None: + return None + + return { + "energy_type": raw_wr["type"], + "value": raw_wr.get("value"), + } + + +def transform_ability(raw_ability: dict[str, Any]) -> dict[str, Any]: + """Transform a raw ability to CardDefinition Ability format. + + Args: + raw_ability: Ability data from scraped JSON. + + Returns: + Ability data compatible with the Ability model. + """ + ability = { + "name": raw_ability["name"], + "effect_id": raw_ability.get("effect_id") or "unimplemented", + } + + if raw_ability.get("effect_text"): + ability["effect_description"] = raw_ability["effect_text"] + + if raw_ability.get("effect_params"): + ability["effect_params"] = raw_ability["effect_params"] + + return ability + + +def determine_variant(raw_card: dict[str, Any]) -> str: + """Determine the Pokemon variant from raw card data. + + Args: + raw_card: Raw card data. + + Returns: + Variant string (e.g., "normal", "ex"). + """ + if raw_card.get("is_ex"): + return PokemonVariant.EX.value + + # Could add more variant detection here (V, VMAX, etc.) + # based on card name patterns if needed + + return PokemonVariant.NORMAL.value + + +def get_image_url(image_path: str | None) -> str | None: + """Generate CDN URL from image path. + + Args: + image_path: Local image path (e.g., "pokemon/a1/001-bulbasaur.webp"). + + Returns: + Full CDN URL or None if no path. + """ + if not image_path: + return None + return f"{CDN_BASE_URL}/{image_path}" + + +def transform_pokemon_card(raw_card: dict[str, Any]) -> dict[str, Any]: + """Transform a raw Pokemon card to CardDefinition format. + + Args: + raw_card: Raw card data from scraped JSON. + + Returns: + CardDefinition-compatible dict for a Pokemon card. + """ + set_code = raw_card.get("set_code", "") + + # Build image path: pokemon/{set_code}/{filename}.webp + raw_image_file = raw_card.get("image_file") + if raw_image_file: + # raw_image_file is like "a1/001-bulbasaur.webp" + # We want: "pokemon/a1/001-bulbasaur.webp" + image_path = f"pokemon/{raw_image_file}" + else: + image_path = None + + card: dict[str, Any] = { + "id": raw_card["id"], + "name": raw_card["name"], + "card_type": CardType.POKEMON.value, + "hp": raw_card["hp"], + "pokemon_type": raw_card["pokemon_type"], + "stage": raw_card["stage"], + "variant": determine_variant(raw_card), + "retreat_cost": raw_card.get("retreat_cost", 0), + "set_id": set_code, + "rarity": (raw_card.get("rarity") or "common").lower(), + } + + # Optional fields + if raw_card.get("evolves_from"): + card["evolves_from"] = raw_card["evolves_from"] + + # Transform attacks + if raw_card.get("attacks"): + card["attacks"] = [transform_attack(a) for a in raw_card["attacks"]] + + # Transform abilities + if raw_card.get("abilities"): + card["abilities"] = [transform_ability(a) for a in raw_card["abilities"]] + + # Transform weakness/resistance + if raw_card.get("weakness"): + card["weakness"] = transform_weakness_resistance(raw_card["weakness"]) + + if raw_card.get("resistance"): + card["resistance"] = transform_weakness_resistance(raw_card["resistance"]) + + # Metadata + if raw_card.get("illustrator"): + card["illustrator"] = raw_card["illustrator"] + + if raw_card.get("flavor_text"): + card["flavor_text"] = raw_card["flavor_text"] + + if image_path: + card["image_path"] = image_path + card["image_url"] = get_image_url(image_path) + + return card + + +def transform_trainer_card(raw_card: dict[str, Any]) -> dict[str, Any]: + """Transform a raw Trainer card to CardDefinition format. + + Args: + raw_card: Raw card data from scraped JSON. + + Returns: + CardDefinition-compatible dict for a Trainer card. + """ + set_code = raw_card.get("set_code", "") + + # Build image path + raw_image_file = raw_card.get("image_file") + if raw_image_file: + image_path = f"trainer/{raw_image_file}" + else: + image_path = None + + card: dict[str, Any] = { + "id": raw_card["id"], + "name": raw_card["name"], + "card_type": CardType.TRAINER.value, + "trainer_type": raw_card.get("trainer_type", "item"), + "set_id": set_code, + "rarity": (raw_card.get("rarity") or "common").lower(), + } + + # Effect description + if raw_card.get("effect_text"): + card["effect_description"] = raw_card["effect_text"] + + if raw_card.get("effect_id"): + card["effect_id"] = raw_card["effect_id"] + + # Metadata + if raw_card.get("illustrator"): + card["illustrator"] = raw_card["illustrator"] + + if image_path: + card["image_path"] = image_path + card["image_url"] = get_image_url(image_path) + + return card + + +def transform_card(raw_card: dict[str, Any]) -> dict[str, Any]: + """Transform a raw card to CardDefinition format. + + Dispatches to the appropriate transformer based on card_type. + + Args: + raw_card: Raw card data from scraped JSON. + + Returns: + CardDefinition-compatible dict. + + Raises: + ValueError: If card type is unsupported. + """ + card_type = raw_card.get("card_type", "").lower() + + if card_type == "pokemon": + return transform_pokemon_card(raw_card) + elif card_type == "trainer": + return transform_trainer_card(raw_card) + else: + raise ValueError(f"Unsupported card type: {card_type}") + + +def validate_card(card_dict: dict[str, Any]) -> CardDefinition: + """Validate a card dict against the CardDefinition model. + + Args: + card_dict: Card data to validate. + + Returns: + Validated CardDefinition. + + Raises: + ValueError: If validation fails. + """ + return CardDefinition.model_validate(card_dict) + + +def generate_energy_cards() -> list[dict[str, Any]]: + """Generate basic energy card definitions. + + Returns: + List of CardDefinition-compatible dicts for basic energy. + """ + cards = [] + + for energy_type, display_name in ENERGY_TYPES: + card_id = f"energy-basic-{energy_type}" + image_path = f"energy/basic/{energy_type}.webp" + + card = { + "id": card_id, + "name": display_name, + "card_type": CardType.ENERGY.value, + "energy_type": energy_type, + "energy_provides": [energy_type], + "rarity": "common", + "set_id": "basic", + "image_path": image_path, + "image_url": get_image_url(image_path), + } + + cards.append(card) + + return cards + + +def write_card_file(card: dict[str, Any], output_path: Path) -> None: + """Write a card definition to a JSON file. + + Args: + card: Card definition dict. + output_path: Path to write the JSON file. + """ + output_path.parent.mkdir(parents=True, exist_ok=True) + with open(output_path, "w") as f: + json.dump(card, f, indent=2) + + +def build_index( + all_cards: list[dict[str, Any]], + set_metadata: dict[str, dict[str, Any]], +) -> dict[str, Any]: + """Build the master index file. + + Args: + all_cards: List of all card definitions. + set_metadata: Metadata about each set. + + Returns: + Index data structure. + """ + # Count cards by set and type + sets: dict[str, dict[str, Any]] = {} + + for set_code, meta in set_metadata.items(): + sets[set_code] = { + "name": meta.get("name", set_code), + "card_count": 0, + "pokemon_count": 0, + "trainer_count": 0, + } + + # Add basic energy "set" + sets["basic"] = { + "name": "Basic Energy", + "card_count": 0, + "pokemon_count": 0, + "trainer_count": 0, + "energy_count": 0, + } + + # Count cards + for card in all_cards: + set_id = card.get("set_id", "") + if set_id not in sets: + sets[set_id] = { + "name": set_id, + "card_count": 0, + "pokemon_count": 0, + "trainer_count": 0, + } + + sets[set_id]["card_count"] += 1 + + card_type = card.get("card_type", "") + if card_type == "pokemon": + sets[set_id]["pokemon_count"] = sets[set_id].get("pokemon_count", 0) + 1 + elif card_type == "trainer": + sets[set_id]["trainer_count"] = sets[set_id].get("trainer_count", 0) + 1 + elif card_type == "energy": + sets[set_id]["energy_count"] = sets[set_id].get("energy_count", 0) + 1 + + # Build card listing + cards = [ + { + "id": card["id"], + "name": card["name"], + "card_type": card["card_type"], + "set_id": card.get("set_id", ""), + } + for card in all_cards + ] + + return { + "generated_at": datetime.now(UTC).isoformat(), + "schema_version": "1.0", + "total_cards": len(all_cards), + "sets": sets, + "cards": cards, + } + + +def convert_set( + set_code: str, + validate_only: bool = False, + verbose: bool = False, +) -> list[dict[str, Any]]: + """Convert all cards from a single set. + + Args: + set_code: Set code (e.g., "a1"). + validate_only: If True, validate but don't write files. + verbose: If True, print detailed progress. + + Returns: + List of converted card definitions. + """ + raw_set_dir = RAW_DATA_DIR / set_code + if not raw_set_dir.exists(): + print(f"Warning: Raw data directory not found: {raw_set_dir}") + return [] + + converted = [] + errors = [] + + for card_file in sorted(raw_set_dir.glob("*.json")): + try: + with open(card_file) as f: + raw_card = json.load(f) + + # Transform the card + card_dict = transform_card(raw_card) + + # Validate against model + validate_card(card_dict) + + if verbose: + print(f" Converted: {card_dict['id']} ({card_dict['name']})") + + if not validate_only: + # Determine output path based on card type + card_type = card_dict["card_type"] + output_path = DEFINITIONS_DIR / card_type / set_code / f"{card_file.stem}.json" + write_card_file(card_dict, output_path) + + converted.append(card_dict) + + except Exception as e: + errors.append((card_file.name, str(e))) + print(f" ERROR: {card_file.name}: {e}") + + if errors: + print(f" {len(errors)} errors in set {set_code}") + + return converted + + +def main() -> int: + """Main entry point for the converter script. + + Returns: + Exit code (0 for success, 1 for errors). + """ + parser = argparse.ArgumentParser( + description="Convert raw scraped card data to CardDefinition format." + ) + parser.add_argument( + "--set", + type=str, + help="Convert only a specific set (e.g., 'a1')", + ) + parser.add_argument( + "--validate-only", + action="store_true", + help="Validate cards without writing files", + ) + parser.add_argument( + "--verbose", + "-v", + action="store_true", + help="Show detailed progress", + ) + + args = parser.parse_args() + + print("Card Definition Converter") + print("=" * 40) + + # Load raw index + try: + raw_index = load_raw_index() + except FileNotFoundError as e: + print(f"Error: {e}") + return 1 + + # Get set metadata + global SET_METADATA + SET_METADATA = raw_index.get("sets", {}) + + # Determine which sets to convert + if args.set: + sets_to_convert = [args.set] + else: + sets_to_convert = list(SET_METADATA.keys()) + + all_cards: list[dict[str, Any]] = [] + + # Convert each set + for set_code in sets_to_convert: + set_name = SET_METADATA.get(set_code, {}).get("name", set_code) + print(f"\nConverting set: {set_code} ({set_name})") + + cards = convert_set( + set_code, + validate_only=args.validate_only, + verbose=args.verbose, + ) + all_cards.extend(cards) + print(f" Converted {len(cards)} cards") + + # Generate energy cards + print("\nGenerating basic energy cards...") + energy_cards = generate_energy_cards() + + for card in energy_cards: + # Validate + validate_card(card) + + if args.verbose: + print(f" Generated: {card['id']} ({card['name']})") + + if not args.validate_only: + output_path = DEFINITIONS_DIR / "energy" / "basic" / f"{card['id']}.json" + write_card_file(card, output_path) + + all_cards.extend(energy_cards) + print(f" Generated {len(energy_cards)} energy cards") + + # Write index file + if not args.validate_only: + print("\nWriting index file...") + index = build_index(all_cards, SET_METADATA) + index_path = DEFINITIONS_DIR / "_index.json" + with open(index_path, "w") as f: + json.dump(index, f, indent=2) + print(f" Wrote {index_path}") + + # Summary + print("\n" + "=" * 40) + print(f"Total cards converted: {len(all_cards)}") + + if args.validate_only: + print("(Validation only - no files written)") + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/backend/scripts/scrape_pokemon_pocket.py b/backend/scripts/scrape_pokemon_pocket.py index 286aff4..22c8f52 100644 --- a/backend/scripts/scrape_pokemon_pocket.py +++ b/backend/scripts/scrape_pokemon_pocket.py @@ -18,9 +18,9 @@ Usage: uv run python scripts/scrape_pokemon_pocket.py --reindex Output: - - Individual card files: data/cards/{set}/{number}-{name}.json - - Combined index: data/cards/_index.json - - Error log: data/cards/_errors.log + - Individual card files: data/raw/{set}/{number}-{name}.json + - Combined index: data/raw/_index.json + - Error log: data/raw/_errors.log """ import argparse @@ -42,7 +42,7 @@ from bs4 import BeautifulSoup, Tag # ============================================================================= BASE_URL = "https://www.pokemon-zone.com" -DATA_DIR = Path(__file__).parent.parent / "data" / "cards" +DATA_DIR = Path(__file__).parent.parent / "data" / "raw" IMAGES_DIR = Path(__file__).parent.parent / "data" / "images" REQUEST_DELAY = 1.5 # seconds between requests IMAGE_REQUEST_DELAY = 0.5 # faster for images (different server) diff --git a/backend/tests/scripts/__init__.py b/backend/tests/scripts/__init__.py new file mode 100644 index 0000000..f2b91c9 --- /dev/null +++ b/backend/tests/scripts/__init__.py @@ -0,0 +1 @@ +"""Tests for utility scripts.""" diff --git a/backend/tests/scripts/test_convert_cards.py b/backend/tests/scripts/test_convert_cards.py new file mode 100644 index 0000000..1c2d526 --- /dev/null +++ b/backend/tests/scripts/test_convert_cards.py @@ -0,0 +1,486 @@ +"""Tests for the card conversion script. + +These tests verify the transformation logic that converts raw scraped card data +into the CardDefinition format used by the game engine. +""" + +import sys +from pathlib import Path + +import pytest + +# Add scripts directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent.parent / "scripts")) + +from convert_cards import ( + generate_energy_cards, + transform_attack, + transform_card, + transform_pokemon_card, + transform_trainer_card, + transform_weakness_resistance, + validate_card, +) + + +class TestTransformAttack: + """Tests for the transform_attack function.""" + + def test_basic_attack_with_damage(self): + """Test transforming a simple attack with base damage only. + + Verifies that an attack with just damage and no modifier + produces a damage_display of just the number. + """ + raw_attack = { + "name": "Tackle", + "cost": ["colorless"], + "damage": 20, + "damage_modifier": None, + "effect_text": None, + "effect_id": None, + } + + result = transform_attack(raw_attack) + + assert result["name"] == "Tackle" + assert result["cost"] == ["colorless"] + assert result["damage"] == 20 + assert result["damage_display"] == "20" + assert "effect_description" not in result + assert "effect_params" not in result + + def test_attack_with_plus_modifier(self): + """Test transforming an attack with '+' damage modifier. + + Attacks like '50+' deal base damage plus additional damage + based on some condition (e.g., coin flips). + """ + raw_attack = { + "name": "Double Horn", + "cost": ["grass", "grass"], + "damage": 50, + "damage_modifier": "+", + "effect_text": "Flip 2 coins. This attack does 50 damage for each heads.", + "effect_id": None, + } + + result = transform_attack(raw_attack) + + assert result["damage"] == 50 + assert result["damage_display"] == "50+" + assert result["effect_params"]["damage_modifier"] == "+" + assert "Flip 2 coins" in result["effect_description"] + + def test_attack_with_x_modifier(self): + """Test transforming an attack with 'x' damage modifier. + + Attacks like '50x' deal damage multiplied by some factor + (e.g., number of coin flip heads). + """ + raw_attack = { + "name": "Psychic", + "cost": ["psychic", "colorless"], + "damage": 20, + "damage_modifier": "x", + "effect_text": "Does 20 damage times the number of Energy attached to your opponent's Active Pokemon.", + "effect_id": None, + } + + result = transform_attack(raw_attack) + + assert result["damage"] == 20 + assert result["damage_display"] == "20x" + assert result["effect_params"]["damage_modifier"] == "x" + + def test_attack_no_damage_effect_only(self): + """Test transforming an attack that deals no damage. + + Some attacks only have effects (like status conditions) + and don't deal direct damage. + """ + raw_attack = { + "name": "Confuse Ray", + "cost": ["psychic"], + "damage": 0, + "damage_modifier": None, + "effect_text": "The Defending Pokemon is now Confused.", + "effect_id": None, + } + + result = transform_attack(raw_attack) + + assert result["damage"] == 0 + assert "damage_display" not in result # No display for 0 damage + assert result["effect_description"] == "The Defending Pokemon is now Confused." + + def test_attack_with_effect_id(self): + """Test that existing effect_id is preserved. + + Some scraped cards may already have effect IDs mapped. + """ + raw_attack = { + "name": "Thunder Shock", + "cost": ["lightning"], + "damage": 20, + "damage_modifier": None, + "effect_text": "Flip a coin. If heads, the Defending Pokemon is now Paralyzed.", + "effect_id": "may_paralyze", + } + + result = transform_attack(raw_attack) + + assert result["effect_id"] == "may_paralyze" + + +class TestTransformWeaknessResistance: + """Tests for the transform_weakness_resistance function.""" + + def test_transform_weakness(self): + """Test transforming a typical weakness. + + Weaknesses have a type and a value (damage modifier). + """ + raw_weakness = {"type": "fire", "value": 20} + + result = transform_weakness_resistance(raw_weakness) + + assert result["energy_type"] == "fire" + assert result["value"] == 20 + + def test_transform_resistance(self): + """Test transforming a typical resistance. + + Resistances reduce damage taken from a specific type. + """ + raw_resistance = {"type": "fighting", "value": -30} + + result = transform_weakness_resistance(raw_resistance) + + assert result["energy_type"] == "fighting" + assert result["value"] == -30 + + def test_transform_none(self): + """Test that None input returns None. + + Not all Pokemon have weakness or resistance. + """ + result = transform_weakness_resistance(None) + assert result is None + + +class TestTransformPokemonCard: + """Tests for transforming Pokemon cards.""" + + def test_basic_pokemon(self): + """Test transforming a basic Pokemon card. + + Verifies all fields are correctly mapped from raw to definition format. + """ + raw_card = { + "id": "a1-001-bulbasaur", + "name": "Bulbasaur", + "set_code": "a1", + "set_name": "Genetic Apex", + "card_number": 1, + "rarity": "Common", + "card_type": "pokemon", + "image_url": "https://example.com/bulbasaur.webp", + "image_file": "a1/001-bulbasaur.webp", + "hp": 70, + "pokemon_type": "grass", + "stage": "basic", + "evolves_from": None, + "is_ex": False, + "abilities": [], + "attacks": [ + { + "name": "Vine Whip", + "cost": ["grass", "colorless"], + "damage": 40, + "damage_modifier": None, + "effect_text": None, + "effect_id": None, + } + ], + "weakness": {"type": "fire", "value": 20}, + "resistance": None, + "retreat_cost": 1, + "flavor_text": None, + "illustrator": "Narumi Sato", + } + + result = transform_pokemon_card(raw_card) + + assert result["id"] == "a1-001-bulbasaur" + assert result["name"] == "Bulbasaur" + assert result["card_type"] == "pokemon" + assert result["hp"] == 70 + assert result["pokemon_type"] == "grass" + assert result["stage"] == "basic" + assert result["variant"] == "normal" + assert result["set_id"] == "a1" + assert result["rarity"] == "common" + assert result["retreat_cost"] == 1 + assert result["weakness"]["energy_type"] == "fire" + assert len(result["attacks"]) == 1 + assert result["illustrator"] == "Narumi Sato" + assert result["image_path"] == "pokemon/a1/001-bulbasaur.webp" + assert "cdn.mantimon.com" in result["image_url"] + + def test_ex_pokemon(self): + """Test transforming an EX Pokemon card. + + EX Pokemon have is_ex=True in raw data, which maps to variant='ex'. + """ + raw_card = { + "id": "a1-004-venusaur-ex", + "name": "Venusaur ex", + "set_code": "a1", + "card_type": "pokemon", + "image_file": "a1/004-venusaur-ex.webp", + "hp": 190, + "pokemon_type": "grass", + "stage": "stage_2", + "evolves_from": "Ivysaur", + "is_ex": True, + "abilities": [], + "attacks": [], + "weakness": {"type": "fire", "value": 20}, + "resistance": None, + "retreat_cost": 3, + "rarity": "Double Rare", + "illustrator": "PLANETA CG Works", + } + + result = transform_pokemon_card(raw_card) + + assert result["variant"] == "ex" + assert result["evolves_from"] == "Ivysaur" + assert result["rarity"] == "double rare" + + def test_evolution_pokemon(self): + """Test transforming an evolution Pokemon. + + Stage 1 and Stage 2 Pokemon must have evolves_from set. + """ + raw_card = { + "id": "a1-002-ivysaur", + "name": "Ivysaur", + "set_code": "a1", + "card_type": "pokemon", + "image_file": None, + "hp": 90, + "pokemon_type": "grass", + "stage": "stage_1", + "evolves_from": "Bulbasaur", + "is_ex": False, + "abilities": [], + "attacks": [], + "weakness": {"type": "fire", "value": 20}, + "resistance": None, + "retreat_cost": 2, + "rarity": "Uncommon", + } + + result = transform_pokemon_card(raw_card) + + assert result["stage"] == "stage_1" + assert result["evolves_from"] == "Bulbasaur" + assert "image_path" not in result # No image file + + +class TestTransformTrainerCard: + """Tests for transforming Trainer cards.""" + + def test_supporter_card(self): + """Test transforming a Supporter trainer card. + + Supporters are trainer cards limited to one per turn. + """ + raw_card = { + "id": "a1-220-misty", + "name": "Misty", + "set_code": "a1", + "card_type": "trainer", + "trainer_type": "supporter", + "rarity": "Uncommon", + "effect_text": "Choose 1 of your Pokemon...", + "illustrator": "Sanosuke Sakuma", + "image_file": "a1/220-misty.webp", + } + + result = transform_trainer_card(raw_card) + + assert result["id"] == "a1-220-misty" + assert result["name"] == "Misty" + assert result["card_type"] == "trainer" + assert result["trainer_type"] == "supporter" + assert result["set_id"] == "a1" + assert result["effect_description"] == "Choose 1 of your Pokemon..." + assert result["image_path"] == "trainer/a1/220-misty.webp" + + +class TestTransformCard: + """Tests for the main transform_card dispatcher.""" + + def test_dispatches_to_pokemon(self): + """Test that Pokemon cards are routed to transform_pokemon_card.""" + raw_card = { + "id": "test-pokemon", + "name": "Test Pokemon", + "set_code": "test", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "is_ex": False, + "attacks": [], + "abilities": [], + "weakness": None, + "resistance": None, + "retreat_cost": 1, + "rarity": "Common", + } + + result = transform_card(raw_card) + + assert result["card_type"] == "pokemon" + + def test_dispatches_to_trainer(self): + """Test that Trainer cards are routed to transform_trainer_card.""" + raw_card = { + "id": "test-trainer", + "name": "Test Trainer", + "set_code": "test", + "card_type": "trainer", + "trainer_type": "item", + "rarity": "Common", + } + + result = transform_card(raw_card) + + assert result["card_type"] == "trainer" + + def test_unsupported_card_type_raises(self): + """Test that unsupported card types raise ValueError.""" + raw_card = { + "id": "test-unknown", + "card_type": "unknown", + } + + with pytest.raises(ValueError, match="Unsupported card type"): + transform_card(raw_card) + + +class TestValidateCard: + """Tests for card validation against the CardDefinition model.""" + + def test_valid_pokemon_card(self): + """Test that a valid Pokemon card passes validation.""" + card_dict = { + "id": "test-pokemon", + "name": "Test Pokemon", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "fire", + "stage": "basic", + "variant": "normal", + "set_id": "test", + "rarity": "common", + "retreat_cost": 1, + } + + result = validate_card(card_dict) + + assert result.id == "test-pokemon" + assert result.hp == 60 + + def test_valid_energy_card(self): + """Test that a valid Energy card passes validation.""" + card_dict = { + "id": "energy-basic-fire", + "name": "Fire Energy", + "card_type": "energy", + "energy_type": "fire", + "energy_provides": ["fire"], + "set_id": "basic", + "rarity": "common", + } + + result = validate_card(card_dict) + + assert result.id == "energy-basic-fire" + assert result.energy_type.value == "fire" + + def test_invalid_pokemon_missing_hp(self): + """Test that Pokemon without HP fails validation.""" + card_dict = { + "id": "invalid-pokemon", + "name": "Invalid Pokemon", + "card_type": "pokemon", + "hp": None, + "pokemon_type": "fire", + "stage": "basic", + } + + with pytest.raises(ValueError): + validate_card(card_dict) + + +class TestGenerateEnergyCards: + """Tests for basic energy card generation.""" + + def test_generates_all_energy_types(self): + """Test that all 10 basic energy types are generated. + + The game uses 10 energy types: colorless, darkness, dragon, + fighting, fire, grass, lightning, metal, psychic, water. + """ + cards = generate_energy_cards() + + assert len(cards) == 10 + + # Check all types are present + energy_types = {card["energy_type"] for card in cards} + expected_types = { + "colorless", + "darkness", + "dragon", + "fighting", + "fire", + "grass", + "lightning", + "metal", + "psychic", + "water", + } + assert energy_types == expected_types + + def test_energy_card_structure(self): + """Test that generated energy cards have correct structure. + + Each energy card should have id, name, card_type, energy_type, + energy_provides, rarity, set_id, and image paths. + """ + cards = generate_energy_cards() + grass_energy = next(c for c in cards if c["energy_type"] == "grass") + + assert grass_energy["id"] == "energy-basic-grass" + assert grass_energy["name"] == "Grass Energy" + assert grass_energy["card_type"] == "energy" + assert grass_energy["energy_provides"] == ["grass"] + assert grass_energy["rarity"] == "common" + assert grass_energy["set_id"] == "basic" + assert "energy/basic/grass.webp" in grass_energy["image_path"] + + def test_energy_cards_validate(self): + """Test that all generated energy cards pass validation. + + Each card should be valid against the CardDefinition model. + """ + cards = generate_energy_cards() + + for card in cards: + result = validate_card(card) + assert result.card_type.value == "energy" diff --git a/backend/tests/services/test_card_service.py b/backend/tests/services/test_card_service.py new file mode 100644 index 0000000..70fb6cd --- /dev/null +++ b/backend/tests/services/test_card_service.py @@ -0,0 +1,539 @@ +"""Tests for the CardService. + +These tests verify that the CardService correctly loads card definitions +from JSON files and provides efficient lookup and search operations. +""" + +import json +import tempfile +from pathlib import Path + +import pytest + +from app.core.enums import CardType, EnergyType, PokemonStage, PokemonVariant +from app.services.card_service import CardService, SetInfo + + +@pytest.fixture +def sample_pokemon_card() -> dict: + """Sample Pokemon card definition for testing.""" + return { + "id": "test-001-pikachu", + "name": "Pikachu", + "card_type": "pokemon", + "hp": 60, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "normal", + "set_id": "test", + "rarity": "common", + "retreat_cost": 1, + "attacks": [ + { + "name": "Thunder Shock", + "cost": ["lightning"], + "damage": 20, + "damage_display": "20", + } + ], + "weakness": {"energy_type": "fighting", "value": 20}, + } + + +@pytest.fixture +def sample_ex_pokemon_card() -> dict: + """Sample EX Pokemon card definition for testing.""" + return { + "id": "test-002-pikachu-ex", + "name": "Pikachu ex", + "card_type": "pokemon", + "hp": 120, + "pokemon_type": "lightning", + "stage": "basic", + "variant": "ex", + "set_id": "test", + "rarity": "double rare", + "retreat_cost": 1, + } + + +@pytest.fixture +def sample_trainer_card() -> dict: + """Sample Trainer card definition for testing.""" + return { + "id": "test-101-potion", + "name": "Potion", + "card_type": "trainer", + "trainer_type": "item", + "set_id": "test", + "rarity": "common", + "effect_description": "Heal 30 damage from 1 of your Pokemon.", + } + + +@pytest.fixture +def sample_energy_card() -> dict: + """Sample Energy card definition for testing.""" + return { + "id": "energy-basic-lightning", + "name": "Lightning Energy", + "card_type": "energy", + "energy_type": "lightning", + "energy_provides": ["lightning"], + "set_id": "basic", + "rarity": "common", + } + + +@pytest.fixture +def temp_definitions_dir( + sample_pokemon_card, + sample_ex_pokemon_card, + sample_trainer_card, + sample_energy_card, +) -> Path: + """Create a temporary definitions directory with sample cards. + + This fixture creates a complete definitions directory structure + with sample cards for testing CardService loading functionality. + """ + with tempfile.TemporaryDirectory() as tmpdir: + root = Path(tmpdir) + + # Create directory structure + (root / "pokemon" / "test").mkdir(parents=True) + (root / "trainer" / "test").mkdir(parents=True) + (root / "energy" / "basic").mkdir(parents=True) + + # Write Pokemon cards + with open(root / "pokemon" / "test" / "001-pikachu.json", "w") as f: + json.dump(sample_pokemon_card, f) + with open(root / "pokemon" / "test" / "002-pikachu-ex.json", "w") as f: + json.dump(sample_ex_pokemon_card, f) + + # Write Trainer card + with open(root / "trainer" / "test" / "101-potion.json", "w") as f: + json.dump(sample_trainer_card, f) + + # Write Energy card + with open(root / "energy" / "basic" / "lightning.json", "w") as f: + json.dump(sample_energy_card, f) + + # Write index file + index = { + "generated_at": "2026-01-27T00:00:00Z", + "schema_version": "1.0", + "total_cards": 4, + "sets": { + "test": {"name": "Test Set", "card_count": 3}, + "basic": {"name": "Basic Energy", "card_count": 1}, + }, + "cards": [], + } + with open(root / "_index.json", "w") as f: + json.dump(index, f) + + yield root + + +class TestCardServiceLoading: + """Tests for CardService loading functionality.""" + + @pytest.mark.asyncio + async def test_load_all_loads_cards(self, temp_definitions_dir): + """Test that load_all loads all cards from the definitions directory. + + Verifies that Pokemon, Trainer, and Energy cards are all loaded + from their respective subdirectories. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + assert service.card_count == 4 + assert service.is_loaded is True + + @pytest.mark.asyncio + async def test_load_all_creates_indexes(self, temp_definitions_dir): + """Test that load_all creates all required indexes. + + The service should maintain indexes by type, set, and Pokemon type + for efficient querying. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + # Check type index + pokemon = service.search(card_type=CardType.POKEMON) + assert len(pokemon) == 2 + + trainers = service.search(card_type=CardType.TRAINER) + assert len(trainers) == 1 + + energy = service.search(card_type=CardType.ENERGY) + assert len(energy) == 1 + + @pytest.mark.asyncio + async def test_load_all_idempotent(self, temp_definitions_dir): + """Test that calling load_all multiple times is safe. + + The service should only load cards once and warn on subsequent calls. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + initial_count = service.card_count + + await service.load_all() # Should be no-op + + assert service.card_count == initial_count + + @pytest.mark.asyncio + async def test_load_all_missing_directory_raises(self): + """Test that load_all raises FileNotFoundError for missing directory. + + If the definitions directory doesn't exist, the service should + fail with a clear error message. + """ + service = CardService(definitions_dir=Path("/nonexistent/path")) + + with pytest.raises(FileNotFoundError): + await service.load_all() + + @pytest.mark.asyncio + async def test_load_all_loads_set_metadata(self, temp_definitions_dir): + """Test that set metadata is loaded from the index file. + + The service should parse _index.json to get set names and counts. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + sets = service.get_sets() + assert len(sets) == 2 + + test_set = next((s for s in sets if s.code == "test"), None) + assert test_set is not None + assert test_set.name == "Test Set" + + +class TestCardServiceGetCard: + """Tests for CardService.get_card().""" + + @pytest.mark.asyncio + async def test_get_card_found(self, temp_definitions_dir): + """Test getting a card that exists. + + Should return the CardDefinition for the given ID. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + card = service.get_card("test-001-pikachu") + + assert card is not None + assert card.name == "Pikachu" + assert card.hp == 60 + + @pytest.mark.asyncio + async def test_get_card_not_found(self, temp_definitions_dir): + """Test getting a card that doesn't exist. + + Should return None rather than raising an exception. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + card = service.get_card("nonexistent-card") + + assert card is None + + +class TestCardServiceGetAllCards: + """Tests for CardService.get_all_cards().""" + + @pytest.mark.asyncio + async def test_get_all_cards_returns_registry(self, temp_definitions_dir): + """Test that get_all_cards returns a complete card registry. + + The returned dict should be suitable for passing to GameEngine.create_game(). + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + registry = service.get_all_cards() + + assert len(registry) == 4 + assert "test-001-pikachu" in registry + assert "energy-basic-lightning" in registry + + @pytest.mark.asyncio + async def test_get_all_cards_returns_copy(self, temp_definitions_dir): + """Test that get_all_cards returns a copy, not the internal dict. + + Modifying the returned dict should not affect the service's state. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + registry = service.get_all_cards() + registry["new-card"] = None # Try to modify + + # Service should be unaffected + assert service.get_card("new-card") is None + assert service.card_count == 4 + + +class TestCardServiceGetCardsByIds: + """Tests for CardService.get_cards_by_ids().""" + + @pytest.mark.asyncio + async def test_get_cards_by_ids_all_found(self, temp_definitions_dir): + """Test getting multiple cards by ID when all exist. + + Should return cards in the same order as the input IDs. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + ids = ["test-001-pikachu", "energy-basic-lightning"] + cards = service.get_cards_by_ids(ids) + + assert len(cards) == 2 + assert cards[0].id == "test-001-pikachu" + assert cards[1].id == "energy-basic-lightning" + + @pytest.mark.asyncio + async def test_get_cards_by_ids_missing_raises(self, temp_definitions_dir): + """Test that missing card IDs raise KeyError. + + If any requested ID doesn't exist, the method should fail + rather than return partial results. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + with pytest.raises(KeyError, match="nonexistent"): + service.get_cards_by_ids(["test-001-pikachu", "nonexistent"]) + + +class TestCardServiceSearch: + """Tests for CardService.search().""" + + @pytest.mark.asyncio + async def test_search_by_name(self, temp_definitions_dir): + """Test searching cards by name substring. + + Should match cards whose name contains the search string (case-insensitive). + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + results = service.search(name="pika") + + assert len(results) == 2 # Pikachu and Pikachu ex + + @pytest.mark.asyncio + async def test_search_by_card_type(self, temp_definitions_dir): + """Test searching cards by type (Pokemon, Trainer, Energy). + + Uses the type index for efficient lookup. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + pokemon = service.search(card_type=CardType.POKEMON) + trainers = service.search(card_type=CardType.TRAINER) + energy = service.search(card_type=CardType.ENERGY) + + assert len(pokemon) == 2 + assert len(trainers) == 1 + assert len(energy) == 1 + + @pytest.mark.asyncio + async def test_search_by_pokemon_type(self, temp_definitions_dir): + """Test searching Pokemon by their energy type. + + Uses the pokemon_type index for efficient lookup. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + lightning_pokemon = service.search(pokemon_type=EnergyType.LIGHTNING) + fire_pokemon = service.search(pokemon_type=EnergyType.FIRE) + + assert len(lightning_pokemon) == 2 + assert len(fire_pokemon) == 0 + + @pytest.mark.asyncio + async def test_search_by_set(self, temp_definitions_dir): + """Test searching cards by set ID. + + Uses the set index for efficient lookup. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + test_cards = service.search(set_id="test") + basic_cards = service.search(set_id="basic") + + assert len(test_cards) == 3 # 2 Pokemon + 1 Trainer + assert len(basic_cards) == 1 # 1 Energy + + @pytest.mark.asyncio + async def test_search_by_stage(self, temp_definitions_dir): + """Test searching Pokemon by evolution stage.""" + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + basics = service.search(stage=PokemonStage.BASIC) + + assert len(basics) == 2 # Both Pikachus are basic + + @pytest.mark.asyncio + async def test_search_by_variant(self, temp_definitions_dir): + """Test searching Pokemon by variant (normal, ex, etc.). + + Note: variant defaults to 'normal' for non-Pokemon cards too, + so we combine with card_type filter for accurate Pokemon counts. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + normal_pokemon = service.search( + card_type=CardType.POKEMON, + variant=PokemonVariant.NORMAL, + ) + ex_pokemon = service.search( + card_type=CardType.POKEMON, + variant=PokemonVariant.EX, + ) + + assert len(normal_pokemon) == 1 # Regular Pikachu + assert len(ex_pokemon) == 1 # Pikachu ex + + @pytest.mark.asyncio + async def test_search_multiple_criteria(self, temp_definitions_dir): + """Test searching with multiple criteria (AND logic). + + All criteria must match for a card to be included in results. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + results = service.search( + card_type=CardType.POKEMON, + pokemon_type=EnergyType.LIGHTNING, + variant=PokemonVariant.EX, + ) + + assert len(results) == 1 + assert results[0].name == "Pikachu ex" + + @pytest.mark.asyncio + async def test_search_no_results(self, temp_definitions_dir): + """Test that search returns empty list when no cards match.""" + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + results = service.search(pokemon_type=EnergyType.FIRE) + + assert results == [] + + +class TestCardServiceGetSetCards: + """Tests for CardService.get_set_cards().""" + + @pytest.mark.asyncio + async def test_get_set_cards(self, temp_definitions_dir): + """Test getting all cards from a specific set. + + Returns all cards where set_id matches, regardless of card type. + """ + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + cards = service.get_set_cards("test") + + assert len(cards) == 3 + card_types = {c.card_type for c in cards} + assert CardType.POKEMON in card_types + assert CardType.TRAINER in card_types + + @pytest.mark.asyncio + async def test_get_set_cards_nonexistent_set(self, temp_definitions_dir): + """Test that nonexistent set returns empty list.""" + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + cards = service.get_set_cards("nonexistent") + + assert cards == [] + + +class TestCardServiceGetSets: + """Tests for CardService.get_sets().""" + + @pytest.mark.asyncio + async def test_get_sets_returns_set_info(self, temp_definitions_dir): + """Test that get_sets returns SetInfo objects with correct data.""" + service = CardService(definitions_dir=temp_definitions_dir) + await service.load_all() + + sets = service.get_sets() + + assert len(sets) == 2 + assert all(isinstance(s, SetInfo) for s in sets) + + test_set = next((s for s in sets if s.code == "test"), None) + assert test_set.name == "Test Set" + assert test_set.card_count == 3 + + +class TestCardServiceWithRealData: + """Tests that run against the actual definitions directory. + + These tests verify that the CardService works with the real + card definitions generated by the converter script. + """ + + @pytest.mark.asyncio + async def test_load_real_definitions(self): + """Test loading the actual card definitions. + + This test uses the real data/definitions/ directory to verify + that all cards load correctly in a realistic scenario. + """ + service = CardService() # Uses default path + + # Only run if definitions exist + if not service._definitions_dir.exists(): + pytest.skip("Definitions directory not found") + + await service.load_all() + + # Should have loaded cards + assert service.card_count > 0 + + # Should have all card types + pokemon = service.search(card_type=CardType.POKEMON) + energy = service.search(card_type=CardType.ENERGY) + + assert len(pokemon) > 0 + assert len(energy) == 10 # Basic energy + + @pytest.mark.asyncio + async def test_real_card_lookup(self): + """Test looking up a known card from real data.""" + service = CardService() + + if not service._definitions_dir.exists(): + pytest.skip("Definitions directory not found") + + await service.load_all() + + # Try to find Bulbasaur (should exist in a1) + bulbasaur = service.get_card("a1-001-bulbasaur") + + if bulbasaur: + assert bulbasaur.name == "Bulbasaur" + assert bulbasaur.card_type == CardType.POKEMON + assert bulbasaur.pokemon_type == EnergyType.GRASS