localdex 0.2.2__py3-none-any.whl → 0.2.23__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- localdex/__init__.py +0 -3
- localdex/core.py +16 -173
- localdex/data/pokemon/aegislash.json +88 -0
- localdex/data/pokemon/basculegion.json +86 -0
- localdex/data/pokemon/basculin.json +105 -0
- localdex/data/pokemon/darmanitan.json +117 -0
- localdex/data/pokemon/deoxys.json +144 -0
- localdex/data/pokemon/dudunsparce.json +117 -0
- localdex/data/pokemon/eiscue.json +80 -0
- localdex/data/pokemon/enamorus.json +77 -0
- localdex/data/pokemon/giratina.json +123 -0
- localdex/data/pokemon/gourgeist.json +109 -0
- localdex/data/pokemon/indeedee.json +89 -0
- localdex/data/pokemon/keldeo.json +107 -0
- localdex/data/pokemon/landorus.json +105 -0
- localdex/data/pokemon/lycanroc.json +107 -0
- localdex/data/pokemon/maushold.json +80 -0
- localdex/data/pokemon/meloetta.json +131 -0
- localdex/data/pokemon/meowstic.json +122 -0
- localdex/data/pokemon/mimikyu.json +113 -0
- localdex/data/pokemon/minior.json +90 -0
- localdex/data/pokemon/morpeko.json +100 -0
- localdex/data/pokemon/nidoran.json +109 -0
- localdex/data/pokemon/oinkologne.json +78 -0
- localdex/data/pokemon/oricorio.json +91 -0
- localdex/data/pokemon/palafin.json +90 -0
- localdex/data/pokemon/pumpkaboo.json +105 -0
- localdex/data/pokemon/shaymin.json +101 -0
- localdex/data/pokemon/squawkabilly.json +79 -0
- localdex/data/pokemon/tatsugiri.json +65 -0
- localdex/data/pokemon/thundurus.json +116 -0
- localdex/data/pokemon/tornadus.json +107 -0
- localdex/data/pokemon/toxtricity.json +112 -0
- localdex/data/pokemon/urshifu.json +101 -0
- localdex/data/pokemon/wishiwashi.json +77 -0
- localdex/data/pokemon/wormadam.json +93 -0
- localdex/data/pokemon/zygarde.json +93 -0
- localdex/download_data.py +62 -0
- localdex/models/pokemon.py +8 -11
- {localdex-0.2.2.dist-info → localdex-0.2.23.dist-info}/METADATA +2 -168
- {localdex-0.2.2.dist-info → localdex-0.2.23.dist-info}/RECORD +44 -10
- localdex/random_battles.py +0 -251
- {localdex-0.2.2.dist-info → localdex-0.2.23.dist-info}/WHEEL +0 -0
- {localdex-0.2.2.dist-info → localdex-0.2.23.dist-info}/entry_points.txt +0 -0
- {localdex-0.2.2.dist-info → localdex-0.2.23.dist-info}/top_level.txt +0 -0
localdex/__init__.py
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
from .core import LocalDex
|
3
3
|
from .models import Pokemon, Move, Ability, Item, BaseStats
|
4
4
|
from .exceptions import PokemonNotFoundError, MoveNotFoundError, AbilityNotFoundError, ItemNotFoundError
|
5
|
-
from .random_battles import RandomBattleSets
|
6
5
|
|
7
6
|
__all__ = [
|
8
7
|
"LocalDex",
|
@@ -15,6 +14,4 @@ __all__ = [
|
|
15
14
|
"MoveNotFoundError",
|
16
15
|
"AbilityNotFoundError",
|
17
16
|
"ItemNotFoundError",
|
18
|
-
"RandomBattleSets",
|
19
|
-
"SpriteDownloader",
|
20
17
|
]
|
localdex/core.py
CHANGED
@@ -18,7 +18,6 @@ from .exceptions import (
|
|
18
18
|
ItemNotFoundError, DataLoadError, SearchError
|
19
19
|
)
|
20
20
|
from .data_loader import DataLoader
|
21
|
-
from .random_battles import RandomBattleSets
|
22
21
|
|
23
22
|
|
24
23
|
class LocalDex:
|
@@ -30,7 +29,7 @@ class LocalDex:
|
|
30
29
|
performance and comprehensive search capabilities.
|
31
30
|
"""
|
32
31
|
|
33
|
-
def __init__(self, data_path: Optional[str] = None, data_dir: Optional[str] = None, enable_caching: bool = True
|
32
|
+
def __init__(self, data_path: Optional[str] = None, data_dir: Optional[str] = None, enable_caching: bool = True):
|
34
33
|
"""
|
35
34
|
Initialize the LocalDex.
|
36
35
|
|
@@ -38,18 +37,12 @@ class LocalDex:
|
|
38
37
|
data_path: Optional path to data directory. If None, uses package data.
|
39
38
|
data_dir: Alias for data_path for backward compatibility.
|
40
39
|
enable_caching: Whether to enable caching for better performance.
|
41
|
-
enable_random_battles: Whether to enable random battle sets functionality.
|
42
|
-
|
43
40
|
"""
|
44
41
|
# Use data_dir if provided, otherwise use data_path
|
45
42
|
final_data_path = data_dir if data_dir is not None else data_path
|
46
43
|
self.data_loader = DataLoader(final_data_path)
|
47
44
|
self.data_dir = final_data_path # Store for backward compatibility
|
48
45
|
self.enable_caching = enable_caching
|
49
|
-
|
50
|
-
|
51
|
-
# Initialize random battle sets
|
52
|
-
self.random_battles = RandomBattleSets() if enable_random_battles else None
|
53
46
|
|
54
47
|
# Initialize caches
|
55
48
|
self._pokemon_cache: Dict[str, Pokemon] = {}
|
@@ -433,54 +426,38 @@ class LocalDex:
|
|
433
426
|
base_stats_data = data.get("baseStats", {})
|
434
427
|
base_stats = BaseStats(
|
435
428
|
hp=base_stats_data.get("hp", 0),
|
436
|
-
attack=base_stats_data.get("attack",
|
437
|
-
defense=base_stats_data.get("defense",
|
438
|
-
special_attack=base_stats_data.get("
|
439
|
-
special_defense=base_stats_data.get("
|
440
|
-
speed=base_stats_data.get("speed",
|
429
|
+
attack=base_stats_data.get("attack", 0),
|
430
|
+
defense=base_stats_data.get("defense", 0),
|
431
|
+
special_attack=base_stats_data.get("special-attack", 0),
|
432
|
+
special_defense=base_stats_data.get("special-defense", 0),
|
433
|
+
speed=base_stats_data.get("speed", 0),
|
441
434
|
)
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
id=data.get("id", 0),
|
446
|
-
name=data.get("name", ""),
|
435
|
+
return Pokemon(
|
436
|
+
id=data["id"],
|
437
|
+
name=data["name"],
|
447
438
|
types=data.get("types", []),
|
448
439
|
base_stats=base_stats,
|
449
440
|
height=data.get("height"),
|
450
441
|
weight=data.get("weight"),
|
451
442
|
color=data.get("color"),
|
452
|
-
|
443
|
+
abilities=data.get("abilities", {}),
|
444
|
+
moves=data.get("moves", []),
|
445
|
+
learnset=data.get("learnset", {}),
|
446
|
+
evolutions=data.get("evolutions", []),
|
453
447
|
prevo=data.get("prevo"),
|
454
448
|
evo_level=data.get("evoLevel"),
|
455
449
|
evo_type=data.get("evoType"),
|
456
450
|
evo_condition=data.get("evoCondition"),
|
457
451
|
evo_item=data.get("evoItem"),
|
458
|
-
egg_groups=data.get("eggGroups"),
|
459
|
-
gender_ratio=data.get("genderRatio"),
|
452
|
+
egg_groups=data.get("eggGroups", []),
|
453
|
+
gender_ratio=data.get("genderRatio", {}),
|
460
454
|
generation=data.get("generation"),
|
461
455
|
description=data.get("description"),
|
462
456
|
is_legendary=data.get("isLegendary", False),
|
463
457
|
is_mythical=data.get("isMythical", False),
|
464
458
|
is_ultra_beast=data.get("isUltraBeast", False),
|
465
|
-
|
466
|
-
metadata=data
|
459
|
+
metadata=data.get("metadata", {}),
|
467
460
|
)
|
468
|
-
|
469
|
-
# Add abilities
|
470
|
-
abilities_data = data.get("abilities", {})
|
471
|
-
for slot, ability_data in abilities_data.items():
|
472
|
-
if isinstance(ability_data, dict) and "data" in ability_data:
|
473
|
-
ability = self._create_ability_from_data(ability_data["data"])
|
474
|
-
pokemon.abilities[slot] = ability
|
475
|
-
|
476
|
-
# Add moves
|
477
|
-
moves_data = data.get("moves", [])
|
478
|
-
for move_data in moves_data:
|
479
|
-
if isinstance(move_data, dict):
|
480
|
-
move = self._create_move_from_data(move_data)
|
481
|
-
pokemon.moves.append(move)
|
482
|
-
|
483
|
-
return pokemon
|
484
461
|
|
485
462
|
def _create_move_from_data(self, data: Dict[str, Any]) -> Move:
|
486
463
|
"""Create a Move object from raw data."""
|
@@ -565,138 +542,4 @@ class LocalDex:
|
|
565
542
|
"items": len(self._item_cache)
|
566
543
|
}
|
567
544
|
|
568
|
-
# Random Battle Sets Methods
|
569
|
-
|
570
|
-
def get_random_battle_sets(self, pokemon_name: str, generation: int = 9, force_refresh: bool = False) -> Optional[Dict[str, Any]]:
|
571
|
-
"""
|
572
|
-
Get random battle sets for a specific Pokemon.
|
573
|
-
|
574
|
-
Args:
|
575
|
-
pokemon_name: Name of the Pokemon (case-insensitive)
|
576
|
-
generation: Generation to get sets from (8 or 9)
|
577
|
-
force_refresh: If True, re-download data
|
578
|
-
|
579
|
-
Returns:
|
580
|
-
Pokemon's random battle sets or None if not found
|
581
|
-
|
582
|
-
Raises:
|
583
|
-
ValueError: If random battles are not enabled
|
584
|
-
"""
|
585
|
-
if self.random_battles is None:
|
586
|
-
raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
|
587
|
-
|
588
|
-
if generation == 9:
|
589
|
-
return self.random_battles.get_pokemon_gen9_sets(pokemon_name, force_refresh)
|
590
|
-
elif generation == 8:
|
591
|
-
return self.random_battles.get_pokemon_gen8_data(pokemon_name, force_refresh)
|
592
|
-
else:
|
593
|
-
raise ValueError(f"Generation {generation} is not supported. Use 8 or 9.")
|
594
|
-
|
595
|
-
def get_all_random_battle_sets(self, generation: int = 9, force_refresh: bool = False) -> Dict[str, Any]:
|
596
|
-
"""
|
597
|
-
Get all random battle sets for a generation.
|
598
|
-
|
599
|
-
Args:
|
600
|
-
generation: Generation to get sets from (8 or 9)
|
601
|
-
force_refresh: If True, re-download data
|
602
|
-
|
603
|
-
Returns:
|
604
|
-
Dictionary containing all random battle sets for the generation
|
605
|
-
|
606
|
-
Raises:
|
607
|
-
ValueError: If random battles are not enabled
|
608
|
-
"""
|
609
|
-
if self.random_battles is None:
|
610
|
-
raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
|
611
|
-
|
612
|
-
if generation == 9:
|
613
|
-
return self.random_battles.get_gen9_sets(force_refresh)
|
614
|
-
elif generation == 8:
|
615
|
-
return self.random_battles.get_gen8_data(force_refresh)
|
616
|
-
else:
|
617
|
-
raise ValueError(f"Generation {generation} is not supported. Use 8 or 9.")
|
618
|
-
|
619
|
-
def search_random_battle_pokemon_by_move(self, move_name: str, generation: int = 9, force_refresh: bool = False) -> List[str]:
|
620
|
-
"""
|
621
|
-
Search for Pokemon that have a specific move in their random battle sets.
|
622
|
-
|
623
|
-
Args:
|
624
|
-
move_name: Name of the move to search for (case-insensitive)
|
625
|
-
generation: Generation to search in (8 or 9)
|
626
|
-
force_refresh: If True, re-download data
|
627
|
-
|
628
|
-
Returns:
|
629
|
-
List of Pokemon names that have the move
|
630
|
-
|
631
|
-
Raises:
|
632
|
-
ValueError: If random battles are not enabled
|
633
|
-
"""
|
634
|
-
if self.random_battles is None:
|
635
|
-
raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
|
636
|
-
|
637
|
-
return self.random_battles.search_pokemon_by_move(move_name, generation, force_refresh)
|
638
|
-
|
639
|
-
def search_random_battle_pokemon_by_ability(self, ability_name: str, generation: int = 9, force_refresh: bool = False) -> List[str]:
|
640
|
-
"""
|
641
|
-
Search for Pokemon that have a specific ability in their random battle sets.
|
642
|
-
|
643
|
-
Args:
|
644
|
-
ability_name: Name of the ability to search for (case-insensitive)
|
645
|
-
generation: Generation to search in (8 or 9)
|
646
|
-
force_refresh: If True, re-download data
|
647
|
-
|
648
|
-
Returns:
|
649
|
-
List of Pokemon names that have the ability
|
650
|
-
|
651
|
-
Raises:
|
652
|
-
ValueError: If random battles are not enabled
|
653
|
-
"""
|
654
|
-
if self.random_battles is None:
|
655
|
-
raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
|
656
|
-
|
657
|
-
return self.random_battles.search_pokemon_by_ability(ability_name, generation, force_refresh)
|
658
|
-
|
659
|
-
def get_available_random_battle_generations(self) -> List[int]:
|
660
|
-
"""
|
661
|
-
Get list of available generations for random battles.
|
662
|
-
|
663
|
-
Returns:
|
664
|
-
List of generation numbers
|
665
|
-
|
666
|
-
Raises:
|
667
|
-
ValueError: If random battles are not enabled
|
668
|
-
"""
|
669
|
-
if self.random_battles is None:
|
670
|
-
raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
|
671
|
-
|
672
|
-
return self.random_battles.get_available_generations()
|
673
|
-
|
674
|
-
def get_random_battle_formats(self, generation: int) -> List[str]:
|
675
|
-
"""
|
676
|
-
Get available formats for a specific generation.
|
677
|
-
|
678
|
-
Args:
|
679
|
-
generation: Generation number
|
680
|
-
|
681
|
-
Returns:
|
682
|
-
List of available format names
|
683
|
-
|
684
|
-
Raises:
|
685
|
-
ValueError: If random battles are not enabled
|
686
|
-
"""
|
687
|
-
if self.random_battles is None:
|
688
|
-
raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
|
689
|
-
|
690
|
-
return self.random_battles.get_generation_formats(generation)
|
691
|
-
|
692
|
-
def clear_random_battle_cache(self) -> None:
|
693
|
-
"""Clear random battle cache."""
|
694
|
-
if self.random_battles is not None:
|
695
|
-
self.random_battles.clear_cache()
|
696
|
-
|
697
|
-
def cleanup_random_battle_downloads(self) -> None:
|
698
|
-
"""Remove downloaded Pokemon Showdown repository."""
|
699
|
-
if self.random_battles is not None:
|
700
|
-
self.random_battles.cleanup_downloads()
|
701
|
-
|
702
545
|
|
@@ -0,0 +1,88 @@
|
|
1
|
+
{
|
2
|
+
"id": 681,
|
3
|
+
"name": "aegislash",
|
4
|
+
"types": [
|
5
|
+
"steel",
|
6
|
+
"ghost"
|
7
|
+
],
|
8
|
+
"baseStats": {
|
9
|
+
"hp": 60,
|
10
|
+
"attack": 50,
|
11
|
+
"defense": 140,
|
12
|
+
"special_attack": 50,
|
13
|
+
"special_defense": 140,
|
14
|
+
"speed": 60
|
15
|
+
},
|
16
|
+
"height": 1.7,
|
17
|
+
"weight": 53.0,
|
18
|
+
"abilities": {
|
19
|
+
"0": {
|
20
|
+
"name": "stance-change"
|
21
|
+
}
|
22
|
+
},
|
23
|
+
"moves": [
|
24
|
+
"swords-dance",
|
25
|
+
"cut",
|
26
|
+
"tackle",
|
27
|
+
"hyper-beam",
|
28
|
+
"toxic",
|
29
|
+
"screech",
|
30
|
+
"double-team",
|
31
|
+
"reflect",
|
32
|
+
"rest",
|
33
|
+
"rock-slide",
|
34
|
+
"slash",
|
35
|
+
"substitute",
|
36
|
+
"snore",
|
37
|
+
"reversal",
|
38
|
+
"spite",
|
39
|
+
"protect",
|
40
|
+
"endure",
|
41
|
+
"false-swipe",
|
42
|
+
"swagger",
|
43
|
+
"fury-cutter",
|
44
|
+
"attract",
|
45
|
+
"sleep-talk",
|
46
|
+
"return",
|
47
|
+
"frustration",
|
48
|
+
"pursuit",
|
49
|
+
"hidden-power",
|
50
|
+
"rain-dance",
|
51
|
+
"sunny-day",
|
52
|
+
"shadow-ball",
|
53
|
+
"rock-smash",
|
54
|
+
"facade",
|
55
|
+
"brick-break",
|
56
|
+
"secret-power",
|
57
|
+
"metal-sound",
|
58
|
+
"aerial-ace",
|
59
|
+
"iron-defense",
|
60
|
+
"block",
|
61
|
+
"shock-wave",
|
62
|
+
"gyro-ball",
|
63
|
+
"close-combat",
|
64
|
+
"power-trick",
|
65
|
+
"magnet-rise",
|
66
|
+
"night-slash",
|
67
|
+
"air-slash",
|
68
|
+
"giga-impact",
|
69
|
+
"shadow-claw",
|
70
|
+
"shadow-sneak",
|
71
|
+
"psycho-cut",
|
72
|
+
"flash-cannon",
|
73
|
+
"iron-head",
|
74
|
+
"head-smash",
|
75
|
+
"autotomize",
|
76
|
+
"after-you",
|
77
|
+
"round",
|
78
|
+
"retaliate",
|
79
|
+
"sacred-sword",
|
80
|
+
"kings-shield",
|
81
|
+
"confide",
|
82
|
+
"solar-blade",
|
83
|
+
"laser-focus",
|
84
|
+
"brutal-swing",
|
85
|
+
"steel-beam"
|
86
|
+
],
|
87
|
+
"generation": 6
|
88
|
+
}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
{
|
2
|
+
"id": 902,
|
3
|
+
"name": "basculegion",
|
4
|
+
"types": [
|
5
|
+
"water",
|
6
|
+
"ghost"
|
7
|
+
],
|
8
|
+
"baseStats": {
|
9
|
+
"hp": 120,
|
10
|
+
"attack": 112,
|
11
|
+
"defense": 65,
|
12
|
+
"special_attack": 80,
|
13
|
+
"special_defense": 75,
|
14
|
+
"speed": 78
|
15
|
+
},
|
16
|
+
"height": 3.0,
|
17
|
+
"weight": 110.0,
|
18
|
+
"abilities": {
|
19
|
+
"0": {
|
20
|
+
"name": "swift-swim"
|
21
|
+
},
|
22
|
+
"1": {
|
23
|
+
"name": "adaptability"
|
24
|
+
},
|
25
|
+
"H": {
|
26
|
+
"name": "mold-breaker"
|
27
|
+
}
|
28
|
+
},
|
29
|
+
"moves": [
|
30
|
+
"headbutt",
|
31
|
+
"tackle",
|
32
|
+
"take-down",
|
33
|
+
"thrash",
|
34
|
+
"double-edge",
|
35
|
+
"tail-whip",
|
36
|
+
"bite",
|
37
|
+
"water-gun",
|
38
|
+
"hydro-pump",
|
39
|
+
"surf",
|
40
|
+
"ice-beam",
|
41
|
+
"blizzard",
|
42
|
+
"hyper-beam",
|
43
|
+
"agility",
|
44
|
+
"night-shade",
|
45
|
+
"confuse-ray",
|
46
|
+
"waterfall",
|
47
|
+
"rest",
|
48
|
+
"substitute",
|
49
|
+
"flail",
|
50
|
+
"spite",
|
51
|
+
"protect",
|
52
|
+
"scary-face",
|
53
|
+
"icy-wind",
|
54
|
+
"outrage",
|
55
|
+
"sleep-talk",
|
56
|
+
"pain-split",
|
57
|
+
"rain-dance",
|
58
|
+
"crunch",
|
59
|
+
"shadow-ball",
|
60
|
+
"whirlpool",
|
61
|
+
"uproar",
|
62
|
+
"facade",
|
63
|
+
"endeavor",
|
64
|
+
"muddy-water",
|
65
|
+
"mud-shot",
|
66
|
+
"water-pulse",
|
67
|
+
"giga-impact",
|
68
|
+
"ice-fang",
|
69
|
+
"zen-headbutt",
|
70
|
+
"aqua-jet",
|
71
|
+
"head-smash",
|
72
|
+
"soak",
|
73
|
+
"hex",
|
74
|
+
"phantom-force",
|
75
|
+
"psychic-fangs",
|
76
|
+
"liquidation",
|
77
|
+
"scale-shot",
|
78
|
+
"flip-turn",
|
79
|
+
"wave-crash",
|
80
|
+
"tera-blast",
|
81
|
+
"last-respects",
|
82
|
+
"snowscape",
|
83
|
+
"chilling-water"
|
84
|
+
],
|
85
|
+
"generation": 9
|
86
|
+
}
|
@@ -0,0 +1,105 @@
|
|
1
|
+
{
|
2
|
+
"id": 550,
|
3
|
+
"name": "basculin",
|
4
|
+
"types": [
|
5
|
+
"water"
|
6
|
+
],
|
7
|
+
"baseStats": {
|
8
|
+
"hp": 70,
|
9
|
+
"attack": 92,
|
10
|
+
"defense": 65,
|
11
|
+
"special_attack": 80,
|
12
|
+
"special_defense": 55,
|
13
|
+
"speed": 98
|
14
|
+
},
|
15
|
+
"height": 1.0,
|
16
|
+
"weight": 18.0,
|
17
|
+
"abilities": {
|
18
|
+
"0": {
|
19
|
+
"name": "reckless"
|
20
|
+
},
|
21
|
+
"1": {
|
22
|
+
"name": "adaptability"
|
23
|
+
},
|
24
|
+
"H": {
|
25
|
+
"name": "mold-breaker"
|
26
|
+
}
|
27
|
+
},
|
28
|
+
"moves": [
|
29
|
+
"cut",
|
30
|
+
"headbutt",
|
31
|
+
"tackle",
|
32
|
+
"take-down",
|
33
|
+
"thrash",
|
34
|
+
"double-edge",
|
35
|
+
"tail-whip",
|
36
|
+
"bite",
|
37
|
+
"water-gun",
|
38
|
+
"hydro-pump",
|
39
|
+
"surf",
|
40
|
+
"ice-beam",
|
41
|
+
"blizzard",
|
42
|
+
"bubble-beam",
|
43
|
+
"hyper-beam",
|
44
|
+
"toxic",
|
45
|
+
"agility",
|
46
|
+
"rage",
|
47
|
+
"double-team",
|
48
|
+
"waterfall",
|
49
|
+
"swift",
|
50
|
+
"rest",
|
51
|
+
"substitute",
|
52
|
+
"snore",
|
53
|
+
"flail",
|
54
|
+
"reversal",
|
55
|
+
"protect",
|
56
|
+
"scary-face",
|
57
|
+
"icy-wind",
|
58
|
+
"endure",
|
59
|
+
"swagger",
|
60
|
+
"attract",
|
61
|
+
"sleep-talk",
|
62
|
+
"return",
|
63
|
+
"frustration",
|
64
|
+
"hidden-power",
|
65
|
+
"rain-dance",
|
66
|
+
"crunch",
|
67
|
+
"whirlpool",
|
68
|
+
"uproar",
|
69
|
+
"hail",
|
70
|
+
"facade",
|
71
|
+
"taunt",
|
72
|
+
"superpower",
|
73
|
+
"revenge",
|
74
|
+
"endeavor",
|
75
|
+
"secret-power",
|
76
|
+
"dive",
|
77
|
+
"muddy-water",
|
78
|
+
"bounce",
|
79
|
+
"mud-shot",
|
80
|
+
"water-pulse",
|
81
|
+
"brine",
|
82
|
+
"assurance",
|
83
|
+
"aqua-tail",
|
84
|
+
"giga-impact",
|
85
|
+
"ice-fang",
|
86
|
+
"zen-headbutt",
|
87
|
+
"aqua-jet",
|
88
|
+
"head-smash",
|
89
|
+
"soak",
|
90
|
+
"round",
|
91
|
+
"chip-away",
|
92
|
+
"scald",
|
93
|
+
"final-gambit",
|
94
|
+
"confide",
|
95
|
+
"psychic-fangs",
|
96
|
+
"liquidation",
|
97
|
+
"scale-shot",
|
98
|
+
"flip-turn",
|
99
|
+
"wave-crash",
|
100
|
+
"tera-blast",
|
101
|
+
"snowscape",
|
102
|
+
"chilling-water"
|
103
|
+
],
|
104
|
+
"generation": 5
|
105
|
+
}
|
@@ -0,0 +1,117 @@
|
|
1
|
+
{
|
2
|
+
"id": 555,
|
3
|
+
"name": "darmanitan",
|
4
|
+
"types": [
|
5
|
+
"fire"
|
6
|
+
],
|
7
|
+
"baseStats": {
|
8
|
+
"hp": 105,
|
9
|
+
"attack": 140,
|
10
|
+
"defense": 55,
|
11
|
+
"special_attack": 30,
|
12
|
+
"special_defense": 55,
|
13
|
+
"speed": 95
|
14
|
+
},
|
15
|
+
"height": 1.3,
|
16
|
+
"weight": 92.9,
|
17
|
+
"abilities": {
|
18
|
+
"0": {
|
19
|
+
"name": "sheer-force"
|
20
|
+
},
|
21
|
+
"H": {
|
22
|
+
"name": "zen-mode"
|
23
|
+
}
|
24
|
+
},
|
25
|
+
"moves": [
|
26
|
+
"mega-punch",
|
27
|
+
"fire-punch",
|
28
|
+
"mega-kick",
|
29
|
+
"headbutt",
|
30
|
+
"tackle",
|
31
|
+
"body-slam",
|
32
|
+
"thrash",
|
33
|
+
"bite",
|
34
|
+
"roar",
|
35
|
+
"ember",
|
36
|
+
"flamethrower",
|
37
|
+
"hyper-beam",
|
38
|
+
"strength",
|
39
|
+
"solar-beam",
|
40
|
+
"fire-spin",
|
41
|
+
"earthquake",
|
42
|
+
"dig",
|
43
|
+
"toxic",
|
44
|
+
"psychic",
|
45
|
+
"rage",
|
46
|
+
"double-team",
|
47
|
+
"focus-energy",
|
48
|
+
"fire-blast",
|
49
|
+
"rest",
|
50
|
+
"rock-slide",
|
51
|
+
"substitute",
|
52
|
+
"thief",
|
53
|
+
"snore",
|
54
|
+
"reversal",
|
55
|
+
"protect",
|
56
|
+
"belly-drum",
|
57
|
+
"endure",
|
58
|
+
"rollout",
|
59
|
+
"swagger",
|
60
|
+
"attract",
|
61
|
+
"sleep-talk",
|
62
|
+
"return",
|
63
|
+
"frustration",
|
64
|
+
"encore",
|
65
|
+
"hidden-power",
|
66
|
+
"sunny-day",
|
67
|
+
"future-sight",
|
68
|
+
"rock-smash",
|
69
|
+
"uproar",
|
70
|
+
"heat-wave",
|
71
|
+
"torment",
|
72
|
+
"will-o-wisp",
|
73
|
+
"facade",
|
74
|
+
"focus-punch",
|
75
|
+
"taunt",
|
76
|
+
"trick",
|
77
|
+
"superpower",
|
78
|
+
"brick-break",
|
79
|
+
"endeavor",
|
80
|
+
"snatch",
|
81
|
+
"secret-power",
|
82
|
+
"overheat",
|
83
|
+
"rock-tomb",
|
84
|
+
"iron-defense",
|
85
|
+
"bulk-up",
|
86
|
+
"hammer-arm",
|
87
|
+
"gyro-ball",
|
88
|
+
"u-turn",
|
89
|
+
"payback",
|
90
|
+
"fling",
|
91
|
+
"power-swap",
|
92
|
+
"guard-swap",
|
93
|
+
"flare-blitz",
|
94
|
+
"focus-blast",
|
95
|
+
"giga-impact",
|
96
|
+
"fire-fang",
|
97
|
+
"zen-headbutt",
|
98
|
+
"iron-head",
|
99
|
+
"stone-edge",
|
100
|
+
"grass-knot",
|
101
|
+
"smack-down",
|
102
|
+
"flame-charge",
|
103
|
+
"round",
|
104
|
+
"incinerate",
|
105
|
+
"bulldoze",
|
106
|
+
"work-up",
|
107
|
+
"confide",
|
108
|
+
"mystical-fire",
|
109
|
+
"power-up-punch",
|
110
|
+
"laser-focus",
|
111
|
+
"body-press",
|
112
|
+
"expanding-force",
|
113
|
+
"burning-jealousy",
|
114
|
+
"lash-out"
|
115
|
+
],
|
116
|
+
"generation": 5
|
117
|
+
}
|