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.
This commit is contained in:
Cal Corum 2026-01-27 14:16:40 -06:00
parent 29ab0b3d84
commit 934aa4c443
763 changed files with 15762 additions and 5 deletions

View File

@ -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":

View File

@ -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",
]

View File

@ -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

View File

@ -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.

File diff suppressed because it is too large Load Diff

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

Some files were not shown because too many files have changed in this diff Show More