diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e678a2978..07aed42a5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,4 +41,6 @@ jobs: files: | https://pokerogue.net/ https://pokerogue.net/index.html - https://pokerogue.net/manifest.json \ No newline at end of file + https://pokerogue.net/manifest.json + https://pokerogue.net/manifest.webmanifest + https://pokerogue.net/service-worker.js \ No newline at end of file diff --git a/README.md b/README.md index b2955f8c4..d08107867 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you have the motivation and experience with Typescript/Javascript (or are wil ### ❔ FAQ **How do I test a new _______?** -- In the `battle-scene.ts` file there are overrides for most values you'll need to change for testing +- In the `src/overrides.ts` file there are overrides for most values you'll need to change for testing ## 🪧 To Do diff --git a/public/audio/bgm/battle_legendary_k.mp3 b/public/audio/bgm/battle_legendary_kyurem.mp3 similarity index 100% rename from public/audio/bgm/battle_legendary_k.mp3 rename to public/audio/bgm/battle_legendary_kyurem.mp3 diff --git a/public/audio/bgm/battle_legendary_regis.mp3 b/public/audio/bgm/battle_legendary_regis.mp3 new file mode 100644 index 000000000..227d544d9 Binary files /dev/null and b/public/audio/bgm/battle_legendary_regis.mp3 differ diff --git a/public/audio/bgm/battle_legendary_rz.mp3 b/public/audio/bgm/battle_legendary_res_zek.mp3 similarity index 100% rename from public/audio/bgm/battle_legendary_rz.mp3 rename to public/audio/bgm/battle_legendary_res_zek.mp3 diff --git a/public/audio/bgm/battle_legendary.mp3 b/public/audio/bgm/battle_legendary_unova.mp3 similarity index 100% rename from public/audio/bgm/battle_legendary.mp3 rename to public/audio/bgm/battle_legendary_unova.mp3 diff --git a/public/audio/se/shing.wav b/public/audio/se/shing.wav new file mode 100644 index 000000000..e693cb207 Binary files /dev/null and b/public/audio/se/shing.wav differ diff --git a/public/images/items.json b/public/images/items.json index a878c7db5..939b3927e 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 391, - "h": 391 + "w": 396, + "h": 396 }, "scale": 1, "frames": [ @@ -72,6 +72,48 @@ "h": 28 } }, + { + "filename": "bronze_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 29, + "y": 27, + "w": 22, + "h": 31 + } + }, + { + "filename": "great_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 0, + "y": 58, + "w": 22, + "h": 31 + } + }, { "filename": "linking_cord", "rotated": false, @@ -87,12 +129,75 @@ "h": 26 }, "frame": { - "x": 29, - "y": 27, + "x": 61, + "y": 0, "w": 27, "h": 26 } }, + { + "filename": "master_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 0, + "y": 89, + "w": 22, + "h": 31 + } + }, + { + "filename": "rogue_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 22, + "y": 58, + "w": 22, + "h": 31 + } + }, + { + "filename": "ultra_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 0, + "y": 120, + "w": 22, + "h": 31 + } + }, { "filename": "cornerstone_mask", "rotated": false, @@ -108,7 +213,7 @@ "h": 26 }, "frame": { - "x": 61, + "x": 88, "y": 0, "w": 24, "h": 26 @@ -129,8 +234,8 @@ "h": 26 }, "frame": { - "x": 0, - "y": 58, + "x": 112, + "y": 0, "w": 23, "h": 26 } @@ -150,7 +255,7 @@ "h": 22 }, "frame": { - "x": 85, + "x": 135, "y": 0, "w": 27, "h": 22 @@ -171,7 +276,7 @@ "h": 21 }, "frame": { - "x": 112, + "x": 162, "y": 0, "w": 28, "h": 21 @@ -192,7 +297,7 @@ "h": 21 }, "frame": { - "x": 140, + "x": 190, "y": 0, "w": 28, "h": 21 @@ -213,7 +318,7 @@ "h": 21 }, "frame": { - "x": 168, + "x": 218, "y": 0, "w": 28, "h": 21 @@ -234,7 +339,7 @@ "h": 21 }, "frame": { - "x": 196, + "x": 246, "y": 0, "w": 28, "h": 21 @@ -255,7 +360,7 @@ "h": 21 }, "frame": { - "x": 224, + "x": 274, "y": 0, "w": 28, "h": 21 @@ -276,7 +381,7 @@ "h": 21 }, "frame": { - "x": 252, + "x": 302, "y": 0, "w": 28, "h": 21 @@ -297,8 +402,8 @@ "h": 31 }, "frame": { - "x": 0, - "y": 84, + "x": 22, + "y": 89, "w": 17, "h": 31 } @@ -319,7 +424,7 @@ }, "frame": { "x": 0, - "y": 115, + "y": 151, "w": 17, "h": 31 } @@ -339,12 +444,33 @@ "h": 31 }, "frame": { - "x": 0, - "y": 146, + "x": 22, + "y": 120, "w": 17, "h": 31 } }, + { + "filename": "black_augurite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 22, + "h": 25 + }, + "frame": { + "x": 17, + "y": 151, + "w": 22, + "h": 25 + } + }, { "filename": "prison_bottle", "rotated": false, @@ -361,11 +487,32 @@ }, "frame": { "x": 0, - "y": 177, + "y": 182, "w": 17, "h": 30 } }, + { + "filename": "big_root", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 17, + "y": 176, + "w": 23, + "h": 24 + } + }, { "filename": "chipped_pot", "rotated": false, @@ -381,7 +528,7 @@ "h": 20 }, "frame": { - "x": 280, + "x": 330, "y": 0, "w": 26, "h": 20 @@ -402,12 +549,33 @@ "h": 20 }, "frame": { - "x": 306, + "x": 356, "y": 0, "w": 26, "h": 20 } }, + { + "filename": "catching_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 0, + "y": 212, + "w": 21, + "h": 24 + } + }, { "filename": "choice_scarf", "rotated": false, @@ -423,8 +591,8 @@ "h": 24 }, "frame": { - "x": 332, - "y": 0, + "x": 0, + "y": 236, "w": 24, "h": 24 } @@ -444,54 +612,12 @@ "h": 24 }, "frame": { - "x": 356, - "y": 0, + "x": 0, + "y": 260, "w": 24, "h": 24 } }, - { - "filename": "black_augurite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 22, - "h": 25 - }, - "frame": { - "x": 0, - "y": 207, - "w": 22, - "h": 25 - } - }, - { - "filename": "big_root", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 0, - "y": 232, - "w": 23, - "h": 24 - } - }, { "filename": "golden_punch", "rotated": false, @@ -508,7 +634,7 @@ }, "frame": { "x": 0, - "y": 256, + "y": 284, "w": 24, "h": 24 } @@ -529,7 +655,7 @@ }, "frame": { "x": 0, - "y": 280, + "y": 308, "w": 24, "h": 24 } @@ -550,7 +676,7 @@ }, "frame": { "x": 0, - "y": 304, + "y": 332, "w": 24, "h": 24 } @@ -571,11 +697,74 @@ }, "frame": { "x": 0, - "y": 328, + "y": 356, "w": 24, "h": 24 } }, + { + "filename": "mega_bracelet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 16 + }, + "frame": { + "x": 0, + "y": 380, + "w": 20, + "h": 16 + } + }, + { + "filename": "relic_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 16 + }, + "frame": { + "x": 20, + "y": 380, + "w": 17, + "h": 16 + } + }, + { + "filename": "calcium", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 51, + "y": 27, + "w": 16, + "h": 24 + } + }, { "filename": "lucky_punch_great", "rotated": false, @@ -591,117 +780,12 @@ "h": 24 }, "frame": { - "x": 0, - "y": 352, + "x": 67, + "y": 26, "w": 24, "h": 24 } }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 0, - "y": 376, - "w": 24, - "h": 15 - } - }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 17, - "y": 84, - "w": 16, - "h": 24 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 17, - "y": 108, - "w": 16, - "h": 24 - } - }, - { - "filename": "catching_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 17, - "y": 132, - "w": 21, - "h": 24 - } - }, - { - "filename": "kings_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 17, - "y": 156, - "w": 23, - "h": 24 - } - }, { "filename": "lucky_punch_master", "rotated": false, @@ -717,12 +801,33 @@ "h": 24 }, "frame": { - "x": 17, - "y": 180, + "x": 91, + "y": 26, "w": 24, "h": 24 } }, + { + "filename": "kings_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 115, + "y": 26, + "w": 23, + "h": 24 + } + }, { "filename": "lucky_punch_ultra", "rotated": false, @@ -738,8 +843,8 @@ "h": 24 }, "frame": { - "x": 22, - "y": 204, + "x": 138, + "y": 22, "w": 24, "h": 24 } @@ -759,8 +864,8 @@ "h": 24 }, "frame": { - "x": 23, - "y": 228, + "x": 162, + "y": 21, "w": 24, "h": 24 } @@ -780,8 +885,8 @@ "h": 24 }, "frame": { - "x": 24, - "y": 252, + "x": 186, + "y": 21, "w": 24, "h": 24 } @@ -801,8 +906,8 @@ "h": 24 }, "frame": { - "x": 24, - "y": 276, + "x": 210, + "y": 21, "w": 24, "h": 24 } @@ -822,8 +927,8 @@ "h": 24 }, "frame": { - "x": 24, - "y": 300, + "x": 234, + "y": 21, "w": 24, "h": 24 } @@ -843,8 +948,8 @@ "h": 24 }, "frame": { - "x": 24, - "y": 324, + "x": 258, + "y": 21, "w": 24, "h": 24 } @@ -864,327 +969,12 @@ "h": 24 }, "frame": { - "x": 24, - "y": 348, + "x": 282, + "y": 21, "w": 24, "h": 24 } }, - { - "filename": "coupon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 24, - "y": 372, - "w": 23, - "h": 19 - } - }, - { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 47, - "y": 372, - "w": 23, - "h": 19 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 23, - "y": 58, - "w": 18, - "h": 24 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 41, - "y": 53, - "w": 18, - "h": 24 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 33, - "y": 82, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 33, - "y": 106, - "w": 18, - "h": 24 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 38, - "y": 130, - "w": 16, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 40, - "y": 154, - "w": 16, - "h": 24 - } - }, - { - "filename": "lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 41, - "y": 178, - "w": 17, - "h": 24 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 46, - "y": 202, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 47, - "y": 226, - "w": 17, - "h": 24 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 48, - "y": 250, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 48, - "y": 274, - "w": 22, - "h": 24 - } - }, - { - "filename": "reveal_glass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 48, - "y": 298, - "w": 23, - "h": 24 - } - }, - { - "filename": "berry_pouch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 48, - "y": 322, - "w": 23, - "h": 23 - } - }, { "filename": "clefairy_doll", "rotated": false, @@ -1200,8 +990,8 @@ "h": 23 }, "frame": { - "x": 48, - "y": 345, + "x": 306, + "y": 21, "w": 24, "h": 23 } @@ -1221,14 +1011,56 @@ "h": 23 }, "frame": { - "x": 70, - "y": 368, + "x": 330, + "y": 20, "w": 24, "h": 23 } }, { - "filename": "max_repel", + "filename": "expert_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 23 + }, + "frame": { + "x": 354, + "y": 20, + "w": 24, + "h": 23 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 378, + "y": 20, + "w": 18, + "h": 24 + } + }, + { + "filename": "carbos", "rotated": false, "trimmed": true, "sourceSize": { @@ -1242,12 +1074,33 @@ "h": 24 }, "frame": { - "x": 56, - "y": 27, + "x": 44, + "y": 58, "w": 16, "h": 24 } }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 21, + "y": 200, + "w": 22, + "h": 24 + } + }, { "filename": "oval_charm", "rotated": false, @@ -1263,14 +1116,14 @@ "h": 24 }, "frame": { - "x": 72, - "y": 26, + "x": 24, + "y": 224, "w": 21, "h": 24 } }, { - "filename": "red_orb", + "filename": "reveal_glass", "rotated": false, "trimmed": true, "sourceSize": { @@ -1278,62 +1131,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 4, "y": 4, - "w": 20, + "w": 23, "h": 24 }, "frame": { - "x": 93, - "y": 22, - "w": 20, + "x": 24, + "y": 248, + "w": 23, "h": 24 } }, { - "filename": "expert_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 113, - "y": 21, - "w": 24, - "h": 23 - } - }, - { - "filename": "hearthflame_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 137, - "y": 21, - "w": 24, - "h": 23 - } - }, - { - "filename": "leppa_berry", + "filename": "berry_pouch", "rotated": false, "trimmed": true, "sourceSize": { @@ -1343,55 +1154,13 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 24, + "w": 23, "h": 23 }, "frame": { - "x": 161, - "y": 21, - "w": 24, - "h": 23 - } - }, - { - "filename": "scope_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 185, - "y": 21, - "w": 24, - "h": 23 - } - }, - { - "filename": "twisted_spoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 209, - "y": 21, - "w": 24, + "x": 24, + "y": 272, + "w": 23, "h": 23 } }, @@ -1410,14 +1179,14 @@ "h": 23 }, "frame": { - "x": 233, - "y": 21, + "x": 24, + "y": 295, "w": 23, "h": 23 } }, { - "filename": "exp_balance", + "filename": "griseous_core", "rotated": false, "trimmed": true, "sourceSize": { @@ -1425,20 +1194,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 5, "y": 5, - "w": 24, - "h": 22 + "w": 23, + "h": 23 }, "frame": { - "x": 256, - "y": 21, - "w": 24, - "h": 22 + "x": 24, + "y": 318, + "w": 23, + "h": 23 } }, { - "filename": "exp_share", + "filename": "hearthflame_mask", "rotated": false, "trimmed": true, "sourceSize": { @@ -1447,19 +1216,166 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, + "y": 4, "w": 24, - "h": 22 + "h": 23 }, "frame": { - "x": 280, - "y": 20, + "x": 24, + "y": 341, "w": 24, - "h": 22 + "h": 23 } }, { - "filename": "peat_block", + "filename": "abomasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 24, + "y": 364, + "w": 16, + "h": 16 + } + }, + { + "filename": "absolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 37, + "y": 380, + "w": 16, + "h": 16 + } + }, + { + "filename": "aerodactylite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 40, + "y": 364, + "w": 16, + "h": 16 + } + }, + { + "filename": "aggronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 53, + "y": 380, + "w": 16, + "h": 16 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 39, + "y": 89, + "w": 18, + "h": 24 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 39, + "y": 113, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 39, + "y": 137, + "w": 18, + "h": 24 + } + }, + { + "filename": "silver_powder", "rotated": false, "trimmed": true, "sourceSize": { @@ -1468,15 +1384,267 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, + "y": 11, "w": 24, - "h": 22 + "h": 15 }, "frame": { - "x": 304, - "y": 20, + "x": 39, + "y": 161, "w": 24, - "h": 22 + "h": 15 + } + }, + { + "filename": "shiny_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 40, + "y": 176, + "w": 21, + "h": 24 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 43, + "y": 200, + "w": 18, + "h": 24 + } + }, + { + "filename": "hp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 45, + "y": 224, + "w": 16, + "h": 24 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 47, + "y": 248, + "w": 16, + "h": 24 + } + }, + { + "filename": "lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 47, + "y": 272, + "w": 17, + "h": 24 + } + }, + { + "filename": "max_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 47, + "y": 296, + "w": 17, + "h": 24 + } + }, + { + "filename": "adamant_crystal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 47, + "y": 320, + "w": 23, + "h": 21 + } + }, + { + "filename": "black_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 48, + "y": 341, + "w": 22, + "h": 23 + } + }, + { + "filename": "alakazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 56, + "y": 364, + "w": 16, + "h": 16 + } + }, + { + "filename": "altarianite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 69, + "y": 380, + "w": 16, + "h": 16 + } + }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 382, + "y": 0, + "w": 12, + "h": 17 + } + }, + { + "filename": "ability_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 9, + "w": 24, + "h": 14 + }, + "frame": { + "x": 138, + "y": 46, + "w": 24, + "h": 14 } }, { @@ -1494,8 +1662,8 @@ "h": 18 }, "frame": { - "x": 328, - "y": 24, + "x": 162, + "y": 45, "w": 24, "h": 18 } @@ -1515,119 +1683,14 @@ "h": 18 }, "frame": { - "x": 352, - "y": 24, + "x": 186, + "y": 45, "w": 24, "h": 18 } }, { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 376, - "y": 24, - "w": 15, - "h": 23 - } - }, - { - "filename": "pp_max", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 59, - "y": 51, - "w": 16, - "h": 24 - } - }, - { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 75, - "y": 50, - "w": 21, - "h": 24 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 96, - "y": 46, - "w": 17, - "h": 24 - } - }, - { - "filename": "griseous_core", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 113, - "y": 44, - "w": 23, - "h": 23 - } - }, - { - "filename": "rare_candy", + "filename": "exp_balance", "rotated": false, "trimmed": true, "sourceSize": { @@ -1637,18 +1700,18 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 23, - "h": 23 + "w": 24, + "h": 22 }, "frame": { - "x": 136, - "y": 44, - "w": 23, - "h": 23 + "x": 210, + "y": 45, + "w": 24, + "h": 22 } }, { - "filename": "rarer_candy", + "filename": "exp_share", "rotated": false, "trimmed": true, "sourceSize": { @@ -1658,18 +1721,18 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 23, - "h": 23 + "w": 24, + "h": 22 }, "frame": { - "x": 159, - "y": 44, - "w": 23, - "h": 23 + "x": 234, + "y": 45, + "w": 24, + "h": 22 } }, { - "filename": "stick", + "filename": "leppa_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -1679,18 +1742,18 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 23, + "w": 24, "h": 23 }, "frame": { - "x": 182, - "y": 44, - "w": 23, + "x": 258, + "y": 45, + "w": 24, "h": 23 } }, { - "filename": "black_belt", + "filename": "scope_lens", "rotated": false, "trimmed": true, "sourceSize": { @@ -1698,20 +1761,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, + "x": 4, + "y": 5, + "w": 24, "h": 23 }, "frame": { - "x": 205, - "y": 44, - "w": 22, + "x": 282, + "y": 45, + "w": 24, "h": 23 } }, { - "filename": "bug_tera_shard", + "filename": "twisted_spoon", "rotated": false, "trimmed": true, "sourceSize": { @@ -1719,20 +1782,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, + "x": 4, + "y": 5, + "w": 24, "h": 23 }, "frame": { - "x": 227, + "x": 306, "y": 44, - "w": 22, + "w": 24, "h": 23 } }, { - "filename": "dark_tera_shard", + "filename": "peat_block", "rotated": false, "trimmed": true, "sourceSize": { @@ -1740,100 +1803,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 + "x": 4, + "y": 5, + "w": 24, + "h": 22 }, "frame": { - "x": 249, - "y": 44, - "w": 22, - "h": 23 - } - }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 271, + "x": 330, "y": 43, - "w": 16, - "h": 24 - } - }, - { - "filename": "dragon_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 287, - "y": 42, - "w": 22, - "h": 23 - } - }, - { - "filename": "electric_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 309, - "y": 42, - "w": 22, - "h": 23 - } - }, - { - "filename": "fairy_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 331, - "y": 42, - "w": 22, - "h": 23 + "w": 24, + "h": 22 } }, { @@ -1851,14 +1830,14 @@ "h": 22 }, "frame": { - "x": 353, - "y": 42, + "x": 354, + "y": 43, "w": 23, "h": 22 } }, { - "filename": "leftovers", + "filename": "lock_capsule", "rotated": false, "trimmed": true, "sourceSize": { @@ -1866,81 +1845,18 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, + "x": 7, "y": 5, - "w": 15, + "w": 19, "h": 22 }, "frame": { - "x": 376, - "y": 47, - "w": 15, + "x": 377, + "y": 44, + "w": 19, "h": 22 } }, - { - "filename": "adamant_crystal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 353, - "y": 64, - "w": 23, - "h": 21 - } - }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 376, - "y": 69, - "w": 15, - "h": 15 - } - }, - { - "filename": "ability_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 24, - "h": 14 - }, - "frame": { - "x": 113, - "y": 67, - "w": 24, - "h": 14 - } - }, { "filename": "icy_reins_of_unity", "rotated": false, @@ -1956,12 +1872,54 @@ "h": 20 }, "frame": { - "x": 137, - "y": 67, + "x": 330, + "y": 65, "w": 24, "h": 20 } }, + { + "filename": "amulet_coin", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 354, + "y": 65, + "w": 23, + "h": 21 + } + }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 377, + "y": 66, + "w": 19, + "h": 22 + } + }, { "filename": "rusted_shield", "rotated": false, @@ -1977,7 +1935,7 @@ "h": 20 }, "frame": { - "x": 161, + "x": 306, "y": 67, "w": 24, "h": 20 @@ -1998,222 +1956,12 @@ "h": 20 }, "frame": { - "x": 185, - "y": 67, + "x": 330, + "y": 85, "w": 24, "h": 20 } }, - { - "filename": "shadow_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 209, - "y": 67, - "w": 24, - "h": 20 - } - }, - { - "filename": "soft_sand", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 233, - "y": 67, - "w": 24, - "h": 20 - } - }, - { - "filename": "amulet_coin", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 257, - "y": 67, - "w": 23, - "h": 21 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 96, - "y": 70, - "w": 17, - "h": 20 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 75, - "y": 74, - "w": 21, - "h": 23 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 59, - "y": 75, - "w": 16, - "h": 24 - } - }, - { - "filename": "fighting_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 51, - "y": 99, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 54, - "y": 122, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 56, - "y": 145, - "w": 22, - "h": 23 - } - }, - { - "filename": "flying_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 58, - "y": 168, - "w": 22, - "h": 23 - } - }, { "filename": "auspicious_armor", "rotated": false, @@ -2229,3078 +1977,12 @@ "h": 21 }, "frame": { - "x": 113, - "y": 81, + "x": 354, + "y": 86, "w": 23, "h": 21 } }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 136, - "y": 87, - "w": 23, - "h": 20 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 159, - "y": 87, - "w": 23, - "h": 21 - } - }, - { - "filename": "n_lunarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 182, - "y": 87, - "w": 23, - "h": 21 - } - }, - { - "filename": "n_solarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 205, - "y": 87, - "w": 23, - "h": 21 - } - }, - { - "filename": "rusted_sword", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 228, - "y": 87, - "w": 23, - "h": 22 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 251, - "y": 88, - "w": 23, - "h": 21 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 96, - "y": 90, - "w": 17, - "h": 23 - } - }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 113, - "y": 102, - "w": 23, - "h": 17 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 75, - "y": 97, - "w": 21, - "h": 21 - } - }, - { - "filename": "focus_sash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 76, - "y": 118, - "w": 22, - "h": 23 - } - }, - { - "filename": "ghost_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 78, - "y": 141, - "w": 22, - "h": 23 - } - }, - { - "filename": "grass_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 80, - "y": 164, - "w": 22, - "h": 23 - } - }, - { - "filename": "mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 136, - "y": 107, - "w": 23, - "h": 19 - } - }, - { - "filename": "pair_of_tickets", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 159, - "y": 108, - "w": 23, - "h": 19 - } - }, - { - "filename": "reviver_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 8, - "w": 23, - "h": 20 - }, - "frame": { - "x": 182, - "y": 108, - "w": 23, - "h": 20 - } - }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 205, - "y": 108, - "w": 23, - "h": 20 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 228, - "y": 109, - "w": 22, - "h": 19 - } - }, - { - "filename": "charcoal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 250, - "y": 109, - "w": 22, - "h": 22 - } - }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 58, - "y": 191, - "w": 15, - "h": 11 - } - }, - { - "filename": "repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 64, - "y": 202, - "w": 16, - "h": 24 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 64, - "y": 226, - "w": 16, - "h": 24 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 66, - "y": 250, - "w": 16, - "h": 24 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 70, - "y": 274, - "w": 16, - "h": 24 - } - }, - { - "filename": "ground_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 71, - "y": 298, - "w": 22, - "h": 23 - } - }, - { - "filename": "ice_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 71, - "y": 321, - "w": 22, - "h": 23 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 72, - "y": 344, - "w": 21, - "h": 23 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 80, - "y": 187, - "w": 22, - "h": 23 - } - }, - { - "filename": "normal_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 80, - "y": 210, - "w": 22, - "h": 23 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 80, - "y": 233, - "w": 23, - "h": 17 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 82, - "y": 250, - "w": 21, - "h": 23 - } - }, - { - "filename": "mystic_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 86, - "y": 273, - "w": 20, - "h": 23 - } - }, - { - "filename": "petaya_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 93, - "y": 296, - "w": 22, - "h": 23 - } - }, - { - "filename": "poison_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 93, - "y": 319, - "w": 22, - "h": 23 - } - }, - { - "filename": "psychic_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 93, - "y": 342, - "w": 22, - "h": 23 - } - }, - { - "filename": "reaper_cloth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 365, - "w": 22, - "h": 23 - } - }, - { - "filename": "dire_hit", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 98, - "y": 119, - "w": 22, - "h": 22 - } - }, - { - "filename": "rock_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 100, - "y": 141, - "w": 22, - "h": 23 - } - }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 102, - "y": 164, - "w": 21, - "h": 23 - } - }, - { - "filename": "steel_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 102, - "y": 187, - "w": 22, - "h": 23 - } - }, - { - "filename": "stellar_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 102, - "y": 210, - "w": 22, - "h": 23 - } - }, - { - "filename": "water_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 103, - "y": 233, - "w": 22, - "h": 23 - } - }, - { - "filename": "mystery_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 18 - }, - "frame": { - "x": 120, - "y": 119, - "w": 16, - "h": 18 - } - }, - { - "filename": "everstone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 17 - }, - "frame": { - "x": 103, - "y": 256, - "w": 20, - "h": 17 - } - }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 106, - "y": 273, - "w": 17, - "h": 23 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 136, - "y": 126, - "w": 23, - "h": 18 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 159, - "y": 127, - "w": 22, - "h": 20 - } - }, - { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 181, - "y": 128, - "w": 22, - "h": 21 - } - }, - { - "filename": "dna_splicers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 203, - "y": 128, - "w": 22, - "h": 22 - } - }, - { - "filename": "electirizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 225, - "y": 128, - "w": 22, - "h": 22 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 247, - "y": 131, - "w": 22, - "h": 19 - } - }, - { - "filename": "sachet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 115, - "y": 296, - "w": 18, - "h": 23 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 115, - "y": 319, - "w": 21, - "h": 23 - } - }, - { - "filename": "wide_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 115, - "y": 342, - "w": 22, - "h": 23 - } - }, - { - "filename": "enigma_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 116, - "y": 365, - "w": 22, - "h": 22 - } - }, - { - "filename": "fairy_feather", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 122, - "y": 144, - "w": 22, - "h": 20 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 123, - "y": 164, - "w": 22, - "h": 22 - } - }, - { - "filename": "guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 124, - "y": 186, - "w": 22, - "h": 22 - } - }, - { - "filename": "ice_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 124, - "y": 208, - "w": 22, - "h": 22 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 125, - "y": 230, - "w": 22, - "h": 22 - } - }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 144, - "y": 144, - "w": 12, - "h": 17 - } - }, - { - "filename": "liechi_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 156, - "y": 147, - "w": 22, - "h": 21 - } - }, - { - "filename": "malicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 178, - "y": 149, - "w": 22, - "h": 20 - } - }, - { - "filename": "memory_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 200, - "y": 150, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_dark", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 222, - "y": 150, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_dragon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 244, - "y": 150, - "w": 22, - "h": 22 - } - }, - { - "filename": "masterpiece_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 145, - "y": 168, - "w": 21, - "h": 18 - } - }, - { - "filename": "hard_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 146, - "y": 186, - "w": 20, - "h": 22 - } - }, - { - "filename": "memory_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 146, - "y": 208, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_fairy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 147, - "y": 230, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_fighting", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 166, - "y": 169, - "w": 22, - "h": 22 - } - }, - { - "filename": "mega_bracelet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 16 - }, - "frame": { - "x": 166, - "y": 191, - "w": 20, - "h": 16 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 168, - "y": 207, - "w": 17, - "h": 23 - } - }, - { - "filename": "berry_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 18, - "h": 22 - }, - "frame": { - "x": 169, - "y": 230, - "w": 18, - "h": 22 - } - }, - { - "filename": "memory_fire", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 188, - "y": 172, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_flying", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 210, - "y": 172, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_ghost", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 232, - "y": 172, - "w": 22, - "h": 22 - } - }, - { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 254, - "y": 172, - "w": 19, - "h": 22 - } - }, - { - "filename": "memory_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 186, - "y": 194, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 208, - "y": 194, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 230, - "y": 194, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_normal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 252, - "y": 194, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_normal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 252, - "y": 194, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_poison", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 266, - "y": 150, - "w": 22, - "h": 22 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 269, - "y": 131, - "w": 19, - "h": 19 - } - }, - { - "filename": "memory_psychic", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 272, - "y": 109, - "w": 22, - "h": 22 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 274, - "y": 88, - "w": 20, - "h": 21 - } - }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 280, - "y": 67, - "w": 21, - "h": 21 - } - }, - { - "filename": "memory_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 301, - "y": 65, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 323, - "y": 65, - "w": 22, - "h": 22 - } - }, - { - "filename": "memory_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 273, - "y": 172, - "w": 22, - "h": 22 - } - }, - { - "filename": "mini_black_hole", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 274, - "y": 194, - "w": 22, - "h": 22 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 187, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "scroll_of_darkness", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 209, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "scroll_of_waters", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 231, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "shed_shell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 253, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "starf_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 275, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "sweet_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 187, - "y": 238, - "w": 22, - "h": 21 - } - }, - { - "filename": "syrupy_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 209, - "y": 238, - "w": 22, - "h": 21 - } - }, - { - "filename": "tart_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 231, - "y": 238, - "w": 22, - "h": 21 - } - }, - { - "filename": "thunder_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 253, - "y": 238, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 275, - "y": 238, - "w": 22, - "h": 22 - } - }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 294, - "y": 88, - "w": 19, - "h": 22 - } - }, - { - "filename": "tm_dark", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 313, - "y": 87, - "w": 22, - "h": 22 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 294, - "y": 110, - "w": 21, - "h": 21 - } - }, - { - "filename": "tm_dragon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 288, - "y": 131, - "w": 22, - "h": 22 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 288, - "y": 153, - "w": 22, - "h": 19 - } - }, - { - "filename": "sitrus_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 315, - "y": 109, - "w": 20, - "h": 22 - } - }, - { - "filename": "tm_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 310, - "y": 131, - "w": 22, - "h": 22 - } - }, - { - "filename": "tera_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 310, - "y": 153, - "w": 22, - "h": 20 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 335, - "y": 87, - "w": 17, - "h": 22 - } - }, - { - "filename": "tm_fairy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 352, - "y": 85, - "w": 22, - "h": 22 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 374, - "y": 85, - "w": 17, - "h": 22 - } - }, - { - "filename": "tm_fighting", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 335, - "y": 109, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fire", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 332, - "y": 131, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_flying", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 357, - "y": 107, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ghost", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 332, - "y": 153, - "w": 22, - "h": 22 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 295, - "y": 173, - "w": 21, - "h": 21 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 296, - "y": 194, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 297, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 297, - "y": 238, - "w": 22, - "h": 22 - } - }, - { - "filename": "abomasite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 316, - "y": 173, - "w": 16, - "h": 16 - } - }, - { - "filename": "tm_poison", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 332, - "y": 175, - "w": 22, - "h": 22 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 318, - "y": 197, - "w": 21, - "h": 19 - } - }, - { - "filename": "tm_psychic", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 319, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 319, - "y": 238, - "w": 22, - "h": 22 - } - }, - { - "filename": "lum_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 339, - "y": 197, - "w": 20, - "h": 19 - } - }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 341, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 341, - "y": 238, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 125, - "y": 252, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_accuracy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 123, - "y": 274, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_attack", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 147, - "y": 252, - "w": 22, - "h": 22 - } - }, - { - "filename": "razor_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 18, - "h": 20 - }, - "frame": { - "x": 169, - "y": 252, - "w": 18, - "h": 20 - } - }, - { - "filename": "x_defense", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 145, - "y": 274, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_sp_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 133, - "y": 296, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_sp_def", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 136, - "y": 318, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_speed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 137, - "y": 340, - "w": 22, - "h": 22 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 138, - "y": 362, - "w": 20, - "h": 20 - } - }, - { - "filename": "sharp_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 187, - "y": 259, - "w": 21, - "h": 18 - } - }, - { - "filename": "unremarkable_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 208, - "y": 259, - "w": 21, - "h": 18 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 229, - "y": 259, - "w": 20, - "h": 20 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 249, - "y": 260, - "w": 20, - "h": 20 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 269, - "y": 260, - "w": 20, - "h": 20 - } - }, - { - "filename": "mb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 289, - "y": 260, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 309, - "y": 260, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 329, - "y": 260, - "w": 20, - "h": 20 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 349, - "y": 260, - "w": 19, - "h": 20 - } - }, { "filename": "spell_tag", "rotated": false, @@ -5316,119 +1998,14 @@ "h": 21 }, "frame": { - "x": 155, - "y": 296, + "x": 377, + "y": 88, "w": 19, "h": 21 } }, { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 158, - "y": 317, - "w": 19, - "h": 20 - } - }, - { - "filename": "hard_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 159, - "y": 337, - "w": 19, - "h": 20 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 167, - "y": 277, - "w": 19, - "h": 19 - } - }, - { - "filename": "razor_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 186, - "y": 277, - "w": 20, - "h": 19 - } - }, - { - "filename": "rb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 174, - "y": 296, - "w": 20, - "h": 20 - } - }, - { - "filename": "smooth_meteorite", + "filename": "max_potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -5437,208 +2014,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 206, - "y": 277, - "w": 20, - "h": 20 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 177, - "y": 316, - "w": 17, - "h": 20 - } - }, - { - "filename": "strange_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 226, - "y": 279, - "w": 20, - "h": 20 - } - }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 246, - "y": 280, - "w": 20, - "h": 20 - } - }, - { - "filename": "wl_ability_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 266, - "y": 280, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_antidote", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 286, - "y": 280, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_awakening", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 306, - "y": 280, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_burn_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 326, - "y": 280, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_custom_spliced", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 346, - "y": 280, - "w": 20, - "h": 18 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, + "y": 4, "w": 18, - "h": 19 + "h": 24 }, "frame": { - "x": 178, - "y": 336, + "x": 61, + "y": 176, "w": 18, - "h": 19 + "h": 24 } }, { - "filename": "wl_custom_thief", + "filename": "red_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -5647,19 +2035,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, + "y": 4, "w": 20, - "h": 18 + "h": 24 }, "frame": { - "x": 194, - "y": 297, + "x": 61, + "y": 200, "w": 20, - "h": 18 + "h": 24 } }, { - "filename": "wl_elixir", + "filename": "bug_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -5668,40 +2056,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, - "w": 20, - "h": 18 + "y": 4, + "w": 22, + "h": 23 }, "frame": { - "x": 194, - "y": 315, - "w": 20, - "h": 18 + "x": 61, + "y": 224, + "w": 22, + "h": 23 } }, { - "filename": "candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 11, - "w": 18, - "h": 18 - }, - "frame": { - "x": 196, - "y": 333, - "w": 18, - "h": 18 - } - }, - { - "filename": "wl_ether", + "filename": "dark_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -5710,19 +2077,40 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, - "w": 20, - "h": 18 + "y": 4, + "w": 22, + "h": 23 }, "frame": { - "x": 214, - "y": 299, - "w": 20, - "h": 18 + "x": 63, + "y": 247, + "w": 22, + "h": 23 } }, { - "filename": "wl_full_heal", + "filename": "dragon_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 64, + "y": 270, + "w": 21, + "h": 23 + } + }, + { + "filename": "dragon_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -5731,397 +2119,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, - "w": 20, - "h": 18 + "y": 4, + "w": 22, + "h": 23 }, "frame": { - "x": 214, - "y": 317, - "w": 20, - "h": 18 + "x": 64, + "y": 293, + "w": 22, + "h": 23 } }, { - "filename": "wl_full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 214, - "y": 335, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 234, - "y": 300, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 234, - "y": 318, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_ice_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 234, - "y": 336, - "w": 20, - "h": 18 - } - }, - { - "filename": "dark_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 254, - "y": 300, - "w": 18, - "h": 18 - } - }, - { - "filename": "light_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 254, - "y": 318, - "w": 18, - "h": 18 - } - }, - { - "filename": "wl_item_drop", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 272, - "y": 298, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_item_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 272, - "y": 316, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 292, - "y": 298, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 292, - "y": 316, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 312, - "y": 298, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 312, - "y": 316, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_paralyze_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 332, - "y": 298, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 332, - "y": 316, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_reset_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 254, - "y": 336, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 274, - "y": 334, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 294, - "y": 334, - "w": 20, - "h": 18 - } - }, - { - "filename": "relic_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 17, - "h": 16 - }, - "frame": { - "x": 314, - "y": 334, - "w": 17, - "h": 16 - } - }, - { - "filename": "absolite", + "filename": "max_repel", "rotated": false, "trimmed": true, "sourceSize": { @@ -6130,19 +2140,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, + "y": 4, "w": 16, - "h": 16 + "h": 24 }, "frame": { - "x": 331, - "y": 334, + "x": 70, + "y": 316, "w": 16, - "h": 16 + "h": 24 } }, { - "filename": "aerodactylite", + "filename": "pp_max", "rotated": false, "trimmed": true, "sourceSize": { @@ -6151,78 +2161,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, + "y": 4, "w": 16, - "h": 16 + "h": 24 }, "frame": { - "x": 352, - "y": 298, + "x": 70, + "y": 340, "w": 16, - "h": 16 - } - }, - { - "filename": "aggronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 352, - "y": 314, - "w": 16, - "h": 16 - } - }, - { - "filename": "alakazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 159, - "y": 357, - "w": 16, - "h": 16 - } - }, - { - "filename": "altarianite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 158, - "y": 373, - "w": 16, - "h": 16 + "h": 24 } }, { @@ -6240,8 +2187,8 @@ "h": 16 }, "frame": { - "x": 347, - "y": 334, + "x": 72, + "y": 364, "w": 16, "h": 16 } @@ -6261,12 +2208,705 @@ "h": 16 }, "frame": { - "x": 196, - "y": 351, + "x": 85, + "y": 380, "w": 16, "h": 16 } }, + { + "filename": "shadow_reins_of_unity", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 67, + "y": 50, + "w": 24, + "h": 20 + } + }, + { + "filename": "soft_sand", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 91, + "y": 50, + "w": 24, + "h": 20 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 115, + "y": 50, + "w": 23, + "h": 20 + } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 138, + "y": 60, + "w": 23, + "h": 17 + } + }, + { + "filename": "burn_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 161, + "y": 63, + "w": 23, + "h": 17 + } + }, + { + "filename": "chill_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 184, + "y": 63, + "w": 23, + "h": 17 + } + }, + { + "filename": "coupon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 207, + "y": 67, + "w": 23, + "h": 19 + } + }, + { + "filename": "golden_mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 230, + "y": 67, + "w": 23, + "h": 19 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 253, + "y": 68, + "w": 23, + "h": 21 + } + }, + { + "filename": "n_lunarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 276, + "y": 68, + "w": 23, + "h": 21 + } + }, + { + "filename": "douse_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 60, + "y": 70, + "w": 23, + "h": 17 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 57, + "y": 87, + "w": 23, + "h": 23 + } + }, + { + "filename": "rarer_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 57, + "y": 110, + "w": 23, + "h": 23 + } + }, + { + "filename": "stick", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 57, + "y": 133, + "w": 23, + "h": 23 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 63, + "y": 156, + "w": 19, + "h": 20 + } + }, + { + "filename": "mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 83, + "y": 70, + "w": 23, + "h": 19 + } + }, + { + "filename": "electric_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 80, + "y": 89, + "w": 22, + "h": 23 + } + }, + { + "filename": "fairy_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 80, + "y": 112, + "w": 22, + "h": 23 + } + }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 80, + "y": 135, + "w": 22, + "h": 21 + } + }, + { + "filename": "n_solarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 106, + "y": 70, + "w": 23, + "h": 21 + } + }, + { + "filename": "fighting_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 102, + "y": 91, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 102, + "y": 114, + "w": 22, + "h": 23 + } + }, + { + "filename": "blunder_policy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 19 + }, + "frame": { + "x": 102, + "y": 137, + "w": 22, + "h": 19 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 82, + "y": 156, + "w": 23, + "h": 20 + } + }, + { + "filename": "fire_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 79, + "y": 176, + "w": 22, + "h": 23 + } + }, + { + "filename": "flying_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 81, + "y": 199, + "w": 22, + "h": 23 + } + }, + { + "filename": "focus_sash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 83, + "y": 222, + "w": 22, + "h": 23 + } + }, + { + "filename": "ghost_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 85, + "y": 245, + "w": 22, + "h": 23 + } + }, + { + "filename": "grass_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 85, + "y": 268, + "w": 22, + "h": 23 + } + }, + { + "filename": "ground_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 86, + "y": 291, + "w": 22, + "h": 23 + } + }, + { + "filename": "ice_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 86, + "y": 314, + "w": 22, + "h": 23 + } + }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 86, + "y": 337, + "w": 22, + "h": 23 + } + }, + { + "filename": "big_nugget", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 88, + "y": 360, + "w": 20, + "h": 20 + } + }, { "filename": "banettite", "rotated": false, @@ -6282,12 +2922,222 @@ "h": 16 }, "frame": { - "x": 212, - "y": 353, + "x": 101, + "y": 380, "w": 16, "h": 16 } }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 105, + "y": 156, + "w": 20, + "h": 20 + } + }, + { + "filename": "normal_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 101, + "y": 176, + "w": 22, + "h": 23 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 103, + "y": 199, + "w": 21, + "h": 23 + } + }, + { + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 105, + "y": 222, + "w": 21, + "h": 23 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 107, + "y": 245, + "w": 20, + "h": 23 + } + }, + { + "filename": "petaya_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 107, + "y": 268, + "w": 22, + "h": 23 + } + }, + { + "filename": "poison_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 108, + "y": 291, + "w": 22, + "h": 23 + } + }, + { + "filename": "psychic_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 108, + "y": 314, + "w": 22, + "h": 23 + } + }, + { + "filename": "reaper_cloth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 108, + "y": 337, + "w": 22, + "h": 23 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 108, + "y": 360, + "w": 22, + "h": 20 + } + }, { "filename": "beedrillite", "rotated": false, @@ -6303,12 +3153,285 @@ "h": 16 }, "frame": { - "x": 228, - "y": 354, + "x": 117, + "y": 380, "w": 16, "h": 16 } }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 124, + "y": 91, + "w": 16, + "h": 24 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 124, + "y": 115, + "w": 16, + "h": 24 + } + }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 124, + "y": 139, + "w": 20, + "h": 17 + } + }, + { + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 125, + "y": 156, + "w": 19, + "h": 20 + } + }, + { + "filename": "rock_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 123, + "y": 176, + "w": 22, + "h": 23 + } + }, + { + "filename": "sharp_beak", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 124, + "y": 199, + "w": 21, + "h": 23 + } + }, + { + "filename": "steel_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 126, + "y": 222, + "w": 22, + "h": 23 + } + }, + { + "filename": "stellar_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 127, + "y": 245, + "w": 22, + "h": 23 + } + }, + { + "filename": "water_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 129, + "y": 268, + "w": 22, + "h": 23 + } + }, + { + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 130, + "y": 291, + "w": 21, + "h": 23 + } + }, + { + "filename": "wide_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 130, + "y": 314, + "w": 22, + "h": 23 + } + }, + { + "filename": "charcoal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 130, + "y": 337, + "w": 22, + "h": 22 + } + }, + { + "filename": "liechi_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 130, + "y": 359, + "w": 22, + "h": 21 + } + }, { "filename": "blastoisinite", "rotated": false, @@ -6324,8 +3447,8 @@ "h": 16 }, "frame": { - "x": 244, - "y": 354, + "x": 133, + "y": 380, "w": 16, "h": 16 } @@ -6345,12 +3468,915 @@ "h": 16 }, "frame": { - "x": 260, - "y": 354, + "x": 149, + "y": 380, "w": 16, "h": 16 } }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 140, + "y": 77, + "w": 21, + "h": 21 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 140, + "y": 98, + "w": 22, + "h": 22 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 140, + "y": 120, + "w": 22, + "h": 19 + } + }, + { + "filename": "relic_crown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 18 + }, + "frame": { + "x": 161, + "y": 80, + "w": 23, + "h": 18 + } + }, + { + "filename": "pair_of_tickets", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 184, + "y": 80, + "w": 23, + "h": 19 + } + }, + { + "filename": "dna_splicers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 162, + "y": 98, + "w": 22, + "h": 22 + } + }, + { + "filename": "rusted_sword", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 184, + "y": 99, + "w": 23, + "h": 22 + } + }, + { + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 207, + "y": 86, + "w": 22, + "h": 22 + } + }, + { + "filename": "enigma_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 229, + "y": 86, + "w": 22, + "h": 22 + } + }, + { + "filename": "fairy_feather", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 162, + "y": 120, + "w": 22, + "h": 20 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 144, + "y": 139, + "w": 18, + "h": 23 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 162, + "y": 140, + "w": 22, + "h": 22 + } + }, + { + "filename": "guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 184, + "y": 121, + "w": 22, + "h": 22 + } + }, + { + "filename": "ice_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 184, + "y": 143, + "w": 22, + "h": 22 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 251, + "y": 89, + "w": 23, + "h": 20 + } + }, + { + "filename": "wellspring_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 274, + "y": 89, + "w": 23, + "h": 21 + } + }, + { + "filename": "shock_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 207, + "y": 108, + "w": 23, + "h": 17 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 206, + "y": 125, + "w": 22, + "h": 22 + } + }, + { + "filename": "malicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 206, + "y": 147, + "w": 22, + "h": 20 + } + }, + { + "filename": "masterpiece_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 230, + "y": 108, + "w": 21, + "h": 18 + } + }, + { + "filename": "memory_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 228, + "y": 126, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_dark", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 228, + "y": 148, + "w": 22, + "h": 22 + } + }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 251, + "y": 109, + "w": 23, + "h": 17 + } + }, + { + "filename": "memory_dragon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 126, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_electric", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 148, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_fairy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 274, + "y": 110, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_fighting", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 272, + "y": 132, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_fire", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 272, + "y": 154, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_flying", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 145, + "y": 162, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_ghost", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 145, + "y": 184, + "w": 22, + "h": 22 + } + }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 167, + "y": 162, + "w": 17, + "h": 24 + } + }, + { + "filename": "memory_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 184, + "y": 165, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_ground", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 206, + "y": 167, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 228, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_normal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_normal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "golden_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 167, + "y": 186, + "w": 17, + "h": 20 + } + }, + { + "filename": "memory_poison", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 184, + "y": 187, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 206, + "y": 189, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 228, + "y": 192, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 192, + "w": 22, + "h": 22 + } + }, + { + "filename": "memory_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 272, + "y": 176, + "w": 22, + "h": 22 + } + }, + { + "filename": "mini_black_hole", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 272, + "y": 198, + "w": 22, + "h": 22 + } + }, { "filename": "cameruptite", "rotated": false, @@ -6366,12 +4392,1692 @@ "h": 16 }, "frame": { - "x": 276, - "y": 352, + "x": 145, + "y": 206, "w": 16, "h": 16 } }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 161, + "y": 206, + "w": 22, + "h": 22 + } + }, + { + "filename": "scroll_of_darkness", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 183, + "y": 209, + "w": 22, + "h": 22 + } + }, + { + "filename": "scroll_of_waters", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 205, + "y": 211, + "w": 22, + "h": 22 + } + }, + { + "filename": "shed_shell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 227, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "starf_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 249, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "sweet_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 271, + "y": 220, + "w": 22, + "h": 21 + } + }, + { + "filename": "repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 294, + "y": 132, + "w": 16, + "h": 24 + } + }, + { + "filename": "super_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 294, + "y": 156, + "w": 16, + "h": 24 + } + }, + { + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 294, + "y": 180, + "w": 16, + "h": 24 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 310, + "y": 87, + "w": 20, + "h": 21 + } + }, + { + "filename": "berry_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 296, + "y": 110, + "w": 18, + "h": 22 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 314, + "y": 108, + "w": 16, + "h": 24 + } + }, + { + "filename": "thunder_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 330, + "y": 105, + "w": 22, + "h": 22 + } + }, + { + "filename": "hard_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 310, + "y": 132, + "w": 20, + "h": 22 + } + }, + { + "filename": "tm_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 330, + "y": 127, + "w": 22, + "h": 22 + } + }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 310, + "y": 154, + "w": 20, + "h": 22 + } + }, + { + "filename": "tm_dark", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 330, + "y": 149, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dragon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 352, + "y": 107, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_electric", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 109, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fairy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 352, + "y": 129, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fighting", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "syrupy_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 352, + "y": 151, + "w": 22, + "h": 21 + } + }, + { + "filename": "tm_fire", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 153, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_flying", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 310, + "y": 176, + "w": 22, + "h": 22 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 332, + "y": 171, + "w": 20, + "h": 20 + } + }, + { + "filename": "tart_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 352, + "y": 172, + "w": 22, + "h": 21 + } + }, + { + "filename": "tm_ghost", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 175, + "w": 22, + "h": 22 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 294, + "y": 204, + "w": 19, + "h": 19 + } + }, + { + "filename": "lum_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 293, + "y": 223, + "w": 20, + "h": 19 + } + }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 313, + "y": 198, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ground", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 313, + "y": 220, + "w": 22, + "h": 22 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 335, + "y": 191, + "w": 17, + "h": 23 + } + }, + { + "filename": "tm_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 352, + "y": 193, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_poison", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 197, + "w": 22, + "h": 22 + } + }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 335, + "y": 214, + "w": 17, + "h": 23 + } + }, + { + "filename": "tm_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 352, + "y": 215, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 219, + "w": 22, + "h": 22 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 335, + "y": 237, + "w": 22, + "h": 20 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 357, + "y": 237, + "w": 17, + "h": 20 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 374, + "y": 241, + "w": 22, + "h": 22 + } + }, + { + "filename": "candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 165, + "y": 228, + "w": 18, + "h": 18 + } + }, + { + "filename": "tm_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 183, + "y": 231, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 205, + "y": 233, + "w": 22, + "h": 22 + } + }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 227, + "y": 236, + "w": 22, + "h": 19 + } + }, + { + "filename": "x_accuracy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 249, + "y": 236, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_attack", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 271, + "y": 241, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_defense", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 293, + "y": 242, + "w": 22, + "h": 22 + } + }, + { + "filename": "magnet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 315, + "y": 242, + "w": 20, + "h": 20 + } + }, + { + "filename": "x_sp_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 149, + "y": 246, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_sp_def", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 151, + "y": 268, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_speed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 151, + "y": 290, + "w": 22, + "h": 22 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 152, + "y": 312, + "w": 21, + "h": 21 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 152, + "y": 333, + "w": 21, + "h": 21 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 152, + "y": 354, + "w": 21, + "h": 21 + } + }, + { + "filename": "mystery_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 18 + }, + "frame": { + "x": 149, + "y": 228, + "w": 16, + "h": 18 + } + }, + { + "filename": "metal_alloy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 335, + "y": 257, + "w": 21, + "h": 19 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 356, + "y": 257, + "w": 18, + "h": 19 + } + }, + { + "filename": "mb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 315, + "y": 262, + "w": 20, + "h": 20 + } + }, + { + "filename": "sharp_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 374, + "y": 263, + "w": 21, + "h": 18 + } + }, + { + "filename": "unremarkable_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 335, + "y": 276, + "w": 21, + "h": 18 + } + }, + { + "filename": "dark_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 356, + "y": 276, + "w": 18, + "h": 18 + } + }, + { + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 374, + "y": 281, + "w": 20, + "h": 20 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 173, + "y": 282, + "w": 15, + "h": 23 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 173, + "y": 305, + "w": 17, + "h": 23 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 173, + "y": 328, + "w": 17, + "h": 22 + } + }, + { + "filename": "soothe_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 173, + "y": 350, + "w": 17, + "h": 22 + } + }, + { + "filename": "light_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 173, + "y": 264, + "w": 18, + "h": 18 + } + }, + { + "filename": "relic_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 15, + "h": 11 + }, + "frame": { + "x": 171, + "y": 253, + "w": 15, + "h": 11 + } + }, + { + "filename": "leftovers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 15, + "h": 22 + }, + "frame": { + "x": 188, + "y": 282, + "w": 15, + "h": 22 + } + }, + { + "filename": "hard_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 190, + "y": 304, + "w": 19, + "h": 20 + } + }, + { + "filename": "pb_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 190, + "y": 324, + "w": 20, + "h": 20 + } + }, + { + "filename": "rb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 190, + "y": 344, + "w": 20, + "h": 20 + } + }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 191, + "y": 263, + "w": 19, + "h": 19 + } + }, + { + "filename": "smooth_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 210, + "y": 255, + "w": 20, + "h": 20 + } + }, + { + "filename": "razor_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 18, + "h": 20 + }, + "frame": { + "x": 230, + "y": 255, + "w": 18, + "h": 20 + } + }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 248, + "y": 258, + "w": 20, + "h": 19 + } + }, + { + "filename": "strange_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 268, + "y": 263, + "w": 20, + "h": 20 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 288, + "y": 264, + "w": 20, + "h": 20 + } + }, + { + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 190, + "y": 364, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_antidote", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 210, + "y": 275, + "w": 20, + "h": 18 + } + }, { "filename": "charizardite_x", "rotated": false, @@ -6387,12 +6093,222 @@ "h": 16 }, "frame": { - "x": 292, - "y": 352, + "x": 230, + "y": 275, "w": 16, "h": 16 } }, + { + "filename": "wl_awakening", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 246, + "y": 277, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_burn_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 266, + "y": 283, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_custom_spliced", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 286, + "y": 284, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_custom_thief", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 209, + "y": 293, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 210, + "y": 311, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 210, + "y": 329, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 210, + "y": 347, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 210, + "y": 365, + "w": 20, + "h": 18 + } + }, + { + "filename": "candy_overlay", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 12, + "w": 16, + "h": 15 + }, + "frame": { + "x": 230, + "y": 291, + "w": 16, + "h": 15 + } + }, + { + "filename": "wl_guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 246, + "y": 295, + "w": 20, + "h": 18 + } + }, { "filename": "charizardite_y", "rotated": false, @@ -6408,12 +6324,117 @@ "h": 16 }, "frame": { - "x": 308, - "y": 352, + "x": 230, + "y": 306, "w": 16, "h": 16 } }, + { + "filename": "wl_hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 230, + "y": 322, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_ice_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 230, + "y": 340, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_item_drop", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 230, + "y": 358, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_item_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 266, + "y": 301, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 286, + "y": 302, + "w": 20, + "h": 18 + } + }, { "filename": "diancite", "rotated": false, @@ -6429,12 +6450,96 @@ "h": 16 }, "frame": { - "x": 324, - "y": 350, + "x": 250, + "y": 313, "w": 16, "h": 16 } }, + { + "filename": "wl_max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 250, + "y": 329, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 250, + "y": 347, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 250, + "y": 365, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_paralyze_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 230, + "y": 376, + "w": 20, + "h": 18 + } + }, { "filename": "galladite", "rotated": false, @@ -6450,12 +6555,33 @@ "h": 16 }, "frame": { - "x": 340, - "y": 350, + "x": 270, + "y": 319, "w": 16, "h": 16 } }, + { + "filename": "wl_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 286, + "y": 320, + "w": 20, + "h": 18 + } + }, { "filename": "garchompite", "rotated": false, @@ -6471,12 +6597,75 @@ "h": 16 }, "frame": { - "x": 356, - "y": 350, + "x": 270, + "y": 335, "w": 16, "h": 16 } }, + { + "filename": "wl_reset_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 270, + "y": 351, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 270, + "y": 369, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 165, + "y": 375, + "w": 20, + "h": 18 + } + }, { "filename": "gardevoirite", "rotated": false, @@ -6492,8 +6681,8 @@ "h": 16 }, "frame": { - "x": 354, - "y": 131, + "x": 290, + "y": 338, "w": 16, "h": 16 } @@ -6513,8 +6702,8 @@ "h": 16 }, "frame": { - "x": 354, - "y": 147, + "x": 290, + "y": 354, "w": 16, "h": 16 } @@ -6534,8 +6723,8 @@ "h": 16 }, "frame": { - "x": 354, - "y": 163, + "x": 290, + "y": 370, "w": 16, "h": 16 } @@ -6555,8 +6744,8 @@ "h": 16 }, "frame": { - "x": 354, - "y": 179, + "x": 306, + "y": 284, "w": 16, "h": 16 } @@ -6576,8 +6765,8 @@ "h": 16 }, "frame": { - "x": 359, - "y": 195, + "x": 306, + "y": 300, "w": 16, "h": 16 } @@ -6597,8 +6786,8 @@ "h": 16 }, "frame": { - "x": 370, - "y": 129, + "x": 306, + "y": 316, "w": 16, "h": 16 } @@ -6618,8 +6807,8 @@ "h": 16 }, "frame": { - "x": 370, - "y": 145, + "x": 306, + "y": 332, "w": 16, "h": 16 } @@ -6639,8 +6828,8 @@ "h": 16 }, "frame": { - "x": 370, - "y": 161, + "x": 306, + "y": 348, "w": 16, "h": 16 } @@ -6660,8 +6849,8 @@ "h": 16 }, "frame": { - "x": 370, - "y": 177, + "x": 306, + "y": 364, "w": 16, "h": 16 } @@ -6681,8 +6870,8 @@ "h": 16 }, "frame": { - "x": 375, - "y": 193, + "x": 306, + "y": 380, "w": 16, "h": 16 } @@ -6702,8 +6891,8 @@ "h": 16 }, "frame": { - "x": 375, - "y": 209, + "x": 322, + "y": 294, "w": 16, "h": 16 } @@ -6723,8 +6912,8 @@ "h": 16 }, "frame": { - "x": 363, - "y": 225, + "x": 338, + "y": 294, "w": 16, "h": 16 } @@ -6744,8 +6933,8 @@ "h": 16 }, "frame": { - "x": 363, - "y": 241, + "x": 322, + "y": 310, "w": 16, "h": 16 } @@ -6765,33 +6954,12 @@ "h": 16 }, "frame": { - "x": 368, - "y": 257, + "x": 354, + "y": 294, "w": 16, "h": 16 } }, - { - "filename": "candy_overlay", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 16, - "h": 15 - }, - "frame": { - "x": 368, - "y": 273, - "w": 16, - "h": 15 - } - }, { "filename": "metagrossite", "rotated": false, @@ -6807,8 +6975,8 @@ "h": 16 }, "frame": { - "x": 368, - "y": 288, + "x": 322, + "y": 326, "w": 16, "h": 16 } @@ -6828,8 +6996,8 @@ "h": 16 }, "frame": { - "x": 368, - "y": 304, + "x": 338, + "y": 310, "w": 16, "h": 16 } @@ -6849,8 +7017,8 @@ "h": 16 }, "frame": { - "x": 368, - "y": 320, + "x": 322, + "y": 342, "w": 16, "h": 16 } @@ -6870,8 +7038,8 @@ "h": 16 }, "frame": { - "x": 175, - "y": 357, + "x": 338, + "y": 326, "w": 16, "h": 16 } @@ -6891,8 +7059,8 @@ "h": 16 }, "frame": { - "x": 174, - "y": 373, + "x": 354, + "y": 310, "w": 16, "h": 16 } @@ -6912,8 +7080,8 @@ "h": 16 }, "frame": { - "x": 276, - "y": 368, + "x": 322, + "y": 358, "w": 16, "h": 16 } @@ -6933,8 +7101,8 @@ "h": 16 }, "frame": { - "x": 292, - "y": 368, + "x": 338, + "y": 342, "w": 16, "h": 16 } @@ -6954,8 +7122,8 @@ "h": 16 }, "frame": { - "x": 308, - "y": 368, + "x": 354, + "y": 326, "w": 16, "h": 16 } @@ -6975,8 +7143,8 @@ "h": 16 }, "frame": { - "x": 324, - "y": 366, + "x": 322, + "y": 374, "w": 16, "h": 16 } @@ -6996,8 +7164,8 @@ "h": 16 }, "frame": { - "x": 340, - "y": 366, + "x": 338, + "y": 358, "w": 16, "h": 16 } @@ -7017,8 +7185,8 @@ "h": 16 }, "frame": { - "x": 356, - "y": 366, + "x": 354, + "y": 342, "w": 16, "h": 16 } @@ -7038,8 +7206,8 @@ "h": 16 }, "frame": { - "x": 191, - "y": 367, + "x": 338, + "y": 374, "w": 16, "h": 16 } @@ -7059,8 +7227,8 @@ "h": 16 }, "frame": { - "x": 207, - "y": 369, + "x": 354, + "y": 358, "w": 16, "h": 16 } @@ -7080,8 +7248,8 @@ "h": 16 }, "frame": { - "x": 223, - "y": 370, + "x": 354, + "y": 374, "w": 16, "h": 16 } @@ -7101,8 +7269,8 @@ "h": 16 }, "frame": { - "x": 239, - "y": 370, + "x": 370, + "y": 301, "w": 16, "h": 16 } @@ -7122,8 +7290,8 @@ "h": 16 }, "frame": { - "x": 255, - "y": 370, + "x": 370, + "y": 317, "w": 16, "h": 16 } @@ -7143,8 +7311,8 @@ "h": 16 }, "frame": { - "x": 372, - "y": 336, + "x": 370, + "y": 333, "w": 16, "h": 16 } @@ -7164,8 +7332,8 @@ "h": 16 }, "frame": { - "x": 372, - "y": 352, + "x": 370, + "y": 349, "w": 16, "h": 16 } @@ -7185,11 +7353,32 @@ "h": 16 }, "frame": { - "x": 372, - "y": 368, + "x": 370, + "y": 365, "w": 16, "h": 16 } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 370, + "y": 381, + "w": 15, + "h": 15 + } } ] } @@ -7197,6 +7386,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bda718c15def8b97caee75dc31add8c1:50d57f91c9db9f806a878fdee40ed0cb:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:e6d832697add1029764f6145e5fa98b7:47250d3d95167f73038d290f7a73b96e:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 53ba858c5..7ddd284fa 100644 Binary files a/public/images/items.png and b/public/images/items.png differ diff --git a/public/images/items/bronze_ribbon.png b/public/images/items/bronze_ribbon.png new file mode 100644 index 000000000..eb9b926c5 Binary files /dev/null and b/public/images/items/bronze_ribbon.png differ diff --git a/public/images/items/burn_drive.png b/public/images/items/burn_drive.png new file mode 100644 index 000000000..47ad9cc8f Binary files /dev/null and b/public/images/items/burn_drive.png differ diff --git a/public/images/items/chill_drive.png b/public/images/items/chill_drive.png new file mode 100644 index 000000000..d5ef99b16 Binary files /dev/null and b/public/images/items/chill_drive.png differ diff --git a/public/images/items/douse_drive.png b/public/images/items/douse_drive.png new file mode 100644 index 000000000..0f9f780e5 Binary files /dev/null and b/public/images/items/douse_drive.png differ diff --git a/public/images/items/great_ribbon.png b/public/images/items/great_ribbon.png new file mode 100644 index 000000000..720c0d853 Binary files /dev/null and b/public/images/items/great_ribbon.png differ diff --git a/public/images/items/master_ribbon.png b/public/images/items/master_ribbon.png new file mode 100644 index 000000000..86be493b7 Binary files /dev/null and b/public/images/items/master_ribbon.png differ diff --git a/public/images/items/rogue_ribbon.png b/public/images/items/rogue_ribbon.png new file mode 100644 index 000000000..85986d93c Binary files /dev/null and b/public/images/items/rogue_ribbon.png differ diff --git a/public/images/items/shock_drive.png b/public/images/items/shock_drive.png new file mode 100644 index 000000000..e0bcc66f2 Binary files /dev/null and b/public/images/items/shock_drive.png differ diff --git a/public/images/items/ultra_ribbon.png b/public/images/items/ultra_ribbon.png new file mode 100644 index 000000000..69dc7365b Binary files /dev/null and b/public/images/items/ultra_ribbon.png differ diff --git a/public/images/pokemon/676-dandy.json b/public/images/pokemon/676-dandy.json index 44ac790a4..f7a72a0d5 100644 --- a/public/images/pokemon/676-dandy.json +++ b/public/images/pokemon/676-dandy.json @@ -4,30 +4,30 @@ "image": "676-dandy.png", "format": "RGBA8888", "size": { - "w": 71, - "h": 71 + "w": 65, + "h": 65 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 56, - "h": 71 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 71 + "x": 22, + "y": 15, + "w": 50, + "h": 65 }, "frame": { "x": 0, "y": 0, - "w": 56, - "h": 71 + "w": 50, + "h": 65 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:29165e5c573c8a4235076355ce5d29d5:17a1912fd81d23ce8a7209e27ad3e9ed:b5a287256e260744fe6660dc2ceefd11$" + "smartupdate": "$TexturePacker:SmartUpdate:c09947cc1f66b7a7bf844a7caaa3bd76:20ba7e14cce8a9ee80955d94d19ae46f:b5a287256e260744fe6660dc2ceefd11$" } } diff --git a/public/images/pokemon/676-dandy.png b/public/images/pokemon/676-dandy.png index 738b9eaec..1e9f9b7bb 100644 Binary files a/public/images/pokemon/676-dandy.png and b/public/images/pokemon/676-dandy.png differ diff --git a/public/images/pokemon/676-debutante.json b/public/images/pokemon/676-debutante.json index f547be68f..13f12a90a 100644 --- a/public/images/pokemon/676-debutante.json +++ b/public/images/pokemon/676-debutante.json @@ -4,30 +4,30 @@ "image": "676-debutante.png", "format": "RGBA8888", "size": { - "w": 67, - "h": 67 + "w": 61, + "h": 61 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 56, - "h": 67 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 67 + "x": 20, + "y": 19, + "w": 50, + "h": 61 }, "frame": { "x": 0, "y": 0, - "w": 56, - "h": 67 + "w": 50, + "h": 61 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:689efba1d73755e99f598016fd321c3c:07d06d321fff31976e1b993edb972e4f:bf2f862a1c8881133f9f3ffbf44602fa$" + "smartupdate": "$TexturePacker:SmartUpdate:107780a0e7447bf89ae4998e24021f8b:7623c7ab8d7b6bc5f755e8a1f81ea257:bf2f862a1c8881133f9f3ffbf44602fa$" } } diff --git a/public/images/pokemon/676-debutante.png b/public/images/pokemon/676-debutante.png index 2be51b49d..92390b17f 100644 Binary files a/public/images/pokemon/676-debutante.png and b/public/images/pokemon/676-debutante.png differ diff --git a/public/images/pokemon/676-diamond.json b/public/images/pokemon/676-diamond.json index dec7fd8ea..4fbb88966 100644 --- a/public/images/pokemon/676-diamond.json +++ b/public/images/pokemon/676-diamond.json @@ -4,30 +4,30 @@ "image": "676-diamond.png", "format": "RGBA8888", "size": { - "w": 74, - "h": 74 + "w": 68, + "h": 68 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 53, - "h": 74 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 74 + "x": 24, + "y": 12, + "w": 47, + "h": 68 }, "frame": { "x": 0, "y": 0, - "w": 53, - "h": 74 + "w": 47, + "h": 68 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b33f3de937219e7763316531398d7bbd:c7e104da9393ec52b9e6d37f92fc20d9:88c467fc09249b0d2f579d44eacd528d$" + "smartupdate": "$TexturePacker:SmartUpdate:90477dc67c3429f2f0430f0a868ed85c:bd69660307b7d945313b73a256c24d57:88c467fc09249b0d2f579d44eacd528d$" } } diff --git a/public/images/pokemon/676-diamond.png b/public/images/pokemon/676-diamond.png index 5662825df..3915b78ec 100644 Binary files a/public/images/pokemon/676-diamond.png and b/public/images/pokemon/676-diamond.png differ diff --git a/public/images/pokemon/676-heart.json b/public/images/pokemon/676-heart.json index a16c480e3..ac8ea41b3 100644 --- a/public/images/pokemon/676-heart.json +++ b/public/images/pokemon/676-heart.json @@ -4,30 +4,30 @@ "image": "676-heart.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 66, + "h": 66 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 54, - "h": 72 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 72 + "x": 24, + "y": 14, + "w": 48, + "h": 66 }, "frame": { "x": 0, "y": 0, - "w": 54, - "h": 72 + "w": 48, + "h": 66 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:15e433a2269dd4043b1614811a1b8fbd:421a40542b16cdb2cc154c85e963b40d:e11d4dd16bff2ef69bc5ca683c44ca7c$" + "smartupdate": "$TexturePacker:SmartUpdate:a9b1c7a73abb563b1ecadad8b517794e:2273c7342204f52860d8e96670ddf46a:e11d4dd16bff2ef69bc5ca683c44ca7c$" } } diff --git a/public/images/pokemon/676-heart.png b/public/images/pokemon/676-heart.png index 2747c376b..993272086 100644 Binary files a/public/images/pokemon/676-heart.png and b/public/images/pokemon/676-heart.png differ diff --git a/public/images/pokemon/676-kabuki.json b/public/images/pokemon/676-kabuki.json index fa358e848..68e5b1839 100644 --- a/public/images/pokemon/676-kabuki.json +++ b/public/images/pokemon/676-kabuki.json @@ -4,30 +4,30 @@ "image": "676-kabuki.png", "format": "RGBA8888", "size": { - "w": 70, - "h": 70 + "w": 64, + "h": 64 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 58, - "h": 70 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 70 + "x": 22, + "y": 16, + "w": 52, + "h": 64 }, "frame": { "x": 0, "y": 0, - "w": 58, - "h": 70 + "w": 52, + "h": 64 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7f4056b1c055475f905d048c8d8d2969:08eecd31f557298e1570ec3490acffe2:c3cad56aa65d2ee971ceebc435a14ee6$" + "smartupdate": "$TexturePacker:SmartUpdate:d36abbc31bcd28664e28eb50f8e4719d:43c9d8bb344b7a1373b93f493badb47e:c3cad56aa65d2ee971ceebc435a14ee6$" } } diff --git a/public/images/pokemon/676-kabuki.png b/public/images/pokemon/676-kabuki.png index 1a9a2ad16..c4f6473c7 100644 Binary files a/public/images/pokemon/676-kabuki.png and b/public/images/pokemon/676-kabuki.png differ diff --git a/public/images/pokemon/676-la-reine.json b/public/images/pokemon/676-la-reine.json index 1b7457c31..39ffdb2a6 100644 --- a/public/images/pokemon/676-la-reine.json +++ b/public/images/pokemon/676-la-reine.json @@ -4,30 +4,30 @@ "image": "676-la-reine.png", "format": "RGBA8888", "size": { - "w": 69, - "h": 69 + "w": 63, + "h": 63 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 55, - "h": 69 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 69 + "x": 23, + "y": 17, + "w": 49, + "h": 63 }, "frame": { "x": 0, "y": 0, - "w": 55, - "h": 69 + "w": 49, + "h": 63 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d209428aca72f49f1e9ee3e97f1c18ab:c56ae957d7acb10c7373b842af3a8786:b99821e87dffda3297dd25a224a9029f$" + "smartupdate": "$TexturePacker:SmartUpdate:81b2b5d853a3d2527630ca0b2fea6569:98097941483e509b7962c50b179d132f:b99821e87dffda3297dd25a224a9029f$" } } diff --git a/public/images/pokemon/676-la-reine.png b/public/images/pokemon/676-la-reine.png index 1ca19430e..e649e6d74 100644 Binary files a/public/images/pokemon/676-la-reine.png and b/public/images/pokemon/676-la-reine.png differ diff --git a/public/images/pokemon/676-matron.json b/public/images/pokemon/676-matron.json index b85aebf61..1479610e7 100644 --- a/public/images/pokemon/676-matron.json +++ b/public/images/pokemon/676-matron.json @@ -4,30 +4,30 @@ "image": "676-matron.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 62, + "h": 62 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 52, - "h": 68 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 52, - "h": 68 + "x": 23, + "y": 18, + "w": 46, + "h": 62 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 68 + "w": 46, + "h": 62 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:698fab0e5221743b912637e774bfaecd:72a9977db421d061829c639e3b50a617:020798583d07c479020bb0af34cf8bb6$" + "smartupdate": "$TexturePacker:SmartUpdate:50d9857668a013306b96adc3777a22b2:7d3708f1b5b6eeb8419815fc6734bf06:020798583d07c479020bb0af34cf8bb6$" } } diff --git a/public/images/pokemon/676-matron.png b/public/images/pokemon/676-matron.png index 0ea64fcd5..98142c416 100644 Binary files a/public/images/pokemon/676-matron.png and b/public/images/pokemon/676-matron.png differ diff --git a/public/images/pokemon/676-pharaoh.json b/public/images/pokemon/676-pharaoh.json index abd2fab06..6497ddaf1 100644 --- a/public/images/pokemon/676-pharaoh.json +++ b/public/images/pokemon/676-pharaoh.json @@ -4,30 +4,30 @@ "image": "676-pharaoh.png", "format": "RGBA8888", "size": { - "w": 69, - "h": 69 + "w": 63, + "h": 63 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 52, - "h": 69 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 52, - "h": 69 + "x": 25, + "y": 17, + "w": 46, + "h": 63 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 69 + "w": 46, + "h": 63 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5c1df95bcf0d53d4f1b9f1bf77690598:623b4bc6698ef1a984b6bad42e68115b:904b7ab6f57249c96beea4b5f72deb53$" + "smartupdate": "$TexturePacker:SmartUpdate:69f1be06f9a7175f294267b08e7ba275:42e7e4068e30b78248d3629cffa5d2ec:904b7ab6f57249c96beea4b5f72deb53$" } } diff --git a/public/images/pokemon/676-pharaoh.png b/public/images/pokemon/676-pharaoh.png index d3019440c..cced07231 100644 Binary files a/public/images/pokemon/676-pharaoh.png and b/public/images/pokemon/676-pharaoh.png differ diff --git a/public/images/pokemon/676-star.json b/public/images/pokemon/676-star.json index e5442941a..aeb84ebb1 100644 --- a/public/images/pokemon/676-star.json +++ b/public/images/pokemon/676-star.json @@ -4,30 +4,30 @@ "image": "676-star.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 66, + "h": 66 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 56, - "h": 72 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 72 + "x": 24, + "y": 14, + "w": 50, + "h": 66 }, "frame": { "x": 0, "y": 0, - "w": 56, - "h": 72 + "w": 50, + "h": 66 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:31c1ce60aa953fb647ff40c50ac54cf1:d7eefc05e299310d05d389e05997e449:dd7fedf66b493b0bbdef5d25e0041dd8$" + "smartupdate": "$TexturePacker:SmartUpdate:fde8824a7749541f5af1cc14e6281670:204c6eb602358a5c7c1389b42317ffce:dd7fedf66b493b0bbdef5d25e0041dd8$" } } diff --git a/public/images/pokemon/676-star.png b/public/images/pokemon/676-star.png index de93346cb..7a1044bda 100644 Binary files a/public/images/pokemon/676-star.png and b/public/images/pokemon/676-star.png differ diff --git a/public/images/pokemon/back/676-dandy.json b/public/images/pokemon/back/676-dandy.json index 15491bd02..a1086d11f 100644 --- a/public/images/pokemon/back/676-dandy.json +++ b/public/images/pokemon/back/676-dandy.json @@ -4,30 +4,30 @@ "image": "676-dandy.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 66, + "h": 66 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 62, - "h": 72 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 72 + "x": 20, + "y": 14, + "w": 56, + "h": 66 }, "frame": { "x": 0, "y": 0, - "w": 62, - "h": 72 + "w": 56, + "h": 66 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:92d02eca8d05166d15bfa8b79ac478b9:f01538e7a19ca3d0d2fea48cd27d8a4c:b5a287256e260744fe6660dc2ceefd11$" + "smartupdate": "$TexturePacker:SmartUpdate:24899e1e616c6a0b9143d36903f9249e:8132d78c7f1f4ab0f673c82868b6a090:b5a287256e260744fe6660dc2ceefd11$" } } diff --git a/public/images/pokemon/back/676-dandy.png b/public/images/pokemon/back/676-dandy.png index 634a2b0c8..f80525496 100644 Binary files a/public/images/pokemon/back/676-dandy.png and b/public/images/pokemon/back/676-dandy.png differ diff --git a/public/images/pokemon/back/676-debutante.json b/public/images/pokemon/back/676-debutante.json index b0405824a..038880720 100644 --- a/public/images/pokemon/back/676-debutante.json +++ b/public/images/pokemon/back/676-debutante.json @@ -4,30 +4,30 @@ "image": "676-debutante.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 62, + "h": 62 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 57, - "h": 68 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 68 + "x": 25, + "y": 18, + "w": 51, + "h": 62 }, "frame": { "x": 0, "y": 0, - "w": 57, - "h": 68 + "w": 51, + "h": 62 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:76ef75ea5c9561531c220cdb7f78934d:6f39eb82deb32d251df708f5d4edc9f1:bf2f862a1c8881133f9f3ffbf44602fa$" + "smartupdate": "$TexturePacker:SmartUpdate:ba172ad89c93e6e6f36f621c38e54754:7c9d0d13f309221141cd334833e412a5:bf2f862a1c8881133f9f3ffbf44602fa$" } } diff --git a/public/images/pokemon/back/676-debutante.png b/public/images/pokemon/back/676-debutante.png index 3a7a0d7ab..507ea4add 100644 Binary files a/public/images/pokemon/back/676-debutante.png and b/public/images/pokemon/back/676-debutante.png differ diff --git a/public/images/pokemon/back/676-diamond.json b/public/images/pokemon/back/676-diamond.json index 365afd2bd..ef5a64e38 100644 --- a/public/images/pokemon/back/676-diamond.json +++ b/public/images/pokemon/back/676-diamond.json @@ -4,30 +4,30 @@ "image": "676-diamond.png", "format": "RGBA8888", "size": { - "w": 74, - "h": 74 + "w": 68, + "h": 68 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 51, - "h": 74 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 51, - "h": 74 + "x": 27, + "y": 12, + "w": 45, + "h": 68 }, "frame": { "x": 0, "y": 0, - "w": 51, - "h": 74 + "w": 45, + "h": 68 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d2b094f0534f6acd2e5bbe67b8e94fa8:47037a1746645a551e31781cb8262e1f:88c467fc09249b0d2f579d44eacd528d$" + "smartupdate": "$TexturePacker:SmartUpdate:0a6f3993923b87e1c16c84b1aa8c3705:6d59d20d1b0cd07c3e7a16eadf0de4cf:88c467fc09249b0d2f579d44eacd528d$" } } diff --git a/public/images/pokemon/back/676-diamond.png b/public/images/pokemon/back/676-diamond.png index d737c62b5..9498e4e75 100644 Binary files a/public/images/pokemon/back/676-diamond.png and b/public/images/pokemon/back/676-diamond.png differ diff --git a/public/images/pokemon/back/676-heart.json b/public/images/pokemon/back/676-heart.json index 81c1c4d89..b51d7b201 100644 --- a/public/images/pokemon/back/676-heart.json +++ b/public/images/pokemon/back/676-heart.json @@ -4,30 +4,30 @@ "image": "676-heart.png", "format": "RGBA8888", "size": { - "w": 71, - "h": 71 + "w": 65, + "h": 65 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 52, - "h": 71 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 52, - "h": 71 + "x": 26, + "y": 15, + "w": 46, + "h": 65 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 71 + "w": 46, + "h": 65 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:537e6149183f630be038f053dd62d27d:dce25f0e6474cad17709f18c96ffb3e5:e11d4dd16bff2ef69bc5ca683c44ca7c$" + "smartupdate": "$TexturePacker:SmartUpdate:f99ca7d216355ffd449999125499d32e:cf2dd50594846ac631d9da32cd66dceb:e11d4dd16bff2ef69bc5ca683c44ca7c$" } } diff --git a/public/images/pokemon/back/676-heart.png b/public/images/pokemon/back/676-heart.png index fac541f44..49c83c6c1 100644 Binary files a/public/images/pokemon/back/676-heart.png and b/public/images/pokemon/back/676-heart.png differ diff --git a/public/images/pokemon/back/676-kabuki.json b/public/images/pokemon/back/676-kabuki.json index 3ead18ecd..e5aa1171f 100644 --- a/public/images/pokemon/back/676-kabuki.json +++ b/public/images/pokemon/back/676-kabuki.json @@ -4,30 +4,30 @@ "image": "676-kabuki.png", "format": "RGBA8888", "size": { - "w": 71, - "h": 71 + "w": 65, + "h": 65 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 55, - "h": 71 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 71 + "x": 23, + "y": 15, + "w": 49, + "h": 65 }, "frame": { "x": 0, "y": 0, - "w": 55, - "h": 71 + "w": 49, + "h": 65 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dfc02a08763810a151fc4e22c23a3093:2f6c7f2792f64728b478333fc2c65138:c3cad56aa65d2ee971ceebc435a14ee6$" + "smartupdate": "$TexturePacker:SmartUpdate:8de2d15ea2537eb2104a72a133418e94:903840ea77662ae31175e482a712402a:c3cad56aa65d2ee971ceebc435a14ee6$" } } diff --git a/public/images/pokemon/back/676-kabuki.png b/public/images/pokemon/back/676-kabuki.png index bbb1a776e..2aa6fccce 100644 Binary files a/public/images/pokemon/back/676-kabuki.png and b/public/images/pokemon/back/676-kabuki.png differ diff --git a/public/images/pokemon/back/676-la-reine.json b/public/images/pokemon/back/676-la-reine.json index b5de6c65b..57e55b121 100644 --- a/public/images/pokemon/back/676-la-reine.json +++ b/public/images/pokemon/back/676-la-reine.json @@ -4,30 +4,30 @@ "image": "676-la-reine.png", "format": "RGBA8888", "size": { - "w": 69, - "h": 69 + "w": 63, + "h": 63 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 54, - "h": 69 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 69 + "x": 24, + "y": 17, + "w": 48, + "h": 63 }, "frame": { "x": 0, "y": 0, - "w": 54, - "h": 69 + "w": 48, + "h": 63 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:014beffd470b78d94c3234500d9dee5b:3261fa54b4c9574937d670de782ca3e8:b99821e87dffda3297dd25a224a9029f$" + "smartupdate": "$TexturePacker:SmartUpdate:b72b1f5723bb276f4a555ccdbb3ed4c0:0ab778e99ee37c883a0b1a0f918f1bee:b99821e87dffda3297dd25a224a9029f$" } } diff --git a/public/images/pokemon/back/676-la-reine.png b/public/images/pokemon/back/676-la-reine.png index e4d699e5f..2147e5cab 100644 Binary files a/public/images/pokemon/back/676-la-reine.png and b/public/images/pokemon/back/676-la-reine.png differ diff --git a/public/images/pokemon/back/676-matron.json b/public/images/pokemon/back/676-matron.json index c9cca4f56..864b6b476 100644 --- a/public/images/pokemon/back/676-matron.json +++ b/public/images/pokemon/back/676-matron.json @@ -4,30 +4,30 @@ "image": "676-matron.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 62, + "h": 62 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 53, - "h": 68 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 68 + "x": 26, + "y": 18, + "w": 47, + "h": 62 }, "frame": { "x": 0, "y": 0, - "w": 53, - "h": 68 + "w": 47, + "h": 62 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a9199442be3400b8a70f8ad212790732:18b55adc9c377d1b24d6b236e1f39177:020798583d07c479020bb0af34cf8bb6$" + "smartupdate": "$TexturePacker:SmartUpdate:d447de0737ae7f9ca8690e7f039a884d:1ffc2bfd67fda79ede1d0e489bf36c94:020798583d07c479020bb0af34cf8bb6$" } } diff --git a/public/images/pokemon/back/676-matron.png b/public/images/pokemon/back/676-matron.png index 1867cf457..38092e4fe 100644 Binary files a/public/images/pokemon/back/676-matron.png and b/public/images/pokemon/back/676-matron.png differ diff --git a/public/images/pokemon/back/676-pharaoh.json b/public/images/pokemon/back/676-pharaoh.json index b43902fd6..428354fdb 100644 --- a/public/images/pokemon/back/676-pharaoh.json +++ b/public/images/pokemon/back/676-pharaoh.json @@ -4,30 +4,30 @@ "image": "676-pharaoh.png", "format": "RGBA8888", "size": { - "w": 70, - "h": 70 + "w": 64, + "h": 64 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 53, - "h": 70 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 70 + "x": 25, + "y": 16, + "w": 47, + "h": 64 }, "frame": { "x": 0, "y": 0, - "w": 53, - "h": 70 + "w": 47, + "h": 64 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:be799b3acab0a591e7b2d4a2ad903c94:6260eeb9aa48a1047c8ec12842ac28c6:904b7ab6f57249c96beea4b5f72deb53$" + "smartupdate": "$TexturePacker:SmartUpdate:729eefb95778889aa11840e684f35af8:9c72a2d345e9be40096dffd6b99a7ba0:904b7ab6f57249c96beea4b5f72deb53$" } } diff --git a/public/images/pokemon/back/676-pharaoh.png b/public/images/pokemon/back/676-pharaoh.png index 4c139a498..a7ca04640 100644 Binary files a/public/images/pokemon/back/676-pharaoh.png and b/public/images/pokemon/back/676-pharaoh.png differ diff --git a/public/images/pokemon/back/676-star.json b/public/images/pokemon/back/676-star.json index bbc9eebe3..2e0b0f309 100644 --- a/public/images/pokemon/back/676-star.json +++ b/public/images/pokemon/back/676-star.json @@ -4,30 +4,30 @@ "image": "676-star.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 66, + "h": 66 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 54, - "h": 72 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 72 + "x": 24, + "y": 14, + "w": 48, + "h": 66 }, "frame": { "x": 0, "y": 0, - "w": 54, - "h": 72 + "w": 48, + "h": 66 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8a18f8f110bc4f6f6e86ca95b9a566b8:c9e3d3db02b6ea0720a20b9bbd159d79:dd7fedf66b493b0bbdef5d25e0041dd8$" + "smartupdate": "$TexturePacker:SmartUpdate:37e89522e7b92408df9d52c3d98137ea:241a531f0918e0a4b616569e7d4bc186:dd7fedf66b493b0bbdef5d25e0041dd8$" } } diff --git a/public/images/pokemon/back/676-star.png b/public/images/pokemon/back/676-star.png index 0ad915156..9b0824883 100644 Binary files a/public/images/pokemon/back/676-star.png and b/public/images/pokemon/back/676-star.png differ diff --git a/public/images/pokemon/exp/945.json b/public/images/pokemon/exp/945.json index 9456e435d..31ba1c930 100644 --- a/public/images/pokemon/exp/945.json +++ b/public/images/pokemon/exp/945.json @@ -146,14 +146,14 @@ "spriteSourceSize": { "x": 0, "y": 0, - "w": 3, - "h": 3 + "w": 66, + "h": 55 }, "frame": { - "x": 132, - "y": 0, - "w": 3, - "h": 3 + "x": 0, + "y": 112, + "w": 66, + "h": 55 } }, { diff --git a/public/images/pokemon/icons/variant/1/118_1.png b/public/images/pokemon/icons/variant/1/118_1.png new file mode 100644 index 000000000..595f76d79 Binary files /dev/null and b/public/images/pokemon/icons/variant/1/118_1.png differ diff --git a/public/images/pokemon/icons/variant/1/29_2.png b/public/images/pokemon/icons/variant/1/29_2.png index 12d66fb15..55b1f0eda 100644 Binary files a/public/images/pokemon/icons/variant/1/29_2.png and b/public/images/pokemon/icons/variant/1/29_2.png differ diff --git a/public/images/pokemon/icons/variant/1/29_3.png b/public/images/pokemon/icons/variant/1/29_3.png index c5f1f4aae..90326c212 100644 Binary files a/public/images/pokemon/icons/variant/1/29_3.png and b/public/images/pokemon/icons/variant/1/29_3.png differ diff --git a/public/images/pokemon/icons/variant/1/30_2.png b/public/images/pokemon/icons/variant/1/30_2.png index 29e97832b..87cc4ec72 100644 Binary files a/public/images/pokemon/icons/variant/1/30_2.png and b/public/images/pokemon/icons/variant/1/30_2.png differ diff --git a/public/images/pokemon/icons/variant/1/30_3.png b/public/images/pokemon/icons/variant/1/30_3.png index 5d292322f..3fe2fc433 100644 Binary files a/public/images/pokemon/icons/variant/1/30_3.png and b/public/images/pokemon/icons/variant/1/30_3.png differ diff --git a/public/images/pokemon/icons/variant/1/31_1.png b/public/images/pokemon/icons/variant/1/31_1.png index 51ab04f75..ca7d5d98b 100644 Binary files a/public/images/pokemon/icons/variant/1/31_1.png and b/public/images/pokemon/icons/variant/1/31_1.png differ diff --git a/public/images/pokemon/icons/variant/1/31_3.png b/public/images/pokemon/icons/variant/1/31_3.png index 020c42185..381a31087 100644 Binary files a/public/images/pokemon/icons/variant/1/31_3.png and b/public/images/pokemon/icons/variant/1/31_3.png differ diff --git a/public/images/pokemon/icons/variant/3/278_1.png b/public/images/pokemon/icons/variant/3/278_1.png new file mode 100644 index 000000000..4f8f65eab Binary files /dev/null and b/public/images/pokemon/icons/variant/3/278_1.png differ diff --git a/public/images/pokemon/icons/variant/3/278_2.png b/public/images/pokemon/icons/variant/3/278_2.png new file mode 100644 index 000000000..4791920bc Binary files /dev/null and b/public/images/pokemon/icons/variant/3/278_2.png differ diff --git a/public/images/pokemon/icons/variant/3/278_3.png b/public/images/pokemon/icons/variant/3/278_3.png new file mode 100644 index 000000000..95555099b Binary files /dev/null and b/public/images/pokemon/icons/variant/3/278_3.png differ diff --git a/public/images/pokemon/icons/variant/3/279_1.png b/public/images/pokemon/icons/variant/3/279_1.png new file mode 100644 index 000000000..661c6e102 Binary files /dev/null and b/public/images/pokemon/icons/variant/3/279_1.png differ diff --git a/public/images/pokemon/icons/variant/3/279_2.png b/public/images/pokemon/icons/variant/3/279_2.png new file mode 100644 index 000000000..007f58ba3 Binary files /dev/null and b/public/images/pokemon/icons/variant/3/279_2.png differ diff --git a/public/images/pokemon/icons/variant/3/279_3.png b/public/images/pokemon/icons/variant/3/279_3.png new file mode 100644 index 000000000..57c4e388f Binary files /dev/null and b/public/images/pokemon/icons/variant/3/279_3.png differ diff --git a/public/images/pokemon/icons/variant/3/320_2.png b/public/images/pokemon/icons/variant/3/320_2.png new file mode 100644 index 000000000..3cc82654b Binary files /dev/null and b/public/images/pokemon/icons/variant/3/320_2.png differ diff --git a/public/images/pokemon/icons/variant/3/320_3.png b/public/images/pokemon/icons/variant/3/320_3.png new file mode 100644 index 000000000..967dbe095 Binary files /dev/null and b/public/images/pokemon/icons/variant/3/320_3.png differ diff --git a/public/images/pokemon/icons/variant/3/321_2.png b/public/images/pokemon/icons/variant/3/321_2.png new file mode 100644 index 000000000..fc49d4dc0 Binary files /dev/null and b/public/images/pokemon/icons/variant/3/321_2.png differ diff --git a/public/images/pokemon/icons/variant/3/321_3.png b/public/images/pokemon/icons/variant/3/321_3.png new file mode 100644 index 000000000..e672b2804 Binary files /dev/null and b/public/images/pokemon/icons/variant/3/321_3.png differ diff --git a/public/images/pokemon/icons/variant/3/333_2.png b/public/images/pokemon/icons/variant/3/333_2.png index 052e9cdbb..dba83c56e 100644 Binary files a/public/images/pokemon/icons/variant/3/333_2.png and b/public/images/pokemon/icons/variant/3/333_2.png differ diff --git a/public/images/pokemon/icons/variant/3/333_3.png b/public/images/pokemon/icons/variant/3/333_3.png index dba83c56e..052e9cdbb 100644 Binary files a/public/images/pokemon/icons/variant/3/333_3.png and b/public/images/pokemon/icons/variant/3/333_3.png differ diff --git a/public/images/pokemon/icons/variant/3/334_2.png b/public/images/pokemon/icons/variant/3/334_2.png index 08d3ac09a..ed4a145fa 100644 Binary files a/public/images/pokemon/icons/variant/3/334_2.png and b/public/images/pokemon/icons/variant/3/334_2.png differ diff --git a/public/images/pokemon/icons/variant/3/334_3.png b/public/images/pokemon/icons/variant/3/334_3.png index ed4a145fa..08d3ac09a 100644 Binary files a/public/images/pokemon/icons/variant/3/334_3.png and b/public/images/pokemon/icons/variant/3/334_3.png differ diff --git a/public/images/pokemon/icons/variant/4/485_2.png b/public/images/pokemon/icons/variant/4/485_2.png new file mode 100644 index 000000000..57759e932 Binary files /dev/null and b/public/images/pokemon/icons/variant/4/485_2.png differ diff --git a/public/images/pokemon/icons/variant/4/485_3.png b/public/images/pokemon/icons/variant/4/485_3.png new file mode 100644 index 000000000..2f133e8fb Binary files /dev/null and b/public/images/pokemon/icons/variant/4/485_3.png differ diff --git a/public/images/pokemon/icons/variant/5/547_2.png b/public/images/pokemon/icons/variant/5/547_2.png index 2294b1133..767a0d4ad 100644 Binary files a/public/images/pokemon/icons/variant/5/547_2.png and b/public/images/pokemon/icons/variant/5/547_2.png differ diff --git a/public/images/pokemon/icons/variant/5/547_3.png b/public/images/pokemon/icons/variant/5/547_3.png index 1af57cc09..a0c24d519 100644 Binary files a/public/images/pokemon/icons/variant/5/547_3.png and b/public/images/pokemon/icons/variant/5/547_3.png differ diff --git a/public/images/pokemon/icons/variant/5/592-f_1.png b/public/images/pokemon/icons/variant/5/592-f_1.png new file mode 100644 index 000000000..b30360cd0 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/592-f_1.png differ diff --git a/public/images/pokemon/icons/variant/5/592-f_2.png b/public/images/pokemon/icons/variant/5/592-f_2.png new file mode 100644 index 000000000..42dec5432 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/592-f_2.png differ diff --git a/public/images/pokemon/icons/variant/5/592-f_3.png b/public/images/pokemon/icons/variant/5/592-f_3.png new file mode 100644 index 000000000..bb4dc0ff0 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/592-f_3.png differ diff --git a/public/images/pokemon/icons/variant/5/592_2.png b/public/images/pokemon/icons/variant/5/592_2.png new file mode 100644 index 000000000..fc869a64b Binary files /dev/null and b/public/images/pokemon/icons/variant/5/592_2.png differ diff --git a/public/images/pokemon/icons/variant/5/592_3.png b/public/images/pokemon/icons/variant/5/592_3.png new file mode 100644 index 000000000..202459f76 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/592_3.png differ diff --git a/public/images/pokemon/icons/variant/5/593-f_1.png b/public/images/pokemon/icons/variant/5/593-f_1.png new file mode 100644 index 000000000..32d2e427c Binary files /dev/null and b/public/images/pokemon/icons/variant/5/593-f_1.png differ diff --git a/public/images/pokemon/icons/variant/5/593-f_2.png b/public/images/pokemon/icons/variant/5/593-f_2.png new file mode 100644 index 000000000..348c50106 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/593-f_2.png differ diff --git a/public/images/pokemon/icons/variant/5/593-f_3.png b/public/images/pokemon/icons/variant/5/593-f_3.png new file mode 100644 index 000000000..da94471a0 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/593-f_3.png differ diff --git a/public/images/pokemon/icons/variant/5/593_2.png b/public/images/pokemon/icons/variant/5/593_2.png new file mode 100644 index 000000000..ee7d77ef5 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/593_2.png differ diff --git a/public/images/pokemon/icons/variant/5/593_3.png b/public/images/pokemon/icons/variant/5/593_3.png new file mode 100644 index 000000000..0134d25d0 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/593_3.png differ diff --git a/public/images/pokemon/icons/variant/5/619_2.png b/public/images/pokemon/icons/variant/5/619_2.png new file mode 100644 index 000000000..61fb4716f Binary files /dev/null and b/public/images/pokemon/icons/variant/5/619_2.png differ diff --git a/public/images/pokemon/icons/variant/5/619_3.png b/public/images/pokemon/icons/variant/5/619_3.png new file mode 100644 index 000000000..9af922c97 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/619_3.png differ diff --git a/public/images/pokemon/icons/variant/5/620_2.png b/public/images/pokemon/icons/variant/5/620_2.png new file mode 100644 index 000000000..6042f2bb6 Binary files /dev/null and b/public/images/pokemon/icons/variant/5/620_2.png differ diff --git a/public/images/pokemon/icons/variant/5/620_3.png b/public/images/pokemon/icons/variant/5/620_3.png new file mode 100644 index 000000000..09750c3ea Binary files /dev/null and b/public/images/pokemon/icons/variant/5/620_3.png differ diff --git a/public/images/pokemon/icons/variant/8/850_2.png b/public/images/pokemon/icons/variant/8/850_2.png new file mode 100644 index 000000000..6b0d9c063 Binary files /dev/null and b/public/images/pokemon/icons/variant/8/850_2.png differ diff --git a/public/images/pokemon/icons/variant/8/850_3.png b/public/images/pokemon/icons/variant/8/850_3.png new file mode 100644 index 000000000..646f2c44b Binary files /dev/null and b/public/images/pokemon/icons/variant/8/850_3.png differ diff --git a/public/images/pokemon/icons/variant/8/851_2.png b/public/images/pokemon/icons/variant/8/851_2.png new file mode 100644 index 000000000..9da1c12a8 Binary files /dev/null and b/public/images/pokemon/icons/variant/8/851_2.png differ diff --git a/public/images/pokemon/icons/variant/8/851_3.png b/public/images/pokemon/icons/variant/8/851_3.png new file mode 100644 index 000000000..32e9ec3cd Binary files /dev/null and b/public/images/pokemon/icons/variant/8/851_3.png differ diff --git a/public/images/pokemon/icons/variant/9/935_1.png b/public/images/pokemon/icons/variant/9/935_1.png new file mode 100644 index 000000000..90c5add80 Binary files /dev/null and b/public/images/pokemon/icons/variant/9/935_1.png differ diff --git a/public/images/pokemon/icons/variant/9/935_2.png b/public/images/pokemon/icons/variant/9/935_2.png new file mode 100644 index 000000000..0dd9c43c9 Binary files /dev/null and b/public/images/pokemon/icons/variant/9/935_2.png differ diff --git a/public/images/pokemon/icons/variant/9/935_3.png b/public/images/pokemon/icons/variant/9/935_3.png index b8d1b63a1..5cfcb9b23 100644 Binary files a/public/images/pokemon/icons/variant/9/935_3.png and b/public/images/pokemon/icons/variant/9/935_3.png differ diff --git a/public/images/pokemon/icons/variant/9/936_1.png b/public/images/pokemon/icons/variant/9/936_1.png new file mode 100644 index 000000000..06c39d728 Binary files /dev/null and b/public/images/pokemon/icons/variant/9/936_1.png differ diff --git a/public/images/pokemon/icons/variant/9/936_2.png b/public/images/pokemon/icons/variant/9/936_2.png new file mode 100644 index 000000000..80e4f83d1 Binary files /dev/null and b/public/images/pokemon/icons/variant/9/936_2.png differ diff --git a/public/images/pokemon/icons/variant/9/936_3.png b/public/images/pokemon/icons/variant/9/936_3.png index f2a53aedf..2e2b6cde2 100644 Binary files a/public/images/pokemon/icons/variant/9/936_3.png and b/public/images/pokemon/icons/variant/9/936_3.png differ diff --git a/public/images/pokemon/icons/variant/9/937_1.png b/public/images/pokemon/icons/variant/9/937_1.png new file mode 100644 index 000000000..e45d536a6 Binary files /dev/null and b/public/images/pokemon/icons/variant/9/937_1.png differ diff --git a/public/images/pokemon/icons/variant/9/937_2.png b/public/images/pokemon/icons/variant/9/937_2.png new file mode 100644 index 000000000..1362ef759 Binary files /dev/null and b/public/images/pokemon/icons/variant/9/937_2.png differ diff --git a/public/images/pokemon/icons/variant/9/937_3.png b/public/images/pokemon/icons/variant/9/937_3.png new file mode 100644 index 000000000..cc0a05cea Binary files /dev/null and b/public/images/pokemon/icons/variant/9/937_3.png differ diff --git a/public/images/pokemon/variant/29.json b/public/images/pokemon/variant/29.json index 51b8fb15b..1ed0ecf0d 100644 --- a/public/images/pokemon/variant/29.json +++ b/public/images/pokemon/variant/29.json @@ -1,5 +1,5 @@ { - "0": { + "1": { "424284": "6b1524", "7384ad": "a53038", "d6d6ff": "f28566", diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 1f8b274f5..613ddb73e 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -1,7 +1,7 @@ { "29": [ - 1, 0, + 1, 1 ], "30": [ @@ -2991,6 +2991,16 @@ 1, 1 ], + "306-mega": [ + 1, + 1, + 1 + ], + "308-mega": [ + 0, + 1, + 1 + ], "310-mega": [ 0, 1, @@ -3116,6 +3126,11 @@ 1, 1 ], + "747": [ + 0, + 1, + 1 + ], "748": [ 0, 1, @@ -3196,6 +3211,16 @@ 1, 1 ], + "850": [ + 0, + 1, + 1 + ], + "851": [ + 0, + 1, + 1 + ], "856": [ 0, 1, @@ -3453,6 +3478,16 @@ 1, 1 ], + "306-mega": [ + 1, + 1, + 1 + ], + "308-mega": [ + 0, + 1, + 1 + ], "310-mega": [ 0, 1, @@ -3578,6 +3613,11 @@ 1, 1 ], + "747": [ + 0, + 2, + 2 + ], "748": [ 0, 1, @@ -3658,6 +3698,16 @@ 1, 1 ], + "850": [ + 0, + 1, + 1 + ], + "851": [ + 0, + 1, + 1 + ], "856": [ 0, 1, diff --git a/public/images/pokemon/variant/exp/306-mega.json b/public/images/pokemon/variant/exp/306-mega.json new file mode 100644 index 000000000..40575898b --- /dev/null +++ b/public/images/pokemon/variant/exp/306-mega.json @@ -0,0 +1,47 @@ +{ + "0": { + "000000": "101010", + "5a5a62": "4b382a", + "ffffff": "fff2e5", + "cdcdcd": "cbc4a2", + "6a6a6a": "224228", + "52524a": "15321e", + "8b8b8b": "3e6244", + "838394": "a48d76", + "a4a4ac": "bca88c", + "6abdff": "ff78fa", + "acacac": "69ad6c", + "9c3141": "9c3141", + "de5252": "de5252" + }, + "1": { + "000000": "101010", + "5a5a62": "2b265d", + "ffffff": "cdd9fa", + "cdcdcd": "91a1e3", + "6a6a6a": "6e1e26", + "52524a": "47121b", + "8b8b8b": "8b312e", + "838394": "3d3c8c", + "a4a4ac": "686dc0", + "6abdff": "ffcf47", + "acacac": "d4857c", + "9c3141": "bc2d51", + "de5252": "de5291" + }, + "2": { + "000000": "101010", + "5a5a62": "722f15", + "ffffff": "ffcc7d", + "cdcdcd": "d48e3c", + "6a6a6a": "1d365e", + "52524a": "0e213a", + "8b8b8b": "385594", + "838394": "833d19", + "a4a4ac": "a45f34", + "6abdff": "2aebcf", + "acacac": "7d95bf", + "9c3141": "9c3141", + "de5252": "de5252" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/308-mega.json b/public/images/pokemon/variant/exp/308-mega.json new file mode 100644 index 000000000..e46ededfc --- /dev/null +++ b/public/images/pokemon/variant/exp/308-mega.json @@ -0,0 +1,36 @@ +{ + "1": { + "aca4ac": "a58291", + "52414a": "432641", + "ffffff": "fff4db", + "000000": "101010", + "83414a": "59141d", + "e6738b": "a53835", + "ee9ca4": "a53835", + "b44a5a": "83272c", + "c5c5c5": "b5969a", + "a47329": "722966", + "f6de83": "ee9bd5", + "eebd5a": "ce5cb6", + "dedede": "e0cdd9", + "0a7ba2": "efa360", + "45bade": "efa360" + }, + "2": { + "aca4ac": "6c7d9e", + "52414a": "1f344a", + "ffffff": "c4dff1", + "000000": "101010", + "83414a": "461f5d", + "e6738b": "7d5187", + "ee9ca4": "7d5187", + "b44a5a": "633971", + "c5c5c5": "8aacd2", + "a47329": "205a9e", + "f6de83": "5abbef", + "eebd5a": "3a8dca", + "dedede": "c4dff1", + "0a7ba2": "3dc7b6", + "45bade": "3dc7b6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/747.json b/public/images/pokemon/variant/exp/747.json new file mode 100644 index 000000000..f9ed1405e --- /dev/null +++ b/public/images/pokemon/variant/exp/747.json @@ -0,0 +1,30 @@ +{ + "1": { + "b67e32": "614da4", + "6f3878": "9b6459", + "f3e07c": "e3e2ff", + "b687bc": "edd5ca", + "d1ac1b": "aca5f3", + "8d5b9e": "d29784", + "070707": "101010", + "394f7e": "490a26", + "d7a8d3": "a21f90", + "6291b3": "b24b34", + "9fd5d2": "e07b53", + "ffffff": "fdfdfd" + }, + "2": { + "b67e32": "9f4354", + "6f3878": "113c3a", + "f3e07c": "ffebed", + "b687bc": "2b6157", + "d1ac1b": "efa2ad", + "8d5b9e": "1c524b", + "070707": "101010", + "394f7e": "186443", + "d7a8d3": "ff3f5a", + "6291b3": "359d5d", + "9fd5d2": "5bd97f", + "ffffff": "fdfdfd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/850.json b/public/images/pokemon/variant/exp/850.json new file mode 100644 index 000000000..c799fd3ac --- /dev/null +++ b/public/images/pokemon/variant/exp/850.json @@ -0,0 +1,32 @@ +{ + "1": { + "2f1610": "2f1610", + "804a3e": "59365d", + "bf3922": "117956", + "101010": "101010", + "ff5839": "35c36c", + "5b2f26": "36203c", + "681607": "024f2d", + "f77c42": "89fbad", + "f89e08": "67ef9c", + "ff836c": "5ff58e", + "ffd901": "c8ffcc", + "be5409": "117956", + "fbfbfb": "fbfbfb" + }, + "2": { + "2f1610": "2f1610", + "804a3e": "475294", + "bf3922": "ae1165", + "101010": "101010", + "ff5839": "d73981", + "5b2f26": "36426c", + "681607": "68063c", + "f77c42": "f77c42", + "f89e08": "f89e08", + "ff836c": "ff836c", + "ffd901": "ffc143", + "be5409": "be5409", + "fbfbfb": "fbfbfb" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/851.json b/public/images/pokemon/variant/exp/851.json new file mode 100644 index 000000000..827ace8fc --- /dev/null +++ b/public/images/pokemon/variant/exp/851.json @@ -0,0 +1,36 @@ +{ + "1": { + "be5409": "017336", + "f89e08": "67ef9c", + "ffd901": "c8ffcc", + "bf3922": "1a8987", + "101010": "101010", + "2f1610": "24122b", + "5b2f26": "503154", + "804a3e": "714272", + "681607": "0a5660", + "ff5839": "35c3a8", + "b96f5d": "ad58ab", + "941528": "005f35", + "fbfbfb": "fbfbfb", + "42221c": "36203c", + "000000": "101010" + }, + "2": { + "be5409": "890f52", + "f89e08": "f36d73", + "ffd901": "ffc143", + "bf3922": "ae1165", + "101010": "101010", + "2f1610": "121439", + "5b2f26": "36426c", + "804a3e": "475294", + "681607": "6e0442", + "ff5839": "d73981", + "b96f5d": "7866cb", + "941528": "941528", + "fbfbfb": "fbfbfb", + "42221c": "222957", + "000000": "101010" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/306-mega.json b/public/images/pokemon/variant/exp/back/306-mega.json new file mode 100644 index 000000000..1fa46dae2 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/306-mega.json @@ -0,0 +1,38 @@ +{ + "0": { + "393939": "132c1b", + "000000": "101010", + "838394": "a48d76", + "6a6a6a": "325537", + "202029": "131d17", + "5a5a62": "735c4a", + "ffffff": "fff2e5", + "52524a": "224228", + "cdcdcd": "cbc4a2", + "a4a4ac": "b8a88a" + }, + "1": { + "393939": "47121b", + "000000": "101010", + "838394": "686dc0", + "6a6a6a": "8b312e", + "202029": "350a13", + "5a5a62": "374186", + "ffffff": "cdd9fa", + "52524a": "6e1e26", + "cdcdcd": "a5b7ed", + "a4a4ac": "91a1e3" + }, + "2": { + "393939": "1d365e", + "000000": "101010", + "838394": "a45f34", + "6a6a6a": "385594", + "202029": "0e213a", + "5a5a62": "7a3a1a", + "ffffff": "f1b25e", + "52524a": "385594", + "cdcdcd": "dd9f57", + "a4a4ac": "c18239" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/308-mega.json b/public/images/pokemon/variant/exp/back/308-mega.json new file mode 100644 index 000000000..b13332e51 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/308-mega.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "83414a": "59141d", + "e6738b": "a53835", + "b44a5a": "83272c", + "8b838b": "5a4357", + "bdafad": "a5829d", + "52414a": "432641", + "e7e3e7": "e0cdd9", + "f9f8f7": "f9f8f7", + "a47329": "722966", + "eebd5a": "a25793", + "f6de83": "ee9bd5", + "164b5d": "a6571b", + "42a2bd": "efa360" + }, + "2": { + "101010": "101010", + "83414a": "461f5d", + "e6738b": "7d5187", + "b44a5a": "633971", + "8b838b": "445a7e", + "bdafad": "7988a6", + "52414a": "1f344a", + "e7e3e7": "abb7c6", + "f9f8f7": "c4dff1", + "a47329": "285181", + "eebd5a": "4983ad", + "f6de83": "5abbef", + "164b5d": "107270", + "42a2bd": "3dc7b6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/747_2.json b/public/images/pokemon/variant/exp/back/747_2.json new file mode 100644 index 000000000..7ddd3d695 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/747_2.json @@ -0,0 +1,230 @@ +{ + "textures": [ + { + "image": "747_2.png", + "format": "RGBA8888", + "size": { + "w": 147, + "h": 147 + }, + "scale": 1, + "frames": [ + { + "filename": "0005.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + }, + "frame": { + "x": 62, + "y": 0, + "w": 62, + "h": 49 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 61, + "h": 49 + }, + "frame": { + "x": 0, + "y": 49, + "w": 61, + "h": 49 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 61, + "h": 49 + }, + "frame": { + "x": 0, + "y": 49, + "w": 61, + "h": 49 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 59, + "h": 49 + }, + "frame": { + "x": 0, + "y": 98, + "w": 59, + "h": 49 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 59, + "h": 49 + }, + "frame": { + "x": 0, + "y": 98, + "w": 59, + "h": 49 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 57, + "h": 49 + }, + "frame": { + "x": 59, + "y": 98, + "w": 57, + "h": 49 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 57, + "h": 49 + }, + "frame": { + "x": 59, + "y": 98, + "w": 57, + "h": 49 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 55, + "h": 49 + }, + "frame": { + "x": 61, + "y": 49, + "w": 55, + "h": 49 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:4319e2c59a85fcb72ddcdb0b4089ac8b:29cb568870b0231298c87d5d39f7b933:b26f7254994561969f00f765318acf1c$" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/747_2.png b/public/images/pokemon/variant/exp/back/747_2.png new file mode 100644 index 000000000..3307b34a3 Binary files /dev/null and b/public/images/pokemon/variant/exp/back/747_2.png differ diff --git a/public/images/pokemon/variant/exp/back/747_3.json b/public/images/pokemon/variant/exp/back/747_3.json new file mode 100644 index 000000000..d8eb67611 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/747_3.json @@ -0,0 +1,230 @@ +{ + "textures": [ + { + "image": "747_3.png", + "format": "RGBA8888", + "size": { + "w": 147, + "h": 147 + }, + "scale": 1, + "frames": [ + { + "filename": "0005.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 62, + "h": 49 + }, + "frame": { + "x": 62, + "y": 0, + "w": 62, + "h": 49 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 61, + "h": 49 + }, + "frame": { + "x": 0, + "y": 49, + "w": 61, + "h": 49 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 61, + "h": 49 + }, + "frame": { + "x": 0, + "y": 49, + "w": 61, + "h": 49 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 59, + "h": 49 + }, + "frame": { + "x": 0, + "y": 98, + "w": 59, + "h": 49 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 59, + "h": 49 + }, + "frame": { + "x": 0, + "y": 98, + "w": 59, + "h": 49 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 57, + "h": 49 + }, + "frame": { + "x": 59, + "y": 98, + "w": 57, + "h": 49 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 57, + "h": 49 + }, + "frame": { + "x": 59, + "y": 98, + "w": 57, + "h": 49 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 62, + "h": 49 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 55, + "h": 49 + }, + "frame": { + "x": 61, + "y": 49, + "w": 55, + "h": 49 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:4319e2c59a85fcb72ddcdb0b4089ac8b:29cb568870b0231298c87d5d39f7b933:b26f7254994561969f00f765318acf1c$" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/747_3.png b/public/images/pokemon/variant/exp/back/747_3.png new file mode 100644 index 000000000..d6a1d0d6b Binary files /dev/null and b/public/images/pokemon/variant/exp/back/747_3.png differ diff --git a/public/images/pokemon/variant/exp/back/748.json b/public/images/pokemon/variant/exp/back/748.json index 22aa34440..7929514bc 100644 --- a/public/images/pokemon/variant/exp/back/748.json +++ b/public/images/pokemon/variant/exp/back/748.json @@ -1,11 +1,11 @@ { "1": { - "943732": "490a3c", + "943732": "5c075b", "101010": "101010", - "f28c4f": "a21f90", - "e25025": "91138c", + "f28c4f": "c639bd", + "e25025": "a21f90", "93d1d7": "df7b52", - "3a3f6d": "462952", + "3a3f6d": "171539", "6f97c4": "be583d", "711a6a": "81463e", "455b85": "892e20", @@ -15,12 +15,12 @@ "171539": "171539" }, "2": { - "943732": "c30e49", + "943732": "ac063c", "101010": "101010", "f28c4f": "ff3f5a", "e25025": "e12350", "93d1d7": "5bd97f", - "3a3f6d": "862916", + "3a3f6d": "490c06", "6f97c4": "359d5d", "711a6a": "082b29", "455b85": "186443", diff --git a/public/images/pokemon/variant/exp/back/850.json b/public/images/pokemon/variant/exp/back/850.json new file mode 100644 index 000000000..b5df39e11 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/850.json @@ -0,0 +1,28 @@ +{ + "1": { + "bf3922": "35c3a8", + "8d3123": "178573", + "5b2f26": "59365d", + "ff5839": "79f1d2", + "804a3e": "8f4b94", + "681607": "065b58", + "42221c": "36203c", + "2f1610": "24122b", + "101010": "101010", + "be5409": "25a96a", + "f89e08": "a3ffb9" + }, + "2": { + "bf3922": "d73981", + "8d3123": "902962", + "5b2f26": "36426c", + "ff5839": "f360a3", + "804a3e": "7866cb", + "681607": "4a1036", + "42221c": "222957", + "2f1610": "121439", + "101010": "101010", + "be5409": "be5409", + "f89e08": "f89e08" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/851.json b/public/images/pokemon/variant/exp/back/851.json new file mode 100644 index 000000000..9fca14e5e --- /dev/null +++ b/public/images/pokemon/variant/exp/back/851.json @@ -0,0 +1,34 @@ +{ + "1": { + "be5409": "017336", + "f89e08": "67ef9c", + "ffd901": "c8ffcc", + "5b2f26": "59365d", + "b96f5d": "d695d5", + "804a3e": "924a91", + "8d3123": "056a3b", + "bf3922": "0c8c48", + "ff5839": "35c36c", + "42221c": "36203c", + "2f1610": "24122b", + "681607": "024f2d", + "101010": "101010", + "941528": "005f35" + }, + "2": { + "be5409": "be5409", + "f89e08": "f36d73", + "ffd901": "ffc143", + "5b2f26": "36426c", + "b96f5d": "7866cb", + "804a3e": "475294", + "8d3123": "ae1165", + "bf3922": "d73981", + "ff5839": "ff6970", + "42221c": "222957", + "2f1610": "121439", + "681607": "6e0442", + "101010": "101010", + "941528": "941528" + } +} \ No newline at end of file diff --git a/public/images/pokemon_icons_1v.json b/public/images/pokemon_icons_1v.json index b0d213057..daa3e070e 100644 --- a/public/images/pokemon_icons_1v.json +++ b/public/images/pokemon_icons_1v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_1v.png", "format": "RGBA8888", "size": { - "w": 276, - "h": 276 + "w": 277, + "h": 277 }, "scale": 1, "frames": [ @@ -199,7 +199,7 @@ } }, { - "filename": "29_2", + "filename": "29_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -220,7 +220,7 @@ } }, { - "filename": "29_3", + "filename": "29_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -241,7 +241,7 @@ } }, { - "filename": "35_2", + "filename": "29_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -249,7 +249,7 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, + "x": 10, "y": 8, "w": 20, "h": 21 @@ -262,7 +262,7 @@ } }, { - "filename": "35_3", + "filename": "35_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -283,7 +283,7 @@ } }, { - "filename": "123_1", + "filename": "35_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -291,15 +291,36 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, + "x": 11, "y": 8, - "w": 21, + "w": 20, "h": 21 }, "frame": { "x": 20, "y": 17, - "w": 21, + "w": 20, + "h": 21 + } + }, + { + "filename": "118_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 26, + "h": 21 + }, + "frame": { + "x": 40, + "y": 20, + "w": 26, "h": 21 } }, @@ -318,7 +339,7 @@ "h": 21 }, "frame": { - "x": 41, + "x": 66, "y": 20, "w": 26, "h": 21 @@ -339,12 +360,33 @@ "h": 21 }, "frame": { - "x": 67, + "x": 92, "y": 20, "w": 26, "h": 21 } }, + { + "filename": "123_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 21, + "h": 21 + }, + "frame": { + "x": 118, + "y": 20, + "w": 21, + "h": 21 + } + }, { "filename": "123_2", "rotated": false, @@ -360,7 +402,7 @@ "h": 21 }, "frame": { - "x": 93, + "x": 139, "y": 20, "w": 21, "h": 21 @@ -381,7 +423,7 @@ "h": 21 }, "frame": { - "x": 114, + "x": 160, "y": 20, "w": 21, "h": 21 @@ -402,7 +444,7 @@ "h": 21 }, "frame": { - "x": 135, + "x": 181, "y": 20, "w": 31, "h": 21 @@ -423,8 +465,8 @@ "h": 21 }, "frame": { - "x": 166, - "y": 20, + "x": 212, + "y": 21, "w": 31, "h": 21 } @@ -444,7 +486,7 @@ "h": 21 }, "frame": { - "x": 197, + "x": 243, "y": 21, "w": 31, "h": 21 @@ -465,8 +507,8 @@ "h": 22 }, "frame": { - "x": 228, - "y": 21, + "x": 0, + "y": 38, "w": 23, "h": 22 } @@ -486,8 +528,8 @@ "h": 22 }, "frame": { - "x": 251, - "y": 21, + "x": 23, + "y": 41, "w": 23, "h": 22 } @@ -507,8 +549,8 @@ "h": 22 }, "frame": { - "x": 0, - "y": 38, + "x": 46, + "y": 41, "w": 23, "h": 22 } @@ -528,7 +570,7 @@ "h": 22 }, "frame": { - "x": 23, + "x": 69, "y": 41, "w": 24, "h": 22 @@ -549,7 +591,7 @@ "h": 22 }, "frame": { - "x": 47, + "x": 93, "y": 41, "w": 24, "h": 22 @@ -570,7 +612,7 @@ "h": 22 }, "frame": { - "x": 71, + "x": 117, "y": 41, "w": 24, "h": 22 @@ -591,7 +633,7 @@ "h": 22 }, "frame": { - "x": 95, + "x": 141, "y": 41, "w": 24, "h": 22 @@ -612,7 +654,7 @@ "h": 22 }, "frame": { - "x": 119, + "x": 165, "y": 41, "w": 24, "h": 22 @@ -633,7 +675,7 @@ "h": 22 }, "frame": { - "x": 143, + "x": 189, "y": 41, "w": 21, "h": 22 @@ -654,8 +696,8 @@ "h": 22 }, "frame": { - "x": 164, - "y": 41, + "x": 210, + "y": 42, "w": 21, "h": 22 } @@ -675,54 +717,12 @@ "h": 22 }, "frame": { - "x": 185, + "x": 231, "y": 42, "w": 21, "h": 22 } }, - { - "filename": "119_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 27, - "h": 22 - }, - "frame": { - "x": 206, - "y": 43, - "w": 27, - "h": 22 - } - }, - { - "filename": "119_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 27, - "h": 22 - }, - "frame": { - "x": 233, - "y": 43, - "w": 27, - "h": 22 - } - }, { "filename": "52_1", "rotated": false, @@ -737,6 +737,27 @@ "w": 23, "h": 23 }, + "frame": { + "x": 252, + "y": 42, + "w": 23, + "h": 23 + } + }, + { + "filename": "52_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 23, + "h": 23 + }, "frame": { "x": 0, "y": 60, @@ -745,7 +766,7 @@ } }, { - "filename": "119_3", + "filename": "119_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -765,6 +786,48 @@ "h": 22 } }, + { + "filename": "119_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 27, + "h": 22 + }, + "frame": { + "x": 50, + "y": 63, + "w": 27, + "h": 22 + } + }, + { + "filename": "119_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 27, + "h": 22 + }, + "frame": { + "x": 77, + "y": 63, + "w": 27, + "h": 22 + } + }, { "filename": "144_1", "rotated": false, @@ -780,7 +843,7 @@ "h": 22 }, "frame": { - "x": 50, + "x": 104, "y": 63, "w": 29, "h": 22 @@ -801,7 +864,7 @@ "h": 22 }, "frame": { - "x": 79, + "x": 133, "y": 63, "w": 29, "h": 22 @@ -822,33 +885,12 @@ "h": 22 }, "frame": { - "x": 108, + "x": 162, "y": 63, "w": 29, "h": 22 } }, - { - "filename": "52_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 23, - "h": 23 - }, - "frame": { - "x": 137, - "y": 63, - "w": 23, - "h": 23 - } - }, { "filename": "52_3", "rotated": false, @@ -864,30 +906,9 @@ "h": 23 }, "frame": { - "x": 160, - "y": 63, - "w": 23, - "h": 23 - } - }, - { - "filename": "135_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 22, - "h": 23 - }, - "frame": { - "x": 183, + "x": 191, "y": 64, - "w": 22, + "w": 23, "h": 23 } }, @@ -906,8 +927,8 @@ "h": 23 }, "frame": { - "x": 205, - "y": 65, + "x": 214, + "y": 64, "w": 25, "h": 23 } @@ -927,35 +948,14 @@ "h": 23 }, "frame": { - "x": 230, + "x": 239, "y": 65, "w": 25, "h": 23 } }, { - "filename": "30_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 21, - "h": 24 - }, - "frame": { - "x": 255, - "y": 65, - "w": 21, - "h": 24 - } - }, - { - "filename": "135_2", + "filename": "135_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -1075,11 +1075,32 @@ }, "frame": { "x": 124, - "y": 86, + "y": 85, "w": 25, "h": 23 } }, + { + "filename": "135_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 6, + "w": 22, + "h": 23 + }, + "frame": { + "x": 149, + "y": 85, + "w": 22, + "h": 23 + } + }, { "filename": "135_3", "rotated": false, @@ -1095,8 +1116,8 @@ "h": 23 }, "frame": { - "x": 149, - "y": 86, + "x": 171, + "y": 87, "w": 22, "h": 23 } @@ -1116,12 +1137,33 @@ "h": 23 }, "frame": { - "x": 171, + "x": 193, "y": 87, "w": 25, "h": 23 } }, + { + "filename": "30_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 21, + "h": 24 + }, + "frame": { + "x": 218, + "y": 87, + "w": 21, + "h": 24 + } + }, { "filename": "136_2", "rotated": false, @@ -1137,28 +1179,7 @@ "h": 23 }, "frame": { - "x": 196, - "y": 88, - "w": 25, - "h": 23 - } - }, - { - "filename": "136_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 25, - "h": 23 - }, - "frame": { - "x": 221, + "x": 239, "y": 88, "w": 25, "h": 23 @@ -1179,14 +1200,14 @@ "h": 24 }, "frame": { - "x": 246, - "y": 89, + "x": 0, + "y": 106, "w": 21, "h": 24 } }, { - "filename": "36_2", + "filename": "136_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -1194,16 +1215,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 25 + "x": 8, + "y": 6, + "w": 25, + "h": 23 }, "frame": { - "x": 0, - "y": 106, - "w": 22, - "h": 25 + "x": 21, + "y": 108, + "w": 25, + "h": 23 } }, { @@ -1221,7 +1242,7 @@ "h": 24 }, "frame": { - "x": 22, + "x": 46, "y": 108, "w": 28, "h": 24 @@ -1242,7 +1263,7 @@ "h": 24 }, "frame": { - "x": 50, + "x": 74, "y": 108, "w": 28, "h": 24 @@ -1263,7 +1284,7 @@ "h": 24 }, "frame": { - "x": 78, + "x": 102, "y": 108, "w": 28, "h": 24 @@ -1284,8 +1305,8 @@ "h": 24 }, "frame": { - "x": 106, - "y": 109, + "x": 130, + "y": 108, "w": 24, "h": 24 } @@ -1304,27 +1325,6 @@ "w": 24, "h": 24 }, - "frame": { - "x": 130, - "y": 109, - "w": 24, - "h": 24 - } - }, - { - "filename": "47_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 24, - "h": 24 - }, "frame": { "x": 154, "y": 110, @@ -1332,6 +1332,27 @@ "h": 24 } }, + { + "filename": "47_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 24, + "h": 24 + }, + "frame": { + "x": 178, + "y": 110, + "w": 24, + "h": 24 + } + }, { "filename": "53_1", "rotated": false, @@ -1347,7 +1368,7 @@ "h": 24 }, "frame": { - "x": 178, + "x": 202, "y": 111, "w": 25, "h": 24 @@ -1368,7 +1389,7 @@ "h": 24 }, "frame": { - "x": 203, + "x": 227, "y": 111, "w": 25, "h": 24 @@ -1389,33 +1410,12 @@ "h": 24 }, "frame": { - "x": 228, - "y": 113, + "x": 252, + "y": 111, "w": 25, "h": 24 } }, - { - "filename": "36_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 25 - }, - "frame": { - "x": 253, - "y": 113, - "w": 22, - "h": 25 - } - }, { "filename": "83_2", "rotated": false, @@ -1432,7 +1432,7 @@ }, "frame": { "x": 0, - "y": 132, + "y": 131, "w": 28, "h": 24 } @@ -1516,11 +1516,32 @@ }, "frame": { "x": 104, - "y": 133, + "y": 132, "w": 27, "h": 24 } }, + { + "filename": "36_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 25 + }, + "frame": { + "x": 131, + "y": 132, + "w": 22, + "h": 25 + } + }, { "filename": "149_3", "rotated": false, @@ -1536,12 +1557,33 @@ "h": 24 }, "frame": { - "x": 131, + "x": 153, "y": 134, "w": 27, "h": 24 } }, + { + "filename": "36_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 25 + }, + "frame": { + "x": 180, + "y": 134, + "w": 22, + "h": 25 + } + }, { "filename": "31_1", "rotated": false, @@ -1557,7 +1599,7 @@ "h": 25 }, "frame": { - "x": 158, + "x": 202, "y": 135, "w": 25, "h": 25 @@ -1578,7 +1620,7 @@ "h": 25 }, "frame": { - "x": 183, + "x": 227, "y": 135, "w": 25, "h": 25 @@ -1599,12 +1641,33 @@ "h": 25 }, "frame": { - "x": 208, - "y": 137, + "x": 252, + "y": 135, "w": 25, "h": 25 } }, + { + "filename": "77_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 26, + "h": 25 + }, + "frame": { + "x": 0, + "y": 155, + "w": 26, + "h": 25 + } + }, { "filename": "71_2", "rotated": false, @@ -1620,8 +1683,8 @@ "h": 25 }, "frame": { - "x": 233, - "y": 138, + "x": 26, + "y": 156, "w": 30, "h": 25 } @@ -1641,33 +1704,12 @@ "h": 25 }, "frame": { - "x": 0, + "x": 56, "y": 156, "w": 30, "h": 25 } }, - { - "filename": "77_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 26, - "h": 25 - }, - "frame": { - "x": 30, - "y": 156, - "w": 26, - "h": 25 - } - }, { "filename": "77_3", "rotated": false, @@ -1683,33 +1725,12 @@ "h": 25 }, "frame": { - "x": 56, + "x": 86, "y": 156, "w": 26, "h": 25 } }, - { - "filename": "150_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 22, - "h": 25 - }, - "frame": { - "x": 82, - "y": 156, - "w": 22, - "h": 25 - } - }, { "filename": "86_1", "rotated": false, @@ -1725,7 +1746,7 @@ "h": 25 }, "frame": { - "x": 104, + "x": 112, "y": 157, "w": 27, "h": 25 @@ -1746,7 +1767,7 @@ "h": 25 }, "frame": { - "x": 131, + "x": 139, "y": 158, "w": 27, "h": 25 @@ -1767,33 +1788,12 @@ "h": 25 }, "frame": { - "x": 158, - "y": 160, + "x": 166, + "y": 159, "w": 27, "h": 25 } }, - { - "filename": "150_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 22, - "h": 25 - }, - "frame": { - "x": 185, - "y": 160, - "w": 22, - "h": 25 - } - }, { "filename": "87_1", "rotated": false, @@ -1809,8 +1809,8 @@ "h": 25 }, "frame": { - "x": 207, - "y": 163, + "x": 193, + "y": 160, "w": 27, "h": 25 } @@ -1830,8 +1830,8 @@ "h": 25 }, "frame": { - "x": 234, - "y": 163, + "x": 220, + "y": 160, "w": 27, "h": 25 } @@ -1851,12 +1851,54 @@ "h": 25 }, "frame": { - "x": 0, - "y": 181, + "x": 247, + "y": 160, "w": 27, "h": 25 } }, + { + "filename": "150_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 22, + "h": 25 + }, + "frame": { + "x": 0, + "y": 180, + "w": 22, + "h": 25 + } + }, + { + "filename": "150_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 22, + "h": 25 + }, + "frame": { + "x": 22, + "y": 181, + "w": 22, + "h": 25 + } + }, { "filename": "94_1", "rotated": false, @@ -1872,7 +1914,7 @@ "h": 26 }, "frame": { - "x": 27, + "x": 44, "y": 181, "w": 26, "h": 26 @@ -1893,7 +1935,7 @@ "h": 26 }, "frame": { - "x": 53, + "x": 70, "y": 181, "w": 26, "h": 26 @@ -1914,7 +1956,7 @@ "h": 26 }, "frame": { - "x": 79, + "x": 96, "y": 182, "w": 26, "h": 26 @@ -1935,8 +1977,8 @@ "h": 27 }, "frame": { - "x": 105, - "y": 182, + "x": 122, + "y": 183, "w": 25, "h": 27 } @@ -1956,8 +1998,8 @@ "h": 27 }, "frame": { - "x": 130, - "y": 183, + "x": 147, + "y": 184, "w": 25, "h": 27 } @@ -1977,7 +2019,7 @@ "h": 28 }, "frame": { - "x": 155, + "x": 172, "y": 185, "w": 31, "h": 28 @@ -1998,8 +2040,8 @@ "h": 28 }, "frame": { - "x": 186, - "y": 188, + "x": 203, + "y": 185, "w": 31, "h": 28 } @@ -2019,54 +2061,12 @@ "h": 28 }, "frame": { - "x": 217, - "y": 188, + "x": 234, + "y": 185, "w": 32, "h": 28 } }, - { - "filename": "150-mega-x_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 23, - "h": 28 - }, - "frame": { - "x": 249, - "y": 188, - "w": 23, - "h": 28 - } - }, - { - "filename": "150-mega-x_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 23, - "h": 28 - }, - "frame": { - "x": 0, - "y": 206, - "w": 23, - "h": 28 - } - }, { "filename": "93_2", "rotated": false, @@ -2082,8 +2082,8 @@ "h": 28 }, "frame": { - "x": 23, - "y": 207, + "x": 0, + "y": 206, "w": 32, "h": 28 } @@ -2103,12 +2103,54 @@ "h": 28 }, "frame": { - "x": 55, - "y": 208, + "x": 32, + "y": 207, "w": 32, "h": 28 } }, + { + "filename": "150-mega-x_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 23, + "h": 28 + }, + "frame": { + "x": 64, + "y": 207, + "w": 23, + "h": 28 + } + }, + { + "filename": "150-mega-x_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 23, + "h": 28 + }, + "frame": { + "x": 87, + "y": 208, + "w": 23, + "h": 28 + } + }, { "filename": "131-gigantamax_2", "rotated": false, @@ -2124,28 +2166,7 @@ "h": 29 }, "frame": { - "x": 87, - "y": 209, - "w": 33, - "h": 29 - } - }, - { - "filename": "131-gigantamax_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 33, - "h": 29 - }, - "frame": { - "x": 120, + "x": 110, "y": 210, "w": 33, "h": 29 @@ -2166,12 +2187,33 @@ "h": 30 }, "frame": { - "x": 153, - "y": 213, + "x": 143, + "y": 211, "w": 25, "h": 30 } }, + { + "filename": "131-gigantamax_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 33, + "h": 29 + }, + "frame": { + "x": 168, + "y": 213, + "w": 33, + "h": 29 + } + }, { "filename": "52-gigantamax_2", "rotated": false, @@ -2187,8 +2229,8 @@ "h": 30 }, "frame": { - "x": 178, - "y": 216, + "x": 201, + "y": 213, "w": 25, "h": 30 } @@ -2208,14 +2250,14 @@ "h": 30 }, "frame": { - "x": 203, - "y": 216, + "x": 226, + "y": 213, "w": 25, "h": 30 } }, { - "filename": "94-gigantamax_1", + "filename": "150-mega-y_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -2223,20 +2265,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 3, + "x": 9, "y": 0, - "w": 34, + "w": 22, "h": 30 }, "frame": { - "x": 228, - "y": 216, - "w": 34, + "x": 251, + "y": 213, + "w": 22, "h": 30 } }, { - "filename": "150-mega-y_2", + "filename": "150-mega-y_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -2257,7 +2299,7 @@ } }, { - "filename": "150-mega-y_3", + "filename": "94-gigantamax_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -2265,15 +2307,15 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, + "x": 3, "y": 0, - "w": 22, + "w": 34, "h": 30 }, "frame": { "x": 22, "y": 235, - "w": 22, + "w": 34, "h": 30 } }, @@ -2292,7 +2334,7 @@ "h": 30 }, "frame": { - "x": 44, + "x": 56, "y": 236, "w": 34, "h": 30 @@ -2313,8 +2355,8 @@ "h": 30 }, "frame": { - "x": 78, - "y": 238, + "x": 90, + "y": 239, "w": 34, "h": 30 } @@ -2334,8 +2376,8 @@ "h": 30 }, "frame": { - "x": 112, - "y": 239, + "x": 124, + "y": 241, "w": 36, "h": 30 } @@ -2355,8 +2397,8 @@ "h": 30 }, "frame": { - "x": 148, - "y": 246, + "x": 160, + "y": 242, "w": 36, "h": 30 } @@ -2376,8 +2418,8 @@ "h": 30 }, "frame": { - "x": 184, - "y": 246, + "x": 196, + "y": 243, "w": 36, "h": 30 } @@ -2388,6 +2430,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ff8be1f0e8905cf57ed1af85a597a5be:63904eb65167f759420c4e4a5c2dc80c:2fc2d7db306a93e9369e20846ccef45c$" + "smartupdate": "$TexturePacker:SmartUpdate:429d90e6d126fba8a16e4abf1b881671:64ab0e3b54dd7c7e4e6017f2657aa1f5:2fc2d7db306a93e9369e20846ccef45c$" } } diff --git a/public/images/pokemon_icons_1v.png b/public/images/pokemon_icons_1v.png index 508d2411b..48eb12fe1 100644 Binary files a/public/images/pokemon_icons_1v.png and b/public/images/pokemon_icons_1v.png differ diff --git a/public/images/pokemon_icons_3v.json b/public/images/pokemon_icons_3v.json index c3b04ae5f..af6a027ac 100644 --- a/public/images/pokemon_icons_3v.json +++ b/public/images/pokemon_icons_3v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_3v.png", "format": "RGBA8888", "size": { - "w": 264, - "h": 264 + "w": 274, + "h": 274 }, "scale": 1, "frames": [ @@ -345,6 +345,27 @@ "h": 28 } }, + { + "filename": "376_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 34, + "h": 24 + }, + "frame": { + "x": 0, + "y": 250, + "w": 34, + "h": 24 + } + }, { "filename": "308-mega_2", "rotated": false, @@ -451,7 +472,7 @@ } }, { - "filename": "304_1", + "filename": "351-rainy_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -459,20 +480,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 15, - "w": 18, - "h": 14 + "x": 12, + "y": 6, + "w": 16, + "h": 23 }, "frame": { - "x": 0, - "y": 250, - "w": 18, - "h": 14 + "x": 258, + "y": 0, + "w": 16, + "h": 23 } }, { - "filename": "304_2", + "filename": "351-rainy_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -480,16 +501,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 15, - "w": 18, - "h": 14 + "x": 12, + "y": 6, + "w": 16, + "h": 23 }, "frame": { - "x": 18, - "y": 250, - "w": 18, - "h": 14 + "x": 258, + "y": 23, + "w": 16, + "h": 23 } }, { @@ -514,7 +535,7 @@ } }, { - "filename": "376_2", + "filename": "376_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -535,7 +556,7 @@ } }, { - "filename": "376_3", + "filename": "321_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -543,16 +564,37 @@ "h": 30 }, "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 34, - "h": 24 + "x": 5, + "y": 4, + "w": 32, + "h": 25 }, "frame": { "x": 146, "y": 23, - "w": 34, - "h": 24 + "w": 32, + "h": 25 + } + }, + { + "filename": "321_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 32, + "h": 25 + }, + "frame": { + "x": 178, + "y": 23, + "w": 32, + "h": 25 } }, { @@ -570,8 +612,8 @@ "h": 26 }, "frame": { - "x": 180, - "y": 23, + "x": 73, + "y": 49, "w": 31, "h": 26 } @@ -591,12 +633,96 @@ "h": 26 }, "frame": { - "x": 73, - "y": 49, + "x": 210, + "y": 26, "w": 31, "h": 26 } }, + { + "filename": "358_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 7, + "w": 17, + "h": 23 + }, + "frame": { + "x": 241, + "y": 26, + "w": 17, + "h": 23 + } + }, + { + "filename": "351-rainy_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 16, + "h": 23 + }, + "frame": { + "x": 258, + "y": 46, + "w": 16, + "h": 23 + } + }, + { + "filename": "358_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 7, + "w": 17, + "h": 23 + }, + "frame": { + "x": 241, + "y": 49, + "w": 17, + "h": 23 + } + }, + { + "filename": "280_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 9, + "w": 16, + "h": 20 + }, + "frame": { + "x": 258, + "y": 69, + "w": 16, + "h": 20 + } + }, { "filename": "306_3", "rotated": false, @@ -612,54 +738,12 @@ "h": 26 }, "frame": { - "x": 211, - "y": 26, + "x": 73, + "y": 75, "w": 31, "h": 26 } }, - { - "filename": "334_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 26 - }, - "frame": { - "x": 242, - "y": 26, - "w": 22, - "h": 26 - } - }, - { - "filename": "282-mega_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 28, - "h": 26 - }, - "frame": { - "x": 104, - "y": 49, - "w": 28, - "h": 26 - } - }, { "filename": "475-mega_3", "rotated": false, @@ -675,35 +759,14 @@ "h": 28 }, "frame": { - "x": 132, - "y": 47, + "x": 104, + "y": 49, "w": 27, "h": 28 } }, { - "filename": "308_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 19, - "h": 27 - }, - "frame": { - "x": 159, - "y": 47, - "w": 19, - "h": 27 - } - }, - { - "filename": "330_2", + "filename": "282-mega_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -712,36 +775,15 @@ }, "spriteSourceSize": { "x": 7, - "y": 4, - "w": 29, - "h": 25 + "y": 3, + "w": 28, + "h": 26 }, "frame": { - "x": 178, - "y": 49, - "w": 29, - "h": 25 - } - }, - { - "filename": "330_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 29, - "h": 25 - }, - "frame": { - "x": 207, - "y": 52, - "w": 29, - "h": 25 + "x": 104, + "y": 77, + "w": 28, + "h": 26 } }, { @@ -759,54 +801,12 @@ "h": 26 }, "frame": { - "x": 236, - "y": 52, + "x": 131, + "y": 48, "w": 28, "h": 26 } }, - { - "filename": "334-mega_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 29, - "h": 25 - }, - "frame": { - "x": 73, - "y": 75, - "w": 29, - "h": 25 - } - }, - { - "filename": "334-mega_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 29, - "h": 25 - }, - "frame": { - "x": 102, - "y": 75, - "w": 29, - "h": 25 - } - }, { "filename": "282_2", "rotated": false, @@ -822,8 +822,8 @@ "h": 26 }, "frame": { - "x": 131, - "y": 75, + "x": 159, + "y": 48, "w": 28, "h": 26 } @@ -843,54 +843,12 @@ "h": 26 }, "frame": { - "x": 159, + "x": 132, "y": 74, "w": 28, "h": 26 } }, - { - "filename": "281_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 20, - "h": 25 - }, - "frame": { - "x": 187, - "y": 74, - "w": 20, - "h": 25 - } - }, - { - "filename": "375_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 29, - "h": 23 - }, - "frame": { - "x": 207, - "y": 77, - "w": 29, - "h": 23 - } - }, { "filename": "310-mega_2", "rotated": false, @@ -906,14 +864,266 @@ "h": 26 }, "frame": { - "x": 236, - "y": 78, + "x": 160, + "y": 74, "w": 28, "h": 26 } }, { - "filename": "375_3", + "filename": "334_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 26 + }, + "frame": { + "x": 187, + "y": 48, + "w": 22, + "h": 26 + } + }, + { + "filename": "330_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 29, + "h": 25 + }, + "frame": { + "x": 209, + "y": 52, + "w": 29, + "h": 25 + } + }, + { + "filename": "281_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 20, + "h": 25 + }, + "frame": { + "x": 188, + "y": 74, + "w": 20, + "h": 25 + } + }, + { + "filename": "330_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 29, + "h": 25 + }, + "frame": { + "x": 208, + "y": 77, + "w": 29, + "h": 25 + } + }, + { + "filename": "281_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 20, + "h": 25 + }, + "frame": { + "x": 238, + "y": 72, + "w": 20, + "h": 25 + } + }, + { + "filename": "280_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 9, + "w": 16, + "h": 20 + }, + "frame": { + "x": 258, + "y": 89, + "w": 16, + "h": 20 + } + }, + { + "filename": "309_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 12, + "w": 21, + "h": 17 + }, + "frame": { + "x": 237, + "y": 97, + "w": 21, + "h": 17 + } + }, + { + "filename": "334-mega_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 29, + "h": 25 + }, + "frame": { + "x": 132, + "y": 100, + "w": 29, + "h": 25 + } + }, + { + "filename": "310-mega_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 28, + "h": 26 + }, + "frame": { + "x": 161, + "y": 100, + "w": 28, + "h": 26 + } + }, + { + "filename": "308_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 2, + "w": 19, + "h": 27 + }, + "frame": { + "x": 189, + "y": 99, + "w": 19, + "h": 27 + } + }, + { + "filename": "334-mega_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 29, + "h": 25 + }, + "frame": { + "x": 208, + "y": 102, + "w": 29, + "h": 25 + } + }, + { + "filename": "263_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 24, + "h": 18 + }, + "frame": { + "x": 237, + "y": 114, + "w": 24, + "h": 18 + } + }, + { + "filename": "375_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -933,153 +1143,6 @@ "h": 23 } }, - { - "filename": "310-mega_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 28, - "h": 26 - }, - "frame": { - "x": 32, - "y": 215, - "w": 28, - "h": 26 - } - }, - { - "filename": "303_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 28, - "h": 23 - }, - "frame": { - "x": 36, - "y": 241, - "w": 28, - "h": 23 - } - }, - { - "filename": "334_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 26 - }, - "frame": { - "x": 60, - "y": 215, - "w": 22, - "h": 26 - } - }, - { - "filename": "303_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 28, - "h": 23 - }, - "frame": { - "x": 64, - "y": 241, - "w": 28, - "h": 23 - } - }, - { - "filename": "303_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 28, - "h": 23 - }, - "frame": { - "x": 62, - "y": 192, - "w": 28, - "h": 23 - } - }, - { - "filename": "281_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 20, - "h": 25 - }, - "frame": { - "x": 82, - "y": 215, - "w": 20, - "h": 25 - } - }, - { - "filename": "351-rainy_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 16, - "h": 23 - }, - "frame": { - "x": 92, - "y": 240, - "w": 16, - "h": 23 - } - }, { "filename": "286_2", "rotated": false, @@ -1095,8 +1158,8 @@ "h": 27 }, "frame": { - "x": 65, - "y": 106, + "x": 32, + "y": 215, "w": 25, "h": 27 } @@ -1116,14 +1179,14 @@ "h": 27 }, "frame": { - "x": 90, - "y": 100, + "x": 34, + "y": 242, "w": 25, "h": 27 } }, { - "filename": "351-rainy_2", + "filename": "308_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -1131,121 +1194,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 16, - "h": 23 + "x": 11, + "y": 2, + "w": 19, + "h": 27 }, "frame": { - "x": 115, - "y": 100, - "w": 16, - "h": 23 - } - }, - { - "filename": "329_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 27, - "h": 22 - }, - "frame": { - "x": 131, - "y": 101, - "w": 27, - "h": 22 - } - }, - { - "filename": "290_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 25, - "h": 16 - }, - "frame": { - "x": 90, - "y": 127, - "w": 25, - "h": 16 - } - }, - { - "filename": "329_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 27, - "h": 22 - }, - "frame": { - "x": 115, - "y": 123, - "w": 27, - "h": 22 - } - }, - { - "filename": "264_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 24, - "h": 22 - }, - "frame": { - "x": 142, - "y": 123, - "w": 24, - "h": 22 - } - }, - { - "filename": "290_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 13, - "w": 25, - "h": 16 - }, - "frame": { - "x": 65, - "y": 133, - "w": 25, - "h": 16 + "x": 57, + "y": 215, + "w": 19, + "h": 27 } }, { @@ -1263,14 +1221,14 @@ "h": 27 }, "frame": { - "x": 64, - "y": 149, + "x": 59, + "y": 242, "w": 24, "h": 27 } }, { - "filename": "290_3", + "filename": "279_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -1279,17 +1237,290 @@ }, "spriteSourceSize": { "x": 7, - "y": 13, + "y": 6, "w": 25, + "h": 23 + }, + "frame": { + "x": 62, + "y": 192, + "w": 25, + "h": 23 + } + }, + { + "filename": "334_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 26 + }, + "frame": { + "x": 76, + "y": 215, + "w": 22, + "h": 26 + } + }, + { + "filename": "310_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 25 + }, + "frame": { + "x": 83, + "y": 241, + "w": 22, + "h": 25 + } + }, + { + "filename": "329_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 27, + "h": 22 + }, + "frame": { + "x": 105, + "y": 103, + "w": 27, + "h": 22 + } + }, + { + "filename": "375_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 29, + "h": 23 + }, + "frame": { + "x": 68, + "y": 101, + "w": 29, + "h": 23 + } + }, + { + "filename": "278_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 13, + "w": 28, "h": 16 }, "frame": { - "x": 64, - "y": 176, - "w": 25, + "x": 65, + "y": 124, + "w": 28, "h": 16 } }, + { + "filename": "303_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 28, + "h": 23 + }, + "frame": { + "x": 64, + "y": 140, + "w": 28, + "h": 23 + } + }, + { + "filename": "303_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 28, + "h": 23 + }, + "frame": { + "x": 64, + "y": 163, + "w": 28, + "h": 23 + } + }, + { + "filename": "278_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 13, + "w": 28, + "h": 16 + }, + "frame": { + "x": 93, + "y": 125, + "w": 28, + "h": 16 + } + }, + { + "filename": "303_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 28, + "h": 23 + }, + "frame": { + "x": 92, + "y": 141, + "w": 28, + "h": 23 + } + }, + { + "filename": "329_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 27, + "h": 22 + }, + "frame": { + "x": 92, + "y": 164, + "w": 27, + "h": 22 + } + }, + { + "filename": "278_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 13, + "w": 28, + "h": 16 + }, + "frame": { + "x": 121, + "y": 125, + "w": 28, + "h": 16 + } + }, + { + "filename": "279_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 25, + "h": 23 + }, + "frame": { + "x": 120, + "y": 141, + "w": 25, + "h": 23 + } + }, + { + "filename": "279_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 25, + "h": 23 + }, + "frame": { + "x": 119, + "y": 164, + "w": 25, + "h": 23 + } + }, { "filename": "291_1", "rotated": false, @@ -1305,8 +1536,8 @@ "h": 22 }, "frame": { - "x": 90, - "y": 143, + "x": 87, + "y": 186, "w": 25, "h": 22 } @@ -1326,12 +1557,117 @@ "h": 22 }, "frame": { - "x": 115, - "y": 145, + "x": 112, + "y": 187, "w": 25, "h": 22 } }, + { + "filename": "264_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 24, + "h": 22 + }, + "frame": { + "x": 137, + "y": 187, + "w": 24, + "h": 22 + } + }, + { + "filename": "358_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 7, + "w": 17, + "h": 23 + }, + "frame": { + "x": 144, + "y": 164, + "w": 17, + "h": 23 + } + }, + { + "filename": "320_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 26, + "h": 20 + }, + "frame": { + "x": 149, + "y": 126, + "w": 26, + "h": 20 + } + }, + { + "filename": "263_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 24, + "h": 18 + }, + "frame": { + "x": 145, + "y": 146, + "w": 24, + "h": 18 + } + }, + { + "filename": "320_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 26, + "h": 20 + }, + "frame": { + "x": 175, + "y": 126, + "w": 26, + "h": 20 + } + }, { "filename": "291_3", "rotated": false, @@ -1347,75 +1683,12 @@ "h": 22 }, "frame": { - "x": 140, - "y": 145, + "x": 169, + "y": 146, "w": 25, "h": 22 } }, - { - "filename": "308_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 19, - "h": 27 - }, - "frame": { - "x": 89, - "y": 165, - "w": 19, - "h": 27 - } - }, - { - "filename": "358_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 17, - "h": 23 - }, - "frame": { - "x": 90, - "y": 192, - "w": 17, - "h": 23 - } - }, - { - "filename": "310_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 25 - }, - "frame": { - "x": 108, - "y": 167, - "w": 22, - "h": 25 - } - }, { "filename": "310_3", "rotated": false, @@ -1431,8 +1704,8 @@ "h": 25 }, "frame": { - "x": 130, - "y": 167, + "x": 161, + "y": 168, "w": 22, "h": 25 } @@ -1452,33 +1725,12 @@ "h": 22 }, "frame": { - "x": 107, - "y": 192, + "x": 161, + "y": 193, "w": 24, "h": 22 } }, - { - "filename": "352_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 22, - "h": 22 - }, - "frame": { - "x": 131, - "y": 192, - "w": 22, - "h": 22 - } - }, { "filename": "351-snowy_1", "rotated": false, @@ -1494,8 +1746,8 @@ "h": 25 }, "frame": { - "x": 152, - "y": 167, + "x": 183, + "y": 168, "w": 19, "h": 25 } @@ -1515,12 +1767,54 @@ "h": 22 }, "frame": { - "x": 153, - "y": 192, + "x": 185, + "y": 193, "w": 19, "h": 22 } }, + { + "filename": "305_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 10, + "w": 25, + "h": 19 + }, + "frame": { + "x": 201, + "y": 127, + "w": 25, + "h": 19 + } + }, + { + "filename": "385_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 24, + "h": 22 + }, + "frame": { + "x": 194, + "y": 146, + "w": 24, + "h": 22 + } + }, { "filename": "351-snowy_2", "rotated": false, @@ -1536,117 +1830,12 @@ "h": 25 }, "frame": { - "x": 102, - "y": 215, + "x": 202, + "y": 168, "w": 19, "h": 25 } }, - { - "filename": "385_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 24, - "h": 22 - }, - "frame": { - "x": 121, - "y": 214, - "w": 24, - "h": 22 - } - }, - { - "filename": "385_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 24, - "h": 22 - }, - "frame": { - "x": 145, - "y": 214, - "w": 24, - "h": 22 - } - }, - { - "filename": "351-rainy_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 16, - "h": 23 - }, - "frame": { - "x": 108, - "y": 240, - "w": 16, - "h": 23 - } - }, - { - "filename": "385_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 24, - "h": 22 - }, - "frame": { - "x": 124, - "y": 236, - "w": 24, - "h": 22 - } - }, - { - "filename": "352_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 22, - "h": 22 - }, - "frame": { - "x": 148, - "y": 236, - "w": 22, - "h": 22 - } - }, { "filename": "307_3", "rotated": false, @@ -1662,12 +1851,33 @@ "h": 22 }, "frame": { - "x": 158, - "y": 101, + "x": 204, + "y": 193, "w": 19, "h": 22 } }, + { + "filename": "351-sunny_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 20, + "h": 22 + }, + "frame": { + "x": 218, + "y": 146, + "w": 20, + "h": 22 + } + }, { "filename": "351-snowy_3", "rotated": false, @@ -1683,75 +1893,12 @@ "h": 25 }, "frame": { - "x": 166, - "y": 123, + "x": 221, + "y": 168, "w": 19, "h": 25 } }, - { - "filename": "305_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 25, - "h": 19 - }, - "frame": { - "x": 165, - "y": 148, - "w": 25, - "h": 19 - } - }, - { - "filename": "351-sunny_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 20, - "h": 22 - }, - "frame": { - "x": 171, - "y": 167, - "w": 20, - "h": 22 - } - }, - { - "filename": "358_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 17, - "h": 23 - }, - "frame": { - "x": 177, - "y": 100, - "w": 17, - "h": 23 - } - }, { "filename": "351-sunny_2", "rotated": false, @@ -1767,14 +1914,14 @@ "h": 22 }, "frame": { - "x": 172, - "y": 189, + "x": 223, + "y": 193, "w": 20, "h": 22 } }, { - "filename": "358_3", + "filename": "304_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -1782,16 +1929,163 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 17, - "h": 23 + "x": 11, + "y": 15, + "w": 18, + "h": 14 }, "frame": { - "x": 185, - "y": 123, - "w": 17, - "h": 23 + "x": 226, + "y": 132, + "w": 18, + "h": 14 + } + }, + { + "filename": "285_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 12, + "w": 20, + "h": 17 + }, + "frame": { + "x": 244, + "y": 132, + "w": 20, + "h": 17 + } + }, + { + "filename": "305_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 10, + "w": 25, + "h": 19 + }, + "frame": { + "x": 238, + "y": 149, + "w": 25, + "h": 19 + } + }, + { + "filename": "385_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 24, + "h": 22 + }, + "frame": { + "x": 240, + "y": 168, + "w": 24, + "h": 22 + } + }, + { + "filename": "352_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 22, + "h": 22 + }, + "frame": { + "x": 243, + "y": 190, + "w": 22, + "h": 22 + } + }, + { + "filename": "385_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 24, + "h": 22 + }, + "frame": { + "x": 98, + "y": 209, + "w": 24, + "h": 22 + } + }, + { + "filename": "305_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 10, + "w": 25, + "h": 19 + }, + "frame": { + "x": 122, + "y": 209, + "w": 25, + "h": 19 + } + }, + { + "filename": "351-sunny_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 20, + "h": 22 + }, + "frame": { + "x": 105, + "y": 231, + "w": 20, + "h": 22 } }, { @@ -1809,12 +2103,33 @@ "h": 21 }, "frame": { - "x": 190, - "y": 146, + "x": 105, + "y": 253, "w": 22, "h": 21 } }, + { + "filename": "352_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 22, + "h": 22 + }, + "frame": { + "x": 125, + "y": 228, + "w": 22, + "h": 22 + } + }, { "filename": "352_3", "rotated": false, @@ -1830,8 +2145,8 @@ "h": 22 }, "frame": { - "x": 191, - "y": 167, + "x": 127, + "y": 250, "w": 22, "h": 22 } @@ -1851,159 +2166,12 @@ "h": 21 }, "frame": { - "x": 192, - "y": 189, + "x": 147, + "y": 215, "w": 22, "h": 21 } }, - { - "filename": "305_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 25, - "h": 19 - }, - "frame": { - "x": 194, - "y": 100, - "w": 25, - "h": 19 - } - }, - { - "filename": "280_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 16, - "h": 20 - }, - "frame": { - "x": 219, - "y": 100, - "w": 16, - "h": 20 - } - }, - { - "filename": "305_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 25, - "h": 19 - }, - "frame": { - "x": 235, - "y": 104, - "w": 25, - "h": 19 - } - }, - { - "filename": "351_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 15, - "h": 22 - }, - "frame": { - "x": 202, - "y": 119, - "w": 15, - "h": 22 - } - }, - { - "filename": "280_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 16, - "h": 20 - }, - "frame": { - "x": 217, - "y": 120, - "w": 16, - "h": 20 - } - }, - { - "filename": "263_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 24, - "h": 18 - }, - "frame": { - "x": 233, - "y": 123, - "w": 24, - "h": 18 - } - }, - { - "filename": "351-sunny_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 20, - "h": 22 - }, - "frame": { - "x": 169, - "y": 214, - "w": 20, - "h": 22 - } - }, { "filename": "292_3", "rotated": false, @@ -2019,33 +2187,12 @@ "h": 21 }, "frame": { - "x": 170, - "y": 236, + "x": 169, + "y": 215, "w": 22, "h": 21 } }, - { - "filename": "263_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 24, - "h": 18 - }, - "frame": { - "x": 192, - "y": 210, - "w": 24, - "h": 18 - } - }, { "filename": "328_2", "rotated": false, @@ -2061,33 +2208,12 @@ "h": 21 }, "frame": { - "x": 192, - "y": 228, + "x": 191, + "y": 215, "w": 21, "h": 21 } }, - { - "filename": "304_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 15, - "w": 18, - "h": 14 - }, - "frame": { - "x": 192, - "y": 249, - "w": 18, - "h": 14 - } - }, { "filename": "328_3", "rotated": false, @@ -2103,12 +2229,96 @@ "h": 21 }, "frame": { - "x": 213, - "y": 228, + "x": 212, + "y": 215, "w": 21, "h": 21 } }, + { + "filename": "304_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 15, + "w": 18, + "h": 14 + }, + "frame": { + "x": 147, + "y": 236, + "w": 18, + "h": 14 + } + }, + { + "filename": "290_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 13, + "w": 25, + "h": 16 + }, + "frame": { + "x": 165, + "y": 236, + "w": 25, + "h": 16 + } + }, + { + "filename": "290_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 13, + "w": 25, + "h": 16 + }, + "frame": { + "x": 190, + "y": 236, + "w": 25, + "h": 16 + } + }, + { + "filename": "351_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 7, + "w": 15, + "h": 22 + }, + "frame": { + "x": 149, + "y": 250, + "w": 15, + "h": 22 + } + }, { "filename": "351_3", "rotated": false, @@ -2124,12 +2334,54 @@ "h": 22 }, "frame": { - "x": 212, - "y": 141, + "x": 164, + "y": 252, "w": 15, "h": 22 } }, + { + "filename": "290_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 13, + "w": 25, + "h": 16 + }, + "frame": { + "x": 179, + "y": 252, + "w": 25, + "h": 16 + } + }, + { + "filename": "285_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 12, + "w": 20, + "h": 17 + }, + "frame": { + "x": 215, + "y": 236, + "w": 20, + "h": 17 + } + }, { "filename": "374_2", "rotated": false, @@ -2145,8 +2397,8 @@ "h": 19 }, "frame": { - "x": 227, - "y": 141, + "x": 233, + "y": 215, "w": 21, "h": 19 } @@ -2166,12 +2418,33 @@ "h": 19 }, "frame": { - "x": 213, - "y": 163, + "x": 235, + "y": 234, "w": 21, "h": 19 } }, + { + "filename": "309_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 12, + "w": 21, + "h": 17 + }, + "frame": { + "x": 204, + "y": 253, + "w": 21, + "h": 17 + } + }, { "filename": "333_2", "rotated": false, @@ -2187,8 +2460,8 @@ "h": 18 }, "frame": { - "x": 214, - "y": 182, + "x": 225, + "y": 253, "w": 21, "h": 18 } @@ -2208,14 +2481,14 @@ "h": 18 }, "frame": { - "x": 234, - "y": 160, + "x": 246, + "y": 253, "w": 21, "h": 18 } }, { - "filename": "285_2", + "filename": "304_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -2223,79 +2496,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, - "y": 12, - "w": 20, - "h": 17 + "x": 11, + "y": 15, + "w": 18, + "h": 14 }, "frame": { - "x": 235, - "y": 178, - "w": 20, - "h": 17 - } - }, - { - "filename": "285_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 12, - "w": 20, - "h": 17 - }, - "frame": { - "x": 216, - "y": 200, - "w": 20, - "h": 17 - } - }, - { - "filename": "309_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 12, - "w": 21, - "h": 17 - }, - "frame": { - "x": 236, - "y": 195, - "w": 21, - "h": 17 - } - }, - { - "filename": "309_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 12, - "w": 21, - "h": 17 - }, - "frame": { - "x": 236, + "x": 256, "y": 212, - "w": 21, - "h": 17 + "w": 18, + "h": 14 } } ] @@ -2304,6 +2514,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1d5a45dd6af00e9ce100072d2cdd8e0b:9b35c744f171ab066952e4db2a5fb647:039b026190bf1878996b3e03190bcdf3$" + "smartupdate": "$TexturePacker:SmartUpdate:e451b3ae25328f4f0164e64e2faa5df4:c4df08d9a082c9097775d80382fd25da:039b026190bf1878996b3e03190bcdf3$" } } diff --git a/public/images/pokemon_icons_3v.png b/public/images/pokemon_icons_3v.png index 98e7c1a3b..d21f90524 100644 Binary files a/public/images/pokemon_icons_3v.png and b/public/images/pokemon_icons_3v.png differ diff --git a/public/images/pokemon_icons_4v.json b/public/images/pokemon_icons_4v.json index cbf00598f..bd10e099a 100644 --- a/public/images/pokemon_icons_4v.json +++ b/public/images/pokemon_icons_4v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_4v.png", "format": "RGBA8888", "size": { - "w": 239, - "h": 239 + "w": 242, + "h": 242 }, "scale": 1, "frames": [ @@ -198,6 +198,48 @@ "h": 26 } }, + { + "filename": "485_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 35, + "h": 22 + }, + "frame": { + "x": 132, + "y": 0, + "w": 35, + "h": 22 + } + }, + { + "filename": "485_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 35, + "h": 22 + }, + "frame": { + "x": 167, + "y": 0, + "w": 35, + "h": 22 + } + }, { "filename": "487-origin_2", "rotated": false, @@ -261,48 +303,6 @@ "h": 24 } }, - { - "filename": "445_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 31, - "h": 24 - }, - "frame": { - "x": 132, - "y": 0, - "w": 31, - "h": 24 - } - }, - { - "filename": "445_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 31, - "h": 24 - }, - "frame": { - "x": 163, - "y": 0, - "w": 31, - "h": 24 - } - }, { "filename": "475-mega_2", "rotated": false, @@ -324,27 +324,6 @@ "h": 28 } }, - { - "filename": "481_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 31, - "h": 24 - }, - "frame": { - "x": 194, - "y": 0, - "w": 31, - "h": 24 - } - }, { "filename": "488_2", "rotated": false, @@ -367,7 +346,7 @@ } }, { - "filename": "481_2", + "filename": "447_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -375,7 +354,70 @@ "h": 30 }, "spriteSourceSize": { - "x": 6, + "x": 11, + "y": 9, + "w": 20, + "h": 20 + }, + "frame": { + "x": 0, + "y": 222, + "w": 20, + "h": 20 + } + }, + { + "filename": "445_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 31, + "h": 24 + }, + "frame": { + "x": 202, + "y": 0, + "w": 31, + "h": 24 + } + }, + { + "filename": "447_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 9, + "w": 20, + "h": 20 + }, + "frame": { + "x": 20, + "y": 222, + "w": 20, + "h": 20 + } + }, + { + "filename": "445_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, "y": 5, "w": 31, "h": 24 @@ -388,7 +430,7 @@ } }, { - "filename": "481_3", + "filename": "481_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -408,6 +450,69 @@ "h": 24 } }, + { + "filename": "481_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 31, + "h": 24 + }, + "frame": { + "x": 32, + "y": 76, + "w": 31, + "h": 24 + } + }, + { + "filename": "481_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 31, + "h": 24 + }, + "frame": { + "x": 63, + "y": 76, + "w": 31, + "h": 24 + } + }, + { + "filename": "468_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 30, + "h": 21 + }, + "frame": { + "x": 32, + "y": 100, + "w": 30, + "h": 21 + } + }, { "filename": "488_3", "rotated": false, @@ -423,12 +528,33 @@ "h": 28 }, "frame": { - "x": 32, - "y": 76, + "x": 30, + "y": 121, "w": 27, "h": 28 } }, + { + "filename": "468_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 30, + "h": 21 + }, + "frame": { + "x": 62, + "y": 100, + "w": 30, + "h": 21 + } + }, { "filename": "471_1", "rotated": false, @@ -444,8 +570,8 @@ "h": 25 }, "frame": { - "x": 59, - "y": 76, + "x": 57, + "y": 121, "w": 29, "h": 25 } @@ -465,8 +591,8 @@ "h": 24 }, "frame": { - "x": 32, - "y": 104, + "x": 30, + "y": 149, "w": 28, "h": 24 } @@ -485,72 +611,9 @@ "w": 29, "h": 25 }, - "frame": { - "x": 30, - "y": 128, - "w": 29, - "h": 25 - } - }, - { - "filename": "482_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 28, - "h": 26 - }, - "frame": { - "x": 60, - "y": 101, - "w": 28, - "h": 26 - } - }, - { - "filename": "468_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 30, - "h": 21 - }, - "frame": { - "x": 30, - "y": 153, - "w": 30, - "h": 21 - } - }, - { - "filename": "471_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 29, - "h": 25 - }, "frame": { "x": 27, - "y": 174, + "y": 173, "w": 29, "h": 25 } @@ -571,11 +634,53 @@ }, "frame": { "x": 27, - "y": 199, + "y": 198, "w": 28, "h": 24 } }, + { + "filename": "447_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 9, + "w": 20, + "h": 20 + }, + "frame": { + "x": 40, + "y": 222, + "w": 20, + "h": 20 + } + }, + { + "filename": "482_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 28, + "h": 26 + }, + "frame": { + "x": 58, + "y": 146, + "w": 28, + "h": 26 + } + }, { "filename": "429_1", "rotated": false, @@ -591,8 +696,8 @@ "h": 29 }, "frame": { - "x": 88, - "y": 76, + "x": 86, + "y": 121, "w": 21, "h": 29 } @@ -612,12 +717,33 @@ "h": 24 }, "frame": { - "x": 95, - "y": 52, + "x": 86, + "y": 150, "w": 24, "h": 24 } }, + { + "filename": "433_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 25, + "h": 21 + }, + "frame": { + "x": 92, + "y": 100, + "w": 25, + "h": 21 + } + }, { "filename": "400_3", "rotated": false, @@ -633,12 +759,33 @@ "h": 24 }, "frame": { - "x": 88, - "y": 105, + "x": 94, + "y": 76, "w": 24, "h": 24 } }, + { + "filename": "470_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 27, + "h": 24 + }, + "frame": { + "x": 95, + "y": 52, + "w": 27, + "h": 24 + } + }, { "filename": "429_2", "rotated": false, @@ -654,8 +801,8 @@ "h": 29 }, "frame": { - "x": 109, - "y": 76, + "x": 107, + "y": 121, "w": 21, "h": 29 } @@ -675,14 +822,14 @@ "h": 26 }, "frame": { - "x": 119, - "y": 50, + "x": 110, + "y": 150, "w": 26, "h": 26 } }, { - "filename": "429_3", + "filename": "468_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -690,16 +837,37 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 21, - "h": 29 + "x": 6, + "y": 6, + "w": 30, + "h": 21 }, "frame": { - "x": 130, - "y": 76, - "w": 21, - "h": 29 + "x": 132, + "y": 22, + "w": 30, + "h": 21 + } + }, + { + "filename": "471_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 29, + "h": 25 + }, + "frame": { + "x": 162, + "y": 22, + "w": 29, + "h": 25 } }, { @@ -717,91 +885,7 @@ "h": 24 }, "frame": { - "x": 112, - "y": 105, - "w": 28, - "h": 24 - } - }, - { - "filename": "482_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 28, - "h": 26 - }, - "frame": { - "x": 132, - "y": 24, - "w": 28, - "h": 26 - } - }, - { - "filename": "482_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 28, - "h": 26 - }, - "frame": { - "x": 160, - "y": 24, - "w": 28, - "h": 26 - } - }, - { - "filename": "426_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 26 - }, - "frame": { - "x": 145, - "y": 50, - "w": 26, - "h": 26 - } - }, - { - "filename": "480_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 28, - "h": 24 - }, - "frame": { - "x": 188, + "x": 191, "y": 24, "w": 28, "h": 24 @@ -822,14 +906,14 @@ "h": 24 }, "frame": { - "x": 216, + "x": 219, "y": 24, "w": 23, "h": 24 } }, { - "filename": "475_2", + "filename": "480_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -838,36 +922,15 @@ }, "spriteSourceSize": { "x": 9, - "y": 2, - "w": 24, - "h": 27 + "y": 5, + "w": 28, + "h": 24 }, "frame": { - "x": 151, - "y": 76, - "w": 24, - "h": 27 - } - }, - { - "filename": "448-mega_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 21, - "h": 26 - }, - "frame": { - "x": 171, - "y": 50, - "w": 21, - "h": 26 + "x": 131, + "y": 43, + "w": 28, + "h": 24 } }, { @@ -885,14 +948,14 @@ "h": 24 }, "frame": { - "x": 192, - "y": 48, + "x": 159, + "y": 47, "w": 28, "h": 24 } }, { - "filename": "448-mega_2", + "filename": "482_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -900,100 +963,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, + "x": 9, "y": 3, - "w": 21, + "w": 28, "h": 26 }, "frame": { - "x": 175, - "y": 76, - "w": 21, - "h": 26 - } - }, - { - "filename": "470_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 27, - "h": 24 - }, - "frame": { - "x": 196, - "y": 72, - "w": 27, - "h": 24 - } - }, - { - "filename": "425_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 17, - "h": 24 - }, - "frame": { - "x": 220, + "x": 187, "y": 48, - "w": 17, - "h": 24 - } - }, - { - "filename": "440_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 16, - "h": 21 - }, - "frame": { - "x": 223, - "y": 72, - "w": 16, - "h": 21 - } - }, - { - "filename": "440_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 16, - "h": 21 - }, - "frame": { - "x": 223, - "y": 93, - "w": 16, - "h": 21 + "w": 28, + "h": 26 } }, { @@ -1011,75 +990,12 @@ "h": 24 }, "frame": { - "x": 196, - "y": 96, + "x": 215, + "y": 48, "w": 27, "h": 24 } }, - { - "filename": "440_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 16, - "h": 21 - }, - "frame": { - "x": 223, - "y": 114, - "w": 16, - "h": 21 - } - }, - { - "filename": "443_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 21, - "h": 21 - }, - "frame": { - "x": 175, - "y": 102, - "w": 21, - "h": 21 - } - }, - { - "filename": "490_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 24, - "h": 22 - }, - "frame": { - "x": 151, - "y": 103, - "w": 24, - "h": 22 - } - }, { "filename": "470_3", "rotated": false, @@ -1095,35 +1011,14 @@ "h": 24 }, "frame": { - "x": 196, - "y": 120, + "x": 215, + "y": 72, "w": 27, "h": 24 } }, { - "filename": "443_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 21, - "h": 21 - }, - "frame": { - "x": 175, - "y": 123, - "w": 21, - "h": 21 - } - }, - { - "filename": "448-mega_3", + "filename": "433_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1132,14 +1027,119 @@ }, "spriteSourceSize": { "x": 11, - "y": 3, + "y": 8, + "w": 25, + "h": 21 + }, + "frame": { + "x": 117, + "y": 100, + "w": 25, + "h": 21 + } + }, + { + "filename": "429_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 1, "w": 21, + "h": 29 + }, + "frame": { + "x": 128, + "y": 121, + "w": 21, + "h": 29 + } + }, + { + "filename": "492-sky_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 23, + "h": 24 + }, + "frame": { + "x": 118, + "y": 76, + "w": 23, + "h": 24 + } + }, + { + "filename": "426_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, "h": 26 }, "frame": { - "x": 56, - "y": 174, - "w": 21, + "x": 136, + "y": 150, + "w": 26, + "h": 26 + } + }, + { + "filename": "448_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 18, + "h": 23 + }, + "frame": { + "x": 141, + "y": 67, + "w": 18, + "h": 23 + } + }, + { + "filename": "482_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 28, + "h": 26 + }, + "frame": { + "x": 159, + "y": 71, + "w": 28, "h": 26 } }, @@ -1158,14 +1158,14 @@ "h": 23 }, "frame": { - "x": 55, - "y": 200, + "x": 187, + "y": 74, "w": 25, "h": 23 } }, { - "filename": "433_1", + "filename": "425_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1173,41 +1173,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 25, - "h": 21 - }, - "frame": { - "x": 60, - "y": 127, - "w": 25, - "h": 21 - } - }, - { - "filename": "468_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, + "x": 12, "y": 6, - "w": 30, - "h": 21 + "w": 17, + "h": 24 }, "frame": { - "x": 85, - "y": 129, - "w": 30, - "h": 21 + "x": 142, + "y": 90, + "w": 17, + "h": 24 } }, { - "filename": "433_2", + "filename": "433_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -1221,8 +1200,8 @@ "h": 21 }, "frame": { - "x": 115, - "y": 129, + "x": 159, + "y": 97, "w": 25, "h": 21 } @@ -1242,14 +1221,14 @@ "h": 23 }, "frame": { - "x": 60, - "y": 148, + "x": 184, + "y": 97, "w": 25, "h": 23 } }, { - "filename": "468_3", + "filename": "475_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1257,37 +1236,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 30, - "h": 21 + "x": 9, + "y": 2, + "w": 24, + "h": 27 }, "frame": { - "x": 85, - "y": 150, - "w": 30, - "h": 21 - } - }, - { - "filename": "433_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 25, - "h": 21 - }, - "frame": { - "x": 115, - "y": 150, - "w": 25, - "h": 21 + "x": 149, + "y": 118, + "w": 24, + "h": 27 } }, { @@ -1305,138 +1263,12 @@ "h": 23 }, "frame": { - "x": 77, - "y": 171, + "x": 173, + "y": 120, "w": 25, "h": 23 } }, - { - "filename": "490_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 24, - "h": 22 - }, - "frame": { - "x": 102, - "y": 171, - "w": 24, - "h": 22 - } - }, - { - "filename": "492-sky_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 23, - "h": 24 - }, - "frame": { - "x": 80, - "y": 194, - "w": 23, - "h": 24 - } - }, - { - "filename": "443_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 21, - "h": 21 - }, - "frame": { - "x": 80, - "y": 218, - "w": 21, - "h": 21 - } - }, - { - "filename": "442_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 23, - "h": 22 - }, - "frame": { - "x": 103, - "y": 193, - "w": 23, - "h": 22 - } - }, - { - "filename": "427_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 20, - "h": 24 - }, - "frame": { - "x": 103, - "y": 215, - "w": 20, - "h": 24 - } - }, - { - "filename": "427_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 20, - "h": 24 - }, - "frame": { - "x": 123, - "y": 215, - "w": 20, - "h": 24 - } - }, { "filename": "425_3", "rotated": false, @@ -1452,14 +1284,14 @@ "h": 24 }, "frame": { - "x": 126, - "y": 171, + "x": 198, + "y": 120, "w": 17, "h": 24 } }, { - "filename": "447_1", + "filename": "448-mega_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -1468,120 +1300,15 @@ }, "spriteSourceSize": { "x": 11, - "y": 9, - "w": 20, - "h": 20 + "y": 3, + "w": 21, + "h": 26 }, "frame": { - "x": 126, - "y": 195, - "w": 20, - "h": 20 - } - }, - { - "filename": "494_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 20, - "h": 24 - }, - "frame": { - "x": 143, - "y": 215, - "w": 20, - "h": 24 - } - }, - { - "filename": "490_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 24, - "h": 22 - }, - "frame": { - "x": 140, - "y": 125, - "w": 24, - "h": 22 - } - }, - { - "filename": "494_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 20, - "h": 24 - }, - "frame": { - "x": 140, - "y": 147, - "w": 20, - "h": 24 - } - }, - { - "filename": "448_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 18, - "h": 23 - }, - "frame": { - "x": 143, - "y": 171, - "w": 18, - "h": 23 - } - }, - { - "filename": "447_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 20, - "h": 20 - }, - "frame": { - "x": 146, - "y": 194, - "w": 20, - "h": 20 + "x": 162, + "y": 145, + "w": 21, + "h": 26 } }, { @@ -1599,14 +1326,14 @@ "h": 23 }, "frame": { - "x": 160, - "y": 147, + "x": 209, + "y": 97, "w": 18, "h": 23 } }, { - "filename": "442_3", + "filename": "427_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1614,15 +1341,141 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, + "x": 11, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 215, + "y": 120, + "w": 20, + "h": 24 + } + }, + { + "filename": "448-mega_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 21, + "h": 26 + }, + "frame": { + "x": 183, + "y": 144, + "w": 21, + "h": 26 + } + }, + { + "filename": "448-mega_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 21, + "h": 26 + }, + "frame": { + "x": 204, + "y": 144, + "w": 21, + "h": 26 + } + }, + { + "filename": "440_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 16, + "h": 21 + }, + "frame": { + "x": 225, + "y": 144, + "w": 16, + "h": 21 + } + }, + { + "filename": "427_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 55, + "y": 198, + "w": 20, + "h": 24 + } + }, + { + "filename": "494_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 56, + "y": 174, + "w": 20, + "h": 24 + } + }, + { + "filename": "490_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, "y": 7, - "w": 23, + "w": 24, "h": 22 }, "frame": { - "x": 178, - "y": 144, - "w": 23, + "x": 76, + "y": 174, + "w": 24, "h": 22 } }, @@ -1641,50 +1494,8 @@ "h": 19 }, "frame": { - "x": 201, - "y": 144, - "w": 22, - "h": 19 - } - }, - { - "filename": "448_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 18, - "h": 23 - }, - "frame": { - "x": 161, - "y": 170, - "w": 18, - "h": 23 - } - }, - { - "filename": "458_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 9, - "w": 22, - "h": 19 - }, - "frame": { - "x": 179, - "y": 166, + "x": 60, + "y": 222, "w": 22, "h": 19 } @@ -1704,33 +1515,12 @@ "h": 19 }, "frame": { - "x": 201, - "y": 163, + "x": 100, + "y": 176, "w": 25, "h": 19 } }, - { - "filename": "447_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 20, - "h": 20 - }, - "frame": { - "x": 166, - "y": 193, - "w": 20, - "h": 20 - } - }, { "filename": "489_2", "rotated": false, @@ -1746,12 +1536,138 @@ "h": 19 }, "frame": { - "x": 201, - "y": 182, + "x": 125, + "y": 176, "w": 25, "h": 19 } }, + { + "filename": "494_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 75, + "y": 198, + "w": 20, + "h": 24 + } + }, + { + "filename": "458_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 9, + "w": 22, + "h": 19 + }, + "frame": { + "x": 82, + "y": 222, + "w": 22, + "h": 19 + } + }, + { + "filename": "440_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 16, + "h": 21 + }, + "frame": { + "x": 150, + "y": 176, + "w": 16, + "h": 21 + } + }, + { + "filename": "448_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 18, + "h": 23 + }, + "frame": { + "x": 166, + "y": 171, + "w": 18, + "h": 23 + } + }, + { + "filename": "490_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 24, + "h": 22 + }, + "frame": { + "x": 184, + "y": 170, + "w": 24, + "h": 22 + } + }, + { + "filename": "442_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 23, + "h": 22 + }, + "frame": { + "x": 208, + "y": 170, + "w": 23, + "h": 22 + } + }, { "filename": "489_3", "rotated": false, @@ -1767,12 +1683,117 @@ "h": 19 }, "frame": { - "x": 186, - "y": 201, + "x": 184, + "y": 192, "w": 25, "h": 19 } }, + { + "filename": "442_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 23, + "h": 22 + }, + "frame": { + "x": 209, + "y": 192, + "w": 23, + "h": 22 + } + }, + { + "filename": "490_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 24, + "h": 22 + }, + "frame": { + "x": 100, + "y": 195, + "w": 24, + "h": 22 + } + }, + { + "filename": "443_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 21, + "h": 21 + }, + "frame": { + "x": 124, + "y": 195, + "w": 21, + "h": 21 + } + }, + { + "filename": "443_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 21, + "h": 21 + }, + "frame": { + "x": 104, + "y": 217, + "w": 21, + "h": 21 + } + }, + { + "filename": "443_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 21, + "h": 21 + }, + "frame": { + "x": 125, + "y": 216, + "w": 21, + "h": 21 + } + }, { "filename": "399_2", "rotated": false, @@ -1788,33 +1809,12 @@ "h": 18 }, "frame": { - "x": 211, - "y": 201, + "x": 145, + "y": 197, "w": 22, "h": 18 } }, - { - "filename": "492-land_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 20, - "h": 18 - }, - "frame": { - "x": 166, - "y": 213, - "w": 20, - "h": 18 - } - }, { "filename": "399_3", "rotated": false, @@ -1830,12 +1830,54 @@ "h": 18 }, "frame": { - "x": 186, - "y": 220, + "x": 146, + "y": 215, "w": 22, "h": 18 } }, + { + "filename": "440_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 16, + "h": 21 + }, + "frame": { + "x": 167, + "y": 194, + "w": 16, + "h": 21 + } + }, + { + "filename": "492-land_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 11, + "w": 20, + "h": 18 + }, + "frame": { + "x": 168, + "y": 215, + "w": 20, + "h": 18 + } + }, { "filename": "492-land_3", "rotated": false, @@ -1851,8 +1893,8 @@ "h": 18 }, "frame": { - "x": 211, - "y": 219, + "x": 188, + "y": 211, "w": 20, "h": 18 } @@ -1863,6 +1905,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4b63c5647394176b03a33faa1261b5ce:a9e8c9029ae919f3288c88e736961ac4:ebc3f8ec5b2480b298192d752b6e57dc$" + "smartupdate": "$TexturePacker:SmartUpdate:cc5ef470e30914396d6fe36e218a5c9b:1eba0f8c1334e76461b01e852656e0cf:ebc3f8ec5b2480b298192d752b6e57dc$" } } diff --git a/public/images/pokemon_icons_4v.png b/public/images/pokemon_icons_4v.png index ec441236c..274a8a497 100644 Binary files a/public/images/pokemon_icons_4v.png and b/public/images/pokemon_icons_4v.png differ diff --git a/public/images/pokemon_icons_5v.json b/public/images/pokemon_icons_5v.json index 4091d3527..557aae7e1 100644 --- a/public/images/pokemon_icons_5v.json +++ b/public/images/pokemon_icons_5v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_5v.png", "format": "RGBA8888", "size": { - "w": 219, - "h": 219 + "w": 237, + "h": 237 }, "scale": 1, "frames": [ @@ -241,7 +241,7 @@ } }, { - "filename": "560_1", + "filename": "609_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -249,16 +249,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 22, - "h": 23 + "x": 5, + "y": 4, + "w": 31, + "h": 25 }, "frame": { "x": 197, "y": 0, - "w": 22, - "h": 23 + "w": 31, + "h": 25 } }, { @@ -283,7 +283,7 @@ } }, { - "filename": "571_2", + "filename": "533_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -291,20 +291,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 31, - "h": 24 + "x": 7, + "y": 3, + "w": 29, + "h": 26 }, "frame": { "x": 0, "y": 195, - "w": 31, - "h": 24 + "w": 29, + "h": 26 } }, { - "filename": "560_2", + "filename": "546_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -313,40 +313,19 @@ }, "spriteSourceSize": { "x": 9, - "y": 6, - "w": 22, - "h": 23 + "y": 13, + "w": 23, + "h": 16 }, "frame": { - "x": 197, - "y": 23, - "w": 22, - "h": 23 + "x": 0, + "y": 221, + "w": 23, + "h": 16 } }, { - "filename": "571_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 31, - "h": 24 - }, - "frame": { - "x": 166, - "y": 25, - "w": 31, - "h": 24 - } - }, - { - "filename": "560_3", + "filename": "546_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -355,15 +334,15 @@ }, "spriteSourceSize": { "x": 9, - "y": 6, - "w": 22, - "h": 23 + "y": 13, + "w": 23, + "h": 16 }, "frame": { - "x": 197, - "y": 46, - "w": 22, - "h": 23 + "x": 23, + "y": 221, + "w": 23, + "h": 16 } }, { @@ -423,14 +402,14 @@ "h": 23 }, "frame": { - "x": 33, - "y": 28, + "x": 166, + "y": 25, "w": 32, "h": 23 } }, { - "filename": "609_3", + "filename": "571_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -439,19 +418,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 4, + "y": 5, "w": 31, - "h": 25 + "h": 24 }, "frame": { - "x": 32, - "y": 51, + "x": 198, + "y": 25, "w": 31, - "h": 25 + "h": 24 } }, { - "filename": "533_3", + "filename": "571_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -459,16 +438,37 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 29, - "h": 26 + "x": 5, + "y": 5, + "w": 31, + "h": 24 }, "frame": { - "x": 32, - "y": 76, - "w": 29, - "h": 26 + "x": 33, + "y": 28, + "w": 31, + "h": 24 + } + }, + { + "filename": "593_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 30, + "h": 24 + }, + "frame": { + "x": 64, + "y": 28, + "w": 30, + "h": 24 } }, { @@ -487,13 +487,13 @@ }, "frame": { "x": 32, - "y": 102, + "y": 52, "w": 27, "h": 27 } }, { - "filename": "538_2", + "filename": "593_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -502,36 +502,15 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, + "y": 5, "w": 30, - "h": 22 + "h": 24 }, "frame": { - "x": 65, - "y": 28, + "x": 59, + "y": 52, "w": 30, - "h": 22 - } - }, - { - "filename": "538_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 30, - "h": 22 - }, - "frame": { - "x": 32, - "y": 129, - "w": 30, - "h": 22 + "h": 24 } }, { @@ -549,54 +528,12 @@ "h": 26 }, "frame": { - "x": 29, - "y": 151, + "x": 32, + "y": 79, "w": 25, "h": 26 } }, - { - "filename": "562_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 24, - "h": 18 - }, - "frame": { - "x": 29, - "y": 177, - "w": 24, - "h": 18 - } - }, - { - "filename": "547_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 23, - "h": 24 - }, - "frame": { - "x": 31, - "y": 195, - "w": 23, - "h": 24 - } - }, { "filename": "586-summer_1", "rotated": false, @@ -612,14 +549,14 @@ "h": 26 }, "frame": { - "x": 54, - "y": 151, + "x": 32, + "y": 105, "w": 25, "h": 26 } }, { - "filename": "562_3", + "filename": "532_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -627,20 +564,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 24, - "h": 18 + "x": 7, + "y": 8, + "w": 26, + "h": 21 }, "frame": { - "x": 53, - "y": 177, - "w": 24, - "h": 18 + "x": 32, + "y": 131, + "w": 26, + "h": 21 } }, { - "filename": "547_3", + "filename": "593-f_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -648,15 +585,120 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, + "x": 6, "y": 5, - "w": 23, + "w": 29, "h": 24 }, "frame": { - "x": 54, - "y": 195, - "w": 23, + "x": 29, + "y": 152, + "w": 29, + "h": 24 + } + }, + { + "filename": "593-f_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 29, + "h": 24 + }, + "frame": { + "x": 29, + "y": 176, + "w": 29, + "h": 24 + } + }, + { + "filename": "532_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 8, + "w": 26, + "h": 21 + }, + "frame": { + "x": 29, + "y": 200, + "w": 26, + "h": 21 + } + }, + { + "filename": "577_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 13, + "w": 17, + "h": 16 + }, + "frame": { + "x": 46, + "y": 221, + "w": 17, + "h": 16 + } + }, + { + "filename": "538_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 30, + "h": 22 + }, + "frame": { + "x": 59, + "y": 76, + "w": 30, + "h": 22 + } + }, + { + "filename": "593-f_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 29, + "h": 24 + }, + "frame": { + "x": 57, + "y": 98, + "w": 29, "h": 24 } }, @@ -675,8 +717,8 @@ "h": 26 }, "frame": { - "x": 61, - "y": 76, + "x": 58, + "y": 122, "w": 25, "h": 26 } @@ -696,33 +738,12 @@ "h": 26 }, "frame": { - "x": 59, - "y": 102, + "x": 58, + "y": 148, "w": 24, "h": 26 } }, - { - "filename": "549_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 23 - }, - "frame": { - "x": 62, - "y": 128, - "w": 19, - "h": 23 - } - }, { "filename": "649-burn_3", "rotated": false, @@ -738,12 +759,54 @@ "h": 26 }, "frame": { - "x": 65, - "y": 50, + "x": 58, + "y": 174, "w": 24, "h": 26 } }, + { + "filename": "572_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 24, + "h": 21 + }, + "frame": { + "x": 55, + "y": 200, + "w": 24, + "h": 21 + } + }, + { + "filename": "577_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 13, + "w": 17, + "h": 16 + }, + "frame": { + "x": 63, + "y": 221, + "w": 17, + "h": 16 + } + }, { "filename": "649-chill_2", "rotated": false, @@ -760,11 +823,95 @@ }, "frame": { "x": 89, - "y": 50, + "y": 52, "w": 24, "h": 26 } }, + { + "filename": "538_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 30, + "h": 22 + }, + "frame": { + "x": 113, + "y": 49, + "w": 30, + "h": 22 + } + }, + { + "filename": "572_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 24, + "h": 21 + }, + "frame": { + "x": 89, + "y": 78, + "w": 24, + "h": 21 + } + }, + { + "filename": "620_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 27, + "h": 24 + }, + "frame": { + "x": 113, + "y": 71, + "w": 27, + "h": 24 + } + }, + { + "filename": "620_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 27, + "h": 24 + }, + "frame": { + "x": 86, + "y": 99, + "w": 27, + "h": 24 + } + }, { "filename": "649-chill_3", "rotated": false, @@ -780,8 +927,8 @@ "h": 26 }, "frame": { - "x": 86, - "y": 76, + "x": 113, + "y": 95, "w": 24, "h": 26 } @@ -802,7 +949,7 @@ }, "frame": { "x": 83, - "y": 102, + "y": 123, "w": 24, "h": 26 } @@ -822,8 +969,8 @@ "h": 26 }, "frame": { - "x": 113, - "y": 49, + "x": 82, + "y": 149, "w": 24, "h": 26 } @@ -843,12 +990,33 @@ "h": 26 }, "frame": { - "x": 137, - "y": 49, + "x": 82, + "y": 175, "w": 24, "h": 26 } }, + { + "filename": "547_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 23, + "h": 24 + }, + "frame": { + "x": 143, + "y": 49, + "w": 23, + "h": 24 + } + }, { "filename": "649-shock_3", "rotated": false, @@ -864,33 +1032,12 @@ "h": 26 }, "frame": { - "x": 161, - "y": 49, + "x": 166, + "y": 48, "w": 24, "h": 26 } }, - { - "filename": "532_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 26, - "h": 21 - }, - "frame": { - "x": 81, - "y": 128, - "w": 26, - "h": 21 - } - }, { "filename": "649_2", "rotated": false, @@ -906,8 +1053,8 @@ "h": 26 }, "frame": { - "x": 110, - "y": 76, + "x": 140, + "y": 73, "w": 24, "h": 26 } @@ -927,35 +1074,14 @@ "h": 26 }, "frame": { - "x": 107, - "y": 102, + "x": 164, + "y": 74, "w": 24, "h": 26 } }, { - "filename": "532_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 26, - "h": 21 - }, - "frame": { - "x": 134, - "y": 75, - "w": 26, - "h": 21 - } - }, - { - "filename": "572_2", + "filename": "547_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -964,19 +1090,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, - "w": 24, - "h": 21 + "y": 5, + "w": 23, + "h": 24 }, "frame": { - "x": 107, - "y": 128, - "w": 24, - "h": 21 + "x": 137, + "y": 99, + "w": 23, + "h": 24 } }, { - "filename": "572_3", + "filename": "560_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -984,41 +1110,41 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 24, - "h": 21 + "x": 9, + "y": 6, + "w": 22, + "h": 23 }, "frame": { "x": 160, - "y": 75, + "y": 100, + "w": 22, + "h": 23 + } + }, + { + "filename": "562_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 11, "w": 24, - "h": 21 - } - }, - { - "filename": "546_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 13, - "w": 23, - "h": 16 + "h": 18 }, "frame": { - "x": 134, - "y": 96, - "w": 23, - "h": 16 + "x": 79, + "y": 201, + "w": 24, + "h": 18 } }, { - "filename": "585-autumn_1", + "filename": "562_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -1026,83 +1152,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 20, - "h": 24 - }, - "frame": { - "x": 131, - "y": 112, - "w": 20, - "h": 24 - } - }, - { - "filename": "546_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 13, - "w": 23, - "h": 16 - }, - "frame": { - "x": 157, - "y": 96, - "w": 23, - "h": 16 - } - }, - { - "filename": "585-spring_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 20, - "h": 24 - }, - "frame": { - "x": 151, - "y": 112, - "w": 20, - "h": 24 - } - }, - { - "filename": "541_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, + "x": 8, "y": 11, - "w": 22, + "w": 24, "h": 18 }, "frame": { - "x": 131, - "y": 136, - "w": 22, + "x": 80, + "y": 219, + "w": 24, "h": 18 } }, { - "filename": "541_3", + "filename": "560_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1111,19 +1174,19 @@ }, "spriteSourceSize": { "x": 9, - "y": 11, + "y": 6, "w": 22, - "h": 18 + "h": 23 }, "frame": { - "x": 153, - "y": 136, + "x": 190, + "y": 49, "w": 22, - "h": 18 + "h": 23 } }, { - "filename": "585-summer_1", + "filename": "549_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1131,79 +1194,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 20, - "h": 24 + "x": 10, + "y": 6, + "w": 19, + "h": 23 }, "frame": { - "x": 171, - "y": 112, - "w": 20, - "h": 24 - } - }, - { - "filename": "540_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 10, - "w": 17, - "h": 19 - }, - "frame": { - "x": 175, - "y": 136, - "w": 17, - "h": 19 - } - }, - { - "filename": "577_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 13, - "w": 17, - "h": 16 - }, - "frame": { - "x": 180, - "y": 96, - "w": 17, - "h": 16 - } - }, - { - "filename": "578_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 18, - "h": 21 - }, - "frame": { - "x": 184, - "y": 75, - "w": 18, - "h": 21 + "x": 212, + "y": 49, + "w": 19, + "h": 23 } }, { @@ -1221,12 +1221,117 @@ "h": 25 }, "frame": { - "x": 202, - "y": 69, + "x": 107, + "y": 123, "w": 17, "h": 25 } }, + { + "filename": "560_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 6, + "w": 22, + "h": 23 + }, + "frame": { + "x": 124, + "y": 123, + "w": 22, + "h": 23 + } + }, + { + "filename": "585-autumn_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 146, + "y": 123, + "w": 20, + "h": 24 + } + }, + { + "filename": "585-spring_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 166, + "y": 123, + "w": 20, + "h": 24 + } + }, + { + "filename": "542_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 16, + "h": 23 + }, + "frame": { + "x": 182, + "y": 100, + "w": 16, + "h": 23 + } + }, + { + "filename": "585-summer_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 186, + "y": 123, + "w": 20, + "h": 24 + } + }, { "filename": "648-pirouette_3", "rotated": false, @@ -1242,8 +1347,8 @@ "h": 25 }, "frame": { - "x": 202, - "y": 94, + "x": 188, + "y": 74, "w": 17, "h": 25 } @@ -1263,14 +1368,14 @@ "h": 24 }, "frame": { - "x": 77, - "y": 177, + "x": 205, + "y": 72, "w": 20, "h": 24 } }, { - "filename": "559_1", + "filename": "542_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -1279,15 +1384,15 @@ }, "spriteSourceSize": { "x": 12, - "y": 11, - "w": 17, - "h": 18 + "y": 6, + "w": 16, + "h": 23 }, "frame": { - "x": 77, - "y": 201, - "w": 17, - "h": 18 + "x": 198, + "y": 99, + "w": 16, + "h": 23 } }, { @@ -1305,14 +1410,14 @@ "h": 23 }, "frame": { - "x": 79, - "y": 154, + "x": 214, + "y": 96, "w": 19, "h": 23 } }, { - "filename": "559_2", + "filename": "648-aria_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1321,17 +1426,311 @@ }, "spriteSourceSize": { "x": 12, + "y": 6, + "w": 16, + "h": 23 + }, + "frame": { + "x": 206, + "y": 122, + "w": 16, + "h": 23 + } + }, + { + "filename": "607_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 9, + "w": 15, + "h": 20 + }, + "frame": { + "x": 222, + "y": 119, + "w": 15, + "h": 20 + } + }, + { + "filename": "607_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 9, + "w": 15, + "h": 20 + }, + "frame": { + "x": 222, + "y": 139, + "w": 15, + "h": 20 + } + }, + { + "filename": "648-aria_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 16, + "h": 23 + }, + "frame": { + "x": 206, + "y": 145, + "w": 16, + "h": 23 + } + }, + { + "filename": "541_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, "y": 11, - "w": 17, + "w": 22, "h": 18 }, "frame": { - "x": 94, - "y": 201, - "w": 17, + "x": 124, + "y": 146, + "w": 22, "h": 18 } }, + { + "filename": "541_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 22, + "h": 18 + }, + "frame": { + "x": 146, + "y": 147, + "w": 22, + "h": 18 + } + }, + { + "filename": "592-f_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 21, + "h": 22 + }, + "frame": { + "x": 168, + "y": 147, + "w": 21, + "h": 22 + } + }, + { + "filename": "540_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 10, + "w": 17, + "h": 19 + }, + "frame": { + "x": 189, + "y": 147, + "w": 17, + "h": 19 + } + }, + { + "filename": "578_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 18, + "h": 21 + }, + "frame": { + "x": 106, + "y": 149, + "w": 18, + "h": 21 + } + }, + { + "filename": "592-f_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 21, + "h": 22 + }, + "frame": { + "x": 106, + "y": 170, + "w": 21, + "h": 22 + } + }, + { + "filename": "578_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 18, + "h": 21 + }, + "frame": { + "x": 127, + "y": 164, + "w": 18, + "h": 21 + } + }, + { + "filename": "592-f_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 21, + "h": 22 + }, + "frame": { + "x": 145, + "y": 165, + "w": 21, + "h": 22 + } + }, + { + "filename": "592_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 21, + "h": 22 + }, + "frame": { + "x": 166, + "y": 169, + "w": 21, + "h": 22 + } + }, + { + "filename": "592_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 21, + "h": 22 + }, + "frame": { + "x": 106, + "y": 192, + "w": 21, + "h": 22 + } + }, + { + "filename": "578_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 18, + "h": 21 + }, + "frame": { + "x": 127, + "y": 185, + "w": 18, + "h": 21 + } + }, { "filename": "608_2", "rotated": false, @@ -1347,8 +1746,8 @@ "h": 20 }, "frame": { - "x": 98, - "y": 149, + "x": 145, + "y": 187, "w": 21, "h": 20 } @@ -1368,56 +1767,14 @@ "h": 20 }, "frame": { - "x": 98, - "y": 169, + "x": 166, + "y": 191, "w": 21, "h": 20 } }, { - "filename": "542_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 16, - "h": 23 - }, - "frame": { - "x": 119, - "y": 154, - "w": 16, - "h": 23 - } - }, - { - "filename": "542_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 16, - "h": 23 - }, - "frame": { - "x": 135, - "y": 154, - "w": 16, - "h": 23 - } - }, - { - "filename": "578_2", + "filename": "619_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -1427,34 +1784,13 @@ "spriteSourceSize": { "x": 11, "y": 8, - "w": 18, + "w": 20, "h": 21 }, "frame": { - "x": 151, - "y": 154, - "w": 18, - "h": 21 - } - }, - { - "filename": "578_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 18, - "h": 21 - }, - "frame": { - "x": 169, - "y": 155, - "w": 18, + "x": 104, + "y": 214, + "w": 20, "h": 21 } }, @@ -1473,14 +1809,14 @@ "h": 19 }, "frame": { - "x": 119, - "y": 177, + "x": 127, + "y": 206, "w": 18, "h": 19 } }, { - "filename": "648-aria_2", + "filename": "619_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -1488,79 +1824,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 16, - "h": 23 + "x": 11, + "y": 8, + "w": 20, + "h": 21 }, "frame": { - "x": 111, - "y": 196, - "w": 16, - "h": 23 - } - }, - { - "filename": "648-aria_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 16, - "h": 23 - }, - "frame": { - "x": 127, - "y": 196, - "w": 16, - "h": 23 - } - }, - { - "filename": "540_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 10, - "w": 17, - "h": 19 - }, - "frame": { - "x": 137, - "y": 177, - "w": 17, - "h": 19 - } - }, - { - "filename": "607_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 9, - "w": 15, - "h": 20 - }, - "frame": { - "x": 154, - "y": 175, - "w": 15, - "h": 20 + "x": 145, + "y": 207, + "w": 20, + "h": 21 } }, { @@ -1578,12 +1851,33 @@ "h": 19 }, "frame": { - "x": 169, - "y": 176, + "x": 165, + "y": 211, "w": 18, "h": 19 } }, + { + "filename": "540_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 10, + "w": 17, + "h": 19 + }, + "frame": { + "x": 183, + "y": 211, + "w": 17, + "h": 19 + } + }, { "filename": "548_1", "rotated": false, @@ -1599,33 +1893,12 @@ "h": 20 }, "frame": { - "x": 143, - "y": 196, + "x": 222, + "y": 159, "w": 14, "h": 20 } }, - { - "filename": "559_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 17, - "h": 18 - }, - "frame": { - "x": 157, - "y": 195, - "w": 17, - "h": 18 - } - }, { "filename": "548_2", "rotated": false, @@ -1641,8 +1914,8 @@ "h": 20 }, "frame": { - "x": 174, - "y": 195, + "x": 187, + "y": 169, "w": 14, "h": 20 } @@ -1663,34 +1936,13 @@ }, "frame": { "x": 187, - "y": 155, + "y": 189, "w": 14, "h": 20 } }, { - "filename": "607_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 9, - "w": 15, - "h": 20 - }, - "frame": { - "x": 187, - "y": 175, - "w": 15, - "h": 20 - } - }, - { - "filename": "577_2", + "filename": "559_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -1699,15 +1951,57 @@ }, "spriteSourceSize": { "x": 12, - "y": 13, + "y": 11, "w": 17, - "h": 16 + "h": 18 }, "frame": { - "x": 202, - "y": 119, + "x": 201, + "y": 168, "w": 17, - "h": 16 + "h": 18 + } + }, + { + "filename": "559_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 17, + "h": 18 + }, + "frame": { + "x": 201, + "y": 186, + "w": 17, + "h": 18 + } + }, + { + "filename": "559_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 17, + "h": 18 + }, + "frame": { + "x": 218, + "y": 179, + "w": 17, + "h": 18 } }, { @@ -1725,8 +2019,8 @@ "h": 16 }, "frame": { - "x": 202, - "y": 135, + "x": 218, + "y": 197, "w": 17, "h": 16 } @@ -1737,6 +2031,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6a72d905f49c2e6c5a2043fc04e736e5:9d034b1095aa7c830432005b7740f0b5:f1931bc28ee7f32dba7543723757cf2a$" + "smartupdate": "$TexturePacker:SmartUpdate:c76d37eea220913a090b0aaebeba0416:dac99d4c8e287d30b7d345500e57da65:f1931bc28ee7f32dba7543723757cf2a$" } } diff --git a/public/images/pokemon_icons_5v.png b/public/images/pokemon_icons_5v.png index 0aa10cec7..c688b3e80 100644 Binary files a/public/images/pokemon_icons_5v.png and b/public/images/pokemon_icons_5v.png differ diff --git a/public/images/pokemon_icons_8v.json b/public/images/pokemon_icons_8v.json index 0f1b8c30a..f4af38d82 100644 --- a/public/images/pokemon_icons_8v.json +++ b/public/images/pokemon_icons_8v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_8v.png", "format": "RGBA8888", "size": { - "w": 196, - "h": 196 + "w": 203, + "h": 203 }, "scale": 1, "frames": [ @@ -44,11 +44,53 @@ "w": 40, "h": 30 }, + "frame": { + "x": 0, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "851_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 30 + }, "frame": { "x": 40, "y": 0, + "w": 39, + "h": 30 + } + }, + { + "filename": "851_3", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 40, "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 30 + }, + "frame": { + "x": 0, + "y": 60, + "w": 39, + "h": 30 } }, { @@ -66,8 +108,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 0, + "x": 40, + "y": 30, "w": 35, "h": 30 } @@ -87,7 +129,7 @@ "h": 30 }, "frame": { - "x": 115, + "x": 79, "y": 0, "w": 35, "h": 30 @@ -108,8 +150,8 @@ "h": 30 }, "frame": { - "x": 150, - "y": 0, + "x": 0, + "y": 90, "w": 31, "h": 30 } @@ -129,8 +171,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 30, + "x": 39, + "y": 60, "w": 31, "h": 30 } @@ -150,8 +192,8 @@ "h": 28 }, "frame": { - "x": 0, - "y": 60, + "x": 75, + "y": 30, "w": 32, "h": 28 } @@ -171,8 +213,8 @@ "h": 28 }, "frame": { - "x": 31, - "y": 30, + "x": 114, + "y": 0, "w": 32, "h": 28 } @@ -192,8 +234,8 @@ "h": 28 }, "frame": { - "x": 0, - "y": 88, + "x": 31, + "y": 90, "w": 32, "h": 28 } @@ -214,7 +256,7 @@ }, "frame": { "x": 0, - "y": 116, + "y": 120, "w": 28, "h": 27 } @@ -234,117 +276,12 @@ "h": 27 }, "frame": { - "x": 0, - "y": 143, + "x": 146, + "y": 0, "w": 28, "h": 27 } }, - { - "filename": "886_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 28, - "h": 26 - }, - "frame": { - "x": 0, - "y": 170, - "w": 28, - "h": 26 - } - }, - { - "filename": "900_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 27, - "h": 27 - }, - "frame": { - "x": 28, - "y": 116, - "w": 27, - "h": 27 - } - }, - { - "filename": "900_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 27, - "h": 27 - }, - "frame": { - "x": 28, - "y": 143, - "w": 27, - "h": 27 - } - }, - { - "filename": "886_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 28, - "h": 26 - }, - "frame": { - "x": 28, - "y": 170, - "w": 28, - "h": 26 - } - }, - { - "filename": "886_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 28, - "h": 26 - }, - "frame": { - "x": 32, - "y": 58, - "w": 28, - "h": 26 - } - }, { "filename": "4078_2", "rotated": false, @@ -360,8 +297,8 @@ "h": 25 }, "frame": { - "x": 32, - "y": 84, + "x": 174, + "y": 0, "w": 29, "h": 25 } @@ -381,14 +318,14 @@ "h": 25 }, "frame": { - "x": 60, - "y": 58, + "x": 174, + "y": 25, "w": 29, "h": 25 } }, { - "filename": "6571_2", + "filename": "886_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -397,19 +334,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 4, - "w": 27, - "h": 25 + "y": 2, + "w": 28, + "h": 26 }, "frame": { - "x": 63, - "y": 30, - "w": 27, - "h": 25 + "x": 0, + "y": 147, + "w": 28, + "h": 26 } }, { - "filename": "6571_3", + "filename": "886_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -418,19 +355,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 4, - "w": 27, - "h": 25 + "y": 2, + "w": 28, + "h": 26 }, "frame": { - "x": 55, - "y": 109, - "w": 27, - "h": 25 + "x": 0, + "y": 173, + "w": 28, + "h": 26 } }, { - "filename": "873_1", + "filename": "886_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -439,15 +376,15 @@ }, "spriteSourceSize": { "x": 6, - "y": 3, - "w": 27, - "h": 24 + "y": 2, + "w": 28, + "h": 26 }, "frame": { - "x": 61, - "y": 83, - "w": 27, - "h": 24 + "x": 146, + "y": 27, + "w": 28, + "h": 26 } }, { @@ -465,8 +402,8 @@ "h": 27 }, "frame": { - "x": 55, - "y": 134, + "x": 63, + "y": 90, "w": 24, "h": 27 } @@ -486,14 +423,14 @@ "h": 27 }, "frame": { - "x": 56, - "y": 161, + "x": 107, + "y": 30, "w": 24, "h": 27 } }, { - "filename": "873_2", + "filename": "900_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -502,19 +439,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 3, + "y": 2, "w": 27, - "h": 24 + "h": 27 }, "frame": { - "x": 79, - "y": 134, + "x": 70, + "y": 60, "w": 27, - "h": 24 + "h": 27 } }, { - "filename": "873_3", + "filename": "900_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -523,204 +460,15 @@ }, "spriteSourceSize": { "x": 6, - "y": 3, + "y": 2, "w": 27, - "h": 24 + "h": 27 }, "frame": { - "x": 82, - "y": 107, + "x": 97, + "y": 58, "w": 27, - "h": 24 - } - }, - { - "filename": "4077_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 23 - }, - "frame": { - "x": 88, - "y": 83, - "w": 26, - "h": 23 - } - }, - { - "filename": "4077_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 23 - }, - "frame": { - "x": 89, - "y": 55, - "w": 26, - "h": 23 - } - }, - { - "filename": "857_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 24, - "h": 24 - }, - "frame": { - "x": 90, - "y": 30, - "w": 24, - "h": 24 - } - }, - { - "filename": "857_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 24, - "h": 24 - }, - "frame": { - "x": 114, - "y": 30, - "w": 24, - "h": 24 - } - }, - { - "filename": "4264_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 24, - "h": 22 - }, - "frame": { - "x": 80, - "y": 158, - "w": 24, - "h": 22 - } - }, - { - "filename": "872_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 19, - "h": 16 - }, - "frame": { - "x": 80, - "y": 180, - "w": 19, - "h": 16 - } - }, - { - "filename": "872_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 19, - "h": 16 - }, - "frame": { - "x": 99, - "y": 180, - "w": 19, - "h": 16 - } - }, - { - "filename": "4264_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 24, - "h": 22 - }, - "frame": { - "x": 104, - "y": 158, - "w": 24, - "h": 22 - } - }, - { - "filename": "872_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 19, - "h": 16 - }, - "frame": { - "x": 118, - "y": 180, - "w": 19, - "h": 16 + "h": 27 } }, { @@ -738,8 +486,8 @@ "h": 25 }, "frame": { - "x": 106, - "y": 131, + "x": 87, + "y": 87, "w": 21, "h": 25 } @@ -759,8 +507,8 @@ "h": 25 }, "frame": { - "x": 109, - "y": 106, + "x": 108, + "y": 85, "w": 21, "h": 25 } @@ -780,14 +528,14 @@ "h": 25 }, "frame": { - "x": 127, - "y": 131, + "x": 124, + "y": 57, "w": 21, "h": 25 } }, { - "filename": "885_1", + "filename": "6571_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -795,37 +543,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 26, - "h": 19 + "x": 6, + "y": 4, + "w": 27, + "h": 25 }, "frame": { - "x": 128, - "y": 156, - "w": 26, - "h": 19 - } - }, - { - "filename": "885_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 26, - "h": 19 - }, - "frame": { - "x": 137, - "y": 175, - "w": 26, - "h": 19 + "x": 145, + "y": 53, + "w": 27, + "h": 25 } }, { @@ -843,14 +570,77 @@ "h": 25 }, "frame": { - "x": 114, - "y": 78, + "x": 129, + "y": 82, "w": 21, "h": 25 } }, { - "filename": "885_3", + "filename": "6571_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 27, + "h": 25 + }, + "frame": { + "x": 150, + "y": 78, + "w": 27, + "h": 25 + } + }, + { + "filename": "4077_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, + "h": 23 + }, + "frame": { + "x": 177, + "y": 50, + "w": 26, + "h": 23 + } + }, + { + "filename": "4077_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, + "h": 23 + }, + "frame": { + "x": 177, + "y": 73, + "w": 26, + "h": 23 + } + }, + { + "filename": "885_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -864,14 +654,14 @@ "h": 19 }, "frame": { - "x": 130, - "y": 103, + "x": 177, + "y": 96, "w": 26, "h": 19 } }, { - "filename": "6570_2", + "filename": "873_1", "rotated": false, "trimmed": true, "sourceSize": { @@ -879,20 +669,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 20, + "x": 6, + "y": 3, + "w": 27, "h": 24 }, "frame": { - "x": 148, - "y": 122, - "w": 20, + "x": 150, + "y": 103, + "w": 27, "h": 24 } }, { - "filename": "6570_3", + "filename": "885_2", "rotated": false, "trimmed": true, "sourceSize": { @@ -900,18 +690,144 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, + "x": 7, "y": 5, - "w": 20, + "w": 26, + "h": 19 + }, + "frame": { + "x": 177, + "y": 115, + "w": 26, + "h": 19 + } + }, + { + "filename": "873_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, "h": 24 }, "frame": { - "x": 154, - "y": 146, - "w": 20, + "x": 31, + "y": 118, + "w": 27, "h": 24 } }, + { + "filename": "873_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, + "h": 24 + }, + "frame": { + "x": 28, + "y": 142, + "w": 27, + "h": 24 + } + }, + { + "filename": "857_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 24, + "h": 24 + }, + "frame": { + "x": 28, + "y": 166, + "w": 24, + "h": 24 + } + }, + { + "filename": "850_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 23, + "h": 12 + }, + "frame": { + "x": 28, + "y": 190, + "w": 23, + "h": 12 + } + }, + { + "filename": "857_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 24, + "h": 24 + }, + "frame": { + "x": 58, + "y": 118, + "w": 24, + "h": 24 + } + }, + { + "filename": "4264_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 24, + "h": 22 + }, + "frame": { + "x": 55, + "y": 142, + "w": 24, + "h": 22 + } + }, { "filename": "6549_2", "rotated": false, @@ -927,203 +843,35 @@ "h": 25 }, "frame": { - "x": 163, - "y": 170, - "w": 18, - "h": 25 - } - }, - { - "filename": "877-hangry_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 115, - "y": 54, - "w": 19, - "h": 23 - } - }, - { - "filename": "877-hangry_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 134, - "y": 54, - "w": 19, - "h": 23 - } - }, - { - "filename": "877-hangry_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 138, - "y": 30, - "w": 19, - "h": 23 - } - }, - { - "filename": "6549_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 18, - "h": 25 - }, - "frame": { - "x": 135, - "y": 77, - "w": 18, - "h": 25 - } - }, - { - "filename": "877_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 153, - "y": 53, - "w": 19, - "h": 23 - } - }, - { - "filename": "877_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 157, - "y": 30, - "w": 19, - "h": 23 - } - }, - { - "filename": "877_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 153, - "y": 76, - "w": 19, - "h": 23 - } - }, - { - "filename": "4263_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 24, - "h": 18 - }, - "frame": { - "x": 156, - "y": 99, - "w": 24, - "h": 18 - } - }, - { - "filename": "4263_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 24, - "h": 18 - }, - "frame": { - "x": 168, + "x": 82, "y": 117, + "w": 18, + "h": 25 + } + }, + { + "filename": "4264_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, "w": 24, - "h": 18 + "h": 22 + }, + "frame": { + "x": 79, + "y": 142, + "w": 24, + "h": 22 } }, { - "filename": "6705_2", + "filename": "885_3", "rotated": false, "trimmed": true, "sourceSize": { @@ -1131,37 +879,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, + "x": 7, "y": 5, - "w": 17, - "h": 24 + "w": 26, + "h": 19 }, "frame": { - "x": 174, - "y": 135, - "w": 17, - "h": 24 - } - }, - { - "filename": "6705_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 17, - "h": 24 - }, - "frame": { - "x": 172, - "y": 53, - "w": 17, - "h": 24 + "x": 55, + "y": 164, + "w": 26, + "h": 19 } }, { @@ -1179,8 +906,8 @@ "h": 20 }, "frame": { - "x": 176, - "y": 30, + "x": 52, + "y": 183, "w": 19, "h": 20 } @@ -1200,11 +927,368 @@ "h": 20 }, "frame": { - "x": 172, - "y": 77, + "x": 71, + "y": 183, "w": 19, "h": 20 } + }, + { + "filename": "4263_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 24, + "h": 18 + }, + "frame": { + "x": 81, + "y": 164, + "w": 24, + "h": 18 + } + }, + { + "filename": "4263_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 24, + "h": 18 + }, + "frame": { + "x": 90, + "y": 182, + "w": 24, + "h": 18 + } + }, + { + "filename": "6549_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 18, + "h": 25 + }, + "frame": { + "x": 100, + "y": 112, + "w": 18, + "h": 25 + } + }, + { + "filename": "6570_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 103, + "y": 137, + "w": 20, + "h": 24 + } + }, + { + "filename": "6570_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 20, + "h": 24 + }, + "frame": { + "x": 118, + "y": 110, + "w": 20, + "h": 24 + } + }, + { + "filename": "6705_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 17, + "h": 24 + }, + "frame": { + "x": 123, + "y": 134, + "w": 17, + "h": 24 + } + }, + { + "filename": "872_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 19, + "h": 16 + }, + "frame": { + "x": 105, + "y": 161, + "w": 19, + "h": 16 + } + }, + { + "filename": "877-hangry_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 124, + "y": 158, + "w": 19, + "h": 23 + } + }, + { + "filename": "6705_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 17, + "h": 24 + }, + "frame": { + "x": 140, + "y": 134, + "w": 17, + "h": 24 + } + }, + { + "filename": "877-hangry_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 143, + "y": 158, + "w": 19, + "h": 23 + } + }, + { + "filename": "877-hangry_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 157, + "y": 127, + "w": 19, + "h": 23 + } + }, + { + "filename": "850_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 23, + "h": 12 + }, + "frame": { + "x": 176, + "y": 134, + "w": 23, + "h": 12 + } + }, + { + "filename": "877_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 162, + "y": 150, + "w": 19, + "h": 23 + } + }, + { + "filename": "877_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 181, + "y": 146, + "w": 19, + "h": 23 + } + }, + { + "filename": "872_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 19, + "h": 16 + }, + "frame": { + "x": 162, + "y": 173, + "w": 19, + "h": 16 + } + }, + { + "filename": "877_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 181, + "y": 169, + "w": 19, + "h": 23 + } + }, + { + "filename": "872_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 19, + "h": 16 + }, + "frame": { + "x": 114, + "y": 181, + "w": 19, + "h": 16 + } } ] } @@ -1212,6 +1296,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cd142ac26d3ff4d777ac48395f6c0967:80a80b33bb322d66e0dec19a53a88db9:ec5f05e7f30cd98f74db0c2326109fd3$" + "smartupdate": "$TexturePacker:SmartUpdate:8e75e5f92e697e744733262699ff9e55:55db782b3e64029bab811bdeb9677cdf:ec5f05e7f30cd98f74db0c2326109fd3$" } } diff --git a/public/images/pokemon_icons_8v.png b/public/images/pokemon_icons_8v.png index 2a46b3af7..bf3fe4528 100644 Binary files a/public/images/pokemon_icons_8v.png and b/public/images/pokemon_icons_8v.png differ diff --git a/public/images/pokemon_icons_9v.json b/public/images/pokemon_icons_9v.json index ee5bb9419..6817a30a7 100644 --- a/public/images/pokemon_icons_9v.json +++ b/public/images/pokemon_icons_9v.json @@ -4,1082 +4,11 @@ "image": "pokemon_icons_9v.png", "format": "RGBA8888", "size": { - "w": 193, - "h": 193 + "w": 204, + "h": 204 }, "scale": 1, "frames": [ - { - "filename": "919_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 18, - "h": 17 - }, - "frame": { - "x": 0, - "y": 0, - "w": 18, - "h": 17 - } - }, - { - "filename": "919_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 18, - "h": 17 - }, - "frame": { - "x": 18, - "y": 0, - "w": 18, - "h": 17 - } - }, - { - "filename": "919_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 18, - "h": 17 - }, - "frame": { - "x": 36, - "y": 0, - "w": 18, - "h": 17 - } - }, - { - "filename": "932_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 20, - "h": 21 - }, - "frame": { - "x": 54, - "y": 0, - "w": 20, - "h": 21 - } - }, - { - "filename": "932_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 20, - "h": 21 - }, - "frame": { - "x": 74, - "y": 0, - "w": 20, - "h": 21 - } - }, - { - "filename": "967_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 22, - "h": 21 - }, - "frame": { - "x": 94, - "y": 0, - "w": 22, - "h": 21 - } - }, - { - "filename": "967_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 22, - "h": 21 - }, - "frame": { - "x": 116, - "y": 0, - "w": 22, - "h": 21 - } - }, - { - "filename": "924_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 31, - "h": 22 - }, - "frame": { - "x": 138, - "y": 0, - "w": 31, - "h": 22 - } - }, - { - "filename": "1004_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 23, - "h": 22 - }, - "frame": { - "x": 169, - "y": 0, - "w": 23, - "h": 22 - } - }, - { - "filename": "924_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 31, - "h": 22 - }, - "frame": { - "x": 0, - "y": 17, - "w": 31, - "h": 22 - } - }, - { - "filename": "1004_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 7, - "w": 23, - "h": 22 - }, - "frame": { - "x": 31, - "y": 17, - "w": 23, - "h": 22 - } - }, - { - "filename": "924_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 31, - "h": 22 - }, - "frame": { - "x": 54, - "y": 21, - "w": 31, - "h": 22 - } - }, - { - "filename": "925-three_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 31, - "h": 22 - }, - "frame": { - "x": 85, - "y": 21, - "w": 31, - "h": 22 - } - }, - { - "filename": "925-three_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 31, - "h": 22 - }, - "frame": { - "x": 116, - "y": 22, - "w": 31, - "h": 22 - } - }, - { - "filename": "925-three_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 31, - "h": 22 - }, - "frame": { - "x": 147, - "y": 22, - "w": 31, - "h": 22 - } - }, - { - "filename": "935_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 15, - "h": 23 - }, - "frame": { - "x": 178, - "y": 22, - "w": 15, - "h": 23 - } - }, - { - "filename": "933_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 27, - "h": 23 - }, - "frame": { - "x": 0, - "y": 39, - "w": 27, - "h": 23 - } - }, - { - "filename": "933_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 27, - "h": 23 - }, - "frame": { - "x": 27, - "y": 39, - "w": 27, - "h": 23 - } - }, - { - "filename": "948_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 18, - "h": 23 - }, - "frame": { - "x": 54, - "y": 43, - "w": 18, - "h": 23 - } - }, - { - "filename": "948_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 18, - "h": 23 - }, - "frame": { - "x": 72, - "y": 43, - "w": 18, - "h": 23 - } - }, - { - "filename": "920_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 24, - "h": 25 - }, - "frame": { - "x": 90, - "y": 43, - "w": 24, - "h": 25 - } - }, - { - "filename": "925-four_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 31, - "h": 24 - }, - "frame": { - "x": 114, - "y": 44, - "w": 31, - "h": 24 - } - }, - { - "filename": "925-four_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 31, - "h": 24 - }, - "frame": { - "x": 145, - "y": 44, - "w": 31, - "h": 24 - } - }, - { - "filename": "973_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 1, - "w": 17, - "h": 28 - }, - "frame": { - "x": 176, - "y": 45, - "w": 17, - "h": 28 - } - }, - { - "filename": "925-four_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 31, - "h": 24 - }, - "frame": { - "x": 0, - "y": 62, - "w": 31, - "h": 24 - } - }, - { - "filename": "949_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 22, - "h": 27 - }, - "frame": { - "x": 31, - "y": 62, - "w": 22, - "h": 27 - } - }, - { - "filename": "920_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 24, - "h": 25 - }, - "frame": { - "x": 53, - "y": 66, - "w": 24, - "h": 25 - } - }, - { - "filename": "920_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 24, - "h": 25 - }, - "frame": { - "x": 77, - "y": 68, - "w": 24, - "h": 25 - } - }, - { - "filename": "987_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 26, - "h": 26 - }, - "frame": { - "x": 101, - "y": 68, - "w": 26, - "h": 26 - } - }, - { - "filename": "987_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 26, - "h": 26 - }, - "frame": { - "x": 127, - "y": 68, - "w": 26, - "h": 26 - } - }, - { - "filename": "949_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 22, - "h": 27 - }, - "frame": { - "x": 153, - "y": 68, - "w": 22, - "h": 27 - } - }, - { - "filename": "973_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 1, - "w": 17, - "h": 28 - }, - "frame": { - "x": 175, - "y": 73, - "w": 17, - "h": 28 - } - }, - { - "filename": "987_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 26, - "h": 26 - }, - "frame": { - "x": 0, - "y": 86, - "w": 26, - "h": 26 - } - }, - { - "filename": "962_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 21, - "h": 27 - }, - "frame": { - "x": 26, - "y": 89, - "w": 21, - "h": 27 - } - }, - { - "filename": "962_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 21, - "h": 27 - }, - "frame": { - "x": 47, - "y": 91, - "w": 21, - "h": 27 - } - }, - { - "filename": "962_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 21, - "h": 27 - }, - "frame": { - "x": 68, - "y": 93, - "w": 21, - "h": 27 - } - }, - { - "filename": "973_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 1, - "w": 17, - "h": 28 - }, - "frame": { - "x": 89, - "y": 94, - "w": 17, - "h": 28 - } - }, - { - "filename": "936_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 22, - "h": 29 - }, - "frame": { - "x": 106, - "y": 94, - "w": 22, - "h": 29 - } - }, - { - "filename": "1000_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 29 - }, - "frame": { - "x": 128, - "y": 94, - "w": 24, - "h": 29 - } - }, - { - "filename": "937_9", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 31, - "h": 29 - }, - "frame": { - "x": 152, - "y": 101, - "w": 31, - "h": 29 - } - }, - { - "filename": "1000_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 29 - }, - "frame": { - "x": 0, - "y": 112, - "w": 24, - "h": 29 - } - }, - { - "filename": "1000_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 29 - }, - "frame": { - "x": 24, - "y": 118, - "w": 24, - "h": 29 - } - }, - { - "filename": "934_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 29, - "h": 30 - }, - "frame": { - "x": 48, - "y": 120, - "w": 29, - "h": 30 - } - }, - { - "filename": "934_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 29, - "h": 30 - }, - "frame": { - "x": 77, - "y": 122, - "w": 29, - "h": 30 - } - }, - { - "filename": "988_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 28, - "h": 30 - }, - "frame": { - "x": 106, - "y": 123, - "w": 28, - "h": 30 - } - }, - { - "filename": "988_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 28, - "h": 30 - }, - "frame": { - "x": 134, - "y": 130, - "w": 28, - "h": 30 - } - }, - { - "filename": "994_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 29, - "h": 30 - }, - "frame": { - "x": 162, - "y": 130, - "w": 29, - "h": 30 - } - }, - { - "filename": "999_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 30 - }, - "frame": { - "x": 0, - "y": 141, - "w": 24, - "h": 30 - } - }, - { - "filename": "999_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 30 - }, - "frame": { - "x": 24, - "y": 147, - "w": 24, - "h": 30 - } - }, - { - "filename": "994_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 29, - "h": 30 - }, - "frame": { - "x": 48, - "y": 150, - "w": 29, - "h": 30 - } - }, - { - "filename": "999_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 30 - }, - "frame": { - "x": 77, - "y": 152, - "w": 24, - "h": 30 - } - }, { "filename": "1001_2", "rotated": false, @@ -1095,8 +24,8 @@ "h": 30 }, "frame": { - "x": 101, - "y": 153, + "x": 0, + "y": 0, "w": 32, "h": 30 } @@ -1116,11 +45,1229 @@ "h": 30 }, "frame": { - "x": 133, - "y": 160, + "x": 0, + "y": 30, "w": 32, "h": 30 } + }, + { + "filename": "937_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 31, + "h": 29 + }, + "frame": { + "x": 32, + "y": 0, + "w": 31, + "h": 29 + } + }, + { + "filename": "937_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 31, + "h": 29 + }, + "frame": { + "x": 0, + "y": 60, + "w": 31, + "h": 29 + } + }, + { + "filename": "937_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 31, + "h": 29 + }, + "frame": { + "x": 32, + "y": 29, + "w": 31, + "h": 29 + } + }, + { + "filename": "937_9", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 31, + "h": 29 + }, + "frame": { + "x": 63, + "y": 0, + "w": 31, + "h": 29 + } + }, + { + "filename": "934_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 29, + "h": 30 + }, + "frame": { + "x": 0, + "y": 89, + "w": 29, + "h": 30 + } + }, + { + "filename": "934_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 29, + "h": 30 + }, + "frame": { + "x": 0, + "y": 119, + "w": 29, + "h": 30 + } + }, + { + "filename": "994_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 29, + "h": 30 + }, + "frame": { + "x": 0, + "y": 149, + "w": 29, + "h": 30 + } + }, + { + "filename": "920_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 24, + "h": 25 + }, + "frame": { + "x": 0, + "y": 179, + "w": 24, + "h": 25 + } + }, + { + "filename": "994_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 29, + "h": 30 + }, + "frame": { + "x": 63, + "y": 29, + "w": 29, + "h": 30 + } + }, + { + "filename": "988_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 28, + "h": 30 + }, + "frame": { + "x": 94, + "y": 0, + "w": 28, + "h": 30 + } + }, + { + "filename": "988_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 28, + "h": 30 + }, + "frame": { + "x": 122, + "y": 0, + "w": 28, + "h": 30 + } + }, + { + "filename": "925-four_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 31, + "h": 24 + }, + "frame": { + "x": 150, + "y": 0, + "w": 31, + "h": 24 + } + }, + { + "filename": "1004_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 23, + "h": 22 + }, + "frame": { + "x": 181, + "y": 0, + "w": 23, + "h": 22 + } + }, + { + "filename": "920_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 24, + "h": 25 + }, + "frame": { + "x": 24, + "y": 179, + "w": 24, + "h": 25 + } + }, + { + "filename": "925-four_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 31, + "h": 24 + }, + "frame": { + "x": 92, + "y": 30, + "w": 31, + "h": 24 + } + }, + { + "filename": "925-four_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 31, + "h": 24 + }, + "frame": { + "x": 123, + "y": 30, + "w": 31, + "h": 24 + } + }, + { + "filename": "999_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 30 + }, + "frame": { + "x": 154, + "y": 24, + "w": 24, + "h": 30 + } + }, + { + "filename": "987_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 26, + "h": 26 + }, + "frame": { + "x": 178, + "y": 24, + "w": 26, + "h": 26 + } + }, + { + "filename": "987_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 26, + "h": 26 + }, + "frame": { + "x": 178, + "y": 50, + "w": 26, + "h": 26 + } + }, + { + "filename": "924_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 31, + "h": 22 + }, + "frame": { + "x": 92, + "y": 54, + "w": 31, + "h": 22 + } + }, + { + "filename": "924_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 31, + "h": 22 + }, + "frame": { + "x": 123, + "y": 54, + "w": 31, + "h": 22 + } + }, + { + "filename": "920_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 24, + "h": 25 + }, + "frame": { + "x": 154, + "y": 54, + "w": 24, + "h": 25 + } + }, + { + "filename": "987_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 26, + "h": 26 + }, + "frame": { + "x": 178, + "y": 76, + "w": 26, + "h": 26 + } + }, + { + "filename": "924_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 31, + "h": 22 + }, + "frame": { + "x": 32, + "y": 58, + "w": 31, + "h": 22 + } + }, + { + "filename": "933_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 27, + "h": 23 + }, + "frame": { + "x": 63, + "y": 59, + "w": 27, + "h": 23 + } + }, + { + "filename": "925-three_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 31, + "h": 22 + }, + "frame": { + "x": 31, + "y": 80, + "w": 31, + "h": 22 + } + }, + { + "filename": "999_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 30 + }, + "frame": { + "x": 29, + "y": 102, + "w": 24, + "h": 30 + } + }, + { + "filename": "999_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 30 + }, + "frame": { + "x": 29, + "y": 132, + "w": 24, + "h": 30 + } + }, + { + "filename": "919_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 12, + "w": 18, + "h": 17 + }, + "frame": { + "x": 29, + "y": 162, + "w": 18, + "h": 17 + } + }, + { + "filename": "925-three_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 31, + "h": 22 + }, + "frame": { + "x": 62, + "y": 82, + "w": 31, + "h": 22 + } + }, + { + "filename": "925-three_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 31, + "h": 22 + }, + "frame": { + "x": 93, + "y": 76, + "w": 31, + "h": 22 + } + }, + { + "filename": "933_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 27, + "h": 23 + }, + "frame": { + "x": 124, + "y": 76, + "w": 27, + "h": 23 + } + }, + { + "filename": "1000_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 29 + }, + "frame": { + "x": 53, + "y": 104, + "w": 24, + "h": 29 + } + }, + { + "filename": "1000_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 29 + }, + "frame": { + "x": 53, + "y": 133, + "w": 24, + "h": 29 + } + }, + { + "filename": "936_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 0, + "w": 22, + "h": 29 + }, + "frame": { + "x": 77, + "y": 104, + "w": 22, + "h": 29 + } + }, + { + "filename": "936_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 0, + "w": 22, + "h": 29 + }, + "frame": { + "x": 77, + "y": 133, + "w": 22, + "h": 29 + } + }, + { + "filename": "1000_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 29 + }, + "frame": { + "x": 99, + "y": 98, + "w": 24, + "h": 29 + } + }, + { + "filename": "936_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 0, + "w": 22, + "h": 29 + }, + "frame": { + "x": 99, + "y": 127, + "w": 22, + "h": 29 + } + }, + { + "filename": "949_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 22, + "h": 27 + }, + "frame": { + "x": 123, + "y": 99, + "w": 22, + "h": 27 + } + }, + { + "filename": "1004_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 7, + "w": 23, + "h": 22 + }, + "frame": { + "x": 151, + "y": 79, + "w": 23, + "h": 22 + } + }, + { + "filename": "949_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 22, + "h": 27 + }, + "frame": { + "x": 145, + "y": 101, + "w": 22, + "h": 27 + } + }, + { + "filename": "919_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 12, + "w": 18, + "h": 17 + }, + "frame": { + "x": 47, + "y": 162, + "w": 18, + "h": 17 + } + }, + { + "filename": "948_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 18, + "h": 23 + }, + "frame": { + "x": 48, + "y": 179, + "w": 18, + "h": 23 + } + }, + { + "filename": "919_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 12, + "w": 18, + "h": 17 + }, + "frame": { + "x": 65, + "y": 162, + "w": 18, + "h": 17 + } + }, + { + "filename": "948_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 18, + "h": 23 + }, + "frame": { + "x": 66, + "y": 179, + "w": 18, + "h": 23 + } + }, + { + "filename": "962_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 21, + "h": 27 + }, + "frame": { + "x": 167, + "y": 102, + "w": 21, + "h": 27 + } + }, + { + "filename": "935_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 15, + "h": 23 + }, + "frame": { + "x": 188, + "y": 102, + "w": 15, + "h": 23 + } + }, + { + "filename": "973_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 1, + "w": 17, + "h": 28 + }, + "frame": { + "x": 121, + "y": 127, + "w": 17, + "h": 28 + } + }, + { + "filename": "962_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 21, + "h": 27 + }, + "frame": { + "x": 138, + "y": 128, + "w": 21, + "h": 27 + } + }, + { + "filename": "962_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 21, + "h": 27 + }, + "frame": { + "x": 159, + "y": 129, + "w": 21, + "h": 27 + } + }, + { + "filename": "973_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 1, + "w": 17, + "h": 28 + }, + "frame": { + "x": 180, + "y": 129, + "w": 17, + "h": 28 + } + }, + { + "filename": "967_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 22, + "h": 21 + }, + "frame": { + "x": 99, + "y": 156, + "w": 22, + "h": 21 + } + }, + { + "filename": "967_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 22, + "h": 21 + }, + "frame": { + "x": 121, + "y": 155, + "w": 22, + "h": 21 + } + }, + { + "filename": "935_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 15, + "h": 23 + }, + "frame": { + "x": 84, + "y": 162, + "w": 15, + "h": 23 + } + }, + { + "filename": "935_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 15, + "h": 23 + }, + "frame": { + "x": 143, + "y": 155, + "w": 15, + "h": 23 + } + }, + { + "filename": "932_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 20, + "h": 21 + }, + "frame": { + "x": 158, + "y": 156, + "w": 20, + "h": 21 + } + }, + { + "filename": "932_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 20, + "h": 21 + }, + "frame": { + "x": 178, + "y": 157, + "w": 20, + "h": 21 + } + }, + { + "filename": "973_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 1, + "w": 17, + "h": 28 + }, + "frame": { + "x": 121, + "y": 176, + "w": 17, + "h": 28 + } } ] } @@ -1128,6 +1275,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:050f7edcd10f98c70b4b9fc98e69c0d6:03ae662454323b748908e92fa92433dc:3ec5c0bc286c296cfb7fa30a8b06f3da$" + "smartupdate": "$TexturePacker:SmartUpdate:4b71cf0612d22372033807aba7026391:ccaa2f3365fdc125ee93279c465f951f:3ec5c0bc286c296cfb7fa30a8b06f3da$" } } diff --git a/public/images/pokemon_icons_9v.png b/public/images/pokemon_icons_9v.png index 256ec26d3..b3cf588da 100644 Binary files a/public/images/pokemon_icons_9v.png and b/public/images/pokemon_icons_9v.png differ diff --git a/public/images/ui/achv_bar_4.png b/public/images/ui/achv_bar_4.png index cc06af916..f14026c7a 100644 Binary files a/public/images/ui/achv_bar_4.png and b/public/images/ui/achv_bar_4.png differ diff --git a/public/images/ui/achv_bar_5.png b/public/images/ui/achv_bar_5.png new file mode 100644 index 000000000..cc06af916 Binary files /dev/null and b/public/images/ui/achv_bar_5.png differ diff --git a/public/images/ui/candy.png b/public/images/ui/candy.png new file mode 100644 index 000000000..6b633a195 Binary files /dev/null and b/public/images/ui/candy.png differ diff --git a/public/images/ui/candy_overlay.png b/public/images/ui/candy_overlay.png new file mode 100644 index 000000000..835cfccb0 Binary files /dev/null and b/public/images/ui/candy_overlay.png differ diff --git a/public/images/ui/champion_ribbon.png b/public/images/ui/champion_ribbon.png new file mode 100644 index 000000000..96e36075d Binary files /dev/null and b/public/images/ui/champion_ribbon.png differ diff --git a/public/images/ui/legacy/achv_bar_4.png b/public/images/ui/legacy/achv_bar_4.png index dae7a30de..d52fbfd05 100644 Binary files a/public/images/ui/legacy/achv_bar_4.png and b/public/images/ui/legacy/achv_bar_4.png differ diff --git a/public/images/ui/legacy/achv_bar_5.png b/public/images/ui/legacy/achv_bar_5.png new file mode 100644 index 000000000..dae7a30de Binary files /dev/null and b/public/images/ui/legacy/achv_bar_5.png differ diff --git a/public/images/ui/legacy/candy.png b/public/images/ui/legacy/candy.png new file mode 100644 index 000000000..6b633a195 Binary files /dev/null and b/public/images/ui/legacy/candy.png differ diff --git a/public/images/ui/legacy/candy_overlay.png b/public/images/ui/legacy/candy_overlay.png new file mode 100644 index 000000000..835cfccb0 Binary files /dev/null and b/public/images/ui/legacy/candy_overlay.png differ diff --git a/public/images/ui/legacy/champion_ribbon.png b/public/images/ui/legacy/champion_ribbon.png new file mode 100644 index 000000000..96e36075d Binary files /dev/null and b/public/images/ui/legacy/champion_ribbon.png differ diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.json b/public/images/ui/legacy/pbinfo_stat_numbers.json index 9c74ee86d..fa7d75799 100644 --- a/public/images/ui/legacy/pbinfo_stat_numbers.json +++ b/public/images/ui/legacy/pbinfo_stat_numbers.json @@ -10,7 +10,7 @@ "scale": 1, "frames": [ { - "filename": "+1", + "filename": "1", "rotated": false, "trimmed": false, "sourceSize": { @@ -31,7 +31,7 @@ } }, { - "filename": "+2", + "filename": "2", "rotated": false, "trimmed": false, "sourceSize": { @@ -52,7 +52,7 @@ } }, { - "filename": "+3", + "filename": "3", "rotated": false, "trimmed": false, "sourceSize": { @@ -73,7 +73,7 @@ } }, { - "filename": "+4", + "filename": "4", "rotated": false, "trimmed": false, "sourceSize": { @@ -94,7 +94,7 @@ } }, { - "filename": "+5", + "filename": "5", "rotated": false, "trimmed": false, "sourceSize": { @@ -115,7 +115,7 @@ } }, { - "filename": "+6", + "filename": "6", "rotated": false, "trimmed": false, "sourceSize": { diff --git a/public/images/ui/pbinfo_player_type.png b/public/images/ui/pbinfo_player_type.png index ad8895039..b78d078de 100644 Binary files a/public/images/ui/pbinfo_player_type.png and b/public/images/ui/pbinfo_player_type.png differ diff --git a/public/manifest.webmanifest b/public/manifest.webmanifest index c75c70a8d..cefde7f86 100644 --- a/public/manifest.webmanifest +++ b/public/manifest.webmanifest @@ -5,7 +5,6 @@ "scope": "/", "start_url": "/", "display": "fullscreen", - "orientation": "landscape", "background_color": "#8c8c8c", "theme_color": "#8c8c8c", "icons": [ diff --git a/service-worker.js b/public/service-worker.js similarity index 100% rename from service-worker.js rename to public/service-worker.js diff --git a/src/battle-scene.ts b/src/battle-scene.ts index cbf363f68..f117615e5 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1,4 +1,4 @@ -import Phaser, { Time } from 'phaser'; +import Phaser from 'phaser'; import UI, { Mode } from './ui/ui'; import { NextEncounterPhase, NewBiomeEncounterPhase, SelectBiomePhase, MessagePhase, TurnInitPhase, ReturnPhase, LevelCapPhase, ShowTrainerPhase, LoginPhase, MovePhase, TitlePhase, SwitchPhase } from './phases'; import Pokemon, { PlayerPokemon, EnemyPokemon } from './field/pokemon'; @@ -54,13 +54,14 @@ import CharSprite from './ui/char-sprite'; import DamageNumberHandler from './field/damage-number-handler'; import PokemonInfoContainer from './ui/pokemon-info-container'; import { biomeDepths } from './data/biomes'; -import { initTouchControls } from './touch-controls'; import { UiTheme } from './enums/ui-theme'; import { SceneBase } from './scene-base'; import CandyBar from './ui/candy-bar'; import { Variant, variantData } from './data/variant'; import { Localizable } from './plugins/i18n'; -import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE } from './overrides'; +import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE, DOUBLE_BATTLE_OVERRIDE } from './overrides'; +import {InputsController} from "./inputs-controller"; +import {UiInputs} from "./ui-inputs"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -69,33 +70,12 @@ const DEBUG_RNG = false; export const startingWave = STARTING_WAVE_OVERRIDE || 1; const expSpriteKeys: string[] = []; -const repeatInputDelayMillis = 250; export let starterColors: StarterColors; interface StarterColors { [key: string]: [string, string] } -export enum Button { - UP, - DOWN, - LEFT, - RIGHT, - SUBMIT, - ACTION, - CANCEL, - MENU, - STATS, - CYCLE_SHINY, - CYCLE_FORM, - CYCLE_GENDER, - CYCLE_ABILITY, - CYCLE_NATURE, - CYCLE_VARIANT, - SPEED_UP, - SLOW_DOWN -} - export interface PokeballCounts { [pb: string]: integer; } @@ -104,6 +84,8 @@ export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound export default class BattleScene extends SceneBase { public rexUI: UIPlugin; + public inputController: InputsController; + public uiInputs: UiInputs; public sessionPlayTime: integer = null; public masterVolume: number = 0.5; @@ -124,7 +106,8 @@ export default class BattleScene extends SceneBase { public gamepadSupport: boolean = true; public enableTouchControls: boolean = false; public enableVibration: boolean = false; - + public abSwapped: boolean = false; + public disableMenu: boolean = false; public gameData: GameData; @@ -189,34 +172,6 @@ export default class BattleScene extends SceneBase { private bgmResumeTimer: Phaser.Time.TimerEvent; private bgmCache: Set = new Set(); private playTimeTimer: Phaser.Time.TimerEvent; - - private buttonKeys: Phaser.Input.Keyboard.Key[][]; - private lastProcessedButtonPressTimes: Map = new Map(); - // movementButtonLock ensures only a single movement key is firing repeated inputs - // (i.e. by holding down a button) at a time - private movementButtonLock: Button; - - // using a dualshock controller as a map - private gamepadKeyConfig = { - [Button.UP]: 12, // up - [Button.DOWN]: 13, // down - [Button.LEFT]: 14, // left - [Button.RIGHT]: 15, // right - [Button.SUBMIT]: 17, // touchpad - [Button.ACTION]: 0, // X - [Button.CANCEL]: 1, // O - [Button.MENU]: 9, // options - [Button.STATS]: 8, // share - [Button.CYCLE_SHINY]: 5, // RB - [Button.CYCLE_FORM]: 4, // LB - [Button.CYCLE_GENDER]: 6, // LT - [Button.CYCLE_ABILITY]: 7, // RT - [Button.CYCLE_NATURE]: 2, // square - [Button.CYCLE_VARIANT]: 3, // triangle - [Button.SPEED_UP]: 10, // L3 - [Button.SLOW_DOWN]: 11 // R3 - }; - public gamepadButtonStates: boolean[] = new Array(17).fill(false); public rngCounter: integer = 0; public rngSeedOverride: string = ''; @@ -260,7 +215,7 @@ export default class BattleScene extends SceneBase { return ret; }; } - + populateAnims(); await this.initVariantData(); @@ -268,13 +223,13 @@ export default class BattleScene extends SceneBase { create() { initGameSpeed.apply(this); + this.inputController = new InputsController(this); + this.uiInputs = new UiInputs(this, this.inputController); this.gameData = new GameData(this); addUiThemeOverrides(this); - this.setupControls(); - this.load.setBaseURL(); this.spritePipeline = new SpritePipeline(this.game); @@ -287,7 +242,7 @@ export default class BattleScene extends SceneBase { } update() { - this.checkInput(); + this.inputController.update(); this.ui?.update(); } @@ -606,42 +561,6 @@ export default class BattleScene extends SceneBase { return true; } - setupControls() { - const keyCodes = Phaser.Input.Keyboard.KeyCodes; - const keyConfig = { - [Button.UP]: [keyCodes.UP, keyCodes.W], - [Button.DOWN]: [keyCodes.DOWN, keyCodes.S], - [Button.LEFT]: [keyCodes.LEFT, keyCodes.A], - [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], - [Button.SUBMIT]: [keyCodes.ENTER], - [Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z], - [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], - [Button.MENU]: [keyCodes.ESC, keyCodes.M], - [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], - [Button.CYCLE_SHINY]: [keyCodes.R], - [Button.CYCLE_FORM]: [keyCodes.F], - [Button.CYCLE_GENDER]: [keyCodes.G], - [Button.CYCLE_ABILITY]: [keyCodes.E], - [Button.CYCLE_NATURE]: [keyCodes.N], - [Button.CYCLE_VARIANT]: [keyCodes.V], - [Button.SPEED_UP]: [keyCodes.PLUS], - [Button.SLOW_DOWN]: [keyCodes.MINUS] - }; - const mobileKeyConfig = {}; - this.buttonKeys = []; - for (let b of Utils.getEnumValues(Button)) { - const keys: Phaser.Input.Keyboard.Key[] = []; - if (keyConfig.hasOwnProperty(b)) { - for (let k of keyConfig[b]) - keys.push(this.input.keyboard.addKey(k, false)); - mobileKeyConfig[Button[b]] = keys[0]; - } - this.buttonKeys[b] = keys; - } - - initTouchControls(mobileKeyConfig); - } - getParty(): PlayerPokemon[] { return this.party; } @@ -923,6 +842,9 @@ export default class BattleScene extends SceneBase { } else if (!battleConfig) newDouble = !!double; + if (DOUBLE_BATTLE_OVERRIDE) + newDouble = true; + const lastBattle = this.currentBattle; if (lastBattle?.double && !newDouble) @@ -1111,7 +1033,7 @@ export default class BattleScene extends SceneBase { return 5; let isBoss: boolean; - if (forceBoss || (species && (species.pseudoLegendary || species.legendary || species.mythical))) + if (forceBoss || (species && (species.subLegendary || species.legendary || species.mythical))) isBoss = true; else { this.executeWithSeedOffset(() => { @@ -1343,177 +1265,6 @@ export default class BattleScene extends SceneBase { return biomes[Utils.randSeedInt(biomes.length)]; } - checkInput(): boolean { - let inputSuccess = false; - let vibrationLength = 0; - if (this.buttonJustPressed(Button.UP) || this.repeatInputDurationJustPassed(Button.UP)) { - inputSuccess = this.ui.processInput(Button.UP); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.UP) - } else if (this.buttonJustPressed(Button.DOWN) || this.repeatInputDurationJustPassed(Button.DOWN)) { - inputSuccess = this.ui.processInput(Button.DOWN); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.DOWN) - } else if (this.buttonJustPressed(Button.LEFT) || this.repeatInputDurationJustPassed(Button.LEFT)) { - inputSuccess = this.ui.processInput(Button.LEFT); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.LEFT) - } else if (this.buttonJustPressed(Button.RIGHT) || this.repeatInputDurationJustPassed(Button.RIGHT)) { - inputSuccess = this.ui.processInput(Button.RIGHT); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.RIGHT) - } else if (this.buttonJustPressed(Button.SUBMIT) || this.repeatInputDurationJustPassed(Button.SUBMIT)) { - inputSuccess = this.ui.processInput(Button.SUBMIT) || this.ui.processInput(Button.ACTION); - this.setLastProcessedMovementTime(Button.SUBMIT); - } else if (this.buttonJustPressed(Button.ACTION) || this.repeatInputDurationJustPassed(Button.ACTION)) { - inputSuccess = this.ui.processInput(Button.ACTION); - this.setLastProcessedMovementTime(Button.ACTION); - } else if (this.buttonJustPressed(Button.CANCEL)|| this.repeatInputDurationJustPassed(Button.CANCEL)) { - inputSuccess = this.ui.processInput(Button.CANCEL); - this.setLastProcessedMovementTime(Button.CANCEL); - } else if (this.buttonJustPressed(Button.MENU)) { - if (this.disableMenu) - return; - switch (this.ui?.getMode()) { - case Mode.MESSAGE: - if (!(this.ui.getHandler() as MessageUiHandler).pendingPrompt) - return; - case Mode.TITLE: - case Mode.COMMAND: - case Mode.FIGHT: - case Mode.BALL: - case Mode.TARGET_SELECT: - case Mode.SAVE_SLOT: - case Mode.PARTY: - case Mode.SUMMARY: - case Mode.STARTER_SELECT: - case Mode.CONFIRM: - case Mode.OPTION_SELECT: - this.ui.setOverlayMode(Mode.MENU); - inputSuccess = true; - break; - case Mode.MENU: - case Mode.SETTINGS: - case Mode.ACHIEVEMENTS: - this.ui.revertMode(); - this.playSound('select'); - inputSuccess = true; - break; - default: - return; - } - } else if (this.ui?.getHandler() instanceof StarterSelectUiHandler) { - if (this.buttonJustPressed(Button.CYCLE_SHINY)) { - inputSuccess = this.ui.processInput(Button.CYCLE_SHINY); - this.setLastProcessedMovementTime(Button.CYCLE_SHINY); - } else if (this.buttonJustPressed(Button.CYCLE_FORM)) { - inputSuccess = this.ui.processInput(Button.CYCLE_FORM); - this.setLastProcessedMovementTime(Button.CYCLE_FORM); - } else if (this.buttonJustPressed(Button.CYCLE_GENDER)) { - inputSuccess = this.ui.processInput(Button.CYCLE_GENDER); - this.setLastProcessedMovementTime(Button.CYCLE_GENDER); - } else if (this.buttonJustPressed(Button.CYCLE_ABILITY)) { - inputSuccess = this.ui.processInput(Button.CYCLE_ABILITY); - this.setLastProcessedMovementTime(Button.CYCLE_ABILITY); - } else if (this.buttonJustPressed(Button.CYCLE_NATURE)) { - inputSuccess = this.ui.processInput(Button.CYCLE_NATURE); - this.setLastProcessedMovementTime(Button.CYCLE_NATURE); - } else if (this.buttonJustPressed(Button.CYCLE_VARIANT)) { - inputSuccess = this.ui.processInput(Button.CYCLE_VARIANT); - this.setLastProcessedMovementTime(Button.CYCLE_VARIANT); - } else - return; - } else if (this.buttonJustPressed(Button.SPEED_UP)) { - if (this.gameSpeed < 5) { - this.gameData.saveSetting(Setting.Game_Speed, settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) + 1); - if (this.ui?.getMode() === Mode.SETTINGS) - (this.ui.getHandler() as SettingsUiHandler).show([]); - } - } else if (this.buttonJustPressed(Button.SLOW_DOWN)) { - if (this.gameSpeed > 1) { - this.gameData.saveSetting(Setting.Game_Speed, Math.max(settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) - 1, 0)); - if (this.ui?.getMode() === Mode.SETTINGS) - (this.ui.getHandler() as SettingsUiHandler).show([]); - } - } else { - let pressed = false; - if (this.ui && (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS)))) { - for (let p of this.getField().filter(p => p?.isActive(true))) - p.toggleStats(pressed); - if (pressed) - this.setLastProcessedMovementTime(Button.STATS); - } else - return; - } - if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined') - navigator.vibrate(vibrationLength || 10); - } - - /** - * gamepadButtonJustDown returns true if @param button has just been pressed down - * or not. It will only return true once, until the key is released and pressed down - * again. - */ - gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean { - if (!button || !this.gamepadSupport) - return false; - - let ret = false; - if (button.pressed) { - if (!this.gamepadButtonStates[button.index]) - ret = true; - this.gamepadButtonStates[button.index] = true; - } else - this.gamepadButtonStates[button.index] = false; - - return ret; - } - - buttonJustPressed(button: Button): boolean { - const gamepad = this.input.gamepad?.gamepads[0]; - return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]); - } - - /** - * gamepadButtonJustUp returns true if @param button has just been released - * or not. It will only return true once, until the key is released and pressed down - * again. - */ - gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean { - if (!button || !this.gamepadSupport) - return false; - - return !this.gamepadButtonStates[button.index]; - } - - buttonJustReleased(button: Button): boolean { - const gamepad = this.input.gamepad?.gamepads[0]; - return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]); - } - - /** - * repeatInputDurationJustPassed returns true if @param button has been held down long - * enough to fire a repeated input. A button must claim the movementButtonLock before - * firing a repeated input - this is to prevent multiple buttons from firing repeatedly. - */ - repeatInputDurationJustPassed(button: Button): boolean { - if (this.movementButtonLock !== null && this.movementButtonLock !== button) { - return false; - } - if (this.buttonKeys[button].every(k => k.isUp) && this.gamepadButtonStates.every(b => b == false)) { - this.movementButtonLock = null; - return false; - } - if (this.time.now - this.lastProcessedButtonPressTimes.get(button) >= repeatInputDelayMillis) { - return true; - } - } - - setLastProcessedMovementTime(button: Button) { - this.lastProcessedButtonPressTimes.set(button, this.time.now); - this.movementButtonLock = button; - } - isBgmPlaying(): boolean { return this.bgm && this.bgm.isPlaying; } @@ -1671,11 +1422,13 @@ export default class BattleScene extends SceneBase { return 13.122; case 'battle_unova_gym': return 19.145; - case 'battle_legendary': + case 'battle_legendary_regis': //B2W2 Legendary Titan Battle + return 49.500; + case 'battle_legendary_unova': //BW Unova Legendary Battle return 13.855; - case 'battle_legendary_k': + case 'battle_legendary_kyurem': //BW Kyurem Battle return 18.314; - case 'battle_legendary_rz': + case 'battle_legendary_res_zek': //BW Reshiram & Zekrom Battle return 18.329; case 'battle_rival': return 13.689; diff --git a/src/battle.ts b/src/battle.ts index 97dec4716..580bad9a5 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -194,12 +194,18 @@ export default class Battle { return 'battle_final'; return 'battle_final_encounter'; } - if (pokemon.species.legendary || pokemon.species.pseudoLegendary || pokemon.species.mythical) { + if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) { + if (pokemon.species.speciesId === Species.REGIROCK || pokemon.species.speciesId === Species.REGICE || pokemon.species.speciesId === Species.REGISTEEL || pokemon.species.speciesId === Species.REGIGIGAS || pokemon.species.speciesId === Species.REGIELEKI || pokemon.species.speciesId === Species.REGIDRAGO) + return 'battle_legendary_regis'; + if (pokemon.species.speciesId === Species.COBALION || pokemon.species.speciesId === Species.TERRAKION || pokemon.species.speciesId === Species.VIRIZION || pokemon.species.speciesId === Species.TORNADUS || pokemon.species.speciesId === Species.THUNDURUS || pokemon.species.speciesId === Species.LANDORUS || pokemon.species.speciesId === Species.KELDEO || pokemon.species.speciesId === Species.MELOETTA || pokemon.species.speciesId === Species.GENESECT) + return 'battle_legendary_unova'; + if (pokemon.species.speciesId === Species.RESHIRAM || pokemon.species.speciesId === Species.ZEKROM) + return 'battle_legendary_res_zek'; if (pokemon.species.speciesId === Species.KYUREM) - return 'battle_legendary_k'; + return 'battle_legendary_kyurem'; if (pokemon.species.legendary) - return 'battle_legendary_rz'; - return 'battle_legendary'; + return 'battle_legendary_res_zek'; + return 'battle_legendary_unova'; } } diff --git a/src/configs/pad_dualshock.ts b/src/configs/pad_dualshock.ts new file mode 100644 index 000000000..4f66ff8c0 --- /dev/null +++ b/src/configs/pad_dualshock.ts @@ -0,0 +1,29 @@ +/** + * Dualshock mapping + */ +const pad_dualshock = { + padID: 'Dualshock', + padType: 'Sony', + gamepadMapping: { + RC_S: 0, + RC_E: 1, + RC_W: 2, + RC_N: 3, + START: 9, // Options + SELECT: 8, // Share + LB: 4, + RB: 5, + LT: 6, + RT: 7, + LS: 10, + RS: 11, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15, + MENU: 16, + TOUCH: 17 + }, +}; + +export default pad_dualshock; diff --git a/src/configs/pad_generic.ts b/src/configs/pad_generic.ts new file mode 100644 index 000000000..19b5d3df1 --- /dev/null +++ b/src/configs/pad_generic.ts @@ -0,0 +1,27 @@ +/** + * Generic pad mapping + */ +const pad_generic = { + padID: 'Generic', + padType: 'generic', + gamepadMapping: { + RC_S: 0, + RC_E: 1, + RC_W: 2, + RC_N: 3, + START: 9, + SELECT: 8, + LB: 4, + RB: 5, + LT: 6, + RT: 7, + LS: 10, + RS: 11, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15 + }, +}; + +export default pad_generic; diff --git a/src/configs/pad_unlicensedSNES.ts b/src/configs/pad_unlicensedSNES.ts new file mode 100644 index 000000000..ba8ee538d --- /dev/null +++ b/src/configs/pad_unlicensedSNES.ts @@ -0,0 +1,23 @@ +/** + * 081f-e401 - UnlicensedSNES + */ +const pad_unlicensedSNES = { + padID: '081f-e401', + padType: 'snes', + gamepadMapping : { + RC_S: 2, + RC_E: 1, + RC_W: 3, + RC_N: 0, + START: 9, + SELECT: 8, + LB: 4, + RB: 5, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15 + } +}; + +export default pad_unlicensedSNES; diff --git a/src/configs/pad_xbox360.ts b/src/configs/pad_xbox360.ts new file mode 100644 index 000000000..e44ebb54b --- /dev/null +++ b/src/configs/pad_xbox360.ts @@ -0,0 +1,28 @@ +/** + * Generic pad mapping + */ +const pad_xbox360 = { + padID: 'Xbox 360 controller (XInput STANDARD GAMEPAD)', + padType: 'xbox', + gamepadMapping: { + RC_S: 0, + RC_E: 1, + RC_W: 2, + RC_N: 3, + START: 9, + SELECT: 8, + LB: 4, + RB: 5, + LT: 6, + RT: 7, + LS: 10, + RS: 11, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15, + MENU: 16 + }, +}; + +export default pad_xbox360; diff --git a/src/data/ability.ts b/src/data/ability.ts index 5e9527672..daceb3be6 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -9,7 +9,7 @@ import { BattlerTag } from "./battler-tags"; import { BattlerTagType } from "./enums/battler-tag-type"; import { StatusEffect, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect"; import { Gender } from "./gender"; -import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves } from "./move"; +import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove } from "./move"; import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { ArenaTagType } from "./enums/arena-tag-type"; import { Stat } from "./pokemon-stat"; @@ -20,6 +20,8 @@ import { SpeciesFormChangeManualTrigger } from "./pokemon-forms"; import { Abilities } from "./enums/abilities"; import i18next, { Localizable } from "#app/plugins/i18n.js"; import { Command } from "../ui/command-ui-handler"; +import Battle from "#app/battle.js"; +import { ability } from "#app/locales/en/ability.js"; export class Ability implements Localizable { public id: Abilities; @@ -247,7 +249,7 @@ export class PreDefendFormChangeAbAttr extends PreDefendAbAttr { } export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr { applyPreDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, cancelled: Utils.BooleanHolder, args: any[]): boolean { - if (pokemon.getHpRatio() < 1 || (args[0] as Utils.NumberHolder).value < pokemon.hp) + if (pokemon.getMaxHp() <= 1 && (pokemon.getHpRatio() < 1 || (args[0] as Utils.NumberHolder).value < pokemon.hp)) return false; return pokemon.addTag(BattlerTagType.STURDY, 1); @@ -424,7 +426,7 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { } applyPreDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, cancelled: Utils.BooleanHolder, args: any[]): boolean { - if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type) < 2) { + if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type, attacker) < 2) { cancelled.value = true; (args[0] as Utils.NumberHolder).value = 0; return true; @@ -580,6 +582,35 @@ export class PostDefendStatChangeAbAttr extends PostDefendAbAttr { } } +export class PostDefendHpGatedStatChangeAbAttr extends PostDefendAbAttr { + private condition: PokemonDefendCondition; + private hpGate: number; + private stats: BattleStat[]; + private levels: integer; + private selfTarget: boolean; + + constructor(condition: PokemonDefendCondition, hpGate: number, stats: BattleStat[], levels: integer, selfTarget: boolean = true) { + super(true); + + this.condition = condition; + this.hpGate = hpGate; + this.stats = stats; + this.levels = levels; + this.selfTarget = selfTarget; + } + + applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { + const hpGateFlat: integer = Math.ceil(pokemon.getMaxHp() * this.hpGate) + const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1] + if (this.condition(pokemon, attacker, move.getMove()) && (pokemon.hp <= hpGateFlat && (pokemon.hp + lastAttackReceived.damage) > hpGateFlat)) { + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.levels)); + return true; + } + + return false; + } +} + export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { private condition: PokemonDefendCondition; private tagType: ArenaTagType; @@ -679,6 +710,19 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { } } +export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr { + constructor() { + super(10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP); + } + + applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { + if (attacker.hasAbility(Abilities.OVERCOAT) || attacker.isOfType(Type.GRASS)) { + return false; + } + return super.applyPostDefend(pokemon, passive, attacker, move, hitResult, args); + } +} + export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { private chance: integer; private tagType: BattlerTagType; @@ -785,13 +829,16 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { } export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { - constructor() { + private ability: Abilities; + + constructor(ability: Abilities) { super(); + this.ability = ability; } applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { if (move.getMove().checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnsuppressableAbilityAbAttr) && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr)) { - attacker.summonData.ability = pokemon.getAbility().id; + attacker.summonData.ability = this.ability; return true; } @@ -906,8 +953,8 @@ export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr { private condition: PokemonAttackCondition; private powerMultiplier: number; - constructor(condition: PokemonAttackCondition, powerMultiplier: number) { - super(true); + constructor(condition: PokemonAttackCondition, powerMultiplier: number, showAbility: boolean = true) { + super(showAbility); this.condition = condition; this.powerMultiplier = powerMultiplier; } @@ -1226,6 +1273,40 @@ export class IgnoreOpponentStatChangesAbAttr extends AbAttr { } } +export class IntimidateImmunityAbAttr extends AbAttr { + constructor() { + super(false); + } + + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + cancelled.value = true; + return true; + } + + getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + return getPokemonMessage(pokemon, `'s ${abilityName} prevented it from being Intimidated!`); + } +} + +export class PostIntimidateStatChangeAbAttr extends AbAttr { + private stats: BattleStat[]; + private levels: integer; + private overwrites: boolean; + + constructor(stats: BattleStat[], levels: integer, overwrites?: boolean) { + super(true) + this.stats = stats + this.levels = levels + this.overwrites = !!overwrites + } + + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + pokemon.scene.pushPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, this.stats, this.levels)); + cancelled.value = this.overwrites; + return true; + } +} + export class PostSummonAbAttr extends AbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise { return false; @@ -1268,34 +1349,36 @@ export class PostSummonStatChangeAbAttr extends PostSummonAbAttr { private stats: BattleStat[]; private levels: integer; private selfTarget: boolean; + private intimidate: boolean; - constructor(stats: BattleStat | BattleStat[], levels: integer, selfTarget?: boolean) { - super(); + constructor(stats: BattleStat | BattleStat[], levels: integer, selfTarget?: boolean, intimidate?: boolean) { + super(false); this.stats = typeof(stats) === 'number' ? [ stats as BattleStat ] : stats as BattleStat[]; this.levels = levels; this.selfTarget = !!selfTarget; + this.intimidate = !!intimidate; } applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { - const statChangePhases: StatChangePhase[] = []; - - if (this.selfTarget) - statChangePhases.push(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.levels)); - else { - for (let opponent of pokemon.getOpponents()) - statChangePhases.push(new StatChangePhase(pokemon.scene, opponent.getBattlerIndex(), false, this.stats, this.levels)); + queueShowAbility(pokemon, passive); // TODO: Better solution than manually showing the ability here + if (this.selfTarget) { + pokemon.scene.pushPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.levels)); + return true; } - - for (let statChangePhase of statChangePhases) { - if (!this.selfTarget && !statChangePhase.getPokemon().summonData) - pokemon.scene.pushPhase(statChangePhase); // TODO: This causes the ability bar to be shown at the wrong time - else + for (let opponent of pokemon.getOpponents()) { + const cancelled = new Utils.BooleanHolder(false) + if (this.intimidate) { + applyAbAttrs(IntimidateImmunityAbAttr, opponent, cancelled); + applyAbAttrs(PostIntimidateStatChangeAbAttr, opponent, cancelled); + } + if (!cancelled.value) { + const statChangePhase = new StatChangePhase(pokemon.scene, opponent.getBattlerIndex(), false, this.stats, this.levels); pokemon.scene.unshiftPhase(statChangePhase); + } } - return true; } } @@ -1596,6 +1679,27 @@ export class BonusCritAbAttr extends AbAttr { } } +export class MultCritAbAttr extends AbAttr { + public multAmount: number; + + constructor(multAmount: number) { + super(true); + + this.multAmount = multAmount; + } + + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + const critMult = args[0] as Utils.NumberHolder; + if (critMult.value > 1){ + critMult.value *= this.multAmount; + return true; + } + + return false; + } +} + + export class BlockNonDirectDamageAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { cancelled.value = true; @@ -1690,7 +1794,7 @@ function getAnticipationCondition(): AbAttrCondition { for (let opponent of pokemon.getOpponents()) { for (let move of opponent.moveset) { // move is super effective - if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type) >= 2) { + if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type, opponent) >= 2) { return true; } // move is a OHKO @@ -1712,7 +1816,7 @@ function getAnticipationCondition(): AbAttrCondition { Type.FIRE, Type.WATER, Type.GRASS, Type.ELECTRIC, Type.PSYCHIC, Type.ICE, Type.DRAGON, Type.DARK][iv_val]; - if (pokemon.getAttackTypeEffectiveness(type) >= 2) { + if (pokemon.getAttackTypeEffectiveness(type, opponent) >= 2) { return true; } } @@ -1722,6 +1826,66 @@ function getAnticipationCondition(): AbAttrCondition { }; } +/** + * Creates an ability condition that causes the ability to fail if that ability + * has already been used by that pokemon that battle. It requires an ability to + * be specified due to current limitations in how conditions on abilities work. + * @param {Abilities} ability The ability to check if it's already been applied + * @returns {AbAttrCondition} The condition + */ +function getOncePerBattleCondition(ability: Abilities): AbAttrCondition { + return (pokemon: Pokemon) => { + return !pokemon.battleData?.abilitiesApplied.includes(ability); + } +} + +export class ForewarnAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + let maxPowerSeen = 0; + let maxMove = ""; + let movePower = 0; + for (let opponent of pokemon.getOpponents()) { + for (let move of opponent.moveset) { + if (move.getMove() instanceof StatusMove) { + movePower = 1; + } else if (move.getMove().findAttr(attr => attr instanceof OneHitKOAttr)) { + movePower = 150; + } else if (move.getMove().id === Moves.COUNTER || move.getMove().id === Moves.MIRROR_COAT || move.getMove().id === Moves.METAL_BURST) { + movePower = 120; + } else if (move.getMove().power === -1) { + movePower = 80; + } else { + movePower = move.getMove().power; + } + + if (movePower > maxPowerSeen) { + maxPowerSeen = movePower; + maxMove = move.getName(); + } + } + } + pokemon.scene.queueMessage(getPokemonMessage(pokemon, " was forewarned about " + maxMove + "!")); + return true; + } +} + +export class FriskAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + for (let opponent of pokemon.getOpponents()) { + pokemon.scene.queueMessage(getPokemonMessage(pokemon, " frisked " + opponent.name + "\'s " + opponent.getAbility().name + "!")); + } + return true; + } +} + export class PostWeatherChangeAbAttr extends AbAttr { applyPostWeatherChange(pokemon: Pokemon, passive: boolean, weather: WeatherType, args: any[]): boolean { return false; @@ -1872,13 +2036,19 @@ export class MoodyAbAttr extends PostTurnAbAttr { } applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean { - // TODO: Edge case of not choosing to buff or debuff a stat that's already maxed let selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD]; - let increaseStat = selectableStats[Utils.randInt(selectableStats.length)]; - selectableStats = selectableStats.filter(s => s !== increaseStat); - let decreaseStat = selectableStats[Utils.randInt(selectableStats.length)]; - pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2)); - pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1)); + let increaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] < 6); + let decreaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] > -6); + + if (increaseStatArray.length > 0) { + let increaseStat = increaseStatArray[Utils.randInt(increaseStatArray.length)]; + decreaseStatArray = decreaseStatArray.filter(s => s !== increaseStat); + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2)); + } + if (decreaseStatArray.length > 0) { + let decreaseStat = selectableStats[Utils.randInt(selectableStats.length)]; + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1)); + } return true; } } @@ -1985,6 +2155,13 @@ export class StatChangeMultiplierAbAttr extends AbAttr { } } +export class StatChangeCopyAbAttr extends AbAttr { + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise { + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, (args[0] as BattleStat[]), (args[1] as integer), true, false, false)); + return true; + } +} + export class BypassBurnDamageReductionAbAttr extends AbAttr { constructor() { super(false); @@ -2190,6 +2367,13 @@ export class FlinchStatChangeAbAttr extends FlinchEffectAbAttr { export class IncreasePpAbAttr extends AbAttr { } +export class ForceSwitchOutImmunityAbAttr extends AbAttr { + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + cancelled.value = true; + return true; + } +} + export class ReduceBerryUseThresholdAbAttr extends AbAttr { constructor() { super(); @@ -2301,6 +2485,25 @@ export class NoFusionAbilityAbAttr extends AbAttr { } } +export class IgnoreTypeImmunityAbAttr extends AbAttr { + defenderType: Type; + allowedMoveTypes: Type[]; + + constructor(defenderType: Type, allowedMoveTypes: Type[]) { + super(true); + this.defenderType = defenderType; + this.allowedMoveTypes = allowedMoveTypes; + } + + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + if (this.defenderType !== (args[1] as Type)) { + return false; + } + + return this.allowedMoveTypes.some(type => type === (args[0] as Type)); + } +} + function applyAbAttrsInternal(attrType: { new(...args: any[]): TAttr }, pokemon: Pokemon, applyFunc: AbAttrApplyFunc, args: any[], isAsync: boolean = false, showAbilityInstant: boolean = false, quiet: boolean = false, passive: boolean = false): Promise { return new Promise(resolve => { @@ -2332,6 +2535,9 @@ function applyAbAttrsInternal(attrType: { new(...args: any return applyNextAbAttr(); pokemon.scene.setPhaseQueueSplice(); const onApplySuccess = () => { + if (pokemon.battleData && !pokemon.battleData.abilitiesApplied.includes(ability.id)) { + pokemon.battleData.abilitiesApplied.push(ability.id); + } if (attr.showAbility && !quiet) { if (showAbilityInstant) pokemon.scene.abilityBar.showAbility(pokemon, passive); @@ -2521,7 +2727,8 @@ export function initAbilities() { .condition(getWeatherCondition(WeatherType.SANDSTORM)) .ignorable(), new Ability(Abilities.STATIC, 3) - .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.PARALYSIS), + .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.PARALYSIS) + .bypassFaint(), new Ability(Abilities.VOLT_ABSORB, 3) .attr(TypeImmunityHealAbAttr, Type.ELECTRIC) .ignorable(), @@ -2530,6 +2737,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.OBLIVIOUS, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.INFATUATED) + .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.CLOUD_NINE, 3) .attr(SuppressWeatherEffectAbAttr, true), @@ -2552,12 +2760,13 @@ export function initAbilities() { .unimplemented(), new Ability(Abilities.OWN_TEMPO, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.CONFUSED) + .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.SUCTION_CUPS, 3) - .ignorable() - .unimplemented(), + .attr(ForceSwitchOutImmunityAbAttr) + .ignorable(), new Ability(Abilities.INTIMIDATE, 3) - .attr(PostSummonStatChangeAbAttr, BattleStat.ATK, -1), + .attr(PostSummonStatChangeAbAttr, BattleStat.ATK, -1, false, true), new Ability(Abilities.SHADOW_TAG, 3) .attr(ArenaTrapAbAttr), new Ability(Abilities.ROUGH_SKIN, 3) @@ -2572,7 +2781,7 @@ export function initAbilities() { .attr(TypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(BattlerTagType.IGNORE_FLYING) && !pokemon.scene.arena.getTag(ArenaTagType.GRAVITY) && !pokemon.getTag(BattlerTagType.GROUNDED)) .ignorable(), new Ability(Abilities.EFFECT_SPORE, 3) - .attr(PostDefendContactApplyStatusEffectAbAttr, 10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP), + .attr(EffectSporeAbAttr), new Ability(Abilities.SYNCHRONIZE, 3) .attr(SyncEncounterNatureAbAttr) .unimplemented(), @@ -2603,9 +2812,11 @@ export function initAbilities() { new Ability(Abilities.HUGE_POWER, 3) .attr(BattleStatMultiplierAbAttr, BattleStat.ATK, 2), new Ability(Abilities.POISON_POINT, 3) - .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.POISON), + .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.POISON) + .bypassFaint(), new Ability(Abilities.INNER_FOCUS, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.FLINCHED) + .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.MAGMA_ARMOR, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.FREEZE) @@ -2635,7 +2846,8 @@ export function initAbilities() { new Ability(Abilities.EARLY_BIRD, 3) .attr(ReduceStatusEffectDurationAbAttr, StatusEffect.SLEEP), new Ability(Abilities.FLAME_BODY, 3) - .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.BURN), + .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.BURN) + .bypassFaint(), new Ability(Abilities.RUN_AWAY, 3) .attr(RunSuccessAbAttr), new Ability(Abilities.KEEN_EYE, 3) @@ -2712,7 +2924,7 @@ export function initAbilities() { .attr(TypeImmunityStatChangeAbAttr, Type.ELECTRIC, BattleStat.SPD, 1) .ignorable(), new Ability(Abilities.RIVALRY, 4) - .attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25) + .attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25, true) .attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender !== target.gender, 0.75), new Ability(Abilities.STEADFAST, 4) .attr(FlinchStatChangeAbAttr, BattleStat.SPD, 1), @@ -2763,7 +2975,7 @@ export function initAbilities() { .attr(MoveTypeChangeAttr, Type.NORMAL, 1.2, (user, target, move) => move.id !== Moves.HIDDEN_POWER && move.id !== Moves.WEATHER_BALL && move.id !== Moves.NATURAL_GIFT && move.id !== Moves.JUDGMENT && move.id !== Moves.TECHNO_BLAST), new Ability(Abilities.SNIPER, 4) - .unimplemented(), + .attr(MultCritAbAttr, 1.5), new Ability(Abilities.MAGIC_GUARD, 4) .attr(BlockNonDirectDamageAbAttr), new Ability(Abilities.NO_GUARD, 4) @@ -2791,19 +3003,20 @@ export function initAbilities() { new Ability(Abilities.ANTICIPATION, 4) .conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, ' shuddered!')), new Ability(Abilities.FOREWARN, 4) - .unimplemented(), + .attr(ForewarnAbAttr), new Ability(Abilities.UNAWARE, 4) .attr(IgnoreOpponentStatChangesAbAttr) .ignorable(), new Ability(Abilities.TINTED_LENS, 4) - .attr(MovePowerBoostAbAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type) <= 0.5, 2), + .attr(MovePowerBoostAbAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) <= 0.5, 2), new Ability(Abilities.FILTER, 4) - .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getAttackTypeEffectiveness(move.type) >= 2, 0.75) + .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2, 0.75) .ignorable(), new Ability(Abilities.SLOW_START, 4) .attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.SLOW_START, 5), new Ability(Abilities.SCRAPPY, 4) - .unimplemented(), + .attr(IgnoreTypeImmunityAbAttr, Type.GHOST, [Type.NORMAL, Type.FIGHTING]) + .attr(IntimidateImmunityAbAttr), new Ability(Abilities.STORM_DRAIN, 4) .attr(RedirectTypeMoveAbAttr, Type.WATER) .attr(TypeImmunityStatChangeAbAttr, Type.WATER, BattleStat.SPATK, 1) @@ -2812,7 +3025,7 @@ export function initAbilities() { .attr(BlockWeatherDamageAttr, WeatherType.HAIL) .attr(PostWeatherLapseHealAbAttr, 1, WeatherType.HAIL, WeatherType.SNOW), new Ability(Abilities.SOLID_ROCK, 4) - .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getAttackTypeEffectiveness(move.type) >= 2, 0.75) + .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2, 0.75) .ignorable(), new Ability(Abilities.SNOW_WARNING, 4) .attr(PostSummonWeatherChangeAbAttr, WeatherType.SNOW) @@ -2820,7 +3033,7 @@ export function initAbilities() { new Ability(Abilities.HONEY_GATHER, 4) .unimplemented(), new Ability(Abilities.FRISK, 4) - .unimplemented(), + .attr(FriskAbAttr), new Ability(Abilities.RECKLESS, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => move.getAttrs(RecoilAttr).length && move.id !== Moves.STRUGGLE, 1.2), new Ability(Abilities.MULTITYPE, 4) @@ -2913,7 +3126,7 @@ export function initAbilities() { new Ability(Abilities.INFILTRATOR, 5) .unimplemented(), new Ability(Abilities.MUMMY, 5) - .attr(PostDefendAbilityGiveAbAttr) + .attr(PostDefendAbilityGiveAbAttr, Abilities.MUMMY) .bypassFaint(), new Ability(Abilities.MOXIE, 5) .attr(PostVictoryStatChangeAbAttr, BattleStat.ATK, 1), @@ -2922,7 +3135,7 @@ export function initAbilities() { new Ability(Abilities.RATTLED, 5) .attr(PostDefendStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS && (move.type === Type.DARK || move.type === Type.BUG || move.type === Type.GHOST), BattleStat.SPD, 1) - .partial(), + .attr(PostIntimidateStatChangeAbAttr, [BattleStat.SPD], 1), new Ability(Abilities.MAGIC_BOUNCE, 5) .ignorable() .unimplemented(), @@ -3058,7 +3271,7 @@ export function initAbilities() { new Ability(Abilities.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, Type.STEEL), new Ability(Abilities.BERSERK, 7) - .unimplemented(), + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [BattleStat.SPATK], 1), new Ability(Abilities.SLUSH_RUSH, 7) .attr(BattleStatMultiplierAbAttr, BattleStat.SPD, 2) .condition(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW)), @@ -3081,7 +3294,7 @@ export function initAbilities() { .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr), new Ability(Abilities.DISGUISE, 7) - .attr(PreDefendMovePowerToOneAbAttr, (target, user, move) => target.formIndex == 0 && target.getAttackTypeEffectiveness(move.type) > 0) + .attr(PreDefendMovePowerToOneAbAttr, (target, user, move) => target.formIndex == 0 && target.getAttackTypeEffectiveness(move.type, user) > 0) .attr(PostSummonFormChangeAbAttr, p => p.battleData.hitCount === 0 ? 0 : 1) .attr(PostBattleInitFormChangeAbAttr, p => p.battleData.hitCount === 0 ? 0 : 1) .attr(PostDefendFormChangeAbAttr, p => p.battleData.hitCount === 0 ? 0 : 1) @@ -3099,8 +3312,7 @@ export function initAbilities() { .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr) - .attr(NoFusionAbilityAbAttr) - .partial(), + .attr(NoFusionAbilityAbAttr), new Ability(Abilities.POWER_CONSTRUCT, 7) // TODO: 10% Power Construct Zygarde isn't accounted for yet. If changed, update Zygarde's getSpeciesFormIndex entry accordingly .attr(PostBattleInitFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) @@ -3182,13 +3394,15 @@ export function initAbilities() { new Ability(Abilities.SHADOW_SHIELD, 7) .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getHpRatio() === 1, 0.5), new Ability(Abilities.PRISM_ARMOR, 7) - .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getAttackTypeEffectiveness(move.type) >= 2, 0.75), + .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2, 0.75), new Ability(Abilities.NEUROFORCE, 7) - .attr(MovePowerBoostAbAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type) >= 2, 1.25), + .attr(MovePowerBoostAbAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2, 1.25), new Ability(Abilities.INTREPID_SWORD, 8) - .attr(PostSummonStatChangeAbAttr, BattleStat.ATK, 1, true), + .attr(PostSummonStatChangeAbAttr, BattleStat.ATK, 1, true) + .condition(getOncePerBattleCondition(Abilities.INTREPID_SWORD)), new Ability(Abilities.DAUNTLESS_SHIELD, 8) - .attr(PostSummonStatChangeAbAttr, BattleStat.DEF, 1, true), + .attr(PostSummonStatChangeAbAttr, BattleStat.DEF, 1, true) + .condition(getOncePerBattleCondition(Abilities.DAUNTLESS_SHIELD)), new Ability(Abilities.LIBERO, 8) .unimplemented(), new Ability(Abilities.BALL_FETCH, 8) @@ -3249,6 +3463,7 @@ export function initAbilities() { .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, '\'s Neutralizing Gas filled the area!')) .partial(), new Ability(Abilities.PASTEL_VEIL, 8) .attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) @@ -3259,7 +3474,8 @@ export function initAbilities() { .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) - .attr(NoFusionAbilityAbAttr), + .attr(NoFusionAbilityAbAttr) + .condition((pokemon) => !pokemon.isTerastallized()), new Ability(Abilities.QUICK_DRAW, 8) .unimplemented(), new Ability(Abilities.UNSEEN_FIST, 8) @@ -3287,7 +3503,7 @@ export function initAbilities() { .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr), new Ability(Abilities.LINGERING_AROMA, 9) - .attr(PostDefendAbilityGiveAbAttr) + .attr(PostDefendAbilityGiveAbAttr, Abilities.LINGERING_AROMA) .bypassFaint(), new Ability(Abilities.SEED_SOWER, 9) .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY), @@ -3296,7 +3512,8 @@ export function initAbilities() { .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.ANGER_SHELL, 9) - .unimplemented(), + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], 1) + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.DEF, BattleStat.SPDEF ], -1), new Ability(Abilities.PURIFYING_SALT, 9) .attr(StatusEffectImmunityAbAttr) .attr(ReceivedTypeDamageMultiplierAbAttr, Type.GHOST, 0.5) @@ -3309,8 +3526,9 @@ export function initAbilities() { .ignorable() .partial(), new Ability(Abilities.GUARD_DOG, 9) - .ignorable() - .unimplemented(), + .attr(PostIntimidateStatChangeAbAttr, [BattleStat.ATK], 1, true) + .attr(ForceSwitchOutImmunityAbAttr) + .ignorable(), new Ability(Abilities.ROCKY_PAYLOAD, 9) .attr(MoveTypePowerBoostAbAttr, Type.ROCK), new Ability(Abilities.WIND_POWER, 9) @@ -3334,13 +3552,15 @@ export function initAbilities() { .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.PROTOSYNTHESIS, 0, WeatherType.SUNNY, WeatherType.HARSH_SUN) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr), + .attr(NoTransformAbilityAbAttr) + .partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages new Ability(Abilities.QUARK_DRIVE, 9) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), PostSummonAddBattlerTagAbAttr, BattlerTagType.QUARK_DRIVE, 0, true) .attr(PostTerrainChangeAddBattlerTagAttr, BattlerTagType.QUARK_DRIVE, 0, TerrainType.ELECTRIC) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr), + .attr(NoTransformAbilityAbAttr) + .partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages new Ability(Abilities.GOOD_AS_GOLD, 9) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.getMove().category === MoveCategory.STATUS) .ignorable() @@ -3366,7 +3586,7 @@ export function initAbilities() { .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.ELECTRIC) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), BattleStatMultiplierAbAttr, BattleStat.SPATK, 4 / 3), new Ability(Abilities.OPPORTUNIST, 9) - .unimplemented(), + .attr(StatChangeCopyAbAttr), new Ability(Abilities.CUD_CHEW, 9) .unimplemented(), new Ability(Abilities.SHARPNESS, 9) @@ -3388,10 +3608,11 @@ export function initAbilities() { .attr(MoveAbilityBypassAbAttr, (pokemon, move: Move) => move.category === MoveCategory.STATUS) .partial(), new Ability(Abilities.MINDS_EYE, 9) - .ignorable() - .unimplemented(), + .attr(IgnoreTypeImmunityAbAttr, Type.GHOST, [Type.NORMAL, Type.FIGHTING]) + .ignorable(), // TODO: evasiveness bypass should not be ignored, but accuracy immunity should new Ability(Abilities.SUPERSWEET_SYRUP, 9) - .unimplemented(), + .attr(PostSummonStatChangeAbAttr, BattleStat.EVA, -1) + .condition(getOncePerBattleCondition(Abilities.SUPERSWEET_SYRUP)), new Ability(Abilities.HOSPITALITY, 9) .attr(PostSummonAllyHealAbAttr, 4, true), new Ability(Abilities.TOXIC_CHAIN, 9) diff --git a/src/data/api.ts b/src/data/api.ts index 1f2690c6a..fcfe95671 100644 --- a/src/data/api.ts +++ b/src/data/api.ts @@ -340,7 +340,7 @@ export async function printPokemon() { const speciesKey = (pokemonSpecies as any).key as string; enumStr += ` ${speciesKey}${pokemonSpecies.speciesId >= 2000 ? ` = ${pokemonSpecies.speciesId}` : ''},\n`; - pokemonSpeciesStr += ` new PokemonSpecies(Species.${speciesKey}, "${pokemonSpecies.name}", ${pokemonSpecies.generation}, ${pokemonSpecies.pseudoLegendary}, ${pokemonSpecies.legendary}, ${pokemonSpecies.mythical}, "${pokemonSpecies.species}", Type.${Type[pokemonSpecies.type1]}, ${pokemonSpecies.type2 ? `Type.${Type[pokemonSpecies.type2]}` : 'null'}, ${pokemonSpecies.height}, ${pokemonSpecies.weight}, Abilities.${Abilities[pokemonSpecies.ability1]}, Abilities.${Abilities[pokemonSpecies.ability2]}, Abilities.${Abilities[pokemonSpecies.abilityHidden]}, ${pokemonSpecies.baseTotal}, ${pokemonSpecies.baseStats[0]}, ${pokemonSpecies.baseStats[1]}, ${pokemonSpecies.baseStats[2]}, ${pokemonSpecies.baseStats[3]}, ${pokemonSpecies.baseStats[4]}, ${pokemonSpecies.baseStats[5]}, ${pokemonSpecies.catchRate}, ${pokemonSpecies.baseFriendship}, ${pokemonSpecies.baseExp}, GrowthRate.${GrowthRate[pokemonSpecies.growthRate]}, ${pokemonSpecies.malePercent}, ${pokemonSpecies.genderDiffs}`; + pokemonSpeciesStr += ` new PokemonSpecies(Species.${speciesKey}, "${pokemonSpecies.name}", ${pokemonSpecies.generation}, ${pokemonSpecies.subLegendary}, ${pokemonSpecies.legendary}, ${pokemonSpecies.mythical}, "${pokemonSpecies.species}", Type.${Type[pokemonSpecies.type1]}, ${pokemonSpecies.type2 ? `Type.${Type[pokemonSpecies.type2]}` : 'null'}, ${pokemonSpecies.height}, ${pokemonSpecies.weight}, Abilities.${Abilities[pokemonSpecies.ability1]}, Abilities.${Abilities[pokemonSpecies.ability2]}, Abilities.${Abilities[pokemonSpecies.abilityHidden]}, ${pokemonSpecies.baseTotal}, ${pokemonSpecies.baseStats[0]}, ${pokemonSpecies.baseStats[1]}, ${pokemonSpecies.baseStats[2]}, ${pokemonSpecies.baseStats[3]}, ${pokemonSpecies.baseStats[4]}, ${pokemonSpecies.baseStats[5]}, ${pokemonSpecies.catchRate}, ${pokemonSpecies.baseFriendship}, ${pokemonSpecies.baseExp}, GrowthRate.${GrowthRate[pokemonSpecies.growthRate]}, ${pokemonSpecies.malePercent}, ${pokemonSpecies.genderDiffs}`; if (pokemonSpecies.forms.length > 1) { pokemonSpeciesStr += `, ${pokemonSpecies.canChangeForm},`; for (let form of pokemonSpecies.forms) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index a879c68d4..8942cfe4b 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -482,6 +482,20 @@ export class GravityTag extends ArenaTag { } } +class TailwindTag extends ArenaTag { + constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + super(ArenaTagType.TAILWIND, turnCount, Moves.TAILWIND, sourceId, side); + } + + onAdd(arena: Arena): void { + arena.scene.queueMessage(`The Tailwind blew from behind${this.side === ArenaTagSide.PLAYER ? '\nyour' : this.side === ArenaTagSide.ENEMY ? '\nthe opposing' : ''} team!`); + } + + onRemove(arena: Arena): void { + arena.scene.queueMessage(`${this.side === ArenaTagSide.PLAYER ? 'Your' : this.side === ArenaTagSide.ENEMY ? 'The opposing' : ''} team's Tailwind petered out!`); + } +} + export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag { switch (tagType) { case ArenaTagType.MIST: @@ -513,5 +527,7 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov return new LightScreenTag(turnCount, sourceId, side); case ArenaTagType.AURORA_VEIL: return new AuroraVeilTag(turnCount, sourceId, side); + case ArenaTagType.TAILWIND: + return new TailwindTag(turnCount, sourceId, side); } } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index aaab9f9a4..0fea80c37 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -163,6 +163,29 @@ export class FlinchedTag extends BattlerTag { } } +export class InterruptedTag extends BattlerTag { + constructor(sourceMove: Moves){ + super(BattlerTagType.INTERRUPTED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove) + } + + canAdd(pokemon: Pokemon): boolean { + return !!pokemon.getTag(BattlerTagType.FLYING) + } + + onAdd(pokemon: Pokemon): void { + super.onAdd(pokemon); + + pokemon.getMoveQueue().shift() + pokemon.pushMoveHistory({move: Moves.NONE, result: MoveResult.OTHER}) + } + + lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { + super.lapse(pokemon, lapseType); + (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); + return true + } +} + export class ConfusedTag extends BattlerTag { constructor(turnCount: integer, sourceMove: Moves) { super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove); @@ -368,6 +391,12 @@ export class FrenzyTag extends BattlerTag { } } +export class ChargingTag extends BattlerTag { + constructor(sourceMove: Moves, sourceId: integer) { + super(BattlerTagType.CHARGING, BattlerTagLapseType.CUSTOM, 1, sourceMove, sourceId); + } +} + export class EncoreTag extends BattlerTag { public moveId: Moves; @@ -891,7 +920,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { stats.map(s => pokemon.getBattleStat(s)).reduce((highestValue: integer, value: integer, i: integer) => { if (value > highestValue) { highestStat = stats[i]; - return highestValue += value; + return value; } return highestValue; }, 0); @@ -955,6 +984,19 @@ export class HideSpriteTag extends BattlerTag { } } +export class TypeImmuneTag extends BattlerTag { + public immuneType: Type; + constructor(tagType: BattlerTagType, sourceMove: Moves, immuneType: Type, length: number) { + super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove); + } +} + +export class MagnetRisenTag extends TypeImmuneTag { + constructor(tagType: BattlerTagType, sourceMove: Moves) { + super(tagType, sourceMove, Type.GROUND, 5); + } +} + export class TypeBoostTag extends BattlerTag { public boostedType: Type; public boostValue: number; @@ -1081,6 +1123,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new RechargingTag(sourceMove); case BattlerTagType.FLINCHED: return new FlinchedTag(sourceMove); + case BattlerTagType.INTERRUPTED: + return new InterruptedTag(sourceMove); case BattlerTagType.CONFUSED: return new ConfusedTag(turnCount, sourceMove); case BattlerTagType.INFATUATED: @@ -1091,6 +1135,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new NightmareTag(); case BattlerTagType.FRENZY: return new FrenzyTag(sourceMove, sourceId); + case BattlerTagType.CHARGING: + return new ChargingTag(sourceMove, sourceId); case BattlerTagType.ENCORE: return new EncoreTag(sourceId); case BattlerTagType.HELPING_HAND: @@ -1178,6 +1224,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new CursedTag(sourceId); case BattlerTagType.CHARGED: return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true); + case BattlerTagType.MAGNET_RISEN: + return new MagnetRisenTag(tagType, sourceMove); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/data/berry.ts b/src/data/berry.ts index b28772373..96b50caa9 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -99,6 +99,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { case BerryType.SITRUS: case BerryType.ENIGMA: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed); pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), @@ -106,11 +108,14 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { }; case BerryType.LUM: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); if (pokemon.status) { pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); pokemon.resetStatus(); pokemon.updateInfo(); - } else if (pokemon.getTag(BattlerTagType.CONFUSED)) + } + if (pokemon.getTag(BattlerTagType.CONFUSED)) pokemon.lapseTag(BattlerTagType.CONFUSED); }; case BerryType.LIECHI: @@ -119,6 +124,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { case BerryType.APICOT: case BerryType.SALAC: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const battleStat = (berryType - BerryType.LIECHI) as BattleStat; const statLevels = new Utils.NumberHolder(1); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels); @@ -126,16 +133,22 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { }; case BerryType.LANSAT: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); pokemon.addTag(BattlerTagType.CRIT_BOOST); }; case BerryType.STARF: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const statLevels = new Utils.NumberHolder(2); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value)); }; case BerryType.LEPPA: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio()); ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0); pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`)); diff --git a/src/data/biomes.ts b/src/data/biomes.ts index d6e84bcbc..61da0410d 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -241,10 +241,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ] }, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.TALL_GRASS]: { @@ -487,14 +487,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.ARBOK, Species.CLODSIRE ], [TimeOfDay.ALL]: [ Species.POLIWRATH, Species.SWALOT, Species.WHISCASH, Species.GASTRODON, Species.SEISMITOAD, Species.STUNFISK, Species.TOXAPEX ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], [TimeOfDay.DAY]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL, Species.GALAR_STUNFISK ] + [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT, Species.GALAR_STUNFISK ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.BEACH]: { @@ -521,7 +521,7 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ] }, Species.TATSUGIRI ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.STARMIE ], [TimeOfDay.DAY]: [ Species.STARMIE ], @@ -530,7 +530,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.KINGLER, Species.CRAWDAUNT, Species.WORMADAM, Species.CRUSTLE, Species.BARBARACLE, Species.CLAWITZER, Species.TOXAPEX, Species.PALOSSAND ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.LAKE]: { @@ -615,7 +615,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 20: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ] + [TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 52: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], @@ -640,8 +640,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANTURN, Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, Species.MANTINE, Species.WAILORD, Species.HUNTAIL, Species.GOREBYSS, Species.LUVDISC, Species.JELLICENT, Species.ALOMOMOLA, Species.DRAGALGE, Species.BARRASKEWDA, Species.DONDOZO ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.ARCTOVISH, Species.BASCULEGION ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO, Species.CURSOLA, Species.OVERQWIL ] }, + [BiomePoolTier.BOSS_RARE]: { + [TimeOfDay.DAWN]: [], + [TimeOfDay.DAY]: [], + [TimeOfDay.DUSK]: [], + [TimeOfDay.NIGHT]: [], + [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.CURSOLA, Species.ARCTOVISH, Species.BASCULEGION, Species.OVERQWIL ] + }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ] } }, [Biome.MOUNTAIN]: { @@ -840,7 +846,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.LILEEP ], 40: [ Species.CRADILY ] }, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], [TimeOfDay.DAY]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], @@ -849,7 +855,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.SANDSLASH, Species.DRAPION, Species.DARMANITAN, Species.MARACTUS, Species.SANDACONDA, Species.BRAMBLEGHAST ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.ICE_CAVE]: { @@ -951,9 +957,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAUROS, Species.MILTANK, Species.GARDEVOIR, Species.PURUGLY, Species.ZEBSTRIKA, Species.FLORGES, Species.RIBOMBEE, Species.DUBWOOL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHAYMIN ] } }, [Biome.POWER_PLANT]: { [BiomePoolTier.COMMON]: { @@ -984,8 +990,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RAICHU, Species.MANECTRIC, Species.LUXRAY, Species.MAGNEZONE, Species.ELECTIVIRE, Species.DEDENNE, Species.VIKAVOLT, Species.TOGEDEMARU, Species.PAWMOT, Species.BELLIBOLT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI, Species.HISUI_ELECTRODE ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS, Species.HISUI_ELECTRODE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ] } }, [Biome.VOLCANO]: { @@ -1035,9 +1041,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE ] + [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE, Species.HISUI_ARCANINE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU, Species.HISUI_ARCANINE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ] } }, [Biome.GRAVEYARD]: { @@ -1074,8 +1080,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENGAR, Species.BANETTE, Species.DRIFBLIM, Species.MISMAGIUS, Species.DUSKNOIR, Species.CHANDELURE, Species.TREVENANT, Species.GOURGEIST, Species.MIMIKYU, Species.POLTEAGEIST, Species.HOUNDSTONE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER, Species.HISUI_TYPHLOSION ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE, Species.HISUI_TYPHLOSION ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ] } }, [Biome.DOJO]: { @@ -1109,8 +1115,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT, Species.ANNIHILAPE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.SIRFETCHD, Species.URSHIFU, Species.HISUI_DECIDUEYE ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO, Species.SIRFETCHD, Species.HISUI_DECIDUEYE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.URSHIFU ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ] } }, [Biome.FACTORY]: { @@ -1128,8 +1134,8 @@ export const biomePokemonPools: BiomePokemonPools = { ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] }, { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, @@ -1168,8 +1174,8 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ] } }, [Biome.WASTELAND]: { @@ -1245,7 +1251,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ] }, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.GALAR_MOLTRES ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GALAR_MOLTRES ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -1253,8 +1259,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOUNDOOM, Species.SABLEYE, Species.ABSOL, Species.HONCHKROW, Species.SPIRITOMB, Species.LIEPARD, Species.ZOROARK, Species.HYDREIGON, Species.THIEVUL, Species.GRIMMSNARL, Species.MABOSSTIFF, Species.KINGAMBIT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.HISUI_SAMUROTT ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON, Species.HISUI_SAMUROTT ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ] } }, [Biome.SPACE]: { @@ -1274,10 +1280,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] }, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.CELESTEELA ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CELESTEELA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ] } }, [Biome.CONSTRUCTION_SITE]: { @@ -1307,10 +1313,10 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ { 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ] } ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.JUNGLE]: { @@ -1319,7 +1325,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ], [TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], [TimeOfDay.NIGHT]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], - [TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 36: [ Species.TOUCANNON ] } ] + [TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 28: [ Species.TOUCANNON ] } ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ], @@ -1352,7 +1358,7 @@ export const biomePokemonPools: BiomePokemonPools = { ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], [TimeOfDay.DAY]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], @@ -1367,7 +1373,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.SCIZOR, Species.SLAKING, Species.LEAFEON, Species.SERPERIOR, Species.RILLABOOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ] } }, [Biome.FAIRY_CAVE]: { @@ -1445,10 +1451,10 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ] } }, [Biome.SLUM]: { @@ -1479,10 +1485,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GALAR_WEEZING ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM, Species.GALAR_WEEZING ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.SNOWY_FOREST]: { @@ -1516,14 +1522,14 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], [TimeOfDay.DAY]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], [TimeOfDay.DUSK]: [ Species.HISUI_ZOROARK ], [TimeOfDay.NIGHT]: [ Species.HISUI_ZOROARK ], - [TimeOfDay.ALL]: [ Species.MR_RIME, Species.GLASTRIER, Species.CHIEN_PAO ] + [TimeOfDay.ALL]: [ Species.MR_RIME, Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ] } }, [Biome.ISLAND]: { @@ -1550,7 +1556,7 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], [TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], @@ -1559,7 +1565,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.ORICORIO, Species.BRUXISH, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.ALOLA_DUGTRIO, Species.ALOLA_GOLEM, Species.ALOLA_MUK ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.LABORATORY]: { @@ -2708,7 +2714,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.PORYGON, Type.NORMAL, -1, [ - [ Biome.FACTORY, BiomePoolTier.SUPER_RARE ], + [ Biome.FACTORY, BiomePoolTier.RARE ], [ Biome.SPACE, BiomePoolTier.SUPER_RARE ], [ Biome.LABORATORY, BiomePoolTier.RARE ] ] @@ -3165,7 +3171,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.PORYGON2, Type.NORMAL, -1, [ - [ Biome.FACTORY, BiomePoolTier.SUPER_RARE ], + [ Biome.FACTORY, BiomePoolTier.RARE ], [ Biome.SPACE, BiomePoolTier.SUPER_RARE ], [ Biome.LABORATORY, BiomePoolTier.RARE ] ] @@ -4371,8 +4377,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.CRESSELIA, Type.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ], - [ Biome.SPACE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], + [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.PHIONE, Type.WATER, -1, [ ] @@ -4384,7 +4390,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SHAYMIN, Type.GRASS, -1, [ ] + [ Species.SHAYMIN, Type.GRASS, -1, [ + [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] + ] ], [ Species.ARCEUS, Type.NORMAL, -1, [ ] ], @@ -5103,8 +5111,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.VIRIZION, Type.GRASS, Type.FIGHTING, [ - [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.GRASS, BiomePoolTier.ULTRA_RARE ], + [ Biome.GRASS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TORNADUS, Type.FLYING, -1, [ @@ -5779,18 +5787,18 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.TAPU_LELE, Type.PSYCHIC, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], + [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TAPU_BULU, Type.GRASS, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DESERT, BiomePoolTier.ULTRA_RARE ], + [ Biome.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TAPU_FINI, Type.WATER, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], + [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.COSMOG, Type.PSYCHIC, -1, [ @@ -5840,8 +5848,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GUZZLORD, Type.DARK, Type.DRAGON, [ - [ Biome.ABYSS, BiomePoolTier.ULTRA_RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SLUM, BiomePoolTier.ULTRA_RARE ], + [ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.NECROZMA, Type.PSYCHIC, -1, [ @@ -5867,8 +5875,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.STAKATAKA, Type.ROCK, Type.STEEL, [ - [ Biome.ISLAND, BiomePoolTier.ULTRA_RARE ], - [ Biome.ISLAND, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ], + [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.BLACEPHALON, Type.FIRE, Type.GHOST, [ @@ -6129,21 +6137,21 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.CURSOLA, Type.GHOST, -1, [ [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] ] ], [ Species.SIRFETCHD, Type.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.MR_RIME, Type.ICE, Type.PSYCHIC, [ [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] ] ], [ Species.RUNERIGUS, Type.GROUND, Type.GHOST, [ [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] ] ], [ Species.MILCERY, Type.FAIRY, -1, [ @@ -6305,11 +6313,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.SNEASLER, Type.FIGHTING, Type.POISON, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.OVERQWIL, Type.DARK, Type.POISON, [ - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] ] ], [ Species.ENAMORUS, Type.FAIRY, Type.FLYING, [ @@ -6972,7 +6980,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_SLOWBRO, Type.POISON, Type.PSYCHIC, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_FARFETCHD, Type.FIGHTING, -1, [ @@ -6980,7 +6988,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GALAR_WEEZING, Type.POISON, Type.FAIRY, [ - [ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SLUM, BiomePoolTier.BOSS_RARE ] ] ], [ Species.GALAR_MR_MIME, Type.ICE, Type.PSYCHIC, [ @@ -7003,7 +7011,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GALAR_SLOWKING, Type.POISON, Type.PSYCHIC, [ - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_CORSOLA, Type.GHOST, -1, [ @@ -7024,7 +7032,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_DARMANITAN, Type.ICE, -1, [ [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_YAMASK, Type.GROUND, Type.GHOST, [ @@ -7033,7 +7041,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_STUNFISK, Type.GROUND, Type.STEEL, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_GROWLITHE, Type.FIRE, Type.ROCK, [ @@ -7041,7 +7049,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_ARCANINE, Type.FIRE, Type.ROCK, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_VOLTORB, Type.ELECTRIC, Type.GRASS, [ @@ -7049,11 +7057,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_ELECTRODE, Type.ELECTRIC, Type.GRASS, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.POWER_PLANT, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_TYPHLOSION, Type.FIRE, Type.GHOST, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.GRAVEYARD, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_QWILFISH, Type.DARK, Type.POISON, [ @@ -7065,11 +7073,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_SAMUROTT, Type.WATER, Type.DARK, [ - [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.ABYSS, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_LILLIGANT, Type.GRASS, Type.FIGHTING, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.HISUI_ZORUA, Type.NORMAL, Type.GHOST, [ @@ -7078,7 +7086,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.HISUI_ZOROARK, Type.NORMAL, Type.GHOST, [ [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] ] ], [ Species.HISUI_BRAVIARY, Type.PSYCHIC, Type.FLYING, [ @@ -7091,7 +7099,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.HISUI_GOODRA, Type.STEEL, Type.DRAGON, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.HISUI_AVALUGG, Type.ICE, Type.ROCK, [ @@ -7099,7 +7107,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_DECIDUEYE, Type.GRASS, Type.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.PALDEA_TAUROS, Type.FIGHTING, -1, [ diff --git a/src/data/egg-moves.ts b/src/data/egg-moves.ts index 800c9a0ef..045229779 100644 --- a/src/data/egg-moves.ts +++ b/src/data/egg-moves.ts @@ -5,18 +5,18 @@ import * as Utils from "../utils"; export const speciesEggMoves = { - [Species.BULBASAUR]: [ Moves.STRENGTH_SAP, Moves.SLUDGE_BOMB, Moves.EARTH_POWER, Moves.SAPPY_SEED ], + [Species.BULBASAUR]: [ Moves.GIGA_DRAIN, Moves.SLUDGE_BOMB, Moves.EARTH_POWER, Moves.SAPPY_SEED ], [Species.CHARMANDER]: [ Moves.DRAGON_DANCE, Moves.BITTER_BLADE, Moves.EARTH_POWER, Moves.OBLIVION_WING ], [Species.SQUIRTLE]: [ Moves.ICE_BEAM, Moves.DARK_PULSE, Moves.BOUNCY_BUBBLE, Moves.ORIGIN_PULSE ], [Species.CATERPIE]: [ Moves.EARTH_POWER, Moves.SILK_TRAP, Moves.STICKY_WEB, Moves.BLEAKWIND_STORM ], [Species.WEEDLE]: [ Moves.DRILL_RUN, Moves.SWORDS_DANCE, Moves.BANEFUL_BUNKER, Moves.BARB_BARRAGE ], [Species.PIDGEY]: [ Moves.HEAT_WAVE, Moves.FOCUS_BLAST, Moves.U_TURN, Moves.WILDBOLT_STORM ], [Species.RATTATA]: [ Moves.HYPER_FANG, Moves.PSYCHIC_FANGS, Moves.FIRE_FANG, Moves.EXTREME_SPEED ], - [Species.SPEAROW]: [ Moves.DUAL_WINGBEAT, Moves.SUCKER_PUNCH, Moves.PARTING_SHOT, Moves.HYPER_DRILL ], + [Species.SPEAROW]: [ Moves.FLOATY_FALL, Moves.EXTREME_SPEED, Moves.TIDY_UP, Moves.TRIPLE_ARROWS ], [Species.EKANS]: [ Moves.SHED_TAIL, Moves.DRAGON_DANCE, Moves.SLACK_OFF, Moves.NOXIOUS_TORQUE ], [Species.SANDSHREW]: [ Moves.DIRE_CLAW, Moves.CEASELESS_EDGE, Moves.SHORE_UP, Moves.PRECIPICE_BLADES ], - [Species.NIDORAN_F]: [ Moves.SCALD, Moves.SHORE_UP, Moves.CALM_MIND, Moves.BANEFUL_BUNKER ], - [Species.NIDORAN_M]: [ Moves.DARK_PULSE, Moves.SHORE_UP, Moves.CALM_MIND, Moves.KINGS_SHIELD ], + [Species.NIDORAN_F]: [ Moves.DIRE_CLAW, Moves.SHORE_UP, Moves.THOUSAND_WAVES, Moves.SALT_CURE ], + [Species.NIDORAN_M]: [ Moves.NOXIOUS_TORQUE, Moves.KINGS_SHIELD, Moves.NO_RETREAT, Moves.PRECIPICE_BLADES ], [Species.VULPIX]: [ Moves.MOONBLAST, Moves.PSYCHIC, Moves.MORNING_SUN, Moves.TAIL_GLOW ], [Species.ZUBAT]: [ Moves.FLOATY_FALL, Moves.DIRE_CLAW, Moves.SWORDS_DANCE, Moves.BRAVE_BIRD ], [Species.ODDISH]: [ Moves.SLUDGE_BOMB, Moves.FIERY_DANCE, Moves.STRENGTH_SAP, Moves.SPORE ], @@ -28,24 +28,24 @@ export const speciesEggMoves = { [Species.MANKEY]: [ Moves.DRAIN_PUNCH, Moves.RAGING_FURY, Moves.METEOR_MASH, Moves.NO_RETREAT ], [Species.GROWLITHE]: [ Moves.ZING_ZAP, Moves.PARTING_SHOT, Moves.MORNING_SUN, Moves.SACRED_FIRE ], [Species.POLIWAG]: [ Moves.BOUNCY_BUBBLE, Moves.WILDBOLT_STORM, Moves.DRAIN_PUNCH, Moves.SURGING_STRIKES ], - [Species.ABRA]: [ Moves.MOONBLAST, Moves.EARTH_POWER, Moves.THUNDERBOLT, Moves.LUSTER_PURGE ], - [Species.MACHOP]: [ Moves.MACH_PUNCH, Moves.METEOR_MASH, Moves.FLYING_PRESS, Moves.FISSURE ], - [Species.BELLSPROUT]: [ Moves.SOLAR_BLADE, Moves.WEATHER_BALL, Moves.FIRE_LASH, Moves.STRENGTH_SAP ], + [Species.ABRA]: [ Moves.MOONBLAST, Moves.FLAMETHROWER, Moves.THUNDERBOLT, Moves.PSYSTRIKE ], + [Species.MACHOP]: [ Moves.MACH_PUNCH, Moves.METEOR_MASH, Moves.ICE_HAMMER, Moves.FISSURE ], + [Species.BELLSPROUT]: [ Moves.SOLAR_BLADE, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.VICTORY_DANCE ], [Species.TENTACOOL]: [ Moves.BANEFUL_BUNKER, Moves.STRENGTH_SAP, Moves.HAZE, Moves.MALIGNANT_CHAIN ], [Species.GEODUDE]: [ Moves.BODY_PRESS, Moves.BULK_UP, Moves.SHORE_UP, Moves.HEAD_SMASH ], - [Species.PONYTA]: [ Moves.HIGH_HORSEPOWER, Moves.FIRE_LASH, Moves.MORNING_SUN, Moves.VOLT_TACKLE ], + [Species.PONYTA]: [ Moves.HIGH_HORSEPOWER, Moves.FIRE_LASH, Moves.SWORDS_DANCE, Moves.VOLT_TACKLE ], [Species.SLOWPOKE]: [ Moves.BOUNCY_BUBBLE, Moves.PARTING_SHOT, Moves.COSMIC_POWER, Moves.LUMINA_CRASH ], - [Species.MAGNEMITE]: [ Moves.RECOVER, Moves.BODY_PRESS, Moves.ICE_BEAM, Moves.THUNDERCLAP ], + [Species.MAGNEMITE]: [ Moves.PARABOLIC_CHARGE, Moves.BODY_PRESS, Moves.ICE_BEAM, Moves.THUNDERCLAP ], [Species.FARFETCHD]: [ Moves.BATON_PASS, Moves.SACRED_SWORD, Moves.ROOST, Moves.VICTORY_DANCE ], - [Species.DODUO]: [ Moves.TRIPLE_AXEL, Moves.HEAD_CHARGE, Moves.BRAVE_BIRD, Moves.TRIPLE_ARROWS ], + [Species.DODUO]: [ Moves.TRIPLE_AXEL, Moves.MULTI_ATTACK, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], [Species.SEEL]: [ Moves.FREEZE_DRY, Moves.CHILLY_RECEPTION, Moves.SLACK_OFF, Moves.BOUNCY_BUBBLE ], [Species.GRIMER]: [ Moves.SHADOW_SNEAK, Moves.CURSE, Moves.STRENGTH_SAP, Moves.NOXIOUS_TORQUE ], - [Species.SHELLDER]: [ Moves.BODY_PRESS, Moves.WATER_SHURIKEN, Moves.BANEFUL_BUNKER, Moves.RECOVER ], + [Species.SHELLDER]: [ Moves.ROCK_BLAST, Moves.WATER_SHURIKEN, Moves.BANEFUL_BUNKER, Moves.BONE_RUSH ], [Species.GASTLY]: [ Moves.FROST_BREATH, Moves.AURA_SPHERE, Moves.NASTY_PLOT, Moves.MALIGNANT_CHAIN ], [Species.ONIX]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.HEAD_SMASH, Moves.SPIN_OUT ], [Species.DROWZEE]: [ Moves.DREAM_EATER, Moves.RECOVER, Moves.NIGHTMARE, Moves.SPORE ], - [Species.KRABBY]: [ Moves.MOUNTAIN_GALE, Moves.LIQUIDATION, Moves.SHORE_UP, Moves.SHELL_SMASH ], - [Species.VOLTORB]: [ Moves.BUZZY_BUZZ, Moves.VOLT_SWITCH, Moves.ENERGY_BALL, Moves.NASTY_PLOT ], + [Species.KRABBY]: [ Moves.ICICLE_CRASH, Moves.LIQUIDATION, Moves.IVY_CUDGEL, Moves.SHELL_SMASH ], + [Species.VOLTORB]: [ Moves.BUZZY_BUZZ, Moves.OVERHEAT, Moves.FROST_BREATH, Moves.TAIL_GLOW ], [Species.EXEGGCUTE]: [ Moves.MYSTICAL_POWER, Moves.APPLE_ACID, Moves.TRICK_ROOM, Moves.FICKLE_BEAM ], [Species.CUBONE]: [ Moves.HEAD_SMASH, Moves.WOOD_HAMMER, Moves.PAIN_SPLIT, Moves.VOLT_TACKLE ], [Species.LICKITUNG]: [ Moves.BODY_SLAM, Moves.FIRE_LASH, Moves.GRAV_APPLE, Moves.MILK_DRINK ], @@ -53,7 +53,7 @@ export const speciesEggMoves = { [Species.RHYHORN]: [ Moves.SHORE_UP, Moves.WAVE_CRASH, Moves.FLARE_BLITZ, Moves.HEAD_SMASH ], [Species.TANGELA]: [ Moves.STRENGTH_SAP, Moves.INFESTATION, Moves.PARTING_SHOT, Moves.SAPPY_SEED ], [Species.KANGASKHAN]: [ Moves.POWER_UP_PUNCH, Moves.BREAKING_SWIPE, Moves.RETURN, Moves.SEISMIC_TOSS ], - [Species.HORSEA]: [ Moves.SNIPE_SHOT, Moves.NASTY_PLOT, Moves.HURRICANE, Moves.SPACIAL_REND ], + [Species.HORSEA]: [ Moves.SNIPE_SHOT, Moves.FROST_BREATH, Moves.HURRICANE, Moves.DRAGON_ENERGY ], [Species.GOLDEEN]: [ Moves.DRILL_RUN, Moves.FLIP_TURN, Moves.DRAGON_DANCE, Moves.FISHIOUS_REND ], [Species.STARYU]: [ Moves.CALM_MIND, Moves.BOUNCY_BUBBLE, Moves.MOONBLAST, Moves.MYSTICAL_POWER ], [Species.SCYTHER]: [ Moves.GEAR_GRIND, Moves.BUG_BITE, Moves.STORM_THROW, Moves.MIGHTY_CLEAVE ], @@ -64,11 +64,11 @@ export const speciesEggMoves = { [Species.DITTO]: [ Moves.MIMIC, Moves.COPYCAT, Moves.ME_FIRST, Moves.METRONOME ], [Species.EEVEE]: [ Moves.WISH, Moves.REVELATION_DANCE, Moves.TRI_ATTACK, Moves.NO_RETREAT ], [Species.PORYGON]: [ Moves.BUZZY_BUZZ, Moves.AURA_SPHERE, Moves.TOPSY_TURVY, Moves.TECHNO_BLAST ], - [Species.OMANYTE]: [ Moves.SCALD, Moves.EARTH_POWER, Moves.POWER_GEM, Moves.STRENGTH_SAP ], + [Species.OMANYTE]: [ Moves.FREEZE_DRY, Moves.EARTH_POWER, Moves.POWER_GEM, Moves.STEAM_ERUPTION ], [Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.DRILL_RUN, Moves.AQUA_CUTTER, Moves.MIGHTY_CLEAVE ], [Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.HEAD_SMASH, Moves.SWORDS_DANCE, Moves.MIGHTY_CLEAVE ], [Species.ARTICUNO]: [ Moves.AURA_SPHERE, Moves.CALM_MIND, Moves.AURORA_VEIL, Moves.AEROBLAST ], - [Species.ZAPDOS]: [ Moves.WEATHER_BALL, Moves.CALM_MIND, Moves.SPIKY_SHIELD, Moves.ELECTRO_SHOT ], + [Species.ZAPDOS]: [ Moves.WEATHER_BALL, Moves.CALM_MIND, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ], [Species.MOLTRES]: [ Moves.SCORCHING_SANDS, Moves.CALM_MIND, Moves.BURNING_BULWARK, Moves.TORCH_SONG ], [Species.DRATINI]: [ Moves.DRAGON_HAMMER, Moves.METEOR_MASH, Moves.FIRE_LASH, Moves.FLOATY_FALL ], [Species.MEWTWO]: [ Moves.METEOR_MASH, Moves.MOONBLAST, Moves.PLASMA_FISTS, Moves.PHOTON_GEYSER ], @@ -86,7 +86,7 @@ export const speciesEggMoves = { [Species.IGGLYBUFF]: [ Moves.MOONBLAST, Moves.APPLE_ACID, Moves.WISH, Moves.BOOMBURST ], [Species.TOGEPI]: [ Moves.SCORCHING_SANDS, Moves.ROOST, Moves.MOONBLAST, Moves.FIERY_DANCE ], [Species.NATU]: [ Moves.AEROBLAST, Moves.ROOST, Moves.CALM_MIND, Moves.LUMINA_CRASH ], - [Species.MAREEP]: [ Moves.ICE_BEAM, Moves.MILK_DRINK, Moves.DRAGON_ENERGY, Moves.TAIL_GLOW ], + [Species.MAREEP]: [ Moves.ICE_BEAM, Moves.PARABOLIC_CHARGE, Moves.DRAGON_ENERGY, Moves.TAIL_GLOW ], [Species.HOPPIP]: [ Moves.AIR_SLASH, Moves.STRENGTH_SAP, Moves.QUIVER_DANCE, Moves.SEED_FLARE ], [Species.AIPOM]: [ Moves.TIDY_UP, Moves.STORM_THROW, Moves.FAKE_OUT, Moves.POPULATION_BOMB ], [Species.SUNKERN]: [ Moves.SPORE, Moves.SAPPY_SEED, Moves.FIERY_DANCE, Moves.HYDRO_STEAM ], @@ -115,7 +115,7 @@ export const speciesEggMoves = { [Species.PHANPY]: [ Moves.SHORE_UP, Moves.HEAD_SMASH, Moves.MOUNTAIN_GALE, Moves.VOLT_TACKLE ], [Species.STANTLER]: [ Moves.HORN_LEECH, Moves.HIGH_JUMP_KICK, Moves.BULK_UP, Moves.HEAD_CHARGE ], [Species.SMEARGLE]: [ Moves.BATON_PASS, Moves.BURNING_BULWARK, Moves.SALT_CURE, Moves.SPORE ], - [Species.TYROGUE]: [ Moves.MACH_PUNCH, Moves.WICKED_TORQUE, Moves.METEOR_MASH, Moves.COLLISION_COURSE ], + [Species.TYROGUE]: [ Moves.VICTORY_DANCE, Moves.WICKED_TORQUE, Moves.METEOR_MASH, Moves.COLLISION_COURSE ], [Species.SMOOCHUM]: [ Moves.EXPANDING_FORCE, Moves.AURA_SPHERE, Moves.FREEZY_FROST, Moves.TAKE_HEART ], [Species.ELEKID]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.ICE_HAMMER, Moves.PLASMA_FISTS ], [Species.MAGBY]: [ Moves.STORED_POWER, Moves.EARTH_POWER, Moves.ARMOR_CANNON, Moves.FLEUR_CANNON ], @@ -124,31 +124,31 @@ export const speciesEggMoves = { [Species.ENTEI]: [ Moves.BURNING_BULWARK, Moves.DRAGON_DANCE, Moves.EARTHQUAKE, Moves.MIGHTY_CLEAVE ], [Species.SUICUNE]: [ Moves.HYDRO_STEAM, Moves.CALM_MIND, Moves.FREEZE_DRY, Moves.BOUNCY_BUBBLE ], [Species.LARVITAR]: [ Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.MIGHTY_CLEAVE, Moves.SHORE_UP ], - [Species.LUGIA]: [ Moves.COSMIC_POWER, Moves.STORED_POWER, Moves.SCALD, Moves.OBLIVION_WING ], + [Species.LUGIA]: [ Moves.TAKE_HEART, Moves.STORED_POWER, Moves.SCALD, Moves.OBLIVION_WING ], [Species.HO_OH]: [ Moves.BURNING_BULWARK, Moves.U_TURN, Moves.BRAVE_BIRD, Moves.REVIVAL_BLESSING ], [Species.CELEBI]: [ Moves.MYSTICAL_POWER, Moves.STORED_POWER, Moves.COSMIC_POWER, Moves.SEED_FLARE ], [Species.TREECKO]: [ Moves.DRAGON_PULSE, Moves.DRAGON_ENERGY, Moves.SECRET_SWORD, Moves.SEED_FLARE ], - [Species.TORCHIC]: [ Moves.THUNDEROUS_KICK, Moves.POWER_UP_PUNCH, Moves.KNOCK_OFF, Moves.SACRED_FIRE ], - [Species.MUDKIP]: [ Moves.SHORE_UP, Moves.ICICLE_CRASH, Moves.BULK_UP, Moves.WAVE_CRASH ], + [Species.TORCHIC]: [ Moves.HIGH_JUMP_KICK, Moves.SUPERCELL_SLAM, Moves.KNOCK_OFF, Moves.V_CREATE ], + [Species.MUDKIP]: [ Moves.SHORE_UP, Moves.ICICLE_CRASH, Moves.BULK_UP, Moves.SURGING_STRIKES ], [Species.POOCHYENA]: [ Moves.JAW_LOCK, Moves.PSYCHIC_FANGS, Moves.POISON_FANG, Moves.NO_RETREAT ], [Species.ZIGZAGOON]: [ Moves.EXTREME_SPEED, Moves.ENDURE, Moves.HIGH_HORSEPOWER, Moves.TIDY_UP ], [Species.WURMPLE]: [ Moves.BATON_PASS, Moves.BLEAKWIND_STORM, Moves.STICKY_WEB, Moves.MALIGNANT_CHAIN ], [Species.LOTAD]: [ Moves.REVELATION_DANCE, Moves.APPLE_ACID, Moves.ICE_BEAM, Moves.QUIVER_DANCE ], [Species.SEEDOT]: [ Moves.SWORDS_DANCE, Moves.GRASSY_GLIDE, Moves.KOWTOW_CLEAVE, Moves.IVY_CUDGEL ], - [Species.TAILLOW]: [ Moves.BOOMBURST, Moves.FACADE, Moves.DRILL_RUN, Moves.VOLT_TACKLE ], + [Species.TAILLOW]: [ Moves.SWORDS_DANCE, Moves.FACADE, Moves.DRILL_RUN, Moves.EXTREME_SPEED ], [Species.WINGULL]: [ Moves.THUNDER, Moves.FLIP_TURN, Moves.DEFOG, Moves.STEAM_ERUPTION ], - [Species.RALTS]: [ Moves.BOOMBURST, Moves.BITTER_BLADE, Moves.PSYBLADE, Moves.VICTORY_DANCE ], + [Species.RALTS]: [ Moves.BOOMBURST, Moves.BITTER_BLADE, Moves.QUIVER_DANCE, Moves.VICTORY_DANCE ], [Species.SURSKIT]: [ Moves.ROOST, Moves.FIERY_DANCE, Moves.STICKY_WEB, Moves.BLEAKWIND_STORM ], [Species.SHROOMISH]: [ Moves.ACCELEROCK, Moves.TRAILBLAZE, Moves.STORM_THROW, Moves.SAPPY_SEED ], [Species.SLAKOTH]: [ Moves.FACADE, Moves.JUMP_KICK, Moves.KNOCK_OFF, Moves.SKILL_SWAP ], - [Species.NINCADA]: [ Moves.ATTACK_ORDER, Moves.STICKY_WEB, Moves.POLTERGEIST, Moves.SHELL_SMASH ], - [Species.WHISMUR]: [ Moves.ALLURING_VOICE, Moves.SLACK_OFF, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], + [Species.NINCADA]: [ Moves.ATTACK_ORDER, Moves.STICKY_WEB, Moves.SPIRIT_SHACKLE, Moves.SHELL_SMASH ], + [Species.WHISMUR]: [ Moves.ALLURING_VOICE, Moves.TRICK_ROOM, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], [Species.MAKUHITA]: [ Moves.STORM_THROW, Moves.SLACK_OFF, Moves.HEAT_CRASH, Moves.DOUBLE_IRON_BASH ], - [Species.AZURILL]: [ Moves.SLACK_OFF, Moves.SPIRIT_BREAK, Moves.TIDY_UP, Moves.WAVE_CRASH ], + [Species.AZURILL]: [ Moves.JET_PUNCH, Moves.SPIRIT_BREAK, Moves.SWORDS_DANCE, Moves.SURGING_STRIKES ], [Species.NOSEPASS]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.CALM_MIND, Moves.TACHYON_CUTTER ], [Species.SKITTY]: [ Moves.THUNDEROUS_KICK, Moves.SKETCH, Moves.TIDY_UP, Moves.V_CREATE ], [Species.SABLEYE]: [ Moves.RECOVER, Moves.TOPSY_TURVY, Moves.PARTING_SHOT, Moves.SALT_CURE ], - [Species.MAWILE]: [ Moves.BULLET_PUNCH, Moves.RECOVER, Moves.EARTHQUAKE, Moves.DOUBLE_IRON_BASH ], + [Species.MAWILE]: [ Moves.BULLET_PUNCH, Moves.MAGICAL_TORQUE, Moves.EARTHQUAKE, Moves.DOUBLE_IRON_BASH ], [Species.ARON]: [ Moves.HEAD_SMASH, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], [Species.MEDITITE]: [ Moves.THUNDEROUS_KICK, Moves.SUCKER_PUNCH, Moves.BULLET_PUNCH, Moves.PHOTON_GEYSER ], [Species.ELECTRIKE]: [ Moves.RISING_VOLTAGE, Moves.FLAMETHROWER, Moves.NASTY_PLOT, Moves.ICE_BEAM ], @@ -162,40 +162,40 @@ export const speciesEggMoves = { [Species.NUMEL]: [ Moves.SANDSEAR_STORM, Moves.SPIKES, Moves.SHORE_UP, Moves.SEARING_SHOT ], [Species.TORKOAL]: [ Moves.SLACK_OFF, Moves.SPIKES, Moves.BODY_PRESS, Moves.BURNING_BULWARK ], [Species.SPOINK]: [ Moves.AURA_SPHERE, Moves.MILK_DRINK, Moves.COSMIC_POWER, Moves.EXPANDING_FORCE ], - [Species.SPINDA]: [ Moves.SUPERPOWER, Moves.RECOVER, Moves.FLEUR_CANNON, Moves.V_CREATE ], + [Species.SPINDA]: [ Moves.SUPERPOWER, Moves.SLACK_OFF, Moves.FLEUR_CANNON, Moves.V_CREATE ], [Species.TRAPINCH]: [ Moves.FIRE_LASH, Moves.DRAGON_DARTS, Moves.THOUSAND_ARROWS, Moves.DRAGON_ENERGY ], - [Species.CACNEA]: [ Moves.SCORCHING_SANDS, Moves.CEASELESS_EDGE, Moves.NIGHT_DAZE, Moves.SAPPY_SEED ], + [Species.CACNEA]: [ Moves.EARTH_POWER, Moves.CEASELESS_EDGE, Moves.NIGHT_DAZE, Moves.IVY_CUDGEL ], [Species.SWABLU]: [ Moves.ROOST, Moves.NASTY_PLOT, Moves.FLOATY_FALL, Moves.BOOMBURST ], [Species.ZANGOOSE]: [ Moves.FACADE, Moves.HIGH_HORSEPOWER, Moves.EXTREME_SPEED, Moves.TIDY_UP ], [Species.SEVIPER]: [ Moves.DIRE_CLAW, Moves.NASTY_PLOT, Moves.SUCKER_PUNCH, Moves.SHED_TAIL ], [Species.LUNATONE]: [ Moves.POWER_GEM, Moves.NIGHT_DAZE, Moves.STORED_POWER, Moves.LUMINA_CRASH ], [Species.SOLROCK]: [ Moves.PSYSHIELD_BASH, Moves.MIGHTY_CLEAVE, Moves.POWER_TRIP, Moves.SACRED_FIRE ], [Species.BARBOACH]: [ Moves.DRAGON_DANCE, Moves.SUPERCELL_SLAM, Moves.ICE_SPINNER, Moves.WAVE_CRASH ], - [Species.CORPHISH]: [ Moves.CEASELESS_EDGE, Moves.AQUA_JET, Moves.WAVE_CRASH, Moves.SHELL_SMASH ], + [Species.CORPHISH]: [ Moves.CEASELESS_EDGE, Moves.JET_PUNCH, Moves.WAVE_CRASH, Moves.SHELL_SMASH ], [Species.BALTOY]: [ Moves.RECOVER, Moves.STORED_POWER, Moves.BODY_PRESS, Moves.MYSTICAL_POWER ], - [Species.LILEEP]: [ Moves.METEOR_BEAM, Moves.SCALD, Moves.STEALTH_ROCK, Moves.SAPPY_SEED ], + [Species.LILEEP]: [ Moves.POWER_GEM, Moves.SCALD, Moves.STONE_AXE, Moves.SAPPY_SEED ], [Species.ANORITH]: [ Moves.LIQUIDATION, Moves.LEECH_LIFE, Moves.DRAGON_DANCE, Moves.MIGHTY_CLEAVE ], [Species.FEEBAS]: [ Moves.CALM_MIND, Moves.FREEZE_DRY, Moves.MOONBLAST, Moves.STEAM_ERUPTION ], [Species.CASTFORM]: [ Moves.BOOMBURST, Moves.HYDRO_STEAM, Moves.CLEAR_SMOG, Moves.QUIVER_DANCE ], [Species.KECLEON]: [ Moves.DRAIN_PUNCH, Moves.DRAGON_DANCE, Moves.EXTREME_SPEED, Moves.MULTI_ATTACK ], - [Species.SHUPPET]: [ Moves.DRAIN_PUNCH, Moves.RECOVER, Moves.PARTING_SHOT, Moves.SPECTRAL_THIEF ], - [Species.DUSKULL]: [ Moves.BULK_UP, Moves.DRAIN_PUNCH, Moves.RECOVER, Moves.RAGE_FIST ], + [Species.SHUPPET]: [ Moves.DRAIN_PUNCH, Moves.TOPSY_TURVY, Moves.PARTING_SHOT, Moves.SPECTRAL_THIEF ], + [Species.DUSKULL]: [ Moves.BULK_UP, Moves.DRAIN_PUNCH, Moves.STRENGTH_SAP, Moves.RAGE_FIST ], [Species.TROPIUS]: [ Moves.STUFF_CHEEKS, Moves.EARTH_POWER, Moves.APPLE_ACID, Moves.SAPPY_SEED ], [Species.ABSOL]: [ Moves.KOWTOW_CLEAVE, Moves.SACRED_SWORD, Moves.DIRE_CLAW, Moves.BITTER_BLADE ], - [Species.WYNAUT]: [ Moves.RECOVER, Moves.COSMIC_POWER, Moves.TAUNT, Moves.SHED_TAIL ], - [Species.SNORUNT]: [ Moves.AURORA_VEIL, Moves.HEAD_CHARGE, Moves.POLTERGEIST, Moves.FREEZY_FROST ], + [Species.WYNAUT]: [ Moves.RECOVER, Moves.PERISH_SONG, Moves.TAUNT, Moves.SHED_TAIL ], + [Species.SNORUNT]: [ Moves.AURORA_VEIL, Moves.HYPER_VOICE, Moves.EARTH_POWER, Moves.NO_RETREAT ], [Species.SPHEAL]: [ Moves.FLIP_TURN, Moves.FREEZE_DRY, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], [Species.CLAMPERL]: [ Moves.ICE_SPINNER, Moves.LIQUIDATION, Moves.EARTH_POWER, Moves.ORIGIN_PULSE ], [Species.RELICANTH]: [ Moves.BODY_PRESS, Moves.SHORE_UP, Moves.WAVE_CRASH, Moves.FISHIOUS_REND ], [Species.LUVDISC]: [ Moves.BATON_PASS, Moves.THIEF, Moves.BOUNCY_BUBBLE, Moves.TAKE_HEART ], - [Species.BAGON]: [ Moves.IRON_HEAD, Moves.FIRE_LASH, Moves.DRAGON_DANCE, Moves.GLAIVE_RUSH ], + [Species.BAGON]: [ Moves.FLOATY_FALL, Moves.FIRE_LASH, Moves.DRAGON_DANCE, Moves.GLAIVE_RUSH ], [Species.BELDUM]: [ Moves.PSYCHIC_FANGS, Moves.RECOVER, Moves.MOUNTAIN_GALE, Moves.SHIFT_GEAR ], [Species.REGIROCK]: [ Moves.STONE_AXE, Moves.BODY_PRESS, Moves.RECOVER, Moves.SALT_CURE ], [Species.REGICE]: [ Moves.EARTH_POWER, Moves.COSMIC_POWER, Moves.RECOVER, Moves.FREEZE_DRY ], [Species.REGISTEEL]: [ Moves.BODY_PRESS, Moves.HEAT_CRASH, Moves.RECOVER, Moves.GIGATON_HAMMER ], [Species.LATIAS]: [ Moves.CORE_ENFORCER, Moves.SEARING_SHOT, Moves.DRAGON_ENERGY, Moves.QUIVER_DANCE ], [Species.LATIOS]: [ Moves.CORE_ENFORCER, Moves.SEARING_SHOT, Moves.DRAGON_ENERGY, Moves.QUIVER_DANCE ], - [Species.KYOGRE]: [ Moves.BOUNCY_BUBBLE, Moves.HURRICANE, Moves.THUNDER, Moves.RECOVER ], + [Species.KYOGRE]: [ Moves.BOUNCY_BUBBLE, Moves.HURRICANE, Moves.THUNDER, Moves.TAIL_GLOW ], [Species.GROUDON]: [ Moves.STONE_AXE, Moves.SOLAR_BLADE, Moves.MORNING_SUN, Moves.SACRED_FIRE ], [Species.RAYQUAZA]: [ Moves.OBLIVION_WING, Moves.DRAGON_DARTS, Moves.DRAGON_ENERGY, Moves.V_CREATE ], [Species.JIRACHI]: [ Moves.IRON_HEAD, Moves.FLOATY_FALL, Moves.ROCK_SLIDE, Moves.SHIFT_GEAR ], @@ -215,7 +215,7 @@ export const speciesEggMoves = { [Species.PACHIRISU]: [ Moves.BADDY_BAD, Moves.SIZZLY_SLIDE, Moves.U_TURN, Moves.ZIPPY_ZAP ], [Species.BUIZEL]: [ Moves.JET_PUNCH, Moves.TRIPLE_AXEL, Moves.SUPERCELL_SLAM, Moves.SURGING_STRIKES ], [Species.CHERUBI]: [ Moves.SPORE, Moves.STRENGTH_SAP, Moves.FIERY_DANCE, Moves.FLOWER_TRICK ], - [Species.SHELLOS]: [ Moves.STRENGTH_SAP, Moves.SCORCHING_SANDS, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], + [Species.SHELLOS]: [ Moves.BOUNCY_BUBBLE, Moves.SCORCHING_SANDS, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], [Species.DRIFLOON]: [ Moves.WILL_O_WISP, Moves.HEAT_WAVE, Moves.CALM_MIND, Moves.OBLIVION_WING ], [Species.BUNEARY]: [ Moves.TRIPLE_AXEL, Moves.SWORDS_DANCE, Moves.THUNDEROUS_KICK, Moves.MULTI_ATTACK ], [Species.GLAMEOW]: [ Moves.U_TURN, Moves.HIGH_HORSEPOWER, Moves.BULK_UP, Moves.EXTREME_SPEED ], @@ -226,7 +226,7 @@ export const speciesEggMoves = { [Species.MIME_JR]: [ Moves.CALM_MIND, Moves.MOONBLAST, Moves.WILL_O_WISP, Moves.LUMINA_CRASH ], [Species.HAPPINY]: [ Moves.COTTON_GUARD, Moves.SEISMIC_TOSS, Moves.SIZZLY_SLIDE, Moves.REVIVAL_BLESSING ], [Species.CHATOT]: [ Moves.SPARKLING_ARIA, Moves.TORCH_SONG, Moves.BATON_PASS, Moves.BOOMBURST ], - [Species.SPIRITOMB]: [ Moves.PARTING_SHOT, Moves.FOUL_PLAY, Moves.RECOVER, Moves.SPECTRAL_THIEF ], + [Species.SPIRITOMB]: [ Moves.PARTING_SHOT, Moves.FOUL_PLAY, Moves.STRENGTH_SAP, Moves.SPECTRAL_THIEF ], [Species.GIBLE]: [ Moves.DRAGON_DANCE, Moves.THOUSAND_WAVES, Moves.SHORE_UP, Moves.BITTER_BLADE ], [Species.MUNCHLAX]: [ Moves.CURSE, Moves.BODY_PRESS, Moves.KNOCK_OFF, Moves.SLACK_OFF ], [Species.RIOLU]: [ Moves.THUNDEROUS_KICK, Moves.BULLET_PUNCH, Moves.TRIPLE_AXEL, Moves.DOUBLE_IRON_BASH ], @@ -237,18 +237,18 @@ export const speciesEggMoves = { [Species.FINNEON]: [ Moves.QUIVER_DANCE, Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.ORIGIN_PULSE ], [Species.MANTYKE]: [ Moves.BOUNCY_BUBBLE, Moves.SPIKES, Moves.ROOST, Moves.STEAM_ERUPTION ], [Species.SNOVER]: [ Moves.HIGH_HORSEPOWER, Moves.STRENGTH_SAP, Moves.AURORA_VEIL, Moves.IVY_CUDGEL ], - [Species.ROTOM]: [ Moves.RECOVER, Moves.FIERY_DANCE, Moves.SPLISHY_SPLASH, Moves.RISING_VOLTAGE ], + [Species.ROTOM]: [ Moves.STRENGTH_SAP, Moves.FIERY_DANCE, Moves.SPLISHY_SPLASH, Moves.RISING_VOLTAGE ], [Species.UXIE]: [ Moves.COSMIC_POWER, Moves.BODY_PRESS, Moves.RECOVER, Moves.LUMINA_CRASH ], [Species.MESPRIT]: [ Moves.QUIVER_DANCE, Moves.AURA_SPHERE, Moves.RECOVER, Moves.LUMINA_CRASH ], - [Species.AZELF]: [ Moves.PHOTON_GEYSER, Moves.DRAGON_DANCE, Moves.RECOVER, Moves.LUMINA_CRASH ], + [Species.AZELF]: [ Moves.PHOTON_GEYSER, Moves.ICE_BEAM, Moves.MOONBLAST, Moves.LUMINA_CRASH ], [Species.DIALGA]: [ Moves.CORE_ENFORCER, Moves.TAKE_HEART, Moves.RECOVER, Moves.MAKE_IT_RAIN ], [Species.PALKIA]: [ Moves.RECOVER, Moves.TAKE_HEART, Moves.WATER_SPOUT, Moves.DRAGON_ENERGY ], [Species.HEATRAN]: [ Moves.TORCH_SONG, Moves.RECOVER, Moves.FLASH_CANNON, Moves.MATCHA_GOTCHA ], [Species.REGIGIGAS]: [ Moves.SKILL_SWAP, Moves.SHORE_UP, Moves.EXTREME_SPEED, Moves.GIGATON_HAMMER ], - [Species.GIRATINA]: [ Moves.DRAGON_DANCE, Moves.GLAIVE_RUSH, Moves.RECOVER, Moves.ASTRAL_BARRAGE ], + [Species.GIRATINA]: [ Moves.DRAGON_DANCE, Moves.GLAIVE_RUSH, Moves.RECOVER, Moves.SPECTRAL_THIEF ], [Species.CRESSELIA]: [ Moves.COSMIC_POWER, Moves.SECRET_SWORD, Moves.SIZZLY_SLIDE, Moves.LUMINA_CRASH ], - [Species.PHIONE]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.RECOVER, Moves.QUIVER_DANCE ], - [Species.MANAPHY]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.RECOVER, Moves.QUIVER_DANCE ], + [Species.PHIONE]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.SPLISHY_SPLASH, Moves.QUIVER_DANCE ], + [Species.MANAPHY]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.SPLISHY_SPLASH, Moves.QUIVER_DANCE ], [Species.DARKRAI]: [ Moves.FIERY_WRATH, Moves.MOONBLAST, Moves.SEARING_SHOT, Moves.SPORE ], [Species.SHAYMIN]: [ Moves.SPRINGTIDE_STORM, Moves.HEAT_WAVE, Moves.BLEAKWIND_STORM, Moves.MATCHA_GOTCHA ], [Species.ARCEUS]: [ Moves.QUIVER_DANCE, Moves.COLLISION_COURSE, Moves.VICTORY_DANCE, Moves.SPECTRAL_THIEF ], @@ -303,7 +303,7 @@ export const speciesEggMoves = { [Species.JOLTIK]: [ Moves.THUNDER, Moves.PARABOLIC_CHARGE, Moves.EARTH_POWER, Moves.QUIVER_DANCE ], [Species.FERROSEED]: [ Moves.STRENGTH_SAP, Moves.BODY_PRESS, Moves.SPIKY_SHIELD, Moves.SAPPY_SEED ], [Species.KLINK]: [ Moves.FLARE_BLITZ, Moves.HIGH_HORSEPOWER, Moves.FUSION_BOLT, Moves.DOUBLE_IRON_BASH ], - [Species.TYNAMO]: [ Moves.SCALD, Moves.RECOVER, Moves.FIRE_LASH, Moves.PLASMA_FISTS ], + [Species.TYNAMO]: [ Moves.SCALD, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.PLASMA_FISTS ], [Species.ELGYEM]: [ Moves.MYSTICAL_POWER, Moves.TRICK_ROOM, Moves.STORED_POWER, Moves.LUMINA_CRASH ], [Species.LITWICK]: [ Moves.FIERY_DANCE, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.ASTRAL_BARRAGE ], [Species.AXEW]: [ Moves.STONE_AXE, Moves.DIRE_CLAW, Moves.FIRE_LASH, Moves.GLAIVE_RUSH ], @@ -313,7 +313,7 @@ export const speciesEggMoves = { [Species.STUNFISK]: [ Moves.SHORE_UP, Moves.BANEFUL_BUNKER, Moves.THUNDER_CAGE, Moves.THUNDERCLAP ], [Species.MIENFOO]: [ Moves.GUNK_SHOT, Moves.SUPERCELL_SLAM, Moves.KNOCK_OFF, Moves.MOUNTAIN_GALE ], [Species.DRUDDIGON]: [ Moves.GLARE, Moves.ROOST, Moves.DRAGON_HAMMER, Moves.FIRE_LASH ], - [Species.GOLETT]: [ Moves.BULK_UP, Moves.RECOVER, Moves.HEADLONG_RUSH, Moves.RAGE_FIST ], + [Species.GOLETT]: [ Moves.SHIFT_GEAR, Moves.DRAIN_PUNCH, Moves.HEADLONG_RUSH, Moves.RAGE_FIST ], [Species.PAWNIARD]: [ Moves.SUCKER_PUNCH, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE, Moves.LAST_RESPECTS ], [Species.BOUFFALANT]: [ Moves.SLACK_OFF, Moves.JUMP_KICK, Moves.HEAD_SMASH, Moves.FLARE_BLITZ ], [Species.RUFFLET]: [ Moves.FLOATY_FALL, Moves.MOONBLAST, Moves.HEAT_WAVE, Moves.BOLT_BEAK ], @@ -328,14 +328,14 @@ export const speciesEggMoves = { [Species.TORNADUS]: [ Moves.EARTH_POWER, Moves.U_TURN, Moves.ICE_BEAM, Moves.OBLIVION_WING ], [Species.THUNDURUS]: [ Moves.EARTH_POWER, Moves.HURRICANE, Moves.THUNDERCLAP, Moves.ELECTRO_SHOT ], [Species.RESHIRAM]: [ Moves.ROOST, Moves.TAKE_HEART, Moves.ERUPTION, Moves.DRAGON_ENERGY ], - [Species.ZEKROM]: [ Moves.ROOST, Moves.THUNDEROUS_KICK, Moves.DRAGON_HAMMER, Moves.BOLT_BEAK ], + [Species.ZEKROM]: [ Moves.DRAGON_DANCE, Moves.THUNDEROUS_KICK, Moves.DRAGON_HAMMER, Moves.BOLT_BEAK ], [Species.LANDORUS]: [ Moves.STONE_AXE, Moves.THOUSAND_ARROWS, Moves.ROOST, Moves.FLOATY_FALL ], [Species.KYUREM]: [ Moves.ICICLE_CRASH, Moves.DRAGON_ENERGY, Moves.NASTY_PLOT, Moves.GLACIAL_LANCE ], [Species.KELDEO]: [ Moves.BOUNCY_BUBBLE, Moves.THUNDERBOLT, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], [Species.MELOETTA]: [ Moves.TORCH_SONG, Moves.QUIVER_DANCE, Moves.THUNDEROUS_KICK, Moves.BOOMBURST ], [Species.GENESECT]: [ Moves.EXTREME_SPEED, Moves.U_TURN, Moves.SHIFT_GEAR, Moves.TAIL_GLOW ], [Species.CHESPIN]: [ Moves.DRAIN_PUNCH, Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED ], - [Species.FENNEKIN]: [ Moves.BITTER_MALICE, Moves.MOONBLAST, Moves.THUNDERBOLT, Moves.TORCH_SONG ], + [Species.FENNEKIN]: [ Moves.EXPANDING_FORCE, Moves.MOONBLAST, Moves.THUNDERBOLT, Moves.TORCH_SONG ], [Species.FROAKIE]: [ Moves.MOONBLAST, Moves.EARTH_POWER, Moves.TRIPLE_AXEL, Moves.SURGING_STRIKES ], [Species.BUNNELBY]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.FACADE, Moves.EXTREME_SPEED ], [Species.FLETCHLING]: [ Moves.DRILL_RUN, Moves.U_TURN, Moves.SUPERCELL_SLAM, Moves.TIDY_UP ], @@ -346,14 +346,14 @@ export const speciesEggMoves = { [Species.PANCHAM]: [ Moves.DRAIN_PUNCH, Moves.FAKE_OUT, Moves.BULLET_PUNCH, Moves.WICKED_BLOW ], [Species.FURFROU]: [ Moves.TIDY_UP, Moves.CRUNCH, Moves.COVET, Moves.MULTI_ATTACK ], [Species.ESPURR]: [ Moves.GLARE, Moves.MOONBLAST, Moves.FLAMETHROWER, Moves.PSYSTRIKE ], - [Species.HONEDGE]: [ Moves.TACHYON_CUTTER, Moves.POLTERGEIST, Moves.BITTER_BLADE, Moves.PAIN_SPLIT ], + [Species.HONEDGE]: [ Moves.TACHYON_CUTTER, Moves.POLTERGEIST, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], [Species.SPRITZEE]: [ Moves.TRICK_ROOM, Moves.FOUL_PLAY, Moves.WISH, Moves.REVIVAL_BLESSING ], [Species.SWIRLIX]: [ Moves.BELLY_DRUM, Moves.SUCKER_PUNCH, Moves.SPIRIT_BREAK, Moves.SIZZLY_SLIDE ], [Species.INKAY]: [ Moves.POWER_TRIP, Moves.STORED_POWER, Moves.RECOVER, Moves.PSYCHO_BOOST ], - [Species.BINACLE]: [ Moves.ICE_SPINNER, Moves.ACCELEROCK, Moves.BULK_UP, Moves.MIGHTY_CLEAVE ], + [Species.BINACLE]: [ Moves.TRIPLE_AXEL, Moves.ACCELEROCK, Moves.DIRE_CLAW, Moves.MIGHTY_CLEAVE ], [Species.SKRELP]: [ Moves.RECOVER, Moves.CORE_ENFORCER, Moves.CALM_MIND, Moves.MALIGNANT_CHAIN ], [Species.CLAUNCHER]: [ Moves.SHELL_SMASH, Moves.ARMOR_CANNON, Moves.TERRAIN_PULSE, Moves.ORIGIN_PULSE ], - [Species.HELIOPTILE]: [ Moves.WEATHER_BALL, Moves.NASTY_PLOT, Moves.SHORE_UP, Moves.CLANGOROUS_SOUL ], + [Species.HELIOPTILE]: [ Moves.WEATHER_BALL, Moves.BOOMBURST, Moves.EARTH_POWER, Moves.TAIL_GLOW ], [Species.TYRUNT]: [ Moves.DRAGON_HAMMER, Moves.FLARE_BLITZ, Moves.VOLT_TACKLE, Moves.AXE_KICK ], [Species.AMAURA]: [ Moves.RECOVER, Moves.AURORA_VEIL, Moves.POWER_GEM, Moves.GEOMANCY ], [Species.HAWLUCHA]: [ Moves.DARKEST_LARIAT, Moves.HIGH_HORSEPOWER, Moves.SUPERCELL_SLAM, Moves.BRAVE_BIRD ], @@ -361,13 +361,13 @@ export const speciesEggMoves = { [Species.CARBINK]: [ Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SPARKLY_SWIRL, Moves.DIAMOND_STORM ], [Species.GOOMY]: [ Moves.SCALD, Moves.RECOVER, Moves.CALM_MIND, Moves.MAKE_IT_RAIN ], [Species.KLEFKI]: [ Moves.COURT_CHANGE, Moves.ENCORE, Moves.TAUNT, Moves.TOPSY_TURVY ], - [Species.PHANTUMP]: [ Moves.POLTERGEIST, Moves.TRICK_ROOM, Moves.SYNTHESIS, Moves.SAPPY_SEED ], - [Species.PUMPKABOO]: [ Moves.POLTERGEIST, Moves.FIRE_LASH, Moves.DIRE_CLAW, Moves.SAPPY_SEED ], + [Species.PHANTUMP]: [ Moves.SPIRIT_SHACKLE, Moves.TRICK_ROOM, Moves.SYNTHESIS, Moves.SAPPY_SEED ], + [Species.PUMPKABOO]: [ Moves.SPIRIT_SHACKLE, Moves.FIRE_LASH, Moves.DIRE_CLAW, Moves.SAPPY_SEED ], [Species.BERGMITE]: [ Moves.STONE_AXE, Moves.METAL_BURST, Moves.BODY_PRESS, Moves.GLACIAL_LANCE ], [Species.NOIBAT]: [ Moves.AEROBLAST, Moves.OVERDRIVE, Moves.NASTY_PLOT, Moves.CLANGING_SCALES ], [Species.XERNEAS]: [ Moves.LIGHT_OF_RUIN, Moves.LUMINA_CRASH, Moves.STRENGTH_SAP, Moves.REVIVAL_BLESSING ], - [Species.YVELTAL]: [ Moves.IRON_HEAD, Moves.FLOATY_FALL, Moves.NASTY_PLOT, Moves.WICKED_BLOW ], - [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.SHORE_UP, Moves.VICTORY_DANCE, Moves.DOUBLE_IRON_BASH ], + [Species.YVELTAL]: [ Moves.SLUDGE_WAVE, Moves.POWER_TRIP, Moves.FIERY_WRATH, Moves.CLANGOROUS_SOUL ], + [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.HEAL_ORDER, Moves.VICTORY_DANCE, Moves.DOUBLE_IRON_BASH ], [Species.DIANCIE]: [ Moves.MAGICAL_TORQUE, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.GEOMANCY ], [Species.HOOPA]: [ Moves.PHOTON_GEYSER, Moves.EARTH_POWER, Moves.BATON_PASS, Moves.TIDY_UP ], [Species.VOLCANION]: [ Moves.HYDRO_STEAM, Moves.CALM_MIND, Moves.ENERGY_BALL, Moves.SEARING_SHOT ], @@ -400,38 +400,38 @@ export const speciesEggMoves = { [Species.MINIOR]: [ Moves.EARTH_POWER, Moves.FLOATY_FALL, Moves.ZING_ZAP, Moves.DIAMOND_STORM ], [Species.KOMALA]: [ Moves.SLACK_OFF, Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.CLOSE_COMBAT ], [Species.TURTONATOR]: [ Moves.SHELL_SMASH, Moves.ARMOR_CANNON, Moves.EARTH_POWER, Moves.CLANGING_SCALES ], - [Species.TOGEDEMARU]: [ Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.METEOR_MASH, Moves.BEHEMOTH_BASH ], - [Species.MIMIKYU]: [ Moves.SPIRIT_BREAK, Moves.NUZZLE, Moves.PARTING_SHOT, Moves.SPECTRAL_THIEF ], + [Species.TOGEDEMARU]: [ Moves.FAKE_OUT, Moves.METAL_BURST, Moves.METEOR_MASH, Moves.BOLT_STRIKE ], + [Species.MIMIKYU]: [ Moves.SPIRIT_BREAK, Moves.TIDY_UP, Moves.SIZZLY_SLIDE, Moves.SPECTRAL_THIEF ], [Species.BRUXISH]: [ Moves.ICE_FANG, Moves.FIRE_FANG, Moves.FLIP_TURN, Moves.FILLET_AWAY ], [Species.DRAMPA]: [ Moves.SLACK_OFF, Moves.FLAMETHROWER, Moves.CLANGING_SCALES, Moves.CLANGOROUS_SOUL ], [Species.DHELMISE]: [ Moves.POLTERGEIST, Moves.STRENGTH_SAP, Moves.LEAF_BLADE, Moves.DOUBLE_IRON_BASH ], - [Species.JANGMO_O]: [ Moves.ICE_BEAM, Moves.RECOVER, Moves.SECRET_SWORD, Moves.GLAIVE_RUSH ], + [Species.JANGMO_O]: [ Moves.ICE_BEAM, Moves.DRAIN_PUNCH, Moves.SECRET_SWORD, Moves.GLAIVE_RUSH ], [Species.TAPU_KOKO]: [ Moves.PLAY_ROUGH, Moves.MOUNTAIN_GALE, Moves.RISING_VOLTAGE, Moves.BOLT_BEAK ], [Species.TAPU_LELE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.HEAT_WAVE, Moves.EXPANDING_FORCE ], [Species.TAPU_BULU]: [ Moves.GRASSY_GLIDE, Moves.CLOSE_COMBAT, Moves.PLAY_ROUGH, Moves.VICTORY_DANCE ], [Species.TAPU_FINI]: [ Moves.AURA_SPHERE, Moves.EARTH_POWER, Moves.RECOVER, Moves.QUIVER_DANCE ], [Species.COSMOG]: [ Moves.VICTORY_DANCE, Moves.QUIVER_DANCE, Moves.STORED_POWER, Moves.PHOTON_GEYSER ], - [Species.NIHILEGO]: [ Moves.RECOVER, Moves.QUIVER_DANCE, Moves.GIGA_DRAIN, Moves.MALIGNANT_CHAIN ], + [Species.NIHILEGO]: [ Moves.RECOVER, Moves.QUIVER_DANCE, Moves.ENERGY_BALL, Moves.MALIGNANT_CHAIN ], [Species.BUZZWOLE]: [ Moves.LEECH_LIFE, Moves.BULLET_PUNCH, Moves.DARKEST_LARIAT, Moves.COLLISION_COURSE ], [Species.PHEROMOSA]: [ Moves.AURA_SPHERE, Moves.MAKE_IT_RAIN, Moves.ATTACK_ORDER, Moves.COLLISION_COURSE ], [Species.XURKITREE]: [ Moves.OVERHEAT, Moves.GIGA_DRAIN, Moves.TAIL_GLOW, Moves.THUNDERCLAP ], [Species.CELESTEELA]: [ Moves.ROOST, Moves.BUZZY_BUZZ, Moves.SPIKES, Moves.OBLIVION_WING ], [Species.KARTANA]: [ Moves.MIGHTY_CLEAVE, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], - [Species.GUZZLORD]: [ Moves.DIRE_CLAW, Moves.GLAIVE_RUSH, Moves.SLACK_OFF, Moves.BADDY_BAD ], + [Species.GUZZLORD]: [ Moves.SUCKER_PUNCH, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.RUINATION ], [Species.NECROZMA]: [ Moves.COSMIC_POWER, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE, Moves.CLANGOROUS_SOUL ], - [Species.MAGEARNA]: [ Moves.RECOVER, Moves.EARTH_POWER, Moves.COSMIC_POWER, Moves.MAKE_IT_RAIN ], + [Species.MAGEARNA]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.COSMIC_POWER, Moves.MAKE_IT_RAIN ], [Species.MARSHADOW]: [ Moves.POWER_UP_PUNCH, Moves.TRIPLE_AXEL, Moves.STORM_THROW, Moves.DOUBLE_IRON_BASH ], [Species.POIPOLE]: [ Moves.SLUDGE_BOMB, Moves.BUG_BUZZ, Moves.SEARING_SHOT, Moves.DRAGON_ENERGY ], [Species.STAKATAKA]: [ Moves.HEAVY_SLAM, Moves.SHORE_UP, Moves.CURSE, Moves.SALT_CURE ], [Species.BLACEPHALON]: [ Moves.NASTY_PLOT, Moves.SEARING_SHOT, Moves.GIGA_DRAIN, Moves.ASTRAL_BARRAGE ], [Species.ZERAORA]: [ Moves.SWORDS_DANCE, Moves.TRIPLE_AXEL, Moves.BOLT_STRIKE, Moves.PYRO_BALL ], - [Species.MELTAN]: [ Moves.BULLET_PUNCH, Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.RECOVER ], + [Species.MELTAN]: [ Moves.BULLET_PUNCH, Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS ], [Species.GROOKEY]: [ Moves.HEADLONG_RUSH, Moves.CLOSE_COMBAT, Moves.GRASSY_GLIDE, Moves.CLANGOROUS_SOUL ], [Species.SCORBUNNY]: [ Moves.EXTREME_SPEED, Moves.TROP_KICK, Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK ], [Species.SOBBLE]: [ Moves.AEROBLAST, Moves.FROST_BREATH, Moves.SEARING_SHOT, Moves.SURGING_STRIKES ], [Species.SKWOVET]: [ Moves.KNOCK_OFF, Moves.GRAV_APPLE, Moves.BODY_PRESS, Moves.SLACK_OFF ], [Species.ROOKIDEE]: [ Moves.ROOST, Moves.BODY_PRESS, Moves.IRON_HEAD, Moves.KINGS_SHIELD ], - [Species.BLIPBUG]: [ Moves.RECOVER, Moves.FREEZING_GLARE, Moves.SPORE, Moves.TAIL_GLOW ], + [Species.BLIPBUG]: [ Moves.HEAL_ORDER, Moves.EXPANDING_FORCE, Moves.SPORE, Moves.TAIL_GLOW ], [Species.NICKIT]: [ Moves.BADDY_BAD, Moves.BURNING_JEALOUSY, Moves.SPARKLY_SWIRL, Moves.FIERY_WRATH ], [Species.GOSSIFLEUR]: [ Moves.TAILWIND, Moves.STRENGTH_SAP, Moves.PARTING_SHOT, Moves.SEED_FLARE ], [Species.WOOLOO]: [ Moves.PSYSHIELD_BASH, Moves.HEAD_CHARGE, Moves.BODY_PRESS, Moves.MILK_DRINK ], @@ -440,7 +440,7 @@ export const speciesEggMoves = { [Species.ROLYCOLY]: [ Moves.BURNING_BULWARK, Moves.ZING_ZAP, Moves.WORK_UP, Moves.DIAMOND_STORM ], [Species.APPLIN]: [ Moves.DRAGON_CHEER, Moves.PARTING_SHOT, Moves.FLOWER_TRICK, Moves.STRENGTH_SAP ], [Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.STONE_EDGE, Moves.PRECIPICE_BLADES ], - [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.SCORCHING_SANDS, Moves.ROOST ], + [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.SCORCHING_SANDS, Moves.OBLIVION_WING ], [Species.ARROKUDA]: [ Moves.THUNDER_FANG, Moves.KNOCK_OFF, Moves.ICE_FANG, Moves.FILLET_AWAY ], [Species.TOXEL]: [ Moves.NASTY_PLOT, Moves.BANEFUL_BUNKER, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], [Species.SIZZLIPEDE]: [ Moves.BURNING_BULWARK, Moves.ZING_ZAP, Moves.FIRST_IMPRESSION, Moves.VICTORY_DANCE ], @@ -458,11 +458,11 @@ export const speciesEggMoves = { [Species.MORPEKO]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.SWORDS_DANCE ], [Species.CUFANT]: [ Moves.LIQUIDATION, Moves.HEAVY_SLAM, Moves.CLOSE_COMBAT, Moves.GIGATON_HAMMER ], [Species.DRACOZOLT]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.FIRE_LASH, Moves.DRAGON_DANCE ], - [Species.ARCTOZOLT]: [ Moves.TRIPLE_AXEL, Moves.EARTHQUAKE, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], + [Species.ARCTOZOLT]: [ Moves.TRIPLE_AXEL, Moves.LIQUIDATION, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], [Species.DRACOVISH]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.THUNDER_FANG, Moves.DRAGON_DANCE ], - [Species.ARCTOVISH]: [ Moves.TRIPLE_AXEL, Moves.EARTHQUAKE, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], - [Species.DURALUDON]: [ Moves.CALM_MIND, Moves.BODY_PRESS, Moves.EARTH_POWER, Moves.RECOVER ], - [Species.DREEPY]: [ Moves.DRAGON_ENERGY, Moves.SHED_TAIL, Moves.BLAZING_TORQUE, Moves.SPECTRAL_THIEF ], + [Species.ARCTOVISH]: [ Moves.TRIPLE_AXEL, Moves.SUPERCELL_SLAM, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], + [Species.DURALUDON]: [ Moves.ICE_BEAM, Moves.BODY_PRESS, Moves.RECOVER, Moves.CORE_ENFORCER ], + [Species.DREEPY]: [ Moves.DRAGON_ENERGY, Moves.SPIRIT_BREAK, Moves.BLAZING_TORQUE, Moves.SPECTRAL_THIEF ], [Species.ZACIAN]: [ Moves.MAGICAL_TORQUE, Moves.BITTER_BLADE, Moves.LEAF_BLADE, Moves.VICTORY_DANCE ], [Species.ZAMAZENTA]: [ Moves.PSYSHIELD_BASH, Moves.BODY_PRESS, Moves.SLACK_OFF, Moves.VICTORY_DANCE ], [Species.KUBFU]: [ Moves.METEOR_MASH, Moves.DRAIN_PUNCH, Moves.JET_PUNCH, Moves.DRAGON_DANCE ], @@ -471,11 +471,11 @@ export const speciesEggMoves = { [Species.REGIDRAGO]: [ Moves.METEOR_MASH, Moves.FLAMETHROWER, Moves.CALM_MIND, Moves.DRAGON_DARTS ], [Species.GLASTRIER]: [ Moves.TRICK_ROOM, Moves.SLACK_OFF, Moves.HIGH_HORSEPOWER, Moves.GLACIAL_LANCE ], [Species.SPECTRIER]: [ Moves.EARTH_POWER, Moves.PARTING_SHOT, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], - [Species.CALYREX]: [ Moves.SAPPY_SEED, Moves.RECOVER, Moves.AURA_SPHERE, Moves.PHOTON_GEYSER ], + [Species.CALYREX]: [ Moves.SAPPY_SEED, Moves.RECOVER, Moves.SECRET_SWORD, Moves.PHOTON_GEYSER ], [Species.ENAMORUS]: [ Moves.FLEUR_CANNON, Moves.TAKE_HEART, Moves.STORED_POWER, Moves.OBLIVION_WING ], - [Species.SPRIGATITO]: [ Moves.BLAZE_KICK, Moves.STRENGTH_SAP, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ], - [Species.FUECOCO]: [ Moves.COSMIC_POWER, Moves.SLACK_OFF, Moves.INFERNAL_PARADE, Moves.MOONGEIST_BEAM ], - [Species.QUAXLY]: [ Moves.DRAGON_DANCE, Moves.ROOST, Moves.TROP_KICK, Moves.THUNDEROUS_KICK ], + [Species.SPRIGATITO]: [ Moves.FIRE_LASH, Moves.TRIPLE_AXEL, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ], + [Species.FUECOCO]: [ Moves.ALLURING_VOICE, Moves.SLACK_OFF, Moves.OVERDRIVE, Moves.MOONGEIST_BEAM ], + [Species.QUAXLY]: [ Moves.DRAGON_DANCE, Moves.TRIPLE_AXEL, Moves.TROP_KICK, Moves.THUNDEROUS_KICK ], [Species.LECHONK]: [ Moves.MILK_DRINK, Moves.BLAZING_TORQUE, Moves.FILLET_AWAY, Moves.MULTI_ATTACK ], [Species.TAROUNTULA]: [ Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.THIEF, Moves.SPORE ], [Species.NYMBLE]: [ Moves.CEASELESS_EDGE, Moves.FELL_STINGER, Moves.LEECH_LIFE, Moves.WICKED_BLOW ], @@ -485,13 +485,13 @@ export const speciesEggMoves = { [Species.SMOLIV]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.BOOMBURST ], [Species.SQUAWKABILLY]: [ Moves.PARTING_SHOT, Moves.BULK_UP, Moves.FLARE_BLITZ, Moves.HEAD_CHARGE ], [Species.NACLI]: [ Moves.BODY_PRESS, Moves.SPIKES, Moves.CURSE, Moves.DIAMOND_STORM ], - [Species.CHARCADET]: [ Moves.SACRED_SWORD, Moves.PHOTON_GEYSER, Moves.RECOVER, Moves.SPECTRAL_THIEF ], + [Species.CHARCADET]: [ Moves.SACRED_SWORD, Moves.PHOTON_GEYSER, Moves.MOONBLAST, Moves.SPECTRAL_THIEF ], [Species.TADBULB]: [ Moves.PARABOLIC_CHARGE, Moves.SCALD, Moves.EARTH_POWER, Moves.ELECTRO_SHOT ], [Species.WATTREL]: [ Moves.NASTY_PLOT, Moves.TAILWIND, Moves.HEAT_WAVE, Moves.AEROBLAST ], [Species.MASCHIFF]: [ Moves.PARTING_SHOT, Moves.KNOCK_OFF, Moves.NUZZLE, Moves.COLLISION_COURSE ], [Species.SHROODLE]: [ Moves.FIRE_LASH, Moves.PARTING_SHOT, Moves.TOXIC, Moves.TOPSY_TURVY ], [Species.BRAMBLIN]: [ Moves.TAILWIND, Moves.STRENGTH_SAP, Moves.CEASELESS_EDGE, Moves.LAST_RESPECTS ], - [Species.TOEDSCOOL]: [ Moves.STRENGTH_SAP, Moves.HEART_SWAP, Moves.PARTING_SHOT, Moves.SAPPY_SEED ], + [Species.TOEDSCOOL]: [ Moves.STRENGTH_SAP, Moves.TOPSY_TURVY, Moves.PARTING_SHOT, Moves.SAPPY_SEED ], [Species.KLAWF]: [ Moves.CRABHAMMER, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE, Moves.SHELL_SMASH ], [Species.CAPSAKID]: [ Moves.STRENGTH_SAP, Moves.APPLE_ACID, Moves.FROST_BREATH, Moves.TORCH_SONG ], [Species.RELLOR]: [ Moves.TOXIC_SPIKES, Moves.RECOVER, Moves.HEAT_WAVE, Moves.LUMINA_CRASH ], @@ -499,7 +499,7 @@ export const speciesEggMoves = { [Species.TINKATINK]: [ Moves.NUZZLE, Moves.SHIFT_GEAR, Moves.ICE_HAMMER, Moves.PYRO_BALL ], [Species.WIGLETT]: [ Moves.SHELL_SMASH, Moves.ICICLE_CRASH, Moves.SEED_BOMB, Moves.SURGING_STRIKES ], [Species.BOMBIRDIER]: [ Moves.U_TURN, Moves.TIDY_UP, Moves.SUCKER_PUNCH, Moves.MIGHTY_CLEAVE ], - [Species.FINIZEN]: [ Moves.TRIPLE_AXEL, Moves.DRAIN_PUNCH, Moves.RECOVER, Moves.WOOD_HAMMER ], + [Species.FINIZEN]: [ Moves.TRIPLE_AXEL, Moves.DRAIN_PUNCH, Moves.HEADLONG_RUSH, Moves.SURGING_STRIKES ], [Species.VAROOM]: [ Moves.COMBAT_TORQUE, Moves.U_TURN, Moves.BLAZING_TORQUE, Moves.NOXIOUS_TORQUE ], [Species.CYCLIZAR]: [ Moves.BATON_PASS, Moves.BLAZING_TORQUE, Moves.HEAD_CHARGE, Moves.CLANGOROUS_SOUL ], [Species.ORTHWORM]: [ Moves.GLARE, Moves.COIL, Moves.BODY_PRESS, Moves.SHORE_UP ], @@ -518,24 +518,24 @@ export const speciesEggMoves = { [Species.SANDY_SHOCKS]: [ Moves.SHORE_UP, Moves.ICE_BEAM, Moves.NASTY_PLOT, Moves.THUNDERCLAP ], [Species.IRON_TREADS]: [ Moves.SUPERCELL_SLAM, Moves.BULK_UP, Moves.SHORE_UP, Moves.DOUBLE_IRON_BASH ], [Species.IRON_BUNDLE]: [ Moves.EARTH_POWER, Moves.BOUNCY_BUBBLE, Moves.NASTY_PLOT, Moves.WATER_SPOUT ], - [Species.IRON_HANDS]: [ Moves.DRAIN_PUNCH, Moves.CURSE, Moves.PLASMA_FISTS, Moves.RECOVER ], + [Species.IRON_HANDS]: [ Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS, Moves.ICE_HAMMER ], [Species.IRON_JUGULIS]: [ Moves.FIERY_WRATH, Moves.ROOST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ], [Species.IRON_MOTH]: [ Moves.EARTH_POWER, Moves.SEARING_SHOT, Moves.QUIVER_DANCE, Moves.MALIGNANT_CHAIN ], [Species.IRON_THORNS]: [ Moves.MIGHTY_CLEAVE, Moves.SHORE_UP, Moves.SHIFT_GEAR, Moves.FUSION_BOLT ], [Species.FRIGIBAX]: [ Moves.DRAGON_DARTS, Moves.BULK_UP, Moves.SHORE_UP, Moves.GLACIAL_LANCE ], [Species.GIMMIGHOUL]: [ Moves.COSMIC_POWER, Moves.STORED_POWER, Moves.BATON_PASS, Moves.ASTRAL_BARRAGE ], - [Species.WO_CHIEN]: [ Moves.SPORE, Moves.RAGE_POWDER, Moves.SAPPY_SEED, Moves.RECOVER ], + [Species.WO_CHIEN]: [ Moves.SPORE, Moves.RAGE_POWDER, Moves.SAPPY_SEED, Moves.STRENGTH_SAP ], [Species.CHIEN_PAO]: [ Moves.KNOCK_OFF, Moves.PARTING_SHOT, Moves.BITTER_BLADE, Moves.GLACIAL_LANCE ], [Species.TING_LU]: [ Moves.SHORE_UP, Moves.CURSE, Moves.SAPPY_SEED, Moves.THOUSAND_ARROWS ], [Species.CHI_YU]: [ Moves.FIERY_WRATH, Moves.HYDRO_STEAM, Moves.TORCH_SONG, Moves.ERUPTION ], [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ], [Species.IRON_VALIANT]: [ Moves.PLASMA_FISTS, Moves.VICTORY_DANCE, Moves.QUIVER_DANCE, Moves.MAGICAL_TORQUE ], - [Species.KORAIDON]: [ Moves.SACRED_FIRE, Moves.RECOVER, Moves.GLAIVE_RUSH, Moves.CLANGOROUS_SOUL ], - [Species.MIRAIDON]: [ Moves.ICE_BEAM, Moves.RECOVER, Moves.RISING_VOLTAGE, Moves.DRAGON_ENERGY ], + [Species.KORAIDON]: [ Moves.BITTER_BLADE, Moves.MORNING_SUN, Moves.GLAIVE_RUSH, Moves.CLANGOROUS_SOUL ], + [Species.MIRAIDON]: [ Moves.ICE_BEAM, Moves.CLANGOROUS_SOUL, Moves.RISING_VOLTAGE, Moves.DRAGON_ENERGY ], [Species.WALKING_WAKE]: [ Moves.BOUNCY_BUBBLE, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.DRAGON_ENERGY ], [Species.IRON_LEAVES]: [ Moves.SPORE, Moves.U_TURN, Moves.MIGHTY_CLEAVE, Moves.BITTER_BLADE ], [Species.POLTCHAGEIST]: [ Moves.COSMIC_POWER, Moves.INFERNAL_PARADE, Moves.LEECH_SEED, Moves.SPARKLY_SWIRL ], - [Species.OKIDOGI]: [ Moves.MORNING_SUN, Moves.OBSTRUCT, Moves.DIRE_CLAW, Moves.COLLISION_COURSE ], + [Species.OKIDOGI]: [ Moves.SLACK_OFF, Moves.OBSTRUCT, Moves.DIRE_CLAW, Moves.COLLISION_COURSE ], [Species.MUNKIDORI]: [ Moves.PSYSTRIKE, Moves.HEAT_WAVE, Moves.EARTH_POWER, Moves.MALIGNANT_CHAIN ], [Species.FEZANDIPITI]: [ Moves.BATON_PASS, Moves.COSMIC_POWER, Moves.SIZZLY_SLIDE, Moves.MALIGNANT_CHAIN ], [Species.OGERPON]: [ Moves.FLOWER_TRICK, Moves.BONEMERANG, Moves.TRIPLE_AXEL, Moves.GIGATON_HAMMER ], diff --git a/src/data/egg.ts b/src/data/egg.ts index 08982cd4a..f0d6de26a 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -77,8 +77,6 @@ export function getEggHatchWavesMessage(hatchWaves: integer): string { } export function getEggGachaTypeDescriptor(scene: BattleScene, egg: Egg): string { - if (egg.isManaphyEgg()) - return ''; switch (egg.gachaType) { case GachaType.LEGENDARY: return `Legendary Rate Up (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, egg.timestamp)).getName()})`; diff --git a/src/data/enums/arena-tag-type.ts b/src/data/enums/arena-tag-type.ts index 8478b6f3f..2ecac8b56 100644 --- a/src/data/enums/arena-tag-type.ts +++ b/src/data/enums/arena-tag-type.ts @@ -15,5 +15,6 @@ export enum ArenaTagType { GRAVITY = "GRAVITY", REFLECT = "REFLECT", LIGHT_SCREEN = "LIGHT_SCREEN", - AURORA_VEIL = "AURORA_VEIL" + AURORA_VEIL = "AURORA_VEIL", + TAILWIND = "TAILWIND" } diff --git a/src/data/enums/battler-tag-type.ts b/src/data/enums/battler-tag-type.ts index 4d810b737..d18ccf1c5 100644 --- a/src/data/enums/battler-tag-type.ts +++ b/src/data/enums/battler-tag-type.ts @@ -3,11 +3,13 @@ export enum BattlerTagType { NONE = "NONE", RECHARGING = "RECHARGING", FLINCHED = "FLINCHED", + INTERRUPTED = "INTERRUPTED", CONFUSED = "CONFUSED", INFATUATED = "INFATUATED", SEEDED = "SEEDED", NIGHTMARE = "NIGHTMARE", FRENZY = "FRENZY", + CHARGING = "CHARGING", ENCORE = "ENCORE", HELPING_HAND = "HELPING_HAND", INGRAIN = "INGRAIN", @@ -52,5 +54,6 @@ export enum BattlerTagType { SALT_CURED = "SALT_CURED", CURSED = "CURSED", CHARGED = "CHARGED", - GROUNDED = "GROUNDED" + GROUNDED = "GROUNDED", + MAGNET_RISEN = "MAGNET_RISEN" } diff --git a/src/data/move.ts b/src/data/move.ts index 4110d774a..9b80e70b5 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -12,7 +12,7 @@ import * as Utils from "../utils"; import { WeatherType } from "./weather"; import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { ArenaTagType } from "./enums/arena-tag-type"; -import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, NoTransformAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr } from "./ability"; +import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, NoTransformAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr } from "./ability"; import { Abilities } from "./enums/abilities"; import { allAbilities } from './ability'; import { PokemonHeldItemModifier } from "../modifier/modifier"; @@ -326,6 +326,15 @@ export default class Move implements Localizable { return true; } + getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { + for (let attr of this.attrs) { + let failedText = attr.getFailedText(user, target, move, cancelled); + if (failedText !== null) + return failedText; + } + return null; + } + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { let score = 0; @@ -358,7 +367,7 @@ export class AttackMove extends Move { let attackScore = 0; - const effectiveness = target.getAttackTypeEffectiveness(this.type); + const effectiveness = target.getAttackTypeEffectiveness(this.type, user); attackScore = Math.pow(effectiveness - 1, 2) * effectiveness < 1 ? -2 : 2; if (attackScore) { if (this.category === MoveCategory.PHYSICAL) { @@ -422,6 +431,10 @@ export abstract class MoveAttr { return null; } + getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { + return null; + } + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { return 0; } @@ -434,7 +447,9 @@ export abstract class MoveAttr { export enum MoveEffectTrigger { PRE_APPLY, POST_APPLY, - HIT + HIT, + /** Triggers one time after all target effects have applied */ + POST_TARGET, } export class MoveEffectAttr extends MoveAttr { @@ -557,7 +572,7 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = Math.floor(target.hp / 2); + (args[0] as Utils.IntegerHolder).value = Math.max(Math.floor(target.hp / 2), 1); return true; } @@ -685,7 +700,7 @@ export class RecoilAttr extends MoveEffectAttr { return false; const recoilDamage = Math.max(Math.floor((!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio), - !this.useHp && user.turnData.damageDealt ? 1 : 0); + user.turnData.damageDealt ? 1 : 0); if (!recoilDamage) return false; @@ -723,23 +738,37 @@ export class SacrificialAttr extends MoveEffectAttr { getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { if (user.isBoss()) return -20; - return Math.ceil(((1 - user.getHpRatio()) * 10 - 10) * (target.getAttackTypeEffectiveness(move.type) - 0.5)); + return Math.ceil(((1 - user.getHpRatio()) * 10 - 10) * (target.getAttackTypeEffectiveness(move.type, user) - 0.5)); } } +/** + * Attribute used for moves which cut the user's Max HP in half. + * Triggers using POST_TARGET. + */ export class HalfSacrificialAttr extends MoveEffectAttr { constructor() { - super(true, MoveEffectTrigger.PRE_APPLY); + super(true, MoveEffectTrigger.POST_TARGET); } + /** + * Cut's the user's Max HP in half and displays the appropriate recoil message + * @param user Pokemon that used the move + * @param target N/A + * @param move Move with this attribute + * @param args N/A + * @returns true if the function succeeds + */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!super.apply(user, target, move, args)) return false; const cancelled = new Utils.BooleanHolder(false); + // Check to see if the Pokemon has an ability that blocks non-direct damage applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (!cancelled.value){ user.damageAndUpdate(Math.ceil(user.getMaxHp()/2), HitResult.OTHER, false, true, true); + user.scene.queueMessage(getPokemonMessage(user, ' cut its own HP to power up its move!')); // Queue recoil message } return true; } @@ -747,7 +776,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr { getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { if (user.isBoss()) return -10; - return Math.ceil(((1 - user.getHpRatio()/2) * 10 - 10) * (target.getAttackTypeEffectiveness(move.type) - 0.5)); + return Math.ceil(((1 - user.getHpRatio()/2) * 10 - 10) * (target.getAttackTypeEffectiveness(move.type, user) - 0.5)); } } @@ -756,7 +785,7 @@ export enum MultiHitType { _2_TO_5, _3, _3_INCR, - _1_TO_10 + _1_TO_10, } export class HealAttr extends MoveEffectAttr { @@ -912,7 +941,9 @@ export class MultiHitAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { let hitTimes: integer; - switch (this.multiHitType) { + const hitType = new Utils.IntegerHolder(this.multiHitType) + applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType) + switch (hitType.value) { case MultiHitType._2_TO_5: { const rand = user.randSeedInt(16); @@ -975,6 +1006,23 @@ export class MultiHitAttr extends MoveAttr { } } +export class ChangeMultiHitTypeAttr extends MoveAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + //const hitType = args[0] as Utils.NumberHolder; + return false; + } +} + +export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) { + (args[0] as Utils.IntegerHolder).value = MultiHitType._3 + return true; + } + return false; + } +} + export class StatusEffectAttr extends MoveEffectAttr { public effect: StatusEffect; public cureTurn: integer; @@ -1325,10 +1373,13 @@ export class ChargeAttr extends OverrideMoveEffectAttr { user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true }); if (this.sameTurn) user.scene.pushMovePhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], user.moveset.find(m => m.moveId === move.id), true), this.followUpPriority); + user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); resolve(true); }); - } else + } else { + user.lapseTag(BattlerTagType.CHARGING); resolve(false); + } }); } @@ -1430,8 +1481,8 @@ export class StatChangeAttr extends MoveEffectAttr { private condition: MoveConditionFunc; private showMessage: boolean; - constructor(stats: BattleStat | BattleStat[], levels: integer, selfTarget?: boolean, condition?: MoveConditionFunc, showMessage: boolean = true, firstHitOnly: boolean = false) { - super(selfTarget, MoveEffectTrigger.HIT, firstHitOnly); + constructor(stats: BattleStat | BattleStat[], levels: integer, selfTarget?: boolean, condition?: MoveConditionFunc, showMessage: boolean = true, firstHitOnly: boolean = false, moveEffectTrigger: MoveEffectTrigger = MoveEffectTrigger.HIT) { + super(selfTarget, moveEffectTrigger, firstHitOnly); this.stats = typeof(stats) === 'number' ? [ stats as BattleStat ] : stats as BattleStat[]; @@ -1493,6 +1544,23 @@ export class StatChangeAttr extends MoveEffectAttr { } } +export class AcupressureStatChangeAttr extends MoveEffectAttr { + constructor() { + super(); + } + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { + let randStats = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD, BattleStat.ACC, BattleStat.EVA ]; + randStats = randStats.filter(s => target.summonData.battleStats[s] < 6); + if (randStats.length > 0) { + let boostStat = [randStats[Utils.randInt(randStats.length)]]; + user.scene.unshiftPhase(new StatChangePhase(user.scene, target.getBattlerIndex(), this.selfTarget, boostStat, 2)); + return true; + } + return false; + } +} + export class GrowthStatChangeAttr extends StatChangeAttr { constructor() { super([ BattleStat.ATK, BattleStat.SPATK ], 1, true); @@ -1570,7 +1638,7 @@ export class CopyStatsAttr extends MoveEffectAttr { user.addTag(BattlerTagType.CRIT_BOOST, 0, move.id); else user.removeTag(BattlerTagType.CRIT_BOOST); - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(user, 'copied\n') + getPokemonMessage(target, `'s stat changes!`)); @@ -1586,7 +1654,7 @@ export class InvertStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] *= -1; - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere all reversed!`)); @@ -1602,7 +1670,7 @@ export class ResetStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] = 0; - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere eliminated!`)); @@ -1770,13 +1838,13 @@ export class BattleStatRatioPowerAttr extends VariablePowerAttr { if (this.invert) { // Gyro ball uses a specific formula - let userSpeed = user.getStat(this.stat); + let userSpeed = user.getBattleStat(this.stat); if (userSpeed < 1) { // Gen 6+ always have 1 base power power.value = 1; return true; } - let bp = Math.floor(Math.min(150, 25 * target.getStat(this.stat) / userSpeed + 1)); + let bp = Math.floor(Math.min(150, 25 * target.getBattleStat(this.stat) / userSpeed + 1)); power.value = bp; return true; } @@ -2018,6 +2086,27 @@ export class PresentPowerAttr extends VariablePowerAttr { } } +export class KnockOffPowerAttr extends VariablePowerAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if(target.getHeldItems().length > 0){ + (args[0] as Utils.NumberHolder).value *= 1.5; + return true; + } + + return false; + } +} + +export class WaterShurikenPowerAttr extends VariablePowerAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) { + (args[0] as Utils.IntegerHolder).value = 20 + return true; + } + return false; + } +} + export class VariableAtkAttr extends MoveAttr { constructor() { super(); @@ -2185,6 +2274,36 @@ export class VariableMoveTypeAttr extends MoveAttr { } } +export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.GENESECT)) { + const form = user.species.speciesId === Species.GENESECT ? user.formIndex : user.fusionSpecies.formIndex; + const type = (args[0] as Utils.IntegerHolder); + + switch (form) { + case 1: // Shock Drive + type.value = Type.ELECTRIC; + break; + case 2: // Burn Drive + type.value = Type.FIRE; + break; + case 3: // Chill Drive + type.value = Type.ICE; + break; + case 4: // Douse Drive + type.value = Type.WATER; + break; + default: + type.value = Type.NORMAL; + break; + } + return true; + } + + return false; + } +} + export class AuraWheelTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.MORPEKO)) { @@ -2321,6 +2440,27 @@ export class HiddenPowerTypeAttr extends VariableMoveTypeAttr { } } +export class MatchUserTypeAttr extends VariableMoveTypeAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const type = (args[0] as Utils.IntegerHolder); + + const userTypes = user.getTypes(true); + + if(userTypes.includes(Type.STELLAR)) { // will not change to stellar type + const nonTeraTypes = user.getTypes(); + type.value = nonTeraTypes[0]; + return true; + } + else if (userTypes.length > 0) { + type.value = userTypes[0]; + return true; + } + else + return false; + + } +} + export class VariableMoveTypeMultiplierAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { return false; @@ -2357,7 +2497,7 @@ export class WaterSuperEffectTypeMultiplierAttr extends VariableMoveTypeMultipli export class FlyingTypeMultiplierAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const multiplier = args[0] as Utils.NumberHolder; - multiplier.value *= target.getAttackTypeEffectiveness(Type.FLYING); + multiplier.value *= target.getAttackTypeEffectiveness(Type.FLYING, user); return true; } } @@ -2602,26 +2742,19 @@ export class AddBattlerTagAttr extends MoveEffectAttr { export class CurseAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move:Move, args: any[]): boolean { - // Determine the correct target based on the user's type - if (!user.getTypes(true).includes(Type.GHOST)) { - // For non-Ghost types, target the user itself - target = user; - } - if (user.getTypes(true).includes(Type.GHOST)) { if (target.getTag(BattlerTagType.CURSED)) { user.scene.queueMessage('But it failed!'); return false; } - let curseRecoilDamage = Math.floor(user.getMaxHp() / 2); + let curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2)); user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true); user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand laid a curse on the ${target.name}!`)); target.addTag(BattlerTagType.CURSED, 0, move.id, user.id); return true; } else { - target = user; - user.scene.unshiftPhase(new StatChangePhase(user.scene, user.getBattlerIndex(), this.selfTarget, [BattleStat.ATK, BattleStat.DEF], 1)); - user.scene.unshiftPhase(new StatChangePhase(user.scene, user.getBattlerIndex(), this.selfTarget, [BattleStat.SPD], -1)); + user.scene.unshiftPhase(new StatChangePhase(user.scene, user.getBattlerIndex(), true, [BattleStat.ATK, BattleStat.DEF], 1)); + user.scene.unshiftPhase(new StatChangePhase(user.scene, user.getBattlerIndex(), true, [BattleStat.SPD], -1)); return true; } } @@ -2786,7 +2919,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { public tagType: ArenaTagType; public turnCount: integer; private failOnOverlap: boolean; - private selfSideTarget: boolean; + public selfSideTarget: boolean; constructor(tagType: ArenaTagType, turnCount?: integer, failOnOverlap: boolean = false, selfSideTarget: boolean = false) { super(true, MoveEffectTrigger.POST_APPLY, true); @@ -2819,14 +2952,51 @@ export class AddArenaTagAttr extends MoveEffectAttr { export class AddArenaTrapTagAttr extends AddArenaTagAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - if (move.category !== MoveCategory.STATUS || !user.scene.arena.getTag(this.tagType)) + const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + if (move.category !== MoveCategory.STATUS || !user.scene.arena.getTagOnSide(this.tagType, side)) return true; - const tag = user.scene.arena.getTag(this.tagType) as ArenaTrapTag; + const tag = user.scene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; return tag.layers < tag.maxLayers; }; } } +export class RemoveArenaTrapAttr extends MoveEffectAttr { + + private targetBothSides: boolean; + + constructor(targetBothSides: boolean = false) { + super(true, MoveEffectTrigger.PRE_APPLY); + this.targetBothSides = targetBothSides; + } + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + + if (!super.apply(user, target, move, args)) + return false; + + if(this.targetBothSides){ + user.scene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER); + user.scene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.PLAYER); + user.scene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER); + user.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER); + + user.scene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY); + user.scene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY); + user.scene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.ENEMY); + user.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.ENEMY); + } + else { + user.scene.arena.removeTagOnSide(ArenaTagType.SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + user.scene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + user.scene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + user.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + } + + return true; + } +} + export class RemoveScreensAttr extends MoveEffectAttr { private targetBothSides: boolean; @@ -2873,16 +3043,14 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { - if (!this.user && target.isMax()) - return resolve(false); - + // Check if the move category is not STATUS or if the switch out condition is not met - if (move.category !== MoveCategory.STATUS && !this.getSwitchOutCondition()(user, target, move)) { + if (!this.getSwitchOutCondition()(user, target, move)) { //Apply effects before switch out i.e. poison point, flame body, etc applyPostDefendAbAttrs(PostDefendContactApplyStatusEffectAbAttr, target, user, new PokemonMove(move.id), null); return resolve(false); } - + // Move the switch out logic inside the conditional block // This ensures that the switch out only happens when the conditions are met const switchOutTarget = this.user ? user : target; @@ -2929,15 +3097,24 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { resolve(true); }); } - + getCondition(): MoveConditionFunc { - return (user, target, move) => move.category !== MoveCategory.STATUS || this.getSwitchOutCondition()(user, target, move); + return (user, target, move) => (move.category !== MoveCategory.STATUS || this.getSwitchOutCondition()(user, target, move)); + } + + getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { + const blockedByAbility = new Utils.BooleanHolder(false); + applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); + return blockedByAbility.value ? getPokemonMessage(target, ` can't be switched out!`) : null; } getSwitchOutCondition(): MoveConditionFunc { return (user, target, move) => { const switchOutTarget = (this.user ? user : target); const player = switchOutTarget instanceof PlayerPokemon; + + if (!this.user && move.category == MoveCategory.STATUS && (target.hasAbilityWithAttr(ForceSwitchOutImmunityAbAttr) || target.isMax())) + return false; if (!player && !user.scene.currentBattle.battleType) { if (this.batonPass) @@ -3594,6 +3771,23 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { } } +export class SuppressAbilitiesAttr extends MoveEffectAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (!super.apply(user, target, move, args)) + return false; + + target.summonData.abilitySuppressed = true; + + target.scene.queueMessage(getPokemonMessage(target, ` ability\nwas suppressed!`)); + + return true; + } + + getCondition(): MoveConditionFunc { + return (user, target, move) => !target.getAbility().hasAttr(UnsuppressableAbilityAbAttr); + } +} + export class TransformAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { @@ -3645,6 +3839,36 @@ export class MoneyAttr extends MoveEffectAttr { } } +export class LastResortAttr extends MoveAttr { + getCondition(): MoveConditionFunc { + return (user: Pokemon, target: Pokemon, move: Move) => { + const uniqueUsedMoveIds = new Set(); + const movesetMoveIds = user.getMoveset().map(m => m.moveId); + user.getMoveHistory().map(m => { + if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move)) + uniqueUsedMoveIds.add(m.move); + }); + return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1; + }; + } +} + +export class VariableTargetAttr extends MoveAttr { + private targetChangeFunc: (user: Pokemon, target: Pokemon, move: Move) => number; + + constructor(targetChange: (user: Pokemon, target: Pokemon, move: Move) => number) { + super(); + + this.targetChangeFunc = targetChange; + } + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const targetVal = args[0] as Utils.NumberHolder; + targetVal.value = this.targetChangeFunc(user, target, move); + return true; + } +} + const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY); const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune(); @@ -3654,6 +3878,9 @@ const failOnMaxCondition: MoveConditionFunc = (user, target, move) => !target.is const failIfDampCondition: MoveConditionFunc = (user, target, move) => { const cancelled = new Utils.BooleanHolder(false); user.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); + // Queue a message if an ability prevented usage of the move + if (cancelled.value) + user.scene.queueMessage(getPokemonMessage(user, ` cannot use ${move.name}!`)); return !cancelled.value; } @@ -3706,13 +3933,29 @@ export class FirstMoveCondition extends MoveCondition { } } +export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const multiplier = args[0] as Utils.NumberHolder; + if (!user.getTypes().some(type => target.getTypes().includes(type))){ + multiplier.value = 0; + return true; + } + return false; + } +} + +const unknownTypeCondition: MoveConditionFunc = (user, target, move) => !user.getTypes().includes(Type.UNKNOWN); + export type MoveTargetSet = { targets: BattlerIndex[]; multiple: boolean; } export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet { - const moveTarget = move ? allMoves[move].moveTarget : move === undefined ? MoveTarget.NEAR_ENEMY : []; + const variableTarget = new Utils.NumberHolder(0); + user.getOpponents().forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); + + const moveTarget = allMoves[move].getAttrs(VariableTargetAttr).length ? variableTarget.value : move ? allMoves[move].moveTarget : move === undefined ? MoveTarget.NEAR_ENEMY : []; const opponents = user.getOpponents(); let set: Pokemon[] = []; @@ -4231,10 +4474,8 @@ export function initMoves() { .condition((user, target, move) => user.status?.effect === StatusEffect.SLEEP || user.hasAbility(Abilities.COMATOSE)) .soundBased(), new StatusMove(Moves.CURSE, Type.GHOST, -1, 10, -1, 0, 2) - .attr(StatChangeAttr, BattleStat.SPD, -1, true) - .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF ], 1, true) - .target(MoveTarget.USER) - .partial(), + .attr(CurseAttr) + .ignoresProtect(true), new AttackMove(Moves.FLAIL, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), new StatusMove(Moves.CONVERSION_2, Type.NORMAL, -1, 30, -1, 0, 2) @@ -4397,7 +4638,7 @@ export function initMoves() { BattlerTagType.SEEDED, BattlerTagType.INFESTATION ], true) - .partial(), + .attr(RemoveArenaTrapAttr), new StatusMove(Moves.SWEET_SCENT, Type.NORMAL, 100, 20, -1, 0, 2) .attr(StatChangeAttr, BattleStat.EVA, -1) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -4536,6 +4777,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) .condition((user, target, move) => !target.status), new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) + .attr(KnockOffPowerAttr) .partial(), new AttackMove(Moves.ENDEAVOR, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) .attr(MatchHpAttr) @@ -4641,8 +4883,7 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased(), new StatusMove(Moves.TICKLE, Type.NORMAL, 100, 20, -1, 0, 3) - .attr(StatChangeAttr, BattleStat.ATK, -1) - .attr(StatChangeAttr, BattleStat.DEF, -1), + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF ], -1), new SelfStatusMove(Moves.COSMIC_POWER, Type.PSYCHIC, -1, 20, -1, 0, 3) .attr(StatChangeAttr, [ BattleStat.DEF, BattleStat.SPDEF ], 1, true), new AttackMove(Moves.WATER_SPOUT, Type.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) @@ -4761,10 +5002,10 @@ export function initMoves() { .partial(), new StatusMove(Moves.TAILWIND, Type.FLYING, -1, 15, -1, 0, 4) .windMove() - .target(MoveTarget.USER_SIDE) - .unimplemented(), + .attr(AddArenaTagAttr, ArenaTagType.TAILWIND, 4, true) + .target(MoveTarget.USER_SIDE), new StatusMove(Moves.ACUPRESSURE, Type.NORMAL, -1, 30, -1, 0, 4) - .attr(StatChangeAttr, BattleStat.RAND, 2) + .attr(AcupressureStatChangeAttr) .target(MoveTarget.USER_OR_NEAR_ALLY), new AttackMove(Moves.METAL_BURST, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) @@ -4804,7 +5045,7 @@ export function initMoves() { new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4) .unimplemented(), new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4) - .unimplemented(), + .attr(SuppressAbilitiesAttr), new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.NO_CRIT, false, false, 5) .target(MoveTarget.USER_SIDE) @@ -4823,15 +5064,7 @@ export function initMoves() { new AttackMove(Moves.PUNISHMENT, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .unimplemented(), new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) - .condition((user, target, move) => { - const uniqueUsedMoveIds = new Set(); - const movesetMoveIds = user.getMoveset().map(m => m.moveId); - user.getMoveHistory().map(m => { - if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move)) - uniqueUsedMoveIds.add(m.move); - }); - return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1; - }), + .attr(LastResortAttr), new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4) .attr(AbilityChangeAttr, Abilities.INSOMNIA), new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) @@ -4844,6 +5077,10 @@ export function initMoves() { new SelfStatusMove(Moves.AQUA_RING, Type.WATER, -1, 20, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4) + .attr(AddBattlerTagAttr, BattlerTagType.MAGNET_RISEN, true, true) + .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && + !user.getTag(BattlerTagType.IGNORE_FLYING) && !user.getTag(BattlerTagType.INGRAIN) && + !user.getTag(BattlerTagType.MAGNET_RISEN)) .unimplemented(), new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33) @@ -4943,7 +5180,8 @@ export function initMoves() { .attr(StatChangeAttr, BattleStat.EVA, -1) .attr(ClearWeatherAttr, WeatherType.FOG) .attr(ClearTerrainAttr) - .attr(RemoveScreensAttr, true), + .attr(RemoveScreensAttr, false) + .attr(RemoveArenaTrapAttr, true), new StatusMove(Moves.TRICK_ROOM, Type.PSYCHIC, -1, 5, -1, -7, 4) .attr(AddArenaTagAttr, ArenaTagType.TRICK_ROOM, 5) .ignoresProtect() @@ -5070,6 +5308,8 @@ export function initMoves() { .unimplemented(), new AttackMove(Moves.SMACK_DOWN, Type.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 5) + .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) + .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING]) .attr(HitsTagAttr, BattlerTagType.FLYING, false) .makesContact(false), new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) @@ -5087,7 +5327,8 @@ export function initMoves() { .condition(failOnMaxCondition), new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) .target(MoveTarget.ALL_NEAR_OTHERS) - .partial(), + .condition(unknownTypeCondition) + .attr(hitsSameTypeAttr), new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) .attr(BattleStatRatioPowerAttr, Stat.SPD) .ballBombMove(), @@ -5157,7 +5398,7 @@ export function initMoves() { new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5) .unimplemented(), new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) - .partial(), + .attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().reduce((v, m) => v + m.stackCount, 0))), new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5) .attr(CopyTypeAttr), new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) @@ -5240,7 +5481,7 @@ export function initMoves() { .ballBombMove() .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.TECHNO_BLAST, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 5) - .partial(), + .attr(TechnoBlastTypeAttr), new AttackMove(Moves.RELIC_SONG, Type.NORMAL, MoveCategory.SPECIAL, 75, 100, 10, 10, 0, 5) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased() @@ -5287,7 +5528,7 @@ export function initMoves() { new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6) .unimplemented(), new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) - .partial(), + .condition((user, target, move) => user.battleData.berriesEaten.length > 0), new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, 100, 0, 6) .target(MoveTarget.ALL) .unimplemented(), @@ -5327,7 +5568,7 @@ export function initMoves() { .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), new StatusMove(Moves.PARTING_SHOT, Type.DARK, 100, 20, 100, 0, 6) - .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], -1) + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], -1, false, null, true, true, MoveEffectTrigger.PRE_APPLY) .attr(ForceSwitchOutAttr, true, false) .soundBased(), new StatusMove(Moves.TOPSY_TURVY, Type.DARK, -1, 20, -1, 0, 6) @@ -5379,7 +5620,9 @@ export function initMoves() { new AttackMove(Moves.HYPERSPACE_HOLE, Type.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6) .ignoresProtect(), new AttackMove(Moves.WATER_SHURIKEN, Type.WATER, MoveCategory.SPECIAL, 15, 100, 20, -1, 1, 6) - .attr(MultiHitAttr), + .attr(MultiHitAttr) + .attr(WaterShurikenPowerAttr) + .attr(WaterShurikenMultiHitTypeAttr), new AttackMove(Moves.MYSTICAL_FIRE, Type.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) .attr(StatChangeAttr, BattleStat.SPATK, -1), new SelfStatusMove(Moves.SPIKY_SHIELD, Type.GRASS, -1, 10, -1, 4, 6) @@ -5390,7 +5633,7 @@ export function initMoves() { new StatusMove(Moves.EERIE_IMPULSE, Type.ELECTRIC, 100, 15, -1, 0, 6) .attr(StatChangeAttr, BattleStat.SPATK, -2), new StatusMove(Moves.VENOM_DRENCH, Type.POISON, 100, 20, 100, 0, 6) - .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON) + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC) .target(MoveTarget.ALL_NEAR_ENEMIES), new StatusMove(Moves.POWDER, Type.BUG, 100, 20, -1, 1, 6) .powderMove() @@ -5432,6 +5675,8 @@ export function initMoves() { new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 6) .attr(NeutralDamageAgainstFlyingTypeMultiplierAttr) .attr(HitsTagAttr, BattlerTagType.FLYING, false) + .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) + .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING]) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.THOUSAND_WAVES, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) @@ -5609,7 +5854,7 @@ export function initMoves() { .unimplemented(), new AttackMove(Moves.REVELATION_DANCE, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .danceMove() - .partial(), + .attr(MatchUserTypeAttr), new AttackMove(Moves.CORE_ENFORCER, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7) .target(MoveTarget.ALL_NEAR_ENEMIES) .partial(), @@ -5681,8 +5926,7 @@ export function initMoves() { .ignoresAbilities() .partial(), new StatusMove(Moves.TEARFUL_LOOK, Type.NORMAL, -1, 20, 100, 0, 7) - .attr(StatChangeAttr, BattleStat.ATK, -1) - .attr(StatChangeAttr, BattleStat.SPATK, -1), + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], -1), new AttackMove(Moves.ZING_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) .attr(FlinchAttr), new AttackMove(Moves.NATURES_MADNESS, Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) @@ -5733,7 +5977,7 @@ export function initMoves() { new AttackMove(Moves.PIKA_PAPOW, Type.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), new AttackMove(Moves.BOUNCY_BUBBLE, Type.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) - .attr(HitHealAttr) + .attr(HitHealAttr, 1.0) .triageMove(), new AttackMove(Moves.BUZZY_BUZZ, Type.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), @@ -5861,8 +6105,7 @@ export function initMoves() { new AttackMove(Moves.BODY_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) .attr(DefAtkAttr), new StatusMove(Moves.DECORATE, Type.FAIRY, -1, 15, 100, 0, 8) - .attr(StatChangeAttr, BattleStat.ATK, 2) - .attr(StatChangeAttr, BattleStat.SPATK, 2), + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 2), new AttackMove(Moves.DRUM_BEATING, Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) .attr(StatChangeAttr, BattleStat.SPD, -1) .makesContact(false), @@ -5912,7 +6155,8 @@ export function initMoves() { new AttackMove(Moves.STEEL_BEAM, Type.STEEL, MoveCategory.SPECIAL, 140, 95, 5, -1, 0, 8) .attr(HalfSacrificialAttr), new AttackMove(Moves.EXPANDING_FORCE, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) - .partial(), + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 1.5 : 1) + .attr(VariableTargetAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 6 : 3), new AttackMove(Moves.STEEL_ROLLER, Type.STEEL, MoveCategory.PHYSICAL, 130, 100, 5, -1, 0, 8) .attr(ClearTerrainAttr) .condition((user, target, move) => !!user.scene.arena.terrain), @@ -5996,7 +6240,8 @@ export function initMoves() { new AttackMove(Moves.THUNDEROUS_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 8) .attr(StatChangeAttr, BattleStat.DEF, -1), new AttackMove(Moves.GLACIAL_LANCE, Type.ICE, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .makesContact(false), new AttackMove(Moves.ASTRAL_BARRAGE, Type.GHOST, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.EERIE_SPELL, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 5, 100, 0, 8) @@ -6076,7 +6321,7 @@ export function initMoves() { .partial(), new SelfStatusMove(Moves.TAKE_HEART, Type.PSYCHIC, -1, 10, -1, 0, 8) .attr(StatChangeAttr, [ BattleStat.SPATK, BattleStat.SPDEF ], 1, true) - .partial(), + .attr(HealStatusEffectAttr, true, StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN, StatusEffect.SLEEP), /* Unused new AttackMove(Moves.G_MAX_WILDFIRE, Type.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) @@ -6236,6 +6481,7 @@ export function initMoves() { BattlerTagType.INFESTATION ], true) .attr(StatusEffectAttr, StatusEffect.POISON) + .attr(RemoveArenaTrapAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), new StatusMove(Moves.DOODLE, Type.NORMAL, 100, 10, -1, 0, 9) .attr(AbilityCopyAttr, true), @@ -6267,9 +6513,9 @@ export function initMoves() { new AttackMove(Moves.RUINATION, Type.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) .attr(TargetHalfHpDamageAttr), new AttackMove(Moves.COLLISION_COURSE, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) - .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type) >= 2 ? 5461/4096 : 1), + .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461/4096 : 1), new AttackMove(Moves.ELECTRO_DRIFT, Type.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 9) - .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type) >= 2 ? 5461/4096 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461/4096 : 1) .makesContact(), new SelfStatusMove(Moves.SHED_TAIL, Type.NORMAL, -1, 10, -1, 0, 9) .unimplemented(), @@ -6279,7 +6525,7 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES), new SelfStatusMove(Moves.TIDY_UP, Type.NORMAL, -1, 10, 100, 0, 9) .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPD ], 1, true) - .partial(), + .attr(RemoveArenaTrapAttr), new StatusMove(Moves.SNOWSCAPE, Type.ICE, -1, 10, -1, 0, 9) .attr(WeatherChangeAttr, WeatherType.SNOW) .target(MoveTarget.BOTH_SIDES), @@ -6318,8 +6564,7 @@ export function initMoves() { }), // TODO Add Instruct/Encore interaction new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, 0, 9) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) - .target(MoveTarget.ATTACKER) - .partial(), + .target(MoveTarget.ATTACKER), new AttackMove(Moves.AQUA_CUTTER, Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9) .attr(HighCritAttr) .slicingMove() @@ -6373,6 +6618,7 @@ export function initMoves() { new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) .condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()].command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()].move.move].category !== MoveCategory.STATUS), new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) + .slicingMove() .ignoresProtect(), new AttackMove(Moves.TACHYON_CUTTER, Type.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 87094af20..9a38ed81e 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -82,7 +82,11 @@ export enum FormChangeItem { SHADOW_REINS_OF_UNITY, WELLSPRING_MASK, HEARTHFLAME_MASK, - CORNERSTONE_MASK + CORNERSTONE_MASK, + SHOCK_DRIVE, + BURN_DRIVE, + CHILL_DRIVE, + DOUSE_DRIVE } export type SpeciesFormChangeConditionPredicate = (p: Pokemon) => boolean; @@ -542,6 +546,12 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangePostMoveTrigger(Moves.RELIC_SONG), true), new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangeActiveTrigger(false), true) ], + [Species.GENESECT]: [ + new SpeciesFormChange(Species.GENESECT, '', 'shock', new SpeciesFormChangeItemTrigger(FormChangeItem.SHOCK_DRIVE)), + new SpeciesFormChange(Species.GENESECT, '', 'burn', new SpeciesFormChangeItemTrigger(FormChangeItem.BURN_DRIVE)), + new SpeciesFormChange(Species.GENESECT, '', 'chill', new SpeciesFormChangeItemTrigger(FormChangeItem.CHILL_DRIVE)), + new SpeciesFormChange(Species.GENESECT, '', 'douse', new SpeciesFormChangeItemTrigger(FormChangeItem.DOUSE_DRIVE)) + ], [Species.GRENINJA]: [ new SpeciesFormChange(Species.GRENINJA, 'battle-bond', 'ash', new SpeciesFormChangeManualTrigger(), true), new SpeciesFormChange(Species.GRENINJA, 'ash', 'battle-bond', new SpeciesFormChangeManualTrigger(), true) diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 0b545d1bd..79530d985 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -30,7 +30,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 24, Moves.SWEET_SCENT ], [ 27, Moves.SYNTHESIS ], [ 30, Moves.WORRY_SEED ], - [ 33, Moves.DOUBLE_EDGE ], + [ 33, Moves.POWER_WHIP ], [ 36, Moves.SOLAR_BEAM ], ], [Species.IVYSAUR]: [ @@ -47,16 +47,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 30, Moves.SWEET_SCENT ], [ 35, Moves.SYNTHESIS ], [ 40, Moves.WORRY_SEED ], - [ 45, Moves.DOUBLE_EDGE ], + [ 45, Moves.POWER_WHIP ], [ 50, Moves.SOLAR_BEAM ], ], [Species.VENUSAUR]: [ [ 0, Moves.PETAL_BLIZZARD ], + [ 1, Moves.GROWTH ], + [ 1, Moves.PETAL_DANCE ], [ 1, Moves.VINE_WHIP ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], - [ 1, Moves.GROWTH ], - [ 1, Moves.PETAL_DANCE ], [ 9, Moves.LEECH_SEED ], [ 12, Moves.RAZOR_LEAF ], [ 15, Moves.POISON_POWDER ], @@ -66,7 +66,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 30, Moves.SWEET_SCENT ], [ 37, Moves.SYNTHESIS ], [ 44, Moves.WORRY_SEED ], - [ 51, Moves.DOUBLE_EDGE ], + [ 51, Moves.POWER_WHIP ], [ 58, Moves.SOLAR_BEAM ], ], [Species.CHARMANDER]: [ @@ -127,7 +127,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 27, Moves.SHELL_SMASH ], [ 30, Moves.IRON_DEFENSE ], [ 33, Moves.HYDRO_PUMP ], - [ 36, Moves.SKULL_BASH ], + [ 36, Moves.WAVE_CRASH ], ], [Species.WARTORTLE]: [ [ 1, Moves.TACKLE ], @@ -143,7 +143,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 35, Moves.SHELL_SMASH ], [ 40, Moves.IRON_DEFENSE ], [ 45, Moves.HYDRO_PUMP ], - [ 50, Moves.SKULL_BASH ], + [ 50, Moves.WAVE_CRASH ], ], [Species.BLASTOISE]: [ [ 0, Moves.FLASH_CANNON ], @@ -160,7 +160,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 35, Moves.SHELL_SMASH ], [ 42, Moves.IRON_DEFENSE ], [ 49, Moves.HYDRO_PUMP ], - [ 56, Moves.SKULL_BASH ], + [ 56, Moves.WAVE_CRASH ], ], [Species.CATERPIE]: [ [ 1, Moves.TACKLE ], @@ -341,9 +341,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 12, Moves.GLARE ], [ 17, Moves.SCREECH ], [ 20, Moves.ACID ], + [ 25, Moves.SWALLOW ], [ 25, Moves.STOCKPILE ], [ 25, Moves.SPIT_UP ], - [ 25, Moves.SWALLOW ], [ 28, Moves.ACID_SPRAY ], [ 33, Moves.SLUDGE_BOMB ], [ 36, Moves.GASTRO_ACID ], @@ -1780,14 +1780,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 4, Moves.DOUBLE_KICK ], [ 8, Moves.LOW_KICK ], [ 12, Moves.ENDURE ], - [ 16, Moves.REVENGE ], + [ 16, Moves.SUCKER_PUNCH ], [ 21, Moves.WIDE_GUARD ], [ 24, Moves.BLAZE_KICK ], - [ 28, Moves.MIND_READER ], + [ 28, Moves.FEINT ], [ 32, Moves.MEGA_KICK ], [ 36, Moves.CLOSE_COMBAT ], [ 40, Moves.REVERSAL ], [ 44, Moves.HIGH_JUMP_KICK ], + [ 50, Moves.AXE_KICK ], ], [Species.HITMONCHAN]: [ [ 0, Moves.DRAIN_PUNCH ], @@ -1796,16 +1797,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FAKE_OUT ], [ 1, Moves.HELPING_HAND ], [ 1, Moves.FEINT ], - [ 1, Moves.VACUUM_WAVE ], - [ 1, Moves.BULLET_PUNCH ], [ 4, Moves.MACH_PUNCH ], - [ 8, Moves.POWER_UP_PUNCH ], + [ 8, Moves.VACUUM_WAVE ], [ 12, Moves.DETECT ], - [ 16, Moves.REVENGE ], + [ 16, Moves.BULLET_PUNCH ], [ 21, Moves.QUICK_GUARD ], - [ 24, Moves.FIRE_PUNCH ], - [ 24, Moves.ICE_PUNCH ], [ 24, Moves.THUNDER_PUNCH ], + [ 24, Moves.ICE_PUNCH ], + [ 24, Moves.FIRE_PUNCH ], [ 28, Moves.AGILITY ], [ 32, Moves.MEGA_PUNCH ], [ 36, Moves.CLOSE_COMBAT ], @@ -2598,7 +2597,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 31, Moves.LIGHT_SCREEN ], [ 34, Moves.BODY_SLAM ], [ 39, Moves.SAFEGUARD ], - [ 42, Moves.AROMATHERAPY ], + [ 42, Moves.GIGA_DRAIN ], [ 45, Moves.SOLAR_BEAM ], ], [Species.BAYLEEF]: [ @@ -2614,7 +2613,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.LIGHT_SCREEN ], [ 40, Moves.BODY_SLAM ], [ 46, Moves.SAFEGUARD ], - [ 50, Moves.AROMATHERAPY ], + [ 50, Moves.GIGA_DRAIN ], [ 54, Moves.SOLAR_BEAM ], ], [Species.MEGANIUM]: [ @@ -2632,7 +2631,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.LIGHT_SCREEN ], [ 46, Moves.BODY_SLAM ], [ 54, Moves.SAFEGUARD ], - [ 60, Moves.AROMATHERAPY ], + [ 60, Moves.GIGA_DRAIN ], [ 65, Moves.SOLAR_BEAM ], ], [Species.CYNDAQUIL]: [ @@ -2796,6 +2795,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ECHOED_VOICE ], [ 9, Moves.CONFUSION ], [ 12, Moves.REFLECT ], + [ 15, Moves.DEFOG ], [ 18, Moves.AIR_SLASH ], [ 23, Moves.EXTRASENSORY ], [ 28, Moves.TAKE_DOWN ], @@ -3574,7 +3574,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 13, Moves.LICK ], [ 19, Moves.HEADBUTT ], [ 25, Moves.ROAR ], - [ 31, Moves.RAGE ], + [ 31, Moves.LAST_RESORT ], [ 37, Moves.PLAY_ROUGH ], [ 43, Moves.PAYBACK ], [ 49, Moves.CRUNCH ], @@ -3592,7 +3592,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 13, Moves.LICK ], [ 19, Moves.HEADBUTT ], [ 27, Moves.ROAR ], - [ 35, Moves.RAGE ], + [ 35, Moves.LAST_RESORT ], [ 43, Moves.PLAY_ROUGH ], [ 51, Moves.PAYBACK ], [ 59, Moves.CRUNCH ], @@ -3868,7 +3868,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.WING_ATTACK ], [ 24, Moves.SLASH ], [ 28, Moves.STEEL_WING ], - [ 32, Moves.AUTOTOMIZE ], + [ 32, Moves.PAYBACK ], [ 36, Moves.DRILL_PECK ], [ 40, Moves.METAL_SOUND ], [ 44, Moves.SPIKES ], @@ -3923,11 +3923,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.DRAGON_BREATH ], [ 25, Moves.BUBBLE_BEAM ], [ 30, Moves.AGILITY ], - [ 37, Moves.LASER_FOCUS ], + [ 37, Moves.WATER_PULSE ], [ 44, Moves.DRAGON_PULSE ], [ 51, Moves.HYDRO_PUMP ], [ 58, Moves.DRAGON_DANCE ], [ 65, Moves.RAIN_DANCE ], + [ 72, Moves.WAVE_CRASH ], ], [Species.PHANPY]: [ [ 1, Moves.TACKLE ], @@ -3974,10 +3975,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 35, Moves.RECOVER ], [ 40, Moves.DISCHARGE ], [ 45, Moves.TRI_ATTACK ], - [ 50, Moves.MAGIC_COAT ], - [ 55, Moves.LOCK_ON ], - [ 60, Moves.ZAP_CANNON ], - [ 65, Moves.HYPER_BEAM ], + [ 50, Moves.LOCK_ON ], + [ 55, Moves.ZAP_CANNON ], + [ 60, Moves.HYPER_BEAM ], ], [Species.STANTLER]: [ [ 1, Moves.TACKLE ], @@ -4268,7 +4268,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 72, Moves.FIRE_BLAST ], [ 81, Moves.FUTURE_SIGHT ], [ 90, Moves.SKY_ATTACK ], - [ 99, Moves.BURN_UP ], + [ 99, Moves.OVERHEAT ], ], [Species.CELEBI]: [ [ 1, Moves.CONFUSION ], @@ -4383,15 +4383,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.FLARE_BLITZ ], ], [Species.BLAZIKEN]: [ - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.SCRATCH ], + [ 0, Moves.BLAZE_KICK ], [ 1, Moves.DOUBLE_KICK ], + [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], + [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.FIRE_PUNCH ], [ 1, Moves.EMBER ], [ 1, Moves.FLAMETHROWER ], - [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.FEATHER_DANCE ], - [ 1, Moves.BRAVE_BIRD ], [ 9, Moves.FLAME_CHARGE ], [ 12, Moves.DETECT ], [ 15, Moves.SAND_ATTACK ], @@ -4660,15 +4660,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.NUZLEAF]: [ [ 0, Moves.RAZOR_LEAF ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.TORMENT ], - [ 1, Moves.ASTONISH ], [ 1, Moves.AIR_CUTTER ], + [ 1, Moves.TORMENT ], + [ 1, Moves.FAKE_OUT ], + [ 1, Moves.SWAGGER ], + [ 1, Moves.EXPLOSION ], + [ 1, Moves.TACKLE ], + [ 1, Moves.HARDEN ], + [ 1, Moves.ABSORB ], + [ 1, Moves.ASTONISH ], [ 9, Moves.GROWTH ], [ 12, Moves.ROLLOUT ], [ 18, Moves.MEGA_DRAIN ], @@ -4704,8 +4704,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SUCKER_PUNCH ], ], [Species.TAILLOW]: [ - [ 1, Moves.GROWL ], [ 1, Moves.PECK ], + [ 1, Moves.GROWL ], [ 5, Moves.FOCUS_ENERGY ], [ 9, Moves.QUICK_ATTACK ], [ 13, Moves.WING_ATTACK ], @@ -4719,13 +4719,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.REVERSAL ], ], [Species.SWELLOW]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.PLUCK ], - [ 1, Moves.AIR_SLASH ], [ 1, Moves.BRAVE_BIRD ], + [ 1, Moves.AIR_SLASH ], + [ 1, Moves.PLUCK ], + [ 1, Moves.PECK ], + [ 1, Moves.GROWL ], + [ 1, Moves.FOCUS_ENERGY ], + [ 1, Moves.QUICK_ATTACK ], [ 13, Moves.WING_ATTACK ], [ 17, Moves.DOUBLE_TEAM ], [ 21, Moves.AERIAL_ACE ], @@ -4749,15 +4749,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.HURRICANE ], ], [Species.PELIPPER]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.PROTECT ], - [ 1, Moves.TAILWIND ], - [ 1, Moves.AIR_SLASH ], [ 1, Moves.SOAK ], + [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.AGILITY ], + [ 1, Moves.AIR_SLASH ], + [ 1, Moves.GROWL ], + [ 1, Moves.WATER_GUN ], + [ 1, Moves.TAILWIND ], + [ 1, Moves.SUPERSONIC ], [ 15, Moves.WING_ATTACK ], [ 20, Moves.WATER_PULSE ], [ 28, Moves.STOCKPILE ], @@ -4788,9 +4788,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.KIRLIA]: [ [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.DISARMING_VOICE ], + [ 1, Moves.DOUBLE_TEAM ], + [ 1, Moves.CONFUSION ], [ 9, Moves.HYPNOSIS ], [ 12, Moves.DRAINING_KISS ], [ 15, Moves.TELEPORT ], @@ -4805,15 +4805,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.GARDEVOIR]: [ [ 0, Moves.DAZZLING_GLEAM ], - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.CHARM ], - [ 1, Moves.HEALING_WISH ], - [ 1, Moves.HEAL_PULSE ], - [ 1, Moves.DISARMING_VOICE ], [ 1, Moves.MISTY_TERRAIN ], + [ 1, Moves.HEALING_WISH ], + [ 1, Moves.CHARM ], [ 1, Moves.MYSTICAL_FIRE ], + [ 1, Moves.HEAL_PULSE ], + [ 1, Moves.GROWL ], + [ 1, Moves.DISARMING_VOICE ], + [ 1, Moves.DOUBLE_TEAM ], + [ 1, Moves.CONFUSION ], [ 9, Moves.HYPNOSIS ], [ 12, Moves.DRAINING_KISS ], [ 15, Moves.TELEPORT ], @@ -4854,8 +4854,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.QUIVER_DANCE ], ], [Species.SHROOMISH]: [ - [ 1, Moves.TACKLE ], [ 1, Moves.ABSORB ], + [ 1, Moves.TACKLE ], [ 5, Moves.STUN_SPORE ], [ 8, Moves.LEECH_SEED ], [ 12, Moves.MEGA_DRAIN ], @@ -4869,13 +4869,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BRELOOM]: [ [ 0, Moves.MACH_PUNCH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], + [ 1, Moves.GROWTH ], [ 1, Moves.TOXIC ], + [ 1, Moves.ABSORB ], + [ 1, Moves.TACKLE ], + [ 1, Moves.STUN_SPORE ], + [ 1, Moves.LEECH_SEED ], [ 12, Moves.MEGA_DRAIN ], [ 15, Moves.HEADBUTT ], [ 19, Moves.FEINT ], @@ -4915,11 +4915,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SLAKING]: [ [ 0, Moves.SWAGGER ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.ENCORE ], - [ 1, Moves.YAWN ], - [ 1, Moves.SLACK_OFF ], [ 1, Moves.SUCKER_PUNCH ], + [ 1, Moves.SCRATCH ], + [ 1, Moves.YAWN ], + [ 1, Moves.ENCORE ], + [ 1, Moves.SLACK_OFF ], [ 17, Moves.AMNESIA ], [ 23, Moves.COVET ], [ 27, Moves.THROAT_CHOP ], @@ -4942,18 +4942,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.DIG ], ], [Species.NINJASK]: [ - [ 0, Moves.SCREECH ], [ 0, Moves.DOUBLE_TEAM ], + [ 0, Moves.SCREECH ], [ 0, Moves.FURY_CUTTER ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.DIG ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.FALSE_SWIPE ], [ 1, Moves.BATON_PASS ], - [ 1, Moves.METAL_CLAW ], [ 1, Moves.AERIAL_ACE ], + [ 1, Moves.MUD_SLAP ], + [ 1, Moves.METAL_CLAW ], + [ 1, Moves.DIG ], + [ 1, Moves.SAND_ATTACK ], + [ 1, Moves.SCRATCH ], + [ 1, Moves.HARDEN ], + [ 1, Moves.FALSE_SWIPE ], [ 15, Moves.AGILITY ], [ 23, Moves.ABSORB ], [ 29, Moves.BUG_BITE ], @@ -4964,28 +4964,27 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.X_SCISSOR ], ], [Species.SHEDINJA]: [ + [ 1, Moves.SHADOW_CLAW ], + [ 1, Moves.GRUDGE ], + [ 1, Moves.MUD_SLAP ], + [ 1, Moves.METAL_CLAW ], + [ 1, Moves.DIG ], [ 1, Moves.SCRATCH ], [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.DIG ], [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.GRUDGE ], - [ 1, Moves.SHADOW_CLAW ], [ 15, Moves.CONFUSE_RAY ], [ 23, Moves.ABSORB ], [ 29, Moves.SHADOW_SNEAK ], [ 36, Moves.FURY_SWIPES ], - [ 41, Moves.HEAL_BLOCK ], [ 43, Moves.MIND_READER ], [ 50, Moves.SHADOW_BALL ], [ 57, Moves.SPITE ], [ 64, Moves.PHANTOM_FORCE ], ], [Species.WHISMUR]: [ - [ 1, Moves.POUND ], [ 1, Moves.ASTONISH ], + [ 1, Moves.POUND ], [ 5, Moves.ECHOED_VOICE ], [ 10, Moves.HOWL ], [ 15, Moves.REST ], @@ -4999,10 +4998,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.LOUDRED]: [ [ 0, Moves.BITE ], - [ 1, Moves.POUND ], [ 1, Moves.ASTONISH ], - [ 1, Moves.HOWL ], + [ 1, Moves.POUND ], [ 1, Moves.ECHOED_VOICE ], + [ 1, Moves.HOWL ], [ 15, Moves.REST ], [ 15, Moves.SLEEP_TALK ], [ 23, Moves.STOMP ], @@ -5014,14 +5013,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.EXPLOUD]: [ [ 0, Moves.CRUNCH ], - [ 1, Moves.POUND ], [ 1, Moves.BITE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HOWL ], - [ 1, Moves.THUNDER_FANG ], [ 1, Moves.ICE_FANG ], [ 1, Moves.FIRE_FANG ], + [ 1, Moves.THUNDER_FANG ], + [ 1, Moves.ASTONISH ], + [ 1, Moves.POUND ], [ 1, Moves.ECHOED_VOICE ], + [ 1, Moves.HOWL ], [ 15, Moves.REST ], [ 15, Moves.SLEEP_TALK ], [ 23, Moves.STOMP ], @@ -5053,11 +5052,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.HEAVY_SLAM ], ], [Species.HARIYAMA]: [ - [ 1, Moves.SAND_ATTACK ], + [ 1, Moves.BRINE ], [ 1, Moves.TACKLE ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.ARM_THRUST ], - [ 1, Moves.BRINE ], [ 10, Moves.FAKE_OUT ], [ 13, Moves.FORCE_PALM ], [ 16, Moves.WHIRLWIND ], @@ -5074,9 +5072,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.HEADLONG_RUSH ], ], [Species.AZURILL]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], [ 1, Moves.SPLASH ], + [ 1, Moves.WATER_GUN ], + [ 1, Moves.TAIL_WHIP ], [ 3, Moves.HELPING_HAND ], [ 6, Moves.BUBBLE_BEAM ], [ 9, Moves.CHARM ], @@ -5098,13 +5096,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 34, Moves.SANDSTORM ], [ 37, Moves.EARTH_POWER ], [ 40, Moves.STONE_EDGE ], - [ 43, Moves.ZAP_CANNON ], [ 43, Moves.LOCK_ON ], + [ 43, Moves.ZAP_CANNON ], ], [Species.SKITTY]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], [ 1, Moves.FAKE_OUT ], + [ 1, Moves.GROWL ], + [ 1, Moves.TAIL_WHIP ], [ 4, Moves.TACKLE ], [ 7, Moves.SING ], [ 10, Moves.ATTRACT ], @@ -5140,8 +5138,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.PLAY_ROUGH ], ], [Species.SABLEYE]: [ - [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], + [ 1, Moves.SCRATCH ], [ 3, Moves.ASTONISH ], [ 9, Moves.SHADOW_SNEAK ], [ 12, Moves.FAKE_OUT ], @@ -5159,8 +5157,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FOUL_PLAY ], ], [Species.MAWILE]: [ - [ 1, Moves.GROWL ], [ 1, Moves.ASTONISH ], + [ 1, Moves.GROWL ], [ 4, Moves.FAIRY_WIND ], [ 8, Moves.BATON_PASS ], [ 12, Moves.BITE ], @@ -5288,11 +5286,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.THUNDER ], ], [Species.MANECTRIC]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.HOWL ], [ 1, Moves.FIRE_FANG ], + [ 1, Moves.TACKLE ], + [ 1, Moves.THUNDER_WAVE ], + [ 1, Moves.LEER ], + [ 1, Moves.HOWL ], [ 12, Moves.QUICK_ATTACK ], [ 16, Moves.SHOCK_WAVE ], [ 20, Moves.BITE ], @@ -5305,10 +5303,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.ELECTRIC_TERRAIN ], ], [Species.PLUSLE]: [ + [ 1, Moves.PLAY_NICE ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.PLAY_NICE ], [ 1, Moves.NUZZLE ], [ 4, Moves.HELPING_HAND ], [ 7, Moves.SPARK ], @@ -5317,8 +5315,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 16, Moves.SWIFT ], [ 19, Moves.ELECTRO_BALL ], [ 22, Moves.COPYCAT ], - [ 25, Moves.CHARM ], - [ 28, Moves.CHARGE ], + [ 26, Moves.CHARGE ], [ 31, Moves.DISCHARGE ], [ 34, Moves.BATON_PASS ], [ 37, Moves.AGILITY ], @@ -5328,10 +5325,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.ENTRAINMENT ], ], [Species.MINUN]: [ + [ 1, Moves.PLAY_NICE ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.PLAY_NICE ], [ 1, Moves.NUZZLE ], [ 4, Moves.HELPING_HAND ], [ 7, Moves.SPARK ], @@ -5340,8 +5337,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 16, Moves.SWIFT ], [ 19, Moves.ELECTRO_BALL ], [ 22, Moves.COPYCAT ], - [ 25, Moves.FAKE_TEARS ], - [ 28, Moves.CHARGE ], + [ 26, Moves.CHARGE ], [ 31, Moves.DISCHARGE ], [ 34, Moves.BATON_PASS ], [ 37, Moves.AGILITY ], @@ -5422,11 +5418,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SWALOT]: [ [ 0, Moves.BODY_SLAM ], - [ 1, Moves.POUND ], - [ 1, Moves.SLUDGE ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.YAWN ], [ 1, Moves.GUNK_SHOT ], + [ 1, Moves.POUND ], + [ 1, Moves.YAWN ], + [ 1, Moves.POISON_GAS ], + [ 1, Moves.SLUDGE ], [ 12, Moves.AMNESIA ], [ 17, Moves.ACID_SPRAY ], [ 20, Moves.ENCORE ], @@ -5439,8 +5435,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.BELCH ], ], [Species.CARVANHA]: [ - [ 1, Moves.LEER ], [ 1, Moves.AQUA_JET ], + [ 1, Moves.LEER ], [ 4, Moves.POISON_FANG ], [ 8, Moves.FOCUS_ENERGY ], [ 12, Moves.SCARY_FACE ], @@ -5455,11 +5451,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SHARPEDO]: [ [ 0, Moves.SLASH ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.POISON_FANG ], [ 1, Moves.NIGHT_SLASH ], [ 1, Moves.AQUA_JET ], + [ 1, Moves.LEER ], + [ 1, Moves.POISON_FANG ], + [ 1, Moves.FOCUS_ENERGY ], [ 12, Moves.SCARY_FACE ], [ 16, Moves.BITE ], [ 20, Moves.ICE_FANG ], @@ -5489,12 +5485,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.WATER_SPOUT ], ], [Species.WAILORD]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 1, Moves.ASTONISH ], [ 1, Moves.SOAK ], [ 1, Moves.NOBLE_ROAR ], + [ 1, Moves.SPLASH ], + [ 1, Moves.GROWL ], + [ 1, Moves.ASTONISH ], + [ 1, Moves.WATER_GUN ], [ 15, Moves.MIST ], [ 18, Moves.WATER_PULSE ], [ 21, Moves.HEAVY_SLAM ], @@ -5509,8 +5505,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.WATER_SPOUT ], ], [Species.NUMEL]: [ - [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], + [ 1, Moves.TACKLE ], [ 5, Moves.EMBER ], [ 8, Moves.FOCUS_ENERGY ], [ 12, Moves.BULLDOZE ], @@ -5526,12 +5522,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CAMERUPT]: [ [ 0, Moves.ROCK_SLIDE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], [ 1, Moves.FISSURE ], - [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.ERUPTION ], + [ 1, Moves.GROWL ], + [ 1, Moves.TACKLE ], + [ 1, Moves.EMBER ], + [ 1, Moves.FOCUS_ENERGY ], [ 12, Moves.BULLDOZE ], [ 15, Moves.INCINERATE ], [ 19, Moves.AMNESIA ], @@ -5543,8 +5539,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.EARTHQUAKE ], ], [Species.TORKOAL]: [ - [ 1, Moves.EMBER ], [ 1, Moves.SMOG ], + [ 1, Moves.EMBER ], [ 4, Moves.WITHDRAW ], [ 8, Moves.RAPID_SPIN ], [ 12, Moves.SMOKESCREEN ], @@ -5579,10 +5575,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.GRUMPIG]: [ [ 0, Moves.TEETER_DANCE ], - [ 1, Moves.PSYBEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SPLASH ], [ 1, Moves.BELCH ], + [ 1, Moves.SPLASH ], + [ 1, Moves.CONFUSION ], + [ 1, Moves.PSYBEAM ], [ 18, Moves.PSYCH_UP ], [ 22, Moves.CONFUSE_RAY ], [ 26, Moves.ZEN_HEADBUTT ], @@ -5612,7 +5608,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.TRAPINCH]: [ [ 1, Moves.SAND_ATTACK ], [ 1, Moves.ASTONISH ], - [ 4, Moves.LASER_FOCUS ], [ 8, Moves.BITE ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.SAND_TOMB ], @@ -5627,16 +5622,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.VIBRAVA]: [ [ 0, Moves.DRAGON_BREATH ], + [ 1, Moves.DIG ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.BITE ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.FISSURE ], - [ 1, Moves.DIG ], [ 1, Moves.CRUNCH ], [ 1, Moves.SUPERPOWER ], [ 1, Moves.ASTONISH ], [ 1, Moves.BULLDOZE ], - [ 1, Moves.LASER_FOCUS ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.SAND_TOMB ], [ 20, Moves.DRAGON_TAIL ], @@ -5651,19 +5645,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.FLYGON]: [ [ 0, Moves.DRAGON_CLAW ], + [ 1, Moves.DRAGON_BREATH ], + [ 1, Moves.BULLDOZE ], [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.BITE ], [ 1, Moves.SUPERSONIC ], + [ 1, Moves.BITE ], [ 1, Moves.FISSURE ], [ 1, Moves.DIG ], - [ 1, Moves.DRAGON_BREATH ], [ 1, Moves.CRUNCH ], [ 1, Moves.SUPERPOWER ], [ 1, Moves.ASTONISH ], [ 1, Moves.DRAGON_DANCE ], [ 1, Moves.FEINT ], - [ 1, Moves.BULLDOZE ], - [ 1, Moves.LASER_FOCUS ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.SAND_TOMB ], [ 20, Moves.DRAGON_TAIL ], @@ -5697,11 +5690,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CACTURNE]: [ [ 0, Moves.SPIKY_SHIELD ], + [ 1, Moves.DESTINY_BOND ], [ 1, Moves.POISON_STING ], [ 1, Moves.LEER ], [ 1, Moves.ABSORB ], [ 1, Moves.GROWTH ], - [ 1, Moves.DESTINY_BOND ], [ 10, Moves.LEECH_SEED ], [ 13, Moves.SAND_ATTACK ], [ 16, Moves.BULLET_SEED ], @@ -5716,8 +5709,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.SANDSTORM ], ], [Species.SWABLU]: [ - [ 1, Moves.GROWL ], [ 1, Moves.PECK ], + [ 1, Moves.GROWL ], [ 4, Moves.DISARMING_VOICE ], [ 8, Moves.MIST ], [ 12, Moves.FURY_ATTACK ], @@ -5732,11 +5725,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ALTARIA]: [ [ 0, Moves.DRAGON_PULSE ], - [ 1, Moves.GROWL ], - [ 1, Moves.MIST ], - [ 1, Moves.PECK ], [ 1, Moves.PLUCK ], + [ 1, Moves.PECK ], + [ 1, Moves.GROWL ], [ 1, Moves.DISARMING_VOICE ], + [ 1, Moves.MIST ], [ 12, Moves.FURY_ATTACK ], [ 16, Moves.ROUND ], [ 20, Moves.DRAGON_BREATH ], @@ -5751,6 +5744,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.ZANGOOSE]: [ [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], + [ 1, Moves.DOUBLE_KICK ], + [ 1, Moves.DISABLE ], + [ 1, Moves.COUNTER ], + [ 1, Moves.FURY_SWIPES ], + [ 1, Moves.CURSE ], + [ 1, Moves.FLAIL ], + [ 1, Moves.BELLY_DRUM ], + [ 1, Moves.FEINT ], + [ 1, Moves.NIGHT_SLASH ], + [ 1, Moves.DOUBLE_HIT ], + [ 1, Moves.QUICK_GUARD ], + [ 1, Moves.FINAL_GAMBIT ], [ 5, Moves.QUICK_ATTACK ], [ 8, Moves.FURY_CUTTER ], [ 12, Moves.METAL_CLAW ], @@ -5786,46 +5791,44 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.SLUDGE_BOMB ], ], [Species.LUNATONE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MOONLIGHT ], [ 1, Moves.MOONBLAST ], + [ 1, Moves.MOONLIGHT ], + [ 1, Moves.TACKLE ], + [ 1, Moves.HARDEN ], + [ 1, Moves.CONFUSION ], + [ 1, Moves.ROCK_THROW ], [ 5, Moves.HYPNOSIS ], [ 10, Moves.ROCK_POLISH ], [ 15, Moves.ROCK_SLIDE ], [ 20, Moves.PSYSHOCK ], [ 25, Moves.COSMIC_POWER ], [ 30, Moves.PSYCHIC ], - [ 33, Moves.HEAL_BLOCK ], [ 35, Moves.STONE_EDGE ], [ 40, Moves.FUTURE_SIGHT ], [ 45, Moves.MAGIC_ROOM ], [ 50, Moves.EXPLOSION ], ], [Species.SOLROCK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MORNING_SUN ], [ 1, Moves.FLARE_BLITZ ], + [ 1, Moves.MORNING_SUN ], + [ 1, Moves.TACKLE ], + [ 1, Moves.HARDEN ], + [ 1, Moves.CONFUSION ], + [ 1, Moves.ROCK_THROW ], [ 5, Moves.HYPNOSIS ], [ 10, Moves.ROCK_POLISH ], [ 15, Moves.ROCK_SLIDE ], [ 20, Moves.ZEN_HEADBUTT ], [ 25, Moves.COSMIC_POWER ], [ 30, Moves.PSYCHIC ], - [ 33, Moves.HEAL_BLOCK ], [ 35, Moves.STONE_EDGE ], [ 40, Moves.SOLAR_BEAM ], [ 45, Moves.WONDER_ROOM ], [ 50, Moves.EXPLOSION ], ], [Species.BARBOACH]: [ - [ 1, Moves.WATER_GUN ], [ 1, Moves.MUD_SLAP ], + [ 1, Moves.WATER_GUN ], [ 6, Moves.REST ], [ 6, Moves.SNORE ], [ 12, Moves.WATER_PULSE ], @@ -5838,13 +5841,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.WHISCASH]: [ [ 0, Moves.THRASH ], + [ 1, Moves.BELCH ], + [ 1, Moves.ZEN_HEADBUTT ], + [ 1, Moves.TICKLE ], + [ 1, Moves.MUD_SLAP ], [ 1, Moves.WATER_GUN ], [ 1, Moves.REST ], [ 1, Moves.SNORE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.TICKLE ], - [ 1, Moves.ZEN_HEADBUTT ], - [ 1, Moves.BELCH ], [ 12, Moves.WATER_PULSE ], [ 18, Moves.AMNESIA ], [ 24, Moves.AQUA_TAIL ], @@ -5872,10 +5875,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CRAWDAUNT]: [ [ 0, Moves.SWIFT ], - [ 1, Moves.LEER ], [ 1, Moves.WATER_GUN ], [ 1, Moves.HARDEN ], - [ 1, Moves.TAUNT ], + [ 1, Moves.LEER ], + [ 1, Moves.TAUNT ], [ 12, Moves.BUBBLE_BEAM ], [ 16, Moves.KNOCK_OFF ], [ 20, Moves.DOUBLE_HIT ], @@ -5894,7 +5897,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 3, Moves.RAPID_SPIN ], [ 6, Moves.CONFUSION ], [ 9, Moves.ROCK_TOMB ], - [ 10, Moves.HEAL_BLOCK ], [ 12, Moves.POWER_TRICK ], [ 15, Moves.PSYBEAM ], [ 18, Moves.ANCIENT_POWER ], @@ -5910,13 +5912,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CLAYDOL]: [ [ 0, Moves.HYPER_BEAM ], - [ 1, Moves.CONFUSION ], [ 1, Moves.TELEPORT ], [ 1, Moves.HARDEN ], [ 1, Moves.MUD_SLAP ], [ 1, Moves.RAPID_SPIN ], + [ 1, Moves.CONFUSION ], [ 9, Moves.ROCK_TOMB ], - [ 10, Moves.HEAL_BLOCK ], [ 12, Moves.POWER_TRICK ], [ 15, Moves.PSYBEAM ], [ 18, Moves.ANCIENT_POWER ], @@ -5948,11 +5949,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.ENERGY_BALL ], ], [Species.CRADILY]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.ACID ], [ 1, Moves.LEECH_SEED ], - [ 1, Moves.CONFUSE_RAY ], + [ 1, Moves.WRAP ], [ 1, Moves.ASTONISH ], + [ 1, Moves.ACID ], + [ 1, Moves.CONFUSE_RAY ], [ 12, Moves.INGRAIN ], [ 16, Moves.ANCIENT_POWER ], [ 20, Moves.MEGA_DRAIN ], @@ -5966,8 +5967,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.ENERGY_BALL ], ], [Species.ANORITH]: [ - [ 1, Moves.HARDEN ], [ 1, Moves.FURY_CUTTER ], + [ 1, Moves.HARDEN ], [ 4, Moves.WATER_GUN ], [ 8, Moves.SMACK_DOWN ], [ 12, Moves.METAL_CLAW ], @@ -5981,9 +5982,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.X_SCISSOR ], ], [Species.ARMALDO]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HARDEN ], [ 1, Moves.FURY_CUTTER ], + [ 1, Moves.HARDEN ], + [ 1, Moves.WATER_GUN ], [ 1, Moves.SMACK_DOWN ], [ 12, Moves.METAL_CLAW ], [ 16, Moves.ANCIENT_POWER ], @@ -6002,11 +6003,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MILOTIC]: [ [ 0, Moves.WATER_PULSE ], + [ 1, Moves.FLAIL ], + [ 1, Moves.SPLASH ], [ 1, Moves.TACKLE ], [ 1, Moves.WRAP ], [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], [ 4, Moves.DISARMING_VOICE ], [ 8, Moves.TWISTER ], [ 12, Moves.AQUA_RING ], @@ -6023,8 +6024,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CASTFORM]: [ [ 1, Moves.TACKLE ], - [ 10, Moves.EMBER ], [ 10, Moves.WATER_GUN ], + [ 10, Moves.EMBER ], [ 10, Moves.POWDER_SNOW ], [ 15, Moves.HEADBUTT ], [ 20, Moves.RAIN_DANCE ], @@ -6032,16 +6033,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.HAIL ], [ 25, Moves.WEATHER_BALL ], [ 35, Moves.HYDRO_PUMP ], - [ 35, Moves.BLIZZARD ], [ 35, Moves.FIRE_BLAST ], + [ 35, Moves.BLIZZARD ], [ 45, Moves.HURRICANE ], ], [Species.KECLEON]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.LICK ], [ 1, Moves.THIEF ], + [ 1, Moves.TAIL_WHIP ], [ 1, Moves.ASTONISH ], + [ 1, Moves.LICK ], + [ 1, Moves.SCRATCH ], [ 4, Moves.BIND ], [ 7, Moves.SHADOW_SNEAK ], [ 10, Moves.FEINT ], @@ -6074,8 +6075,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BANETTE]: [ [ 0, Moves.KNOCK_OFF ], - [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.SCREECH ], + [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.SPITE ], [ 16, Moves.WILL_O_WISP ], [ 19, Moves.SHADOW_SNEAK ], @@ -6088,8 +6089,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 53, Moves.PHANTOM_FORCE ], ], [Species.DUSKULL]: [ - [ 1, Moves.LEER ], [ 1, Moves.ASTONISH ], + [ 1, Moves.LEER ], [ 4, Moves.DISABLE ], [ 8, Moves.SHADOW_SNEAK ], [ 12, Moves.CONFUSE_RAY ], @@ -6107,11 +6108,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FIRE_PUNCH ], [ 1, Moves.ICE_PUNCH ], [ 1, Moves.THUNDER_PUNCH ], + [ 1, Moves.GRAVITY ], [ 1, Moves.BIND ], + [ 1, Moves.ASTONISH ], [ 1, Moves.LEER ], [ 1, Moves.DISABLE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.GRAVITY ], [ 1, Moves.SHADOW_SNEAK ], [ 12, Moves.CONFUSE_RAY ], [ 16, Moves.NIGHT_SHADE ], @@ -6124,11 +6125,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FUTURE_SIGHT ], ], [Species.TROPIUS]: [ + [ 1, Moves.LEAF_STORM ], [ 1, Moves.GUST ], [ 1, Moves.LEER ], [ 1, Moves.GROWTH ], [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.LEAF_STORM ], [ 6, Moves.SWEET_SCENT ], [ 10, Moves.STOMP ], [ 16, Moves.MAGICAL_LEAF ], @@ -6141,11 +6142,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.SOLAR_BEAM ], ], [Species.CHIMECHO]: [ + [ 1, Moves.HEALING_WISH ], [ 1, Moves.WRAP ], [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], [ 1, Moves.ASTONISH ], - [ 1, Moves.HEALING_WISH ], + [ 1, Moves.CONFUSION ], [ 13, Moves.YAWN ], [ 16, Moves.STORED_POWER ], [ 19, Moves.TAKE_DOWN ], @@ -6157,8 +6158,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 47, Moves.HEAL_PULSE ], ], [Species.ABSOL]: [ - [ 1, Moves.LEER ], [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.LEER ], [ 5, Moves.DOUBLE_TEAM ], [ 10, Moves.KNOCK_OFF ], [ 15, Moves.DETECT ], @@ -6173,18 +6174,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.WYNAUT]: [ [ 1, Moves.COUNTER ], - [ 1, Moves.AMNESIA ], - [ 1, Moves.SPLASH ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.CHARM ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.ENCORE ], [ 1, Moves.MIRROR_COAT ], + [ 1, Moves.SAFEGUARD ], + [ 1, Moves.DESTINY_BOND ], + [ 1, Moves.SPLASH ], + [ 1, Moves.CHARM ], + [ 1, Moves.ENCORE ], + [ 1, Moves.AMNESIA ], ], [Species.SNORUNT]: [ - [ 1, Moves.HEADBUTT ], [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ASTONISH ], + [ 1, Moves.ASTONISH ], + [ 1, Moves.HEADBUTT ], [ 5, Moves.LEER ], [ 10, Moves.DOUBLE_TEAM ], [ 15, Moves.ICE_SHARD ], @@ -6200,12 +6201,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.GLALIE]: [ [ 0, Moves.FREEZE_DRY ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ASTONISH ], [ 1, Moves.SHEER_COLD ], + [ 1, Moves.POWDER_SNOW ], + [ 1, Moves.HEADBUTT ], + [ 1, Moves.ASTONISH ], + [ 1, Moves.LEER ], + [ 1, Moves.DOUBLE_TEAM ], [ 15, Moves.ICE_SHARD ], [ 20, Moves.PROTECT ], [ 25, Moves.ICY_WIND ], @@ -6218,8 +6219,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 68, Moves.BLIZZARD ], ], [Species.SPHEAL]: [ - [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.ROLLOUT ], + [ 1, Moves.DEFENSE_CURL ], [ 4, Moves.GROWL ], [ 8, Moves.WATER_GUN ], [ 12, Moves.POWDER_SNOW ], @@ -6236,10 +6237,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SEALEO]: [ [ 0, Moves.SWAGGER ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.ROLLOUT ], + [ 1, Moves.DEFENSE_CURL ], + [ 1, Moves.GROWL ], + [ 1, Moves.WATER_GUN ], [ 12, Moves.POWDER_SNOW ], [ 16, Moves.REST ], [ 20, Moves.SNORE ], @@ -6253,13 +6254,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.SHEER_COLD ], ], [Species.WALREIN]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], [ 1, Moves.SWAGGER ], [ 1, Moves.CRUNCH ], [ 1, Moves.ICE_FANG ], + [ 1, Moves.ROLLOUT ], + [ 1, Moves.DEFENSE_CURL ], + [ 1, Moves.GROWL ], + [ 1, Moves.WATER_GUN ], [ 12, Moves.POWDER_SNOW ], [ 16, Moves.REST ], [ 20, Moves.SNORE ], @@ -6279,11 +6280,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.SHELL_SMASH ], ], [Species.HUNTAIL]: [ - [ 1, Moves.BITE ], [ 1, Moves.WATER_GUN ], - [ 1, Moves.WHIRLPOOL ], [ 1, Moves.IRON_DEFENSE ], [ 1, Moves.SHELL_SMASH ], + [ 1, Moves.WHIRLPOOL ], + [ 1, Moves.BITE ], [ 5, Moves.SCREECH ], [ 9, Moves.SCARY_FACE ], [ 11, Moves.RAIN_DANCE ], @@ -6299,12 +6300,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.HYDRO_PUMP ], ], [Species.GOREBYSS]: [ - [ 1, Moves.CONFUSION ], [ 1, Moves.WATER_GUN ], - [ 1, Moves.WHIRLPOOL ], [ 1, Moves.IRON_DEFENSE ], [ 1, Moves.SHELL_SMASH ], - [ 5, Moves.WATER_SPORT ], + [ 1, Moves.WHIRLPOOL ], + [ 1, Moves.CONFUSION ], + [ 5, Moves.RAIN_DANCE ], [ 9, Moves.AGILITY ], [ 11, Moves.DRAINING_KISS ], [ 14, Moves.WATER_PULSE ], @@ -6352,8 +6353,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.SAFEGUARD ], ], [Species.BAGON]: [ - [ 1, Moves.LEER ], [ 1, Moves.EMBER ], + [ 1, Moves.LEER ], [ 5, Moves.BITE ], [ 10, Moves.DRAGON_BREATH ], [ 15, Moves.HEADBUTT ], @@ -6368,10 +6369,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SHELGON]: [ [ 0, Moves.PROTECT ], + [ 1, Moves.EMBER ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], - [ 1, Moves.EMBER ], - [ 1, Moves.DRAGON_BREATH ], + [ 1, Moves.DRAGON_BREATH ], [ 15, Moves.HEADBUTT ], [ 20, Moves.SCARY_FACE ], [ 25, Moves.CRUNCH ], @@ -6384,14 +6385,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SALAMENCE]: [ [ 0, Moves.FLY ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.EMBER ], [ 1, Moves.PROTECT ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ROOST ], [ 1, Moves.DRAGON_TAIL ], [ 1, Moves.DUAL_WINGBEAT ], + [ 1, Moves.ROOST ], + [ 1, Moves.EMBER ], + [ 1, Moves.LEER ], + [ 1, Moves.BITE ], + [ 1, Moves.DRAGON_BREATH ], [ 15, Moves.HEADBUTT ], [ 20, Moves.SCARY_FACE ], [ 25, Moves.CRUNCH ], @@ -6409,6 +6410,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 0, Moves.METAL_CLAW ], [ 1, Moves.TACKLE ], [ 1, Moves.BULLET_PUNCH ], + [ 1, Moves.HONE_CLAWS ], [ 6, Moves.ZEN_HEADBUTT ], [ 12, Moves.MAGNET_RISE ], [ 18, Moves.FLASH_CANNON ], @@ -6422,10 +6424,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.METAGROSS]: [ [ 0, Moves.HAMMER_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], + [ 0, Moves.CONFUSION ], + [ 0, Moves.METAL_CLAW ], [ 1, Moves.BULLET_PUNCH ], + [ 1, Moves.TACKLE ], + [ 1, Moves.EXPLOSION ], + [ 1, Moves.HONE_CLAWS ], [ 6, Moves.ZEN_HEADBUTT ], [ 12, Moves.MAGNET_RISE ], [ 16, Moves.FLASH_CANNON ], @@ -6438,8 +6442,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 82, Moves.HYPER_BEAM ], ], [Species.REGIROCK]: [ - [ 1, Moves.ROCK_THROW ], [ 1, Moves.CHARGE_BEAM ], + [ 1, Moves.ROCK_THROW ], [ 6, Moves.BULLDOZE ], [ 12, Moves.ANCIENT_POWER ], [ 18, Moves.STOMP ], @@ -6455,8 +6459,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 78, Moves.EXPLOSION ], ], [Species.REGICE]: [ - [ 1, Moves.ICY_WIND ], [ 1, Moves.CHARGE_BEAM ], + [ 1, Moves.ICY_WIND ], [ 6, Moves.BULLDOZE ], [ 12, Moves.ANCIENT_POWER ], [ 18, Moves.STOMP ], @@ -6472,13 +6476,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 78, Moves.EXPLOSION ], ], [Species.REGISTEEL]: [ - [ 1, Moves.METAL_CLAW ], [ 1, Moves.CHARGE_BEAM ], + [ 1, Moves.METAL_CLAW ], [ 6, Moves.BULLDOZE ], [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.STOMP ], - [ 24, Moves.FLASH_CANNON ], + [ 18, Moves.STOMP ], [ 24, Moves.IRON_HEAD ], + [ 24, Moves.FLASH_CANNON ], [ 30, Moves.CURSE ], [ 36, Moves.AMNESIA ], [ 36, Moves.IRON_DEFENSE ], @@ -6491,8 +6495,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 78, Moves.EXPLOSION ], ], [Species.LATIAS]: [ - [ 1, Moves.CHARM ], [ 1, Moves.STORED_POWER ], + [ 1, Moves.CHARM ], [ 5, Moves.HELPING_HAND ], [ 10, Moves.RECOVER ], [ 15, Moves.CONFUSION ], @@ -6507,12 +6511,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.PSYCHIC ], [ 65, Moves.GUARD_SPLIT ], [ 70, Moves.HEALING_WISH ], - [ 75, Moves.PSYCHO_SHIFT ], ], [Species.LATIOS]: [ - [ 1, Moves.DRAGON_DANCE ], [ 1, Moves.STORED_POWER ], - [ 1, Moves.HEAL_BLOCK ], + [ 1, Moves.DRAGON_DANCE ], [ 5, Moves.HELPING_HAND ], [ 10, Moves.RECOVER ], [ 15, Moves.CONFUSION ], @@ -6527,14 +6529,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.PSYCHIC ], [ 65, Moves.POWER_SPLIT ], [ 70, Moves.MEMENTO ], - [ 75, Moves.PSYCHO_SHIFT ], ], [Species.KYOGRE]: [ - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.WATER_PULSE ], [ 1, Moves.ORIGIN_PULSE ], + [ 1, Moves.WATER_PULSE ], + [ 1, Moves.ANCIENT_POWER ], + [ 1, Moves.BODY_SLAM ], + [ 1, Moves.SCARY_FACE ], [ 9, Moves.AQUA_TAIL ], [ 18, Moves.CALM_MIND ], [ 27, Moves.MUDDY_WATER ], @@ -6546,11 +6547,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 90, Moves.WATER_SPOUT ], ], [Species.GROUDON]: [ - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.MUD_SHOT ], - [ 1, Moves.LAVA_PLUME ], [ 1, Moves.PRECIPICE_BLADES ], + [ 1, Moves.MUD_SHOT ], + [ 1, Moves.ANCIENT_POWER ], + [ 1, Moves.LAVA_PLUME ], + [ 1, Moves.SCARY_FACE ], [ 9, Moves.EARTH_POWER ], [ 18, Moves.BULK_UP ], [ 27, Moves.EARTHQUAKE ], @@ -6562,11 +6563,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 90, Moves.ERUPTION ], ], [Species.RAYQUAZA]: [ - [ 1, Moves.SCARY_FACE ], + [ 1, Moves.DRAGON_ASCENT ], [ 1, Moves.TWISTER ], [ 1, Moves.ANCIENT_POWER ], [ 1, Moves.AIR_SLASH ], - [ 1, Moves.DRAGON_ASCENT ], + [ 1, Moves.SCARY_FACE ], [ 9, Moves.CRUNCH ], [ 18, Moves.DRAGON_DANCE ], [ 27, Moves.EXTREME_SPEED ], @@ -6582,7 +6583,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSION ], [ 1, Moves.WISH ], [ 7, Moves.SWIFT ], - [ 14, Moves.HELPING_HAND ], [ 21, Moves.LIFE_DEW ], [ 28, Moves.ZEN_HEADBUTT ], [ 35, Moves.GRAVITY ], @@ -6597,15 +6597,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 98, Moves.DOOM_DESIRE ], ], [Species.DEOXYS]: [ - [ 1, Moves.WRAP ], [ 1, Moves.LEER ], + [ 1, Moves.WRAP ], [ 7, Moves.NIGHT_SHADE ], [ 13, Moves.TELEPORT ], [ 19, Moves.KNOCK_OFF ], - [ 25, Moves.PURSUIT ], + [ 25, Moves.PSYSHOCK ], [ 31, Moves.PSYCHIC ], - [ 37, Moves.SNATCH ], - [ 43, Moves.PSYCHO_SHIFT ], + [ 37, Moves.GRAVITY ], + [ 43, Moves.SKILL_SWAP ], [ 49, Moves.ZEN_HEADBUTT ], [ 55, Moves.COSMIC_POWER ], [ 61, Moves.RECOVER ], diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 2f8edefa4..7f33d9ec7 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -367,8 +367,8 @@ export abstract class PokemonSpeciesForm { loadAssets(scene: BattleScene, female: boolean, formIndex?: integer, shiny?: boolean, variant?: Variant, startLoad?: boolean): Promise { return new Promise(resolve => { const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant); - scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.m4a`); scene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant)); + scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.m4a`); scene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot @@ -476,7 +476,7 @@ export abstract class PokemonSpeciesForm { export default class PokemonSpecies extends PokemonSpeciesForm implements Localizable { public name: string; - public pseudoLegendary: boolean; + public subLegendary: boolean; public legendary: boolean; public mythical: boolean; public species: string; @@ -486,7 +486,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali public canChangeForm: boolean; public forms: PokemonForm[]; - constructor(id: Species, generation: integer, pseudoLegendary: boolean, legendary: boolean, mythical: boolean, species: string, + constructor(id: Species, generation: integer, subLegendary: boolean, legendary: boolean, mythical: boolean, species: string, type1: Type, type2: Type, height: number, weight: number, ability1: Abilities, ability2: Abilities, abilityHidden: Abilities, baseTotal: integer, baseHp: integer, baseAtk: integer, baseDef: integer, baseSpatk: integer, baseSpdef: integer, baseSpd: integer, catchRate: integer, baseFriendship: integer, baseExp: integer, growthRate: GrowthRate, malePercent: number, @@ -496,7 +496,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali this.speciesId = id; this.formIndex = 0; this.generation = generation; - this.pseudoLegendary = pseudoLegendary; + this.subLegendary = subLegendary; this.legendary = legendary; this.mythical = mythical; this.species = species; @@ -712,14 +712,14 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali getCompatibleFusionSpeciesFilter(): PokemonSpeciesFilter { const hasEvolution = pokemonEvolutions.hasOwnProperty(this.speciesId); const hasPrevolution = pokemonPrevolutions.hasOwnProperty(this.speciesId); - const pseudoLegendary = this.pseudoLegendary; + const pseudoLegendary = this.subLegendary; const legendary = this.legendary; const mythical = this.mythical; return species => { return (pseudoLegendary || legendary || mythical || (pokemonEvolutions.hasOwnProperty(species.speciesId) === hasEvolution && pokemonPrevolutions.hasOwnProperty(species.speciesId) === hasPrevolution)) - && species.pseudoLegendary === pseudoLegendary + && species.subLegendary === pseudoLegendary && species.legendary === legendary && species.mythical === mythical && (this.isTrainerForbidden() || !species.isTrainerForbidden()); @@ -3156,6 +3156,30 @@ export const noStarterFormKeys: string[] = [ SpeciesFormKey.ETERNAMAX ].map(k => k.toString()); +export function getStarterValueFriendshipCap(value: integer): integer { + switch (value) { + case 1: + return 20; + case 2: + return 40; + case 3: + return 60; + case 4: + return 100; + case 5: + return 140; + case 6: + return 200; + case 7: + return 280; + case 8: + case 9: + return 450; + default: + return 600; + } +} + export const starterPassiveAbilities = { [Species.BULBASAUR]: Abilities.SOLAR_POWER, [Species.CHARMANDER]: Abilities.INTIMIDATE, @@ -3185,7 +3209,7 @@ export const starterPassiveAbilities = { [Species.BELLSPROUT]: Abilities.CORROSION, [Species.TENTACOOL]: Abilities.INNARDS_OUT, [Species.GEODUDE]: Abilities.ROCKY_PAYLOAD, - [Species.PONYTA]: Abilities.PIXILATE, + [Species.PONYTA]: Abilities.MAGIC_GUARD, [Species.SLOWPOKE]: Abilities.UNAWARE, [Species.MAGNEMITE]: Abilities.MOTOR_DRIVE, [Species.FARFETCHD]: Abilities.PURE_POWER, @@ -3211,7 +3235,7 @@ export const starterPassiveAbilities = { [Species.SCYTHER]: Abilities.SPEED_BOOST, [Species.PINSIR]: Abilities.SAP_SIPPER, [Species.TAUROS]: Abilities.ROCK_HEAD, - [Species.MAGIKARP]: Abilities.BERSERK, + [Species.MAGIKARP]: Abilities.MULTISCALE, [Species.LAPRAS]: Abilities.LIQUID_VOICE, [Species.DITTO]: Abilities.GOOEY, [Species.EEVEE]: Abilities.PROTEAN, @@ -3225,16 +3249,16 @@ export const starterPassiveAbilities = { [Species.DRATINI]: Abilities.DELTA_STREAM, [Species.MEWTWO]: Abilities.NEUROFORCE, [Species.MEW]: Abilities.PROTEAN, - [Species.CHIKORITA]: Abilities.RIPEN, + [Species.CHIKORITA]: Abilities.THICK_FAT, [Species.CYNDAQUIL]: Abilities.TURBOBLAZE, [Species.TOTODILE]: Abilities.TOUGH_CLAWS, [Species.SENTRET]: Abilities.FLUFFY, [Species.HOOTHOOT]: Abilities.CURSED_BODY, - [Species.LEDYBA]: Abilities.SCREEN_CLEANER, + [Species.LEDYBA]: Abilities.PRANKSTER, [Species.SPINARAK]: Abilities.PRANKSTER, [Species.CHINCHOU]: Abilities.REGENERATOR, [Species.PICHU]: Abilities.TRANSISTOR, - [Species.CLEFFA]: Abilities.MISTY_SURGE, + [Species.CLEFFA]: Abilities.MAGIC_BOUNCE, [Species.IGGLYBUFF]: Abilities.SERENE_GRACE, [Species.TOGEPI]: Abilities.OPPORTUNIST, [Species.NATU]: Abilities.TINTED_LENS, @@ -3252,7 +3276,7 @@ export const starterPassiveAbilities = { [Species.DUNSPARCE]: Abilities.MARVEL_SCALE, [Species.GLIGAR]: Abilities.MERCILESS, [Species.SNUBBULL]: Abilities.BALL_FETCH, - [Species.QWILFISH]: Abilities.LIQUID_OOZE, + [Species.QWILFISH]: Abilities.TOXIC_DEBRIS, [Species.SHUCKLE]: Abilities.WELL_BAKED_BODY, [Species.HERACROSS]: Abilities.QUICK_FEET, [Species.SNEASEL]: Abilities.MOXIE, @@ -3268,7 +3292,7 @@ export const starterPassiveAbilities = { [Species.STANTLER]: Abilities.MAGIC_GUARD, [Species.SMEARGLE]: Abilities.QUICK_DRAW, [Species.TYROGUE]: Abilities.STAMINA, - [Species.SMOOCHUM]: Abilities.CUTE_CHARM, + [Species.SMOOCHUM]: Abilities.DAZZLING, [Species.ELEKID]: Abilities.IRON_FIST, [Species.MAGBY]: Abilities.CONTRARY, [Species.MILTANK]: Abilities.GLUTTONY, @@ -3276,10 +3300,10 @@ export const starterPassiveAbilities = { [Species.ENTEI]: Abilities.MOXIE, [Species.SUICUNE]: Abilities.UNAWARE, [Species.LARVITAR]: Abilities.SAND_FORCE, - [Species.LUGIA]: Abilities.STORM_DRAIN, + [Species.LUGIA]: Abilities.DELTA_STREAM, [Species.HO_OH]: Abilities.MAGIC_GUARD, [Species.CELEBI]: Abilities.GRASSY_SURGE, - [Species.TREECKO]: Abilities.GRASSY_SURGE, + [Species.TREECKO]: Abilities.TINTED_LENS, [Species.TORCHIC]: Abilities.RECKLESS, [Species.MUDKIP]: Abilities.REGENERATOR, [Species.POOCHYENA]: Abilities.STRONG_JAW, @@ -3296,7 +3320,7 @@ export const starterPassiveAbilities = { [Species.NINCADA]: Abilities.OVERCOAT, [Species.WHISMUR]: Abilities.PUNK_ROCK, [Species.MAKUHITA]: Abilities.STAMINA, - [Species.AZURILL]: Abilities.UNNERVE, + [Species.AZURILL]: Abilities.MISTY_SURGE, [Species.NOSEPASS]: Abilities.LEVITATE, [Species.SKITTY]: Abilities.SCRAPPY, [Species.SABLEYE]: Abilities.UNNERVE, @@ -3327,7 +3351,7 @@ export const starterPassiveAbilities = { [Species.BALTOY]: Abilities.OWN_TEMPO, [Species.LILEEP]: Abilities.WATER_ABSORB, [Species.ANORITH]: Abilities.WATER_ABSORB, - [Species.FEEBAS]: Abilities.PASTEL_VEIL, + [Species.FEEBAS]: Abilities.MAGIC_GUARD, [Species.CASTFORM]: Abilities.ADAPTABILITY, [Species.KECLEON]: Abilities.ADAPTABILITY, [Species.SHUPPET]: Abilities.MUMMY, @@ -3342,13 +3366,13 @@ export const starterPassiveAbilities = { [Species.LUVDISC]: Abilities.PICKUP, [Species.BAGON]: Abilities.GALE_WINGS, [Species.BELDUM]: Abilities.IRON_FIST, - [Species.REGIROCK]: Abilities.REGENERATOR, - [Species.REGICE]: Abilities.ICE_SCALES, - [Species.REGISTEEL]: Abilities.STEELY_SPIRIT, - [Species.LATIAS]: Abilities.SERENE_GRACE, - [Species.LATIOS]: Abilities.SERENE_GRACE, + [Species.REGIROCK]: Abilities.SAND_STREAM, + [Species.REGICE]: Abilities.SNOW_WARNING, + [Species.REGISTEEL]: Abilities.FILTER, + [Species.LATIAS]: Abilities.SOUL_HEART, + [Species.LATIOS]: Abilities.TINTED_LENS, [Species.KYOGRE]: Abilities.HYDRATION, - [Species.GROUDON]: Abilities.EARTH_EATER, + [Species.GROUDON]: Abilities.PROTOSYNTHESIS, [Species.RAYQUAZA]: Abilities.UNNERVE, [Species.JIRACHI]: Abilities.COMATOSE, [Species.DEOXYS]: Abilities.PROTEAN, @@ -3390,16 +3414,16 @@ export const starterPassiveAbilities = { [Species.MANTYKE]: Abilities.STORM_DRAIN, [Species.SNOVER]: Abilities.SNOW_CLOAK, [Species.ROTOM]: Abilities.HADRON_ENGINE, - [Species.UXIE]: Abilities.ILLUSION, + [Species.UXIE]: Abilities.UNAWARE, [Species.MESPRIT]: Abilities.MOODY, [Species.AZELF]: Abilities.NEUROFORCE, [Species.DIALGA]: Abilities.SPEED_BOOST, - [Species.PALKIA]: Abilities.MAGIC_BOUNCE, - [Species.HEATRAN]: Abilities.ROUGH_SKIN, + [Species.PALKIA]: Abilities.MULTISCALE, + [Species.HEATRAN]: Abilities.FILTER, [Species.REGIGIGAS]: Abilities.MINDS_EYE, - [Species.GIRATINA]: Abilities.SHADOW_TAG, + [Species.GIRATINA]: Abilities.SHADOW_SHIELD, [Species.CRESSELIA]: Abilities.MAGIC_BOUNCE, - [Species.PHIONE]: Abilities.SWIFT_SWIM, + [Species.PHIONE]: Abilities.SIMPLE, [Species.MANAPHY]: Abilities.SIMPLE, [Species.DARKRAI]: Abilities.UNNERVE, [Species.SHAYMIN]: Abilities.FLOWER_VEIL, @@ -3407,7 +3431,7 @@ export const starterPassiveAbilities = { [Species.VICTINI]: Abilities.SUPER_LUCK, [Species.SNIVY]: Abilities.MULTISCALE, [Species.TEPIG]: Abilities.ROCK_HEAD, - [Species.OSHAWOTT]: Abilities.MOLD_BREAKER, + [Species.OSHAWOTT]: Abilities.QUICK_DRAW, [Species.PATRAT]: Abilities.STAKEOUT, [Species.LILLIPUP]: Abilities.BALL_FETCH, [Species.PURRLOIN]: Abilities.DEFIANT, @@ -3420,14 +3444,14 @@ export const starterPassiveAbilities = { [Species.ROGGENROLA]: Abilities.SOLID_ROCK, [Species.WOOBAT]: Abilities.SOUL_HEART, [Species.DRILBUR]: Abilities.SAND_STREAM, - [Species.AUDINO]: Abilities.SERENE_GRACE, + [Species.AUDINO]: Abilities.FRIEND_GUARD, [Species.TIMBURR]: Abilities.STAMINA, [Species.TYMPOLE]: Abilities.MOODY, [Species.THROH]: Abilities.SIMPLE, [Species.SAWK]: Abilities.DEFIANT, [Species.SEWADDLE]: Abilities.SHARPNESS, [Species.VENIPEDE]: Abilities.INTIMIDATE, - [Species.COTTONEE]: Abilities.MISTY_SURGE, + [Species.COTTONEE]: Abilities.FLUFFY, [Species.PETILIL]: Abilities.DANCER, [Species.BASCULIN]: Abilities.OPPORTUNIST, [Species.SANDILE]: Abilities.STRONG_JAW, @@ -3436,7 +3460,7 @@ export const starterPassiveAbilities = { [Species.DWEBBLE]: Abilities.STAMINA, [Species.SCRAGGY]: Abilities.ROCK_HEAD, [Species.SIGILYPH]: Abilities.MAGICIAN, - [Species.YAMASK]: Abilities.GOOD_AS_GOLD, + [Species.YAMASK]: Abilities.PURIFYING_SALT, [Species.TIRTOUGA]: Abilities.SHELL_ARMOR, [Species.ARCHEN]: Abilities.ROCKY_PAYLOAD, [Species.TRUBBISH]: Abilities.GOOEY, @@ -3476,16 +3500,16 @@ export const starterPassiveAbilities = { [Species.LARVESTA]: Abilities.DROUGHT, [Species.COBALION]: Abilities.INTREPID_SWORD, [Species.TERRAKION]: Abilities.ROCKY_PAYLOAD, - [Species.VIRIZION]: Abilities.SYMBIOSIS, - [Species.TORNADUS]: Abilities.DELTA_STREAM, + [Species.VIRIZION]: Abilities.SHARPNESS, + [Species.TORNADUS]: Abilities.DRIZZLE, [Species.THUNDURUS]: Abilities.DRIZZLE, [Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE, [Species.ZEKROM]: Abilities.HADRON_ENGINE, - [Species.LANDORUS]: Abilities.PRANKSTER, + [Species.LANDORUS]: Abilities.STORM_DRAIN, [Species.KYUREM]: Abilities.SNOW_WARNING, - [Species.KELDEO]: Abilities.SHARPNESS, - [Species.MELOETTA]: Abilities.PUNK_ROCK, - [Species.GENESECT]: Abilities.MEGA_LAUNCHER, + [Species.KELDEO]: Abilities.GRIM_NEIGH, + [Species.MELOETTA]: Abilities.MINDS_EYE, + [Species.GENESECT]: Abilities.REGENERATOR, [Species.CHESPIN]: Abilities.IRON_BARBS, [Species.FENNEKIN]: Abilities.MAGIC_BOUNCE, [Species.FROAKIE]: Abilities.ADAPTABILITY, @@ -3497,7 +3521,7 @@ export const starterPassiveAbilities = { [Species.SKIDDO]: Abilities.GRASSY_SURGE, [Species.PANCHAM]: Abilities.FLUFFY, [Species.FURFROU]: Abilities.BALL_FETCH, - [Species.ESPURR]: Abilities.PSYCHIC_SURGE, + [Species.ESPURR]: Abilities.FUR_COAT, [Species.HONEDGE]: Abilities.SHARPNESS, [Species.SPRITZEE]: Abilities.MISTY_SURGE, [Species.SWIRLIX]: Abilities.WELL_BAKED_BODY, @@ -3517,14 +3541,14 @@ export const starterPassiveAbilities = { [Species.PUMPKABOO]: Abilities.FLASH_FIRE, [Species.BERGMITE]: Abilities.MIRROR_ARMOR, [Species.NOIBAT]: Abilities.PUNK_ROCK, - [Species.XERNEAS]: Abilities.COMPETITIVE, - [Species.YVELTAL]: Abilities.DEFIANT, - [Species.ZYGARDE]: Abilities.REGENERATOR, - [Species.DIANCIE]: Abilities.QUEENLY_MAJESTY, - [Species.HOOPA]: Abilities.TRACE, + [Species.XERNEAS]: Abilities.MISTY_SURGE, + [Species.YVELTAL]: Abilities.SOUL_HEART, + [Species.ZYGARDE]: Abilities.HUGE_POWER, + [Species.DIANCIE]: Abilities.LEVITATE, + [Species.HOOPA]: Abilities.OPPORTUNIST, [Species.VOLCANION]: Abilities.FILTER, [Species.ROWLET]: Abilities.SNIPER, - [Species.LITTEN]: Abilities.PRANKSTER, + [Species.LITTEN]: Abilities.FLAME_BODY, [Species.POPPLIO]: Abilities.PUNK_ROCK, [Species.PIKIPEK]: Abilities.ANGER_POINT, [Species.YUNGOOS]: Abilities.HUGE_POWER, @@ -3553,39 +3577,39 @@ export const starterPassiveAbilities = { [Species.KOMALA]: Abilities.GUTS, [Species.TURTONATOR]: Abilities.ANGER_SHELL, [Species.TOGEDEMARU]: Abilities.STATIC, - [Species.MIMIKYU]: Abilities.CURSED_BODY, + [Species.MIMIKYU]: Abilities.TOUGH_CLAWS, [Species.BRUXISH]: Abilities.MULTISCALE, [Species.DRAMPA]: Abilities.FLASH_FIRE, [Species.DHELMISE]: Abilities.INFILTRATOR, [Species.JANGMO_O]: Abilities.DANCER, - [Species.TAPU_KOKO]: Abilities.GALVANIZE, - [Species.TAPU_LELE]: Abilities.BERSERK, - [Species.TAPU_BULU]: Abilities.FLOWER_VEIL, + [Species.TAPU_KOKO]: Abilities.TRANSISTOR, + [Species.TAPU_LELE]: Abilities.SHEER_FORCE, + [Species.TAPU_BULU]: Abilities.GRASS_PELT, [Species.TAPU_FINI]: Abilities.FAIRY_AURA, [Species.COSMOG]: Abilities.BEAST_BOOST, - [Species.NIHILEGO]: Abilities.POISON_PUPPETEER, + [Species.NIHILEGO]: Abilities.LEVITATE, [Species.BUZZWOLE]: Abilities.MOXIE, - [Species.PHEROMOSA]: Abilities.MOXIE, - [Species.XURKITREE]: Abilities.LIGHTNING_ROD, - [Species.CELESTEELA]: Abilities.CHLOROPHYLL, + [Species.PHEROMOSA]: Abilities.TINTED_LENS, + [Species.XURKITREE]: Abilities.TRANSISTOR, + [Species.CELESTEELA]: Abilities.HEATPROOF, [Species.KARTANA]: Abilities.SHARPNESS, - [Species.GUZZLORD]: Abilities.GLUTTONY, + [Species.GUZZLORD]: Abilities.INNARDS_OUT, [Species.NECROZMA]: Abilities.BEAST_BOOST, [Species.MAGEARNA]: Abilities.STEELY_SPIRIT, [Species.MARSHADOW]: Abilities.IRON_FIST, - [Species.POIPOLE]: Abilities.MERCILESS, - [Species.STAKATAKA]: Abilities.DAUNTLESS_SHIELD, + [Species.POIPOLE]: Abilities.SHEER_FORCE, + [Species.STAKATAKA]: Abilities.SOLID_ROCK, [Species.BLACEPHALON]: Abilities.MAGIC_GUARD, - [Species.ZERAORA]: Abilities.MOTOR_DRIVE, - [Species.MELTAN]: Abilities.FULL_METAL_BODY, + [Species.ZERAORA]: Abilities.TOUGH_CLAWS, + [Species.MELTAN]: Abilities.STEELY_SPIRIT, [Species.GROOKEY]: Abilities.GRASS_PELT, [Species.SCORBUNNY]: Abilities.RECKLESS, [Species.SOBBLE]: Abilities.SUPER_LUCK, [Species.SKWOVET]: Abilities.HONEY_GATHER, [Species.ROOKIDEE]: Abilities.IRON_BARBS, - [Species.BLIPBUG]: Abilities.TINTED_LENS, + [Species.BLIPBUG]: Abilities.PSYCHIC_SURGE, [Species.NICKIT]: Abilities.INTIMIDATE, - [Species.GOSSIFLEUR]: Abilities.STORM_DRAIN, + [Species.GOSSIFLEUR]: Abilities.GRASSY_SURGE, [Species.WOOLOO]: Abilities.ROCK_HEAD, [Species.CHEWTLE]: Abilities.ROCK_HEAD, [Species.YAMPER]: Abilities.STAKEOUT, @@ -3600,7 +3624,7 @@ export const starterPassiveAbilities = { [Species.SINISTEA]: Abilities.WATER_ABSORB, [Species.HATENNA]: Abilities.MAGIC_GUARD, [Species.IMPIDIMP]: Abilities.TANGLING_HAIR, - [Species.MILCERY]: Abilities.WELL_BAKED_BODY, + [Species.MILCERY]: Abilities.MISTY_SURGE, [Species.FALINKS]: Abilities.MOXIE, [Species.PINCURCHIN]: Abilities.IRON_BARBS, [Species.SNOM]: Abilities.SNOW_WARNING, @@ -3615,17 +3639,17 @@ export const starterPassiveAbilities = { [Species.ARCTOVISH]: Abilities.STRONG_JAW, [Species.DURALUDON]: Abilities.MEGA_LAUNCHER, [Species.DREEPY]: Abilities.PARENTAL_BOND, - [Species.ZACIAN]: Abilities.GUARD_DOG, - [Species.ZAMAZENTA]: Abilities.GUARD_DOG, + [Species.ZACIAN]: Abilities.UNNERVE, + [Species.ZAMAZENTA]: Abilities.STAMINA, [Species.ETERNATUS]: Abilities.SUPREME_OVERLORD, [Species.KUBFU]: Abilities.IRON_FIST, - [Species.ZARUDE]: Abilities.PRANKSTER, - [Species.REGIELEKI]: Abilities.LEVITATE, - [Species.REGIDRAGO]: Abilities.INTIMIDATE, + [Species.ZARUDE]: Abilities.GRASSY_SURGE, + [Species.REGIELEKI]: Abilities.ELECTRIC_SURGE, + [Species.REGIDRAGO]: Abilities.MULTISCALE, [Species.GLASTRIER]: Abilities.FILTER, - [Species.SPECTRIER]: Abilities.PERISH_BODY, + [Species.SPECTRIER]: Abilities.SHADOW_SHIELD, [Species.CALYREX]: Abilities.HARVEST, - [Species.ENAMORUS]: Abilities.PRANKSTER, + [Species.ENAMORUS]: Abilities.FAIRY_AURA, [Species.SPRIGATITO]: Abilities.MAGICIAN, [Species.FUECOCO]: Abilities.EARTH_EATER, [Species.QUAXLY]: Abilities.DANCER, @@ -3650,9 +3674,9 @@ export const starterPassiveAbilities = { [Species.RELLOR]: Abilities.MAGIC_GUARD, [Species.FLITTLE]: Abilities.COMPETITIVE, [Species.TINKATINK]: Abilities.HUGE_POWER, - [Species.WIGLETT]: Abilities.STORM_DRAIN, + [Species.WIGLETT]: Abilities.STURDY, [Species.BOMBIRDIER]: Abilities.UNAWARE, - [Species.FINIZEN]: Abilities.LIQUID_VOICE, + [Species.FINIZEN]: Abilities.IRON_FIST, [Species.VAROOM]: Abilities.SPEED_BOOST, [Species.CYCLIZAR]: Abilities.PROTEAN, [Species.ORTHWORM]: Abilities.HEATPROOF, @@ -3664,55 +3688,55 @@ export const starterPassiveAbilities = { [Species.DONDOZO]: Abilities.GLUTTONY, [Species.TATSUGIRI]: Abilities.WATER_BUBBLE, [Species.GREAT_TUSK]: Abilities.INTIMIDATE, - [Species.SCREAM_TAIL]: Abilities.PIXILATE, + [Species.SCREAM_TAIL]: Abilities.UNAWARE, [Species.BRUTE_BONNET]: Abilities.BEAST_BOOST, [Species.FLUTTER_MANE]: Abilities.DAZZLING, - [Species.SLITHER_WING]: Abilities.MOXIE, + [Species.SLITHER_WING]: Abilities.SCRAPPY, [Species.SANDY_SHOCKS]: Abilities.EARTH_EATER, - [Species.IRON_TREADS]: Abilities.BULLETPROOF, + [Species.IRON_TREADS]: Abilities.STEELY_SPIRIT, [Species.IRON_BUNDLE]: Abilities.SNOW_WARNING, [Species.IRON_HANDS]: Abilities.IRON_FIST, - [Species.IRON_JUGULIS]: Abilities.NO_GUARD, + [Species.IRON_JUGULIS]: Abilities.AERILATE, [Species.IRON_MOTH]: Abilities.LEVITATE, [Species.IRON_THORNS]: Abilities.SAND_STREAM, [Species.FRIGIBAX]: Abilities.THICK_FAT, [Species.GIMMIGHOUL]: Abilities.SUPER_LUCK, - [Species.WO_CHIEN]: Abilities.TRIAGE, - [Species.CHIEN_PAO]: Abilities.REFRIGERATE, + [Species.WO_CHIEN]: Abilities.GRASSY_SURGE, + [Species.CHIEN_PAO]: Abilities.INTREPID_SWORD, [Species.TING_LU]: Abilities.STAMINA, - [Species.CHI_YU]: Abilities.BLAZE, - [Species.ROARING_MOON]: Abilities.AERILATE, + [Species.CHI_YU]: Abilities.DROUGHT, + [Species.ROARING_MOON]: Abilities.TOUGH_CLAWS, [Species.IRON_VALIANT]: Abilities.DOWNLOAD, [Species.KORAIDON]: Abilities.PROTOSYNTHESIS, [Species.MIRAIDON]: Abilities.QUARK_DRIVE, [Species.WALKING_WAKE]: Abilities.BEAST_BOOST, [Species.IRON_LEAVES]: Abilities.SHARPNESS, [Species.POLTCHAGEIST]: Abilities.FLAME_BODY, - [Species.OKIDOGI]: Abilities.INTIMIDATE, - [Species.MUNKIDORI]: Abilities.PRANKSTER, - [Species.FEZANDIPITI]: Abilities.DAZZLING, + [Species.OKIDOGI]: Abilities.FUR_COAT, + [Species.MUNKIDORI]: Abilities.NEUROFORCE, + [Species.FEZANDIPITI]: Abilities.LEVITATE, [Species.OGERPON]: Abilities.OPPORTUNIST, [Species.GOUGING_FIRE]: Abilities.BEAST_BOOST, [Species.RAGING_BOLT]: Abilities.BEAST_BOOST, [Species.IRON_BOULDER]: Abilities.SHARPNESS, [Species.IRON_CROWN]: Abilities.SHARPNESS, - [Species.TERAPAGOS]: Abilities.PROTEAN, - [Species.PECHARUNT]: Abilities.CORROSION, + [Species.TERAPAGOS]: Abilities.REGENERATOR, + [Species.PECHARUNT]: Abilities.TOXIC_CHAIN, [Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH, [Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY, [Species.ALOLA_VULPIX]: Abilities.ICE_BODY, - [Species.ALOLA_DIGLETT]: Abilities.CUTE_CHARM, + [Species.ALOLA_DIGLETT]: Abilities.STURDY, [Species.ALOLA_MEOWTH]: Abilities.UNNERVE, [Species.ALOLA_GEODUDE]: Abilities.ELECTROMORPHOSIS, [Species.ALOLA_GRIMER]: Abilities.MERCILESS, [Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD, [Species.GALAR_MEOWTH]: Abilities.SUPER_LUCK, - [Species.GALAR_PONYTA]: Abilities.MAGIC_GUARD, + [Species.GALAR_PONYTA]: Abilities.PIXILATE, [Species.GALAR_SLOWPOKE]: Abilities.POISON_TOUCH, [Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK, [Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE, [Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS, - [Species.GALAR_MOLTRES]: Abilities.REGENERATOR, + [Species.GALAR_MOLTRES]: Abilities.DARK_AURA, [Species.GALAR_CORSOLA]: Abilities.SHADOW_TAG, [Species.GALAR_ZIGZAGOON]: Abilities.PICKPOCKET, [Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE, diff --git a/src/data/status-effect.ts b/src/data/status-effect.ts index 4ae095265..c14d49a32 100644 --- a/src/data/status-effect.ts +++ b/src/data/status-effect.ts @@ -134,4 +134,44 @@ export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect): } return 1; +} + +/** +* Returns a random non-volatile StatusEffect +*/ +export function generateRandomStatusEffect(): StatusEffect { + return Utils.randIntRange(1, 6); +} + +/** +* Returns a random non-volatile StatusEffect between the two provided +* @param statusEffectA The first StatusEffect +* @param statusEffectA The second StatusEffect +*/ +export function getRandomStatusEffect(statusEffectA: StatusEffect, statusEffectB: StatusEffect): StatusEffect { + if (statusEffectA === StatusEffect.NONE || statusEffectA === StatusEffect.FAINT) { + return statusEffectB; + } + if (statusEffectB === StatusEffect.NONE || statusEffectB === StatusEffect.FAINT) { + return statusEffectA; + } + + return Utils.randIntRange(0, 2) ? statusEffectA : statusEffectB; +} + +/** +* Returns a random non-volatile StatusEffect between the two provided +* @param statusA The first Status +* @param statusB The second Status +*/ +export function getRandomStatus(statusA: Status, statusB: Status): Status { + if (statusA === undefined || statusA.effect === StatusEffect.NONE || statusA.effect === StatusEffect.FAINT) { + return statusB; + } + if (statusB === undefined || statusB.effect === StatusEffect.NONE || statusB.effect === StatusEffect.FAINT) { + return statusA; + } + + + return Utils.randIntRange(0, 2) ? statusA : statusB; } \ No newline at end of file diff --git a/src/data/terrain.ts b/src/data/terrain.ts index 48ffc1c68..c0328d98d 100644 --- a/src/data/terrain.ts +++ b/src/data/terrain.ts @@ -4,6 +4,7 @@ import { Type } from "./type"; import * as Utils from "../utils"; import { IncrementMovePriorityAbAttr, applyAbAttrs } from "./ability"; import { ProtectAttr } from "./move"; +import { BattlerIndex } from "#app/battle.js"; export enum TerrainType { NONE, @@ -48,13 +49,13 @@ export class Terrain { return 1; } - isMoveTerrainCancelled(user: Pokemon, move: Move): boolean { + isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean { switch (this.terrainType) { case TerrainType.PSYCHIC: - if (!move.getAttrs(ProtectAttr).length){ + if (!move.getAttrs(ProtectAttr).length) { const priority = new Utils.IntegerHolder(move.priority); applyAbAttrs(IncrementMovePriorityAbAttr, user, null, move, priority); - return priority.value > 0; + return priority.value > 0 && user.getOpponents().filter(o => targets.includes(o.getBattlerIndex())).length > 0; } } diff --git a/src/data/tms.ts b/src/data/tms.ts index 71264d16c..eeccd9310 100644 --- a/src/data/tms.ts +++ b/src/data/tms.ts @@ -29550,7 +29550,6 @@ export const tmSpecies: TmSpecies = { Species.MURKROW, Species.SLOWKING, Species.MISDREAVUS, - Species.UNOWN, Species.GIRAFARIG, Species.PINECO, Species.FORRETRESS, @@ -51856,7 +51855,6 @@ export const tmSpecies: TmSpecies = { Species.MABOSSTIFF, Species.BOMBIRDIER, Species.WALKING_WAKE, - Species.PIKACHU, Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, Species.ALOLA_DIGLETT, @@ -60030,6 +60028,7 @@ export const tmSpecies: TmSpecies = { Species.SHARPEDO, Species.SEVIPER, Species.SALAMENCE, + Species.METAGROSS, Species.SHINX, Species.LUXIO, Species.LUXRAY, @@ -62012,21 +62011,49 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_MAROWAK, ], [Moves.TERA_BLAST]: [ + Species.BULBASAUR, + Species.IVYSAUR, + Species.VENUSAUR, Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, + Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, + Species.BUTTERFREE, + Species.BEEDRILL, + Species.PIDGEY, + Species.PIDGEOTTO, + Species.PIDGEOT, + Species.RATTATA, + Species.RATICATE, + Species.SPEAROW, + Species.FEAROW, Species.EKANS, Species.ARBOK, Species.PIKACHU, Species.RAICHU, Species.SANDSHREW, Species.SANDSLASH, + Species.NIDORAN_F, + Species.NIDORINA, + Species.NIDOQUEEN, + Species.NIDORAN_M, + Species.NIDORINO, + Species.NIDOKING, Species.CLEFAIRY, Species.CLEFABLE, Species.VULPIX, Species.NINETALES, Species.JIGGLYPUFF, Species.WIGGLYTUFF, + Species.ZUBAT, + Species.GOLBAT, + Species.ODDISH, + Species.GLOOM, + Species.VILEPLUME, + Species.PARAS, + Species.PARASECT, Species.VENONAT, Species.VENOMOTH, Species.DIGLETT, @@ -62042,16 +62069,31 @@ export const tmSpecies: TmSpecies = { Species.POLIWAG, Species.POLIWHIRL, Species.POLIWRATH, + Species.ABRA, + Species.KADABRA, + Species.ALAKAZAM, + Species.MACHOP, + Species.MACHOKE, + Species.MACHAMP, Species.BELLSPROUT, Species.WEEPINBELL, Species.VICTREEBEL, + Species.TENTACOOL, + Species.TENTACRUEL, Species.GEODUDE, Species.GRAVELER, Species.GOLEM, + Species.PONYTA, + Species.RAPIDASH, Species.SLOWPOKE, Species.SLOWBRO, Species.MAGNEMITE, Species.MAGNETON, + Species.FARFETCHD, + Species.DODUO, + Species.DODRIO, + Species.SEEL, + Species.DEWGONG, Species.GRIMER, Species.MUK, Species.SHELLDER, @@ -62059,20 +62101,52 @@ export const tmSpecies: TmSpecies = { Species.GASTLY, Species.HAUNTER, Species.GENGAR, + Species.ONIX, Species.DROWZEE, Species.HYPNO, + Species.KRABBY, + Species.KINGLER, Species.VOLTORB, Species.ELECTRODE, + Species.EXEGGCUTE, + Species.EXEGGUTOR, + Species.CUBONE, + Species.MAROWAK, + Species.HITMONLEE, + Species.HITMONCHAN, + Species.LICKITUNG, Species.KOFFING, Species.WEEZING, + Species.RHYHORN, + Species.RHYDON, Species.CHANSEY, + Species.TANGELA, + Species.KANGASKHAN, + Species.HORSEA, + Species.SEADRA, + Species.GOLDEEN, + Species.SEAKING, + Species.STARYU, + Species.STARMIE, + Species.MR_MIME, Species.SCYTHER, + Species.JYNX, + Species.ELECTABUZZ, + Species.MAGMAR, + Species.PINSIR, Species.TAUROS, Species.GYARADOS, + Species.LAPRAS, Species.EEVEE, Species.VAPOREON, Species.JOLTEON, Species.FLAREON, + Species.PORYGON, + Species.OMANYTE, + Species.OMASTAR, + Species.KABUTO, + Species.KABUTOPS, + Species.AERODACTYL, Species.SNORLAX, Species.ARTICUNO, Species.ZAPDOS, @@ -62082,21 +62156,37 @@ export const tmSpecies: TmSpecies = { Species.DRAGONITE, Species.MEWTWO, Species.MEW, + Species.CHIKORITA, + Species.BAYLEEF, + Species.MEGANIUM, Species.CYNDAQUIL, Species.QUILAVA, Species.TYPHLOSION, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, Species.SENTRET, Species.FURRET, Species.HOOTHOOT, Species.NOCTOWL, + Species.LEDYBA, + Species.LEDIAN, Species.SPINARAK, Species.ARIADOS, + Species.CROBAT, + Species.CHINCHOU, + Species.LANTURN, Species.PICHU, Species.CLEFFA, Species.IGGLYBUFF, + Species.TOGEPI, + Species.TOGETIC, + Species.NATU, + Species.XATU, Species.MAREEP, Species.FLAAFFY, Species.AMPHAROS, + Species.BELLOSSOM, Species.MARILL, Species.AZUMARILL, Species.SUDOWOODO, @@ -62120,8 +62210,12 @@ export const tmSpecies: TmSpecies = { Species.FORRETRESS, Species.DUNSPARCE, Species.GLIGAR, + Species.STEELIX, + Species.SNUBBULL, + Species.GRANBULL, Species.QWILFISH, Species.SCIZOR, + Species.SHUCKLE, Species.HERACROSS, Species.SNEASEL, Species.TEDDIURSA, @@ -62130,24 +62224,58 @@ export const tmSpecies: TmSpecies = { Species.MAGCARGO, Species.SWINUB, Species.PILOSWINE, + Species.CORSOLA, + Species.REMORAID, + Species.OCTILLERY, Species.DELIBIRD, + Species.MANTINE, + Species.SKARMORY, Species.HOUNDOUR, Species.HOUNDOOM, + Species.KINGDRA, Species.PHANPY, Species.DONPHAN, + Species.PORYGON2, Species.STANTLER, + Species.TYROGUE, + Species.HITMONTOP, + Species.SMOOCHUM, + Species.ELEKID, + Species.MAGBY, + Species.MILTANK, Species.BLISSEY, + Species.RAIKOU, + Species.ENTEI, + Species.SUICUNE, Species.LARVITAR, Species.PUPITAR, Species.TYRANITAR, + Species.LUGIA, + Species.HO_OH, + Species.CELEBI, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.TORCHIC, + Species.COMBUSKEN, + Species.BLAZIKEN, + Species.MUDKIP, + Species.MARSHTOMP, + Species.SWAMPERT, Species.POOCHYENA, Species.MIGHTYENA, + Species.ZIGZAGOON, + Species.LINOONE, + Species.BEAUTIFLY, + Species.DUSTOX, Species.LOTAD, Species.LOMBRE, Species.LUDICOLO, Species.SEEDOT, Species.NUZLEAF, Species.SHIFTRY, + Species.TAILLOW, + Species.SWELLOW, Species.WINGULL, Species.PELIPPER, Species.RALTS, @@ -62160,49 +62288,101 @@ export const tmSpecies: TmSpecies = { Species.SLAKOTH, Species.VIGOROTH, Species.SLAKING, + Species.NINCADA, + Species.NINJASK, + Species.SHEDINJA, + Species.WHISMUR, + Species.LOUDRED, + Species.EXPLOUD, Species.MAKUHITA, Species.HARIYAMA, Species.AZURILL, Species.NOSEPASS, + Species.SKITTY, + Species.DELCATTY, Species.SABLEYE, + Species.MAWILE, + Species.ARON, + Species.LAIRON, + Species.AGGRON, Species.MEDITITE, Species.MEDICHAM, + Species.ELECTRIKE, + Species.MANECTRIC, + Species.PLUSLE, + Species.MINUN, Species.VOLBEAT, Species.ILLUMISE, + Species.ROSELIA, Species.GULPIN, Species.SWALOT, + Species.CARVANHA, + Species.SHARPEDO, + Species.WAILMER, + Species.WAILORD, Species.NUMEL, Species.CAMERUPT, Species.TORKOAL, Species.SPOINK, Species.GRUMPIG, + Species.SPINDA, + Species.TRAPINCH, + Species.VIBRAVA, + Species.FLYGON, Species.CACNEA, Species.CACTURNE, Species.SWABLU, Species.ALTARIA, Species.ZANGOOSE, Species.SEVIPER, + Species.LUNATONE, + Species.SOLROCK, Species.BARBOACH, Species.WHISCASH, Species.CORPHISH, Species.CRAWDAUNT, + Species.BALTOY, + Species.CLAYDOL, + Species.LILEEP, + Species.CRADILY, + Species.ANORITH, + Species.ARMALDO, Species.FEEBAS, Species.MILOTIC, + Species.CASTFORM, + Species.KECLEON, Species.SHUPPET, Species.BANETTE, Species.DUSKULL, Species.DUSCLOPS, Species.TROPIUS, Species.CHIMECHO, + Species.ABSOL, Species.SNORUNT, Species.GLALIE, + Species.SPHEAL, + Species.SEALEO, + Species.WALREIN, + Species.CLAMPERL, + Species.HUNTAIL, + Species.GOREBYSS, + Species.RELICANTH, Species.LUVDISC, Species.BAGON, Species.SHELGON, Species.SALAMENCE, + Species.METANG, + Species.METAGROSS, + Species.REGIROCK, + Species.REGICE, + Species.REGISTEEL, + Species.LATIAS, + Species.LATIOS, Species.KYOGRE, Species.GROUDON, Species.RAYQUAZA, + Species.JIRACHI, + Species.DEOXYS, Species.TURTWIG, Species.GROTLE, Species.TORTERRA, @@ -62215,30 +62395,49 @@ export const tmSpecies: TmSpecies = { Species.STARLY, Species.STARAVIA, Species.STARAPTOR, + Species.BIDOOF, + Species.BIBAREL, Species.KRICKETOT, Species.KRICKETUNE, Species.SHINX, Species.LUXIO, Species.LUXRAY, + Species.BUDEW, + Species.ROSERADE, + Species.CRANIDOS, + Species.RAMPARDOS, + Species.SHIELDON, + Species.BASTIODON, + Species.BURMY, + Species.WORMADAM, + Species.MOTHIM, Species.COMBEE, Species.VESPIQUEN, Species.PACHIRISU, Species.BUIZEL, Species.FLOATZEL, + Species.CHERUBI, + Species.CHERRIM, Species.SHELLOS, Species.GASTRODON, Species.AMBIPOM, Species.DRIFLOON, Species.DRIFBLIM, + Species.BUNEARY, + Species.LOPUNNY, Species.MISMAGIUS, Species.HONCHKROW, + Species.GLAMEOW, + Species.PURUGLY, Species.CHINGLING, Species.STUNKY, Species.SKUNTANK, Species.BRONZOR, Species.BRONZONG, Species.BONSLY, + Species.MIME_JR, Species.HAPPINY, + Species.CHATOT, Species.SPIRITOMB, Species.GIBLE, Species.GABITE, @@ -62248,19 +62447,30 @@ export const tmSpecies: TmSpecies = { Species.LUCARIO, Species.HIPPOPOTAS, Species.HIPPOWDON, + Species.SKORUPI, + Species.DRAPION, Species.CROAGUNK, Species.TOXICROAK, + Species.CARNIVINE, Species.FINNEON, Species.LUMINEON, + Species.MANTYKE, Species.SNOVER, Species.ABOMASNOW, Species.WEAVILE, Species.MAGNEZONE, + Species.LICKILICKY, + Species.RHYPERIOR, + Species.TANGROWTH, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.TOGEKISS, Species.YANMEGA, Species.LEAFEON, Species.GLACEON, Species.GLISCOR, Species.MAMOSWINE, + Species.PORYGON_Z, Species.GALLADE, Species.PROBOPASS, Species.DUSKNOIR, @@ -62272,39 +62482,127 @@ export const tmSpecies: TmSpecies = { Species.DIALGA, Species.PALKIA, Species.HEATRAN, + Species.REGIGIGAS, Species.GIRATINA, Species.CRESSELIA, + Species.PHIONE, + Species.MANAPHY, + Species.DARKRAI, + Species.SHAYMIN, Species.ARCEUS, + Species.VICTINI, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.TEPIG, + Species.PIGNITE, + Species.EMBOAR, Species.OSHAWOTT, Species.DEWOTT, Species.SAMUROTT, + Species.PATRAT, + Species.WATCHOG, + Species.LILLIPUP, + Species.HERDIER, + Species.STOUTLAND, + Species.PURRLOIN, + Species.LIEPARD, + Species.PANSAGE, + Species.SIMISAGE, + Species.PANSEAR, + Species.SIMISEAR, + Species.PANPOUR, + Species.SIMIPOUR, + Species.MUNNA, + Species.MUSHARNA, + Species.PIDOVE, + Species.TRANQUILL, + Species.UNFEZANT, + Species.BLITZLE, + Species.ZEBSTRIKA, + Species.ROGGENROLA, + Species.BOLDORE, + Species.GIGALITH, + Species.WOOBAT, + Species.SWOOBAT, + Species.DRILBUR, + Species.EXCADRILL, + Species.AUDINO, Species.TIMBURR, Species.GURDURR, Species.CONKELDURR, + Species.TYMPOLE, + Species.PALPITOAD, + Species.SEISMITOAD, + Species.THROH, + Species.SAWK, Species.SEWADDLE, Species.SWADLOON, Species.LEAVANNY, + Species.VENIPEDE, + Species.WHIRLIPEDE, + Species.SCOLIPEDE, + Species.COTTONEE, + Species.WHIMSICOTT, Species.PETILIL, Species.LILLIGANT, Species.BASCULIN, Species.SANDILE, Species.KROKOROK, Species.KROOKODILE, + Species.DARUMAKA, + Species.DARMANITAN, + Species.MARACTUS, + Species.DWEBBLE, + Species.CRUSTLE, + Species.SCRAGGY, + Species.SCRAFTY, + Species.SIGILYPH, + Species.YAMASK, + Species.COFAGRIGUS, + Species.TIRTOUGA, + Species.CARRACOSTA, + Species.ARCHEN, + Species.ARCHEOPS, + Species.TRUBBISH, + Species.GARBODOR, Species.ZORUA, Species.ZOROARK, + Species.MINCCINO, + Species.CINCCINO, Species.GOTHITA, Species.GOTHORITA, Species.GOTHITELLE, + Species.SOLOSIS, + Species.DUOSION, + Species.REUNICLUS, Species.DUCKLETT, Species.SWANNA, + Species.VANILLITE, + Species.VANILLISH, + Species.VANILLUXE, Species.DEERLING, Species.SAWSBUCK, + Species.EMOLGA, + Species.KARRABLAST, + Species.ESCAVALIER, Species.FOONGUS, Species.AMOONGUSS, + Species.FRILLISH, + Species.JELLICENT, Species.ALOMOMOLA, + Species.JOLTIK, + Species.GALVANTULA, + Species.FERROSEED, + Species.FERROTHORN, + Species.KLINK, + Species.KLANG, + Species.KLINKLANG, Species.TYNAMO, Species.EELEKTRIK, Species.EELEKTROSS, + Species.ELGYEM, + Species.BEHEEYEM, Species.LITWICK, Species.LAMPENT, Species.CHANDELURE, @@ -62314,23 +62612,40 @@ export const tmSpecies: TmSpecies = { Species.CUBCHOO, Species.BEARTIC, Species.CRYOGONAL, + Species.SHELMET, + Species.ACCELGOR, + Species.STUNFISK, Species.MIENFOO, Species.MIENSHAO, + Species.DRUDDIGON, + Species.GOLETT, + Species.GOLURK, Species.PAWNIARD, Species.BISHARP, + Species.BOUFFALANT, Species.RUFFLET, Species.BRAVIARY, Species.VULLABY, Species.MANDIBUZZ, + Species.HEATMOR, + Species.DURANT, Species.DEINO, Species.ZWEILOUS, Species.HYDREIGON, Species.LARVESTA, Species.VOLCARONA, + Species.COBALION, + Species.TERRAKION, + Species.VIRIZION, Species.TORNADUS, Species.THUNDURUS, + Species.RESHIRAM, + Species.ZEKROM, Species.LANDORUS, + Species.KYUREM, + Species.KELDEO, Species.MELOETTA, + Species.GENESECT, Species.CHESPIN, Species.QUILLADIN, Species.CHESNAUGHT, @@ -62345,6 +62660,8 @@ export const tmSpecies: TmSpecies = { 'battle-bond', 'ash', ], + Species.BUNNELBY, + Species.DIGGERSBY, Species.FLETCHLING, Species.FLETCHINDER, Species.TALONFLAME, @@ -62354,14 +62671,43 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - Species.FLOETTE, + [ + Species.FLOETTE, + 'red', + 'yellow', + 'orange', + 'blue', + 'white', + ], Species.FLORGES, Species.SKIDDO, Species.GOGOAT, + Species.PANCHAM, + Species.PANGORO, + Species.FURFROU, + Species.ESPURR, + Species.MEOWSTIC, + Species.HONEDGE, + Species.DOUBLADE, + Species.AEGISLASH, + Species.SPRITZEE, + Species.AROMATISSE, + Species.SWIRLIX, + Species.SLURPUFF, + Species.INKAY, + Species.MALAMAR, + Species.BINACLE, + Species.BARBARACLE, Species.SKRELP, Species.DRAGALGE, Species.CLAUNCHER, Species.CLAWITZER, + Species.HELIOPTILE, + Species.HELIOLISK, + Species.TYRUNT, + Species.TYRANTRUM, + Species.AMAURA, + Species.AURORUS, Species.SYLVEON, Species.HAWLUCHA, Species.DEDENNE, @@ -62372,16 +62718,30 @@ export const tmSpecies: TmSpecies = { Species.KLEFKI, Species.PHANTUMP, Species.TREVENANT, + Species.PUMPKABOO, + Species.GOURGEIST, Species.BERGMITE, Species.AVALUGG, Species.NOIBAT, Species.NOIVERN, + Species.XERNEAS, + Species.YVELTAL, + Species.ZYGARDE, Species.DIANCIE, Species.HOOPA, Species.VOLCANION, Species.ROWLET, Species.DARTRIX, Species.DECIDUEYE, + Species.LITTEN, + Species.TORRACAT, + Species.INCINEROAR, + Species.POPPLIO, + Species.BRIONNE, + Species.PRIMARINA, + Species.PIKIPEK, + Species.TRUMBEAK, + Species.TOUCANNON, Species.YUNGOOS, Species.GUMSHOOS, Species.GRUBBIN, @@ -62394,28 +62754,84 @@ export const tmSpecies: TmSpecies = { Species.RIBOMBEE, Species.ROCKRUFF, Species.LYCANROC, + Species.WISHIWASHI, Species.MAREANIE, Species.TOXAPEX, Species.MUDBRAY, Species.MUDSDALE, + Species.DEWPIDER, + Species.ARAQUANID, Species.FOMANTIS, Species.LURANTIS, + Species.MORELULL, + Species.SHIINOTIC, Species.SALANDIT, Species.SALAZZLE, + Species.STUFFUL, + Species.BEWEAR, Species.BOUNSWEET, Species.STEENEE, Species.TSAREENA, + Species.COMFEY, Species.ORANGURU, Species.PASSIMIAN, + Species.WIMPOD, + Species.GOLISOPOD, Species.SANDYGAST, Species.PALOSSAND, + Species.TYPE_NULL, + Species.SILVALLY, + Species.MINIOR, Species.KOMALA, + Species.TURTONATOR, + Species.TOGEDEMARU, Species.MIMIKYU, Species.BRUXISH, + Species.DRAMPA, + Species.DHELMISE, Species.JANGMO_O, Species.HAKAMO_O, Species.KOMMO_O, + Species.TAPU_KOKO, + Species.TAPU_LELE, + Species.TAPU_BULU, + Species.TAPU_FINI, + Species.SOLGALEO, + Species.LUNALA, + Species.NIHILEGO, + Species.BUZZWOLE, + Species.PHEROMOSA, + Species.XURKITREE, + Species.CELESTEELA, + Species.KARTANA, + Species.GUZZLORD, + Species.NECROZMA, Species.MAGEARNA, + Species.MARSHADOW, + Species.POIPOLE, + Species.NAGANADEL, + Species.STAKATAKA, + Species.BLACEPHALON, + Species.ZERAORA, + Species.ALOLA_RATTATA, + Species.ALOLA_RATICATE, + Species.ALOLA_RAICHU, + Species.ALOLA_SANDSHREW, + Species.ALOLA_SANDSLASH, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.ALOLA_DIGLETT, + Species.ALOLA_DUGTRIO, + Species.ALOLA_MEOWTH, + Species.ALOLA_PERSIAN, + Species.ALOLA_GEODUDE, + Species.ALOLA_GRAVELER, + Species.ALOLA_GOLEM, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + Species.ALOLA_EXEGGUTOR, + Species.ALOLA_MAROWAK, + Species.ETERNAL_FLOETTE, Species.GROOKEY, Species.THWACKEY, Species.RILLABOOM, @@ -62596,21 +63012,6 @@ export const tmSpecies: TmSpecies = { Species.MUNKIDORI, Species.FEZANDIPITI, Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ETERNAL_FLOETTE, Species.GALAR_MEOWTH, Species.GALAR_SLOWPOKE, Species.GALAR_SLOWBRO, diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 044bd4ec8..36d76edcf 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -212,7 +212,7 @@ export class TrainerConfig { this.battleBgm = 'battle_trainer'; this.victoryBgm = 'victory_trainer'; this.partyTemplates = [ trainerPartyTemplates.TWO_AVG ]; - this.speciesFilter = species => (allowLegendaries || (!species.legendary && !species.pseudoLegendary && !species.mythical)) && !species.isTrainerForbidden(); + this.speciesFilter = species => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden(); } getKey(): string { @@ -509,7 +509,7 @@ function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSl function getSpeciesFilterRandomPartyMemberFunc(speciesFilter: PokemonSpeciesFilter, trainerSlot: TrainerSlot = TrainerSlot.TRAINER, allowLegendaries?: boolean, postProcess?: (EnemyPokemon: EnemyPokemon) => void): PartyMemberFunc { const originalSpeciesFilter = speciesFilter; - speciesFilter = (species: PokemonSpecies) => (allowLegendaries || (!species.legendary && !species.pseudoLegendary && !species.mythical)) && !species.isTrainerForbidden() && originalSpeciesFilter(species); + speciesFilter = (species: PokemonSpecies) => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden() && originalSpeciesFilter(species); return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { const ret = scene.addEnemyPokemon(getPokemonSpecies(scene.randomSpecies(scene.currentBattle.waveIndex, level, false, speciesFilter).getTrainerSpeciesForLevel(level, true, strength)), level, trainerSlot, undefined, undefined, postProcess); return ret; diff --git a/src/data/type.ts b/src/data/type.ts index 14f9f932a..35c56aecd 100644 --- a/src/data/type.ts +++ b/src/data/type.ts @@ -543,4 +543,4 @@ export function getTypeRgb(type: Type): [ integer, integer, integer ] { default: return [ 0, 0, 0 ]; } -} \ No newline at end of file +} diff --git a/src/egg-hatch-phase.ts b/src/egg-hatch-phase.ts index 19934ad6e..70f2d5f38 100644 --- a/src/egg-hatch-phase.ts +++ b/src/egg-hatch-phase.ts @@ -241,10 +241,12 @@ export class EggHatchPhase extends Phase { doReveal(): void { const isShiny = this.pokemon.isShiny(); - if (this.pokemon.species.mythical) - this.scene.validateAchv(achvs.HATCH_MYTHICAL); + if (this.pokemon.species.subLegendary) + this.scene.validateAchv(achvs.HATCH_SUB_LEGENDARY); if (this.pokemon.species.legendary) this.scene.validateAchv(achvs.HATCH_LEGENDARY); + if (this.pokemon.species.mythical) + this.scene.validateAchv(achvs.HATCH_MYTHICAL); if (isShiny) this.scene.validateAchv(achvs.HATCH_SHINY); this.eggContainer.setVisible(false); diff --git a/src/enums/buttons.ts b/src/enums/buttons.ts new file mode 100644 index 000000000..034c5a2af --- /dev/null +++ b/src/enums/buttons.ts @@ -0,0 +1,19 @@ +export enum Button { + UP, + DOWN, + LEFT, + RIGHT, + SUBMIT, + ACTION, + CANCEL, + MENU, + STATS, + CYCLE_SHINY, + CYCLE_FORM, + CYCLE_GENDER, + CYCLE_ABILITY, + CYCLE_NATURE, + CYCLE_VARIANT, + SPEED_UP, + SLOW_DOWN +} diff --git a/src/field/arena.ts b/src/field/arena.ts index 5b14560d4..e8cc98c0a 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -106,7 +106,7 @@ export class Arena { ret = getPokemonSpecies(species); - if (ret.pseudoLegendary || ret.legendary || ret.mythical) { + if (ret.subLegendary || ret.legendary || ret.mythical) { switch (true) { case (ret.baseTotal >= 720): regen = level < 90; @@ -336,8 +336,8 @@ export class Arena { return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(move); } - isMoveTerrainCancelled(user: Pokemon, move: Move) { - return this.terrain && this.terrain.isMoveTerrainCancelled(user, move); + isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move) { + return this.terrain && this.terrain.isMoveTerrainCancelled(user, targets, move); } getTerrainType() : TerrainType { @@ -492,7 +492,7 @@ export class Arena { } addTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, side: ArenaTagSide = ArenaTagSide.BOTH, targetIndex?: BattlerIndex): boolean { - const existingTag = this.getTag(tagType); + const existingTag = this.getTagOnSide(tagType, side); if (existingTag) { existingTag.onOverlap(this); return false; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 55036e190..9ac3aec53 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4,22 +4,22 @@ import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; import { Moves } from "../data/enums/moves"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr } from "../data/move"; -import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, starterPassiveAbilities } from '../data/pokemon-species'; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr, CounterDamageAttr } from "../data/move"; +import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species'; import * as Utils from '../utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type'; import { getLevelTotalExp } from '../data/exp'; import { Stat } from '../data/pokemon-stat'; -import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, TerastallizeModifier } from '../modifier/modifier'; +import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, TerastallizeModifier } from '../modifier/modifier'; import { PokeballType } from '../data/pokeball'; import { Gender } from '../data/gender'; import { initMoveAnim, loadMoveAnimAssets } from '../data/battle-anims'; -import { Status, StatusEffect } from '../data/status-effect'; +import { Status, StatusEffect, getRandomStatus } from '../data/status-effect'; import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from '../data/pokemon-evolutions'; import { reverseCompatibleTms, tmSpecies } from '../data/tms'; import { DamagePhase, FaintPhase, LearnMovePhase, ObtainStatusEffectPhase, StatChangePhase, SwitchSummonPhase } from '../phases'; import { BattleStat } from '../data/battle-stat'; -import { BattlerTag, BattlerTagLapseType, EncoreTag, HelpingHandTag, TypeBoostTag, getBattlerTag } from '../data/battler-tags'; +import { BattlerTag, BattlerTagLapseType, EncoreTag, HelpingHandTag, HighestStatBoostTag, TypeBoostTag, getBattlerTag } from '../data/battler-tags'; import { BattlerTagType } from "../data/enums/battler-tag-type"; import { Species } from '../data/enums/species'; import { WeatherType } from '../data/weather'; @@ -27,7 +27,7 @@ import { TempBattleStat } from '../data/temp-battle-stat'; import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from '../data/arena-tag'; import { ArenaTagType } from "../data/enums/arena-tag-type"; import { Biome } from "../data/enums/biome"; -import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr } from '../data/ability'; +import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr } from '../data/ability'; import { Abilities } from "#app/data/enums/abilities"; import PokemonData from '../system/pokemon-data'; import Battle, { BattlerIndex } from '../battle'; @@ -37,13 +37,15 @@ import PartyUiHandler, { PartyOption, PartyUiMode } from '../ui/party-ui-handler import SoundFade from 'phaser3-rex-plugins/plugins/soundfade'; import { LevelMoves } from '../data/pokemon-level-moves'; import { DamageAchv, achvs } from '../system/achv'; -import { DexAttr, StarterMoveset } from '../system/game-data'; +import { DexAttr, StarterDataEntry, StarterMoveset } from '../system/game-data'; import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from '@material/material-color-utilities'; import { Nature, getNatureStatMultiplier } from '../data/nature'; import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms'; import { TerrainType } from '../data/terrain'; import { TrainerSlot } from '../data/trainer-config'; -import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides'; +import { ABILITY_OVERRIDE, MOVE_OVERRIDE, MOVE_OVERRIDE_2, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_MOVE_OVERRIDE_2, OPP_PASSIVE_ABILITY_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE, PASSIVE_ABILITY_OVERRIDE } from '../overrides'; +import { BerryType } from '../data/berry'; +import i18next from '../plugins/i18n'; export enum FieldPosition { CENTER, @@ -455,6 +457,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 1; } + getHeldItems(): PokemonHeldItemModifier[] { + if (!this.scene) + return []; + return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[]; + } + updateScale(): void { this.setScale(this.getSpriteScale()); } @@ -581,13 +589,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ret *= 1.5; break; case Stat.SPD: + // Check both the player and enemy to see if Tailwind should be multiplying the speed of the Pokemon + if ((this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)) + || (!this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY))) + ret *= 2; + if (this.getTag(BattlerTagType.SLOW_START)) ret >>= 1; if (this.status && this.status.effect === StatusEffect.PARALYSIS) ret >>= 1; break; } - + + const highestStatBoost = this.findTag(t => t instanceof HighestStatBoostTag && (t as HighestStatBoostTag).stat === stat) as HighestStatBoostTag; + if (highestStatBoost) + ret *= highestStatBoost.multiplier; + return Math.floor(ret); } @@ -712,6 +729,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.moveset[0] = new PokemonMove(MOVE_OVERRIDE, Math.min(this.moveset[0].ppUsed, allMoves[MOVE_OVERRIDE].pp)); else if (OPP_MOVE_OVERRIDE && !this.isPlayer()) this.moveset[0] = new PokemonMove(OPP_MOVE_OVERRIDE, Math.min(this.moveset[0].ppUsed, allMoves[OPP_MOVE_OVERRIDE].pp)); + if (MOVE_OVERRIDE_2 && this.isPlayer()) + this.moveset[1] = new PokemonMove(MOVE_OVERRIDE_2, Math.min(this.moveset[1].ppUsed, allMoves[MOVE_OVERRIDE_2].pp)); + else if (OPP_MOVE_OVERRIDE_2 && !this.isPlayer()) + this.moveset[1] = new PokemonMove(OPP_MOVE_OVERRIDE_2, Math.min(this.moveset[1].ppUsed, allMoves[OPP_MOVE_OVERRIDE_2].pp)); + return ret; } @@ -756,9 +778,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { types.splice(flyingIndex, 1); } - if (!types.length) + if (!types.length) // become UNKNOWN if no types are present types.push(Type.UNKNOWN); + if (types.length > 1 && types.includes(Type.UNKNOWN)) { // remove UNKNOWN if other types are present + const index = types.indexOf(Type.UNKNOWN); + if (index !== -1) { + types.splice(index, 1); + } + } + return types; } @@ -782,6 +811,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getPassiveAbility(): Ability { + if (PASSIVE_ABILITY_OVERRIDE && this.isPlayer()) + return allAbilities[PASSIVE_ABILITY_OVERRIDE]; + if (OPP_PASSIVE_ABILITY_OVERRIDE && !this.isPlayer()) + return allAbilities[OPP_PASSIVE_ABILITY_OVERRIDE]; + let starterSpeciesId = this.species.speciesId; while (pokemonPrevolutions.hasOwnProperty(starterSpeciesId)) starterSpeciesId = pokemonPrevolutions[starterSpeciesId]; @@ -789,6 +823,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } hasPassive(): boolean { + if ((PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && this.isPlayer()) || (OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && !this.isPlayer())) + return true; return this.passive || this.isBoss(); } @@ -858,7 +894,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getAttackMoveEffectiveness(source: Pokemon, move: PokemonMove): TypeDamageMultiplier { const typeless = !!move.getMove().getAttrs(TypelessAttr).length; - const typeMultiplier = new Utils.NumberHolder(this.getAttackTypeEffectiveness(move.getMove().type)); + const typeMultiplier = new Utils.NumberHolder(this.getAttackTypeEffectiveness(move.getMove().type, source)); const cancelled = new Utils.BooleanHolder(false); if (!typeless) applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelled, typeMultiplier, true); @@ -867,11 +903,20 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return (!cancelled.value ? typeMultiplier.value : 0) as TypeDamageMultiplier; } - getAttackTypeEffectiveness(moveType: Type): TypeDamageMultiplier { + getAttackTypeEffectiveness(moveType: Type, source?: Pokemon): TypeDamageMultiplier { if (moveType === Type.STELLAR) return this.isTerastallized() ? 2 : 1; const types = this.getTypes(true, true); - let multiplier = getTypeDamageMultiplier(moveType, types[0]) * (types.length > 1 ? getTypeDamageMultiplier(moveType, types[1]) : 1) * (types.length > 2 ? getTypeDamageMultiplier(moveType, types[2]) : 1) as TypeDamageMultiplier; + + const ignorableImmunities = source?.getAbility()?.getAttrs(IgnoreTypeImmunityAbAttr) || []; + const cancelled = new Utils.BooleanHolder(false); + + let multiplier = types.map(defType => + ignorableImmunities.some(attr => attr.apply(source, false, cancelled, [moveType, defType])) + ? 1 + : getTypeDamageMultiplier(moveType, defType) + ).reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; + // Handle strong winds lowering effectiveness of types super effective against pure flying if (this.scene.arena.weather?.weatherType === WeatherType.STRONG_WINDS && !this.scene.arena.weather.isEffectSuppressed(this.scene) && multiplier >= 2 && this.isOfType(Type.FLYING) && getTypeDamageMultiplier(moveType, Type.FLYING) === 2) multiplier /= 2; @@ -882,12 +927,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const types = this.getTypes(true); const enemyTypes = pokemon.getTypes(true, true); const outspeed = (this.isActive(true) ? this.getBattleStat(Stat.SPD, pokemon) : this.getStat(Stat.SPD)) <= pokemon.getBattleStat(Stat.SPD, this); - let atkScore = pokemon.getAttackTypeEffectiveness(types[0]) * (outspeed ? 1.25 : 1); - let defScore = 1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[0]), 0.25); + let atkScore = pokemon.getAttackTypeEffectiveness(types[0], this) * (outspeed ? 1.25 : 1); + let defScore = 1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[0], pokemon), 0.25); if (types.length > 1) - atkScore *= pokemon.getAttackTypeEffectiveness(types[1]); + atkScore *= pokemon.getAttackTypeEffectiveness(types[1], this); if (enemyTypes.length > 1) - defScore *= (1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[1]), 0.25)); + defScore *= (1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[1], pokemon), 0.25)); let hpDiffRatio = this.getHpRatio() + (1 - pokemon.getHpRatio()); if (outspeed) hpDiffRatio = Math.min(hpDiffRatio * 1.5, 1); @@ -1240,7 +1285,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const cancelled = new Utils.BooleanHolder(false); const typeless = !!move.getAttrs(TypelessAttr).length; const typeMultiplier = new Utils.NumberHolder(!typeless && (moveCategory !== MoveCategory.STATUS || move.getAttrs(StatusMoveTypeImmunityAttr).find(attr => types.includes((attr as StatusMoveTypeImmunityAttr).immuneType))) - ? this.getAttackTypeEffectiveness(type) + ? this.getAttackTypeEffectiveness(type, source) : 1); applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); if (typeless) @@ -1319,7 +1364,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const sourceAtk = new Utils.IntegerHolder(source.getBattleStat(isPhysical ? Stat.ATK : Stat.SPATK, this, null, isCritical)); const targetDef = new Utils.IntegerHolder(this.getBattleStat(isPhysical ? Stat.DEF : Stat.SPDEF, source, move, isCritical)); - const criticalMultiplier = isCritical ? 1.5 : 1; + const criticalMultiplier = new Utils.NumberHolder(isCritical ? 1.5 : 1); + applyAbAttrs(MultCritAbAttr, source, null, criticalMultiplier); const screenMultiplier = new Utils.NumberHolder(1); if (!isCritical) { this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, move.category, this.scene.currentBattle.double, screenMultiplier); @@ -1342,7 +1388,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(VariableDefAttr, source, this, move, targetDef); if (!isTypeImmune) { - damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier); + damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier.value); if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) { const burnDamageReductionCancelled = new Utils.BooleanHolder(false); applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled); @@ -1410,7 +1456,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo); this.turnData.damageTaken += damage.value; if (isCritical) - this.scene.queueMessage('A critical hit!'); + this.scene.queueMessage(i18next.t('battle:hitResultCriticalHit')); this.scene.setPhaseQueueSplice(); if (source.isPlayer()) { this.scene.validateAchvs(DamageAchv, damage); @@ -1428,16 +1474,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (source.turnData.hitsLeft === 1) { switch (result) { case HitResult.SUPER_EFFECTIVE: - this.scene.queueMessage('It\'s super effective!'); + this.scene.queueMessage(i18next.t('battle:hitResultSuperEffective')); break; case HitResult.NOT_VERY_EFFECTIVE: - this.scene.queueMessage('It\'s not very effective…'); + this.scene.queueMessage(i18next.t('battle:hitResultNotVeryEffective')); break; case HitResult.NO_EFFECT: - this.scene.queueMessage(`It doesn\'t affect ${this.name}!`); + this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name })); break; case HitResult.ONE_HIT_KO: - this.scene.queueMessage('It\'s a one-hit KO!'); + this.scene.queueMessage(i18next.t('battle:hitResultOneHitKO')); break; } } @@ -1454,7 +1500,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, battlerMove, cancelled, typeMultiplier)); } if (!typeMultiplier.value) - this.scene.queueMessage(`It doesn\'t affect ${this.name}!`); + this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name })); result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS; break; } @@ -1662,18 +1708,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); } - cry(soundConfig?: Phaser.Types.Sound.SoundConfig): AnySound { - const cry = this.getSpeciesForm().cry(this.scene, soundConfig); + cry(soundConfig?: Phaser.Types.Sound.SoundConfig, sceneOverride?: BattleScene): AnySound { + const scene = sceneOverride || this.scene; + const cry = this.getSpeciesForm().cry(scene, soundConfig); let duration = cry.totalDuration * 1000; if (this.fusionSpecies) { - let fusionCry = this.getFusionSpeciesForm().cry(this.scene, soundConfig, true); + let fusionCry = this.getFusionSpeciesForm().cry(scene, soundConfig, true); duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); - this.scene.time.delayedCall(Utils.fixedInt(Math.ceil(duration * 0.4)), () => { + scene.time.delayedCall(Utils.fixedInt(Math.ceil(duration * 0.4)), () => { try { - SoundFade.fadeOut(this.scene, cry, Utils.fixedInt(Math.ceil(duration * 0.2))); - fusionCry = this.getFusionSpeciesForm().cry(this.scene, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, soundConfig)); - SoundFade.fadeIn(this.scene, fusionCry, Utils.fixedInt(Math.ceil(duration * 0.2)), this.scene.masterVolume * this.scene.seVolume, 0); + SoundFade.fadeOut(scene, cry, Utils.fixedInt(Math.ceil(duration * 0.2))); + fusionCry = this.getFusionSpeciesForm().cry(scene, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, soundConfig)); + SoundFade.fadeIn(scene, fusionCry, Utils.fixedInt(Math.ceil(duration * 0.2)), scene.masterVolume * scene.seVolume, 0); } catch (err) { console.error(err); } @@ -1885,6 +1932,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs(ReduceStatusEffectDurationAbAttr, this, null, effect, statusCureTurn); this.setFrameRate(4); + + // If the user is invulnerable, lets remove their invulnerability when they fall asleep + const invulnerableTags = [ + BattlerTagType.UNDERGROUND, + BattlerTagType.UNDERWATER, + BattlerTagType.HIDDEN, + BattlerTagType.FLYING + ]; + + const tag = invulnerableTags.find((t) => this.getTag(t)); + + if (tag) { + this.removeTag(tag); + this.getMoveQueue().pop(); + } } this.status = new Status(effect, 0, statusCureTurn?.value); @@ -2354,6 +2416,37 @@ export class PlayerPokemon extends Pokemon { }, PartyUiHandler.FilterNonFainted); }); } + + addFriendship(friendship: integer): void { + const starterSpeciesId = this.species.getRootSpeciesId(); + const fusionStarterSpeciesId = this.isFusion() ? this.fusionSpecies.getRootSpeciesId() : 0; + const starterData = [ + this.scene.gameData.starterData[starterSpeciesId], + fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null + ].filter(d => d); + const amount = new Utils.IntegerHolder(friendship); + const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1))); + if (amount.value > 0) { + this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); + this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount); + + this.friendship = Math.min(this.friendship + amount.value, 255); + if (this.friendship === 255) + this.scene.validateAchv(achvs.MAX_FRIENDSHIP); + starterData.forEach((sd: StarterDataEntry, i: integer) => { + const speciesId = !i ? starterSpeciesId : fusionStarterSpeciesId as Species; + sd.friendship = (sd.friendship || 0) + starterAmount.value; + if (sd.friendship >= getStarterValueFriendshipCap(speciesStarters[speciesId])) { + this.scene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1); + sd.friendship = 0; + } + }); + } else { + this.friendship = Math.max(this.friendship + amount.value, 0); + for (let sd of starterData) + sd.friendship = Math.max((sd.friendship || 0) + starterAmount.value, 0); + } + } getPossibleEvolution(evolution: SpeciesFormEvolution): Promise { return new Promise(resolve => { @@ -2421,12 +2514,18 @@ export class PlayerPokemon extends Pokemon { private handleSpecialEvolutions(evolution: SpeciesFormEvolution) { const isFusion = evolution instanceof FusionSpeciesFormEvolution; - if ((!isFusion ? this.species : this.fusionSpecies).speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) { - const newEvolution = pokemonEvolutions[this.species.speciesId][1]; + + const evoSpecies = (!isFusion ? this.species : this.fusionSpecies) + if (evoSpecies.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) { + const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1]; + if (newEvolution.condition.predicate(this)) { const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature); newPokemon.natureOverride = this.natureOverride; + newPokemon.passive = this.passive; newPokemon.moveset = this.moveset.slice(); + newPokemon.moveset = this.copyMoveset(); + newPokemon.luck = this.luck; newPokemon.fusionSpecies = this.fusionSpecies; newPokemon.fusionFormIndex = this.fusionFormIndex; newPokemon.fusionAbilityIndex = this.fusionAbilityIndex; @@ -2434,8 +2533,9 @@ export class PlayerPokemon extends Pokemon { newPokemon.fusionVariant = this.fusionVariant; newPokemon.fusionGender = this.fusionGender; newPokemon.fusionLuck = this.fusionLuck; + this.scene.getParty().push(newPokemon); - newPokemon.evolve(newEvolution); + newPokemon.evolve(!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)); const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, true) as PokemonHeldItemModifier[]; modifiers.forEach(m => { @@ -2485,6 +2585,10 @@ export class PlayerPokemon extends Pokemon { this.generateCompatibleTms(); } + /** + * Returns a Promise to fuse two PlayerPokemon together + * @param pokemon The PlayerPokemon to fuse to this one + */ fuse(pokemon: PlayerPokemon): Promise { return new Promise(resolve => { this.fusionSpecies = pokemon.species; @@ -2498,8 +2602,25 @@ export class PlayerPokemon extends Pokemon { this.scene.validateAchv(achvs.SPLICE); this.scene.gameData.gameStats.pokemonFused++; + // Store the average HP% that each Pokemon has + const newHpPercent = ((pokemon.hp / pokemon.stats[Stat.HP]) + (this.hp / this.stats[Stat.HP])) / 2; + this.generateName(); this.calculateStats(); + + // Set this Pokemon's HP to the average % of both fusion components + this.hp = Math.round(this.stats[Stat.HP] * newHpPercent); + if (!this.isFainted()) { + // If this Pokemon hasn't fainted, make sure the HP wasn't set over the new maximum + this.hp = Math.min(this.hp, this.stats[Stat.HP]); + this.status = getRandomStatus(this.status, pokemon.status); // Get a random valid status between the two + } + else if (!pokemon.isFainted()) { + // If this Pokemon fainted but the other hasn't, make sure the HP wasn't set to zero + this.hp = Math.max(this.hp, 1); + this.status = pokemon.status; // Inherit the other Pokemon's status + } + this.generateCompatibleTms(); this.updateInfo(true); const fusedPartyMemberIndex = this.scene.getParty().indexOf(pokemon); @@ -2533,6 +2654,15 @@ export class PlayerPokemon extends Pokemon { this.updateFusionPalette(); }); } + + /** Returns a deep copy of this Pokemon's moveset array */ + copyMoveset(): PokemonMove[] { + let newMoveset = []; + this.moveset.forEach(move => + newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual))); + + return newMoveset; + } } export class EnemyPokemon extends Pokemon { @@ -2671,9 +2801,13 @@ export class EnemyPokemon extends Pokemon { let targetScores: integer[] = []; for (let mt of moveTargets[move.id]) { + // Prevent a target score from being calculated when the target is whoever attacks the user + if (mt === BattlerIndex.ATTACKER) + break; + const target = this.scene.getField()[mt]; let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); - if (move.name.endsWith(' (N)')) + if (move.name.endsWith(' (N)') || !move.applyConditions(this, target, move)) targetScore = -20; else if (move instanceof AttackMove) { const effectiveness = target.getAttackMoveEffectiveness(this, pokemonMove); @@ -2741,8 +2875,14 @@ export class EnemyPokemon extends Pokemon { return scoreA < scoreB ? 1 : scoreA > scoreB ? -1 : 0; }); - if (!sortedBenefitScores.length) + if (!sortedBenefitScores.length) { + // Set target to BattlerIndex.ATTACKER when using a counter move + // This is the same as when the player does so + if (!!move.findAttr(attr => attr instanceof CounterDamageAttr)) + return [BattlerIndex.ATTACKER]; + return []; + } let targetWeights = sortedBenefitScores.map(s => s[1]); const lowestWeight = targetWeights[targetWeights.length - 1]; @@ -2993,6 +3133,8 @@ export class PokemonSummonData { export class PokemonBattleData { public hitCount: integer = 0; public endured: boolean = false; + public berriesEaten: BerryType[] = []; + public abilitiesApplied: Abilities[] = []; } export class PokemonBattleSummonData { @@ -3055,7 +3197,7 @@ export class PokemonMove { isUsable(pokemon: Pokemon, ignorePp?: boolean): boolean { if (this.moveId && pokemon.summonData?.disabledMove === this.moveId) return false; - return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1; + return (ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1) && !this.getMove().name.endsWith(' (N)'); } getMove(): Move { diff --git a/src/game-mode.ts b/src/game-mode.ts index 76c97b4c9..81db82425 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -121,7 +121,7 @@ export class GameMode implements GameModeConfig { getOverrideSpecies(waveIndex: integer): PokemonSpecies { if (this.isDaily && this.isWaveFinal(waveIndex)) { - const allFinalBossSpecies = allSpecies.filter(s => (s.pseudoLegendary || s.legendary || s.mythical) + const allFinalBossSpecies = allSpecies.filter(s => (s.subLegendary || s.legendary || s.mythical) && s.baseTotal >= 600 && s.speciesId !== Species.ETERNATUS && s.speciesId !== Species.ARCEUS); return Utils.randSeedItem(allFinalBossSpecies); } diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts new file mode 100644 index 000000000..5f5615358 --- /dev/null +++ b/src/inputs-controller.ts @@ -0,0 +1,294 @@ +import Phaser, {Time} from "phaser"; +import * as Utils from "./utils"; +import {initTouchControls} from './touch-controls'; +import pad_generic from "./configs/pad_generic"; +import pad_unlicensedSNES from "./configs/pad_unlicensedSNES"; +import pad_xbox360 from "./configs/pad_xbox360"; +import pad_dualshock from "./configs/pad_dualshock"; +import {Button} from "./enums/buttons"; + +export interface GamepadMapping { + [key: string]: number; +} + +export interface GamepadConfig { + padID: string; + padType: string; + gamepadMapping: GamepadMapping; +} + +export interface ActionGamepadMapping { + [key: string]: Button; +} + +const repeatInputDelayMillis = 250; + +export class InputsController { + private buttonKeys: Phaser.Input.Keyboard.Key[][]; + private gamepads: Array = new Array(); + private scene: Phaser.Scene; + + // buttonLock ensures only a single movement key is firing repeated inputs + // (i.e. by holding down a button) at a time + private buttonLock: Button; + private buttonLock2: Button; + private interactions: Map> = new Map(); + private time: Time; + private player: Map = new Map(); + + constructor(scene: Phaser.Scene) { + this.scene = scene; + this.time = this.scene.time; + this.buttonKeys = []; + + for (const b of Utils.getEnumValues(Button)) { + this.interactions[b] = { + pressTime: false, + isPressed: false, + } + } + // We don't want the menu key to be repeated + delete this.interactions[Button.MENU]; + delete this.interactions[Button.STATS]; + this.init(); + } + + init(): void { + this.events = new Phaser.Events.EventEmitter(); + // Handle the game losing focus + this.scene.game.events.on(Phaser.Core.Events.BLUR, () => { + this.loseFocus() + }) + + if (typeof this.scene.input.gamepad !== 'undefined') { + this.scene.input.gamepad.on('connected', function (thisGamepad) { + this.refreshGamepads(); + this.setupGamepad(thisGamepad); + }, this); + + // Check to see if the gamepad has already been setup by the browser + this.scene.input.gamepad.refreshPads(); + if (this.scene.input.gamepad.total) { + this.refreshGamepads(); + for (const thisGamepad of this.gamepads) { + this.scene.input.gamepad.emit('connected', thisGamepad); + } + } + + this.scene.input.gamepad.on('down', this.gamepadButtonDown, this); + this.scene.input.gamepad.on('up', this.gamepadButtonUp, this); + } + + // Keyboard + this.setupKeyboardControls(); + } + + loseFocus(): void { + this.deactivatePressedKey(); + } + + update(): void { + // reversed to let the cancel button have a kinda priority on the action button + for (const b of Utils.getEnumValues(Button).reverse()) { + if (!this.interactions.hasOwnProperty(b)) continue; + if (this.repeatInputDurationJustPassed(b) && this.interactions[b].isPressed) { + this.events.emit('input_down', { + controller_type: 'repeated', + button: b, + }); + this.setLastProcessedMovementTime(b); + } + } + } + + setupGamepad(thisGamepad: Phaser.Input.Gamepad.Gamepad): void { + let gamepadID = thisGamepad.id.toLowerCase(); + const mappedPad = this.mapGamepad(gamepadID); + this.player['mapping'] = mappedPad.gamepadMapping; + } + + refreshGamepads(): void { + // Sometimes, gamepads are undefined. For some reason. + this.gamepads = this.scene.input.gamepad.gamepads.filter(function (el) { + return el != null; + }); + + for (const [index, thisGamepad] of this.gamepads.entries()) { + thisGamepad.index = index; // Overwrite the gamepad index, in case we had undefined gamepads earlier + } + } + + getActionGamepadMapping(): ActionGamepadMapping { + const gamepadMapping = {}; + if (!this.player?.mapping) return gamepadMapping; + gamepadMapping[this.player.mapping.LC_N] = Button.UP; + gamepadMapping[this.player.mapping.LC_S] = Button.DOWN; + gamepadMapping[this.player.mapping.LC_W] = Button.LEFT; + gamepadMapping[this.player.mapping.LC_E] = Button.RIGHT; + gamepadMapping[this.player.mapping.TOUCH] = Button.SUBMIT; + gamepadMapping[this.player.mapping.RC_S] = this.scene.abSwapped ? Button.CANCEL : Button.ACTION; + gamepadMapping[this.player.mapping.RC_E] = this.scene.abSwapped ? Button.ACTION : Button.CANCEL; + gamepadMapping[this.player.mapping.SELECT] = Button.STATS; + gamepadMapping[this.player.mapping.START] = Button.MENU; + gamepadMapping[this.player.mapping.RB] = Button.CYCLE_SHINY; + gamepadMapping[this.player.mapping.LB] = Button.CYCLE_FORM; + gamepadMapping[this.player.mapping.LT] = Button.CYCLE_GENDER; + gamepadMapping[this.player.mapping.RT] = Button.CYCLE_ABILITY; + gamepadMapping[this.player.mapping.RC_W] = Button.CYCLE_NATURE; + gamepadMapping[this.player.mapping.RC_N] = Button.CYCLE_VARIANT; + gamepadMapping[this.player.mapping.LS] = Button.SPEED_UP; + gamepadMapping[this.player.mapping.RS] = Button.SLOW_DOWN; + + return gamepadMapping; + } + + gamepadButtonDown(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void { + if (!this.scene.gamepadSupport) return; + const actionMapping = this.getActionGamepadMapping(); + const buttonDown = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; + if (buttonDown !== undefined) { + this.events.emit('input_down', { + controller_type: 'gamepad', + button: buttonDown, + }); + this.setLastProcessedMovementTime(buttonDown); + } + } + + gamepadButtonUp(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void { + if (!this.scene.gamepadSupport) return; + const actionMapping = this.getActionGamepadMapping(); + const buttonUp = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; + if (buttonUp !== undefined) { + this.events.emit('input_up', { + controller_type: 'gamepad', + button: buttonUp, + }); + this.delLastProcessedMovementTime(buttonUp); + } + } + + setupKeyboardControls(): void { + const keyCodes = Phaser.Input.Keyboard.KeyCodes; + const keyConfig = { + [Button.UP]: [keyCodes.UP, keyCodes.W], + [Button.DOWN]: [keyCodes.DOWN, keyCodes.S], + [Button.LEFT]: [keyCodes.LEFT, keyCodes.A], + [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], + [Button.SUBMIT]: [keyCodes.ENTER], + [Button.ACTION]: [keyCodes.SPACE, keyCodes.Z], + [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], + [Button.MENU]: [keyCodes.ESC, keyCodes.M], + [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], + [Button.CYCLE_SHINY]: [keyCodes.R], + [Button.CYCLE_FORM]: [keyCodes.F], + [Button.CYCLE_GENDER]: [keyCodes.G], + [Button.CYCLE_ABILITY]: [keyCodes.E], + [Button.CYCLE_NATURE]: [keyCodes.N], + [Button.CYCLE_VARIANT]: [keyCodes.V], + [Button.SPEED_UP]: [keyCodes.PLUS], + [Button.SLOW_DOWN]: [keyCodes.MINUS] + }; + const mobileKeyConfig = {}; + for (const b of Utils.getEnumValues(Button)) { + const keys: Phaser.Input.Keyboard.Key[] = []; + if (keyConfig.hasOwnProperty(b)) { + for (let k of keyConfig[b]) + keys.push(this.scene.input.keyboard.addKey(k, false)); + mobileKeyConfig[Button[b]] = keys[0]; + } + this.buttonKeys[b] = keys; + } + + initTouchControls(mobileKeyConfig); + this.listenInputKeyboard(); + } + + listenInputKeyboard(): void { + this.buttonKeys.forEach((row, index) => { + for (const key of row) { + key.on('down', () => { + this.events.emit('input_down', { + controller_type: 'keyboard', + button: index, + }); + this.setLastProcessedMovementTime(index); + }); + key.on('up', () => { + this.events.emit('input_up', { + controller_type: 'keyboard', + button: index, + }); + this.delLastProcessedMovementTime(index); + }); + } + }); + } + + mapGamepad(id: string): GamepadConfig { + id = id.toLowerCase(); + + if (id.includes('081f') && id.includes('e401')) { + return pad_unlicensedSNES; + } else if (id.includes('xbox') && id.includes('360')) { + return pad_xbox360; + } else if (id.includes('054c')) { + return pad_dualshock; + } + + return pad_generic; + } + + /** + * repeatInputDurationJustPassed returns true if @param button has been held down long + * enough to fire a repeated input. A button must claim the buttonLock before + * firing a repeated input - this is to prevent multiple buttons from firing repeatedly. + */ + repeatInputDurationJustPassed(button: Button): boolean { + if (!this.isButtonLocked(button)) return false; + if (this.time.now - this.interactions[button].pressTime >= repeatInputDelayMillis) { + return true; + } + } + + setLastProcessedMovementTime(button: Button): void { + if (!this.interactions.hasOwnProperty(button)) return; + this.setButtonLock(button); + this.interactions[button].pressTime = this.time.now; + this.interactions[button].isPressed = true; + } + + delLastProcessedMovementTime(button: Button): void { + if (!this.interactions.hasOwnProperty(button)) return; + this.releaseButtonLock(button); + this.interactions[button].pressTime = null; + this.interactions[button].isPressed = false; + } + + deactivatePressedKey(): void { + this.releaseButtonLock(this.buttonLock); + this.releaseButtonLock(this.buttonLock2); + for (const b of Utils.getEnumValues(Button)) { + if (!this.interactions.hasOwnProperty(b)) return; + this.interactions[b].pressTime = null; + this.interactions[b].isPressed = false; + } + } + + isButtonLocked(button: Button): boolean { + return (this.buttonLock === button || this.buttonLock2 === button); + } + + setButtonLock(button: Button): void { + if (this.buttonLock === button || this.buttonLock2 === button) return; + if (this.buttonLock === button) this.buttonLock2 = button; + else if (this.buttonLock2 === button) this.buttonLock = button; + else if(!!this.buttonLock) this.buttonLock2 = button; + else this.buttonLock = button; + } + + releaseButtonLock(button: Button): void { + if (this.buttonLock === button) this.buttonLock = null; + else if (this.buttonLock2 === button) this.buttonLock2 = null; + } +} \ No newline at end of file diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 875d618ec..a7d68ef98 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -31,6 +31,8 @@ export class LoadingScene extends SceneBase { this.loadAtlas('bg', 'ui'); this.loadImage('command_fight_labels', 'ui'); this.loadAtlas('prompt', 'ui'); + this.loadImage('candy', 'ui'); + this.loadImage('candy_overlay', 'ui'); this.loadImage('cursor', 'ui'); this.loadImage('cursor_reverse', 'ui'); for (let wv of Utils.getEnumValues(WindowVariant)) { @@ -67,6 +69,7 @@ export class LoadingScene extends SceneBase { this.loadImage('achv_bar_2', 'ui'); this.loadImage('achv_bar_3', 'ui'); this.loadImage('achv_bar_4', 'ui'); + this.loadImage('achv_bar_5', 'ui'); this.loadImage('shiny_star', 'ui', 'shiny.png'); this.loadImage('shiny_star_1', 'ui', 'shiny_1.png'); this.loadImage('shiny_star_2', 'ui', 'shiny_2.png'); @@ -74,6 +77,7 @@ export class LoadingScene extends SceneBase { this.loadImage('shiny_star_small_1', 'ui', 'shiny_small_1.png'); this.loadImage('shiny_star_small_2', 'ui', 'shiny_small_2.png'); this.loadImage('ha_capsule', 'ui', 'ha_capsule.png'); + this.loadImage('champion_ribbon', 'ui', 'champion_ribbon.png'); this.loadImage('icon_spliced', 'ui'); this.loadImage('icon_tera', 'ui'); this.loadImage('type_tera', 'ui'); @@ -222,6 +226,7 @@ export class LoadingScene extends SceneBase { this.loadSe('sparkle'); this.loadSe('restore'); this.loadSe('shine'); + this.loadSe('shing'); this.loadSe('charge'); this.loadSe('beam'); this.loadSe('upgrade'); diff --git a/src/locales/de/battle.ts b/src/locales/de/battle.ts new file mode 100644 index 000000000..b48aa1129 --- /dev/null +++ b/src/locales/de/battle.ts @@ -0,0 +1,53 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "{{bossName}} erscheint.", + "trainerAppeared": "{{trainerName}}\nmöchte kämpfen!", + "singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!", + "multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!", + "playerComeBack": "Komm zurück, {{pokemonName}}!", + "trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!", + "playerGo": "Los! {{pokemonName}}!", + "trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!", + "switchQuestion": "Willst du\n{{pokemonName}} auswechseln?", + "trainerDefeated": `You defeated\n{{trainerName}}!`, + "pokemonCaught": "{{pokemonName}} was caught!", + "pokemon": "Pokémon", + "sendOutPokemon": "Los! {{pokemonName}}!", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!", + "attackFailed": "But it failed!", + "attackHitsCount": `Hit {{count}} time(s)!`, + "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", + "levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", + "learnMove": "{{pokemonName}} learned\n{{moveName}}!", + "learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", + "learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", + "learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", + "learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", + "learnMoveForgetQuestion": "Which move should be forgotten?", + "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", + "levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!", + "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", + "moveNoPP": "There's no PP left for\nthis move!", + "moveDisabled": "{{moveName}} ist deaktiviert!", + "noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.", + "noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!", + "noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!", + "noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!", + "noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.", + "noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!", + "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!", + "runAwaySuccess": "You got away safely!", + "runAwayCannotEscape": 'You can\'t escape!', + "escapeVerbSwitch": "auswechseln", + "escapeVerbFlee": "flucht", + "notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!", + "skipItemQuestion": "Are you sure you want to skip taking an item?", + "eggHatching": "Oh?", + "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts new file mode 100644 index 000000000..c388d7dec --- /dev/null +++ b/src/locales/de/config.ts @@ -0,0 +1,28 @@ +import { ability } from "./ability"; +import { battle } from "./battle"; +import { commandUiHandler } from "./command-ui-handler"; +import { fightUiHandler } from "./fight-ui-handler"; +import { menu } from "./menu"; +import { menuUiHandler } from "./menu-ui-handler"; +import { move } from "./move"; +import { pokeball } from "./pokeball"; +import { pokemon } from "./pokemon"; +import { pokemonStat } from "./pokemon-stat"; +import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { tutorial } from "./tutorial"; + + +export const deConfig = { + ability: ability, + battle: battle, + commandUiHandler: commandUiHandler, + fightUiHandler: fightUiHandler, + menuUiHandler: menuUiHandler, + menu: menu, + move: move, + pokeball: pokeball, + pokemonStat: pokemonStat, + pokemon: pokemon, + starterSelectUiHandler: starterSelectUiHandler, + tutorial: tutorial +} \ No newline at end of file diff --git a/src/locales/de/fight-ui-handler.ts b/src/locales/de/fight-ui-handler.ts new file mode 100644 index 000000000..1ce9e0317 --- /dev/null +++ b/src/locales/de/fight-ui-handler.ts @@ -0,0 +1,6 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const fightUiHandler: SimpleTranslationEntries = { + "pp": "PP", + "power": "POWER", +} as const; \ No newline at end of file diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index 442cfae21..aa4604f9d 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -35,33 +35,12 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "Bist du ein Junge oder ein Mädchen?", "boy": "Junge", "girl": "Mädchen", - "bossAppeared": "{{bossName}} erscheint.", - "trainerAppeared": "{{trainerName}}\nmöchte kämpfen!", - "singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!", - "multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!", - "playerComeBack": "Komm zurück, {{pokemonName}}!", - "trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!", - "playerGo": "Los! {{pokemonName}}!", - "trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!", - "switchQuestion": "Willst du\n{{pokemonName}} auswechseln?", - "pokemon": "Pokémon", - "sendOutPokemon": "Los! {{pokemonName}}!", - "levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!", - "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", - "moveDisabled": "{{moveName}} ist deaktiviert!", - "noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.", - "noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!", - "noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!", - "noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!", - "noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.", - "noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!", - "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!", - "escapeVerbSwitch": "auswechseln", - "escapeVerbFlee": "flucht", - "notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!", "dailyRankings": "Daily Rankings", "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", } as const; \ No newline at end of file diff --git a/src/locales/de/move.ts b/src/locales/de/move.ts index f0c1c623a..f39721b1d 100644 --- a/src/locales/de/move.ts +++ b/src/locales/de/move.ts @@ -2,44 +2,44 @@ import { MoveTranslationEntries } from "#app/plugins/i18n"; export const move: MoveTranslationEntries = { "pound": { - name: "Pound", - effect: "The target is physically pounded with a long tail, a foreleg, or the like." + name: "Klaps", + effect: "Ein Hieb mit den Vorderbeinen oder dem Schweif." }, "karateChop": { - name: "Karate Chop", - effect: "The target is attacked with a sharp chop. Critical hits land more easily." + name: "Karateschlag", + effect: "Gute Möglichkeit, einen Volltreffer zu landen." }, "doubleSlap": { - name: "Double Slap", - effect: "The target is slapped repeatedly, back and forth, two to five times in a row." + name: "Duplexhieb", + effect: "Trifft das Ziel zwei- bis fünfmal hintereinander mit einem Duplexhieb." }, "cometPunch": { - name: "Comet Punch", - effect: "The target is hit with a flurry of punches that strike two to five times in a row." + name: "Kometenhieb", + effect: "Trifft das Ziel zwei- bis fünfmal hintereinander mit kräftigen Hieben." }, "megaPunch": { - name: "Mega Punch", - effect: "The target is slugged by a punch thrown with muscle-packed power." + name: "Megahieb", + effect: "Ein unglaublich kräftiger Hieb." }, "payDay": { - name: "Pay Day", - effect: "Numerous coins are hurled at the target to inflict damage. Money is earned after the battle." + name: "Zahltag", + effect: "Das Ziel wird mit Münzen beworfen. Das Geld wird nach dem Kampf aufgesammelt." }, "firePunch": { - name: "Fire Punch", - effect: "The target is punched with a fiery fist. This may also leave the target with a burn." + name: "Feuerschlag", + effect: "Feuriger Schlag, der dem Ziel eventuell Verbrennungen zufügt." }, "icePunch": { - name: "Ice Punch", - effect: "The target is punched with an icy fist. This may also leave the target frozen." + name: "Eishieb", + effect: "Ein eisiger Schlag, der das Ziel eventuell einfriert." }, "thunderPunch": { - name: "Thunder Punch", - effect: "The target is punched with an electrified fist. This may also leave the target with paralysis." + name: "Donnerschlag", + effect: "Ein elektrischer Schlag, der das Ziel eventuell paralysiert." }, "scratch": { - name: "Scratch", - effect: "Hard, pointed, sharp claws rake the target to inflict damage." + name: "Kratzer", + effect: "Das Ziel wird mit scharfen Klauen zerkratzt." }, "viseGrip": { name: "Vise Grip", @@ -47,3263 +47,3263 @@ export const move: MoveTranslationEntries = { }, "guillotine": { name: "Guillotine", - effect: "A vicious, tearing attack with big pincers. The target faints instantly if this attack hits." + effect: "Kräftige Scheren-Attacke. Führt beim Ziel sofort zum K.O." }, "razorWind": { - name: "Razor Wind", - effect: "In this two-turn attack, blades of wind hit opposing Pokémon on the second turn. Critical hits land more easily." + name: "Klingensturm", + effect: "Eine Attacke, die über zwei Runden geht. Hohe Volltrefferquote." }, "swordsDance": { - name: "Swords Dance", - effect: "A frenetic dance to uplift the fighting spirit. This sharply raises the user's Attack stat." + name: "Schwerttanz", + effect: "Ein wilder Kampftanz, der den eigenen Angriffs-Wert stark erhöht." }, "cut": { - name: "Cut", - effect: "The target is cut with a scythe or claw." + name: "Zerschneider", + effect: "Ein Basisangriff mit Schere oder Klaue. Damit können kleine Bäume gefällt werden." }, "gust": { - name: "Gust", - effect: "A gust of wind is whipped up by wings and launched at the target to inflict damage." + name: "Windstoß", + effect: "Trifft das Ziel mit einem Windstoß durch einen Flügelschlag." }, "wingAttack": { - name: "Wing Attack", - effect: "The target is struck with large, imposing wings spread wide to inflict damage." + name: "Flügelschlag", + effect: "Trifft das Ziel mit ausgebreiteten Flügeln." }, "whirlwind": { - name: "Whirlwind", - effect: "The target is blown away, and a different Pokémon is dragged out. In the wild, this ends a battle against a single Pokémon." + name: "Wirbelwind", + effect: "Weht das Ziel weg und ersetzt es durch ein anderes Pokémon. In der Wildnis endet der Kampf." }, "fly": { - name: "Fly", - effect: "The user flies up into the sky and then strikes its target on the next turn." + name: "Fliegen", + effect: "Steigt in Runde 1 empor und trifft das Ziel in Runde 2." }, "bind": { - name: "Bind", - effect: "Things such as long bodies or tentacles are used to bind and squeeze the target for four to five turns." + name: "Klammergriff", + effect: "Umklammert und quetscht das Ziel über vier bis fünf Runden." }, "slam": { name: "Slam", - effect: "The target is slammed with a long tail, vines, or the like to inflict damage." + effect: "Schlag mit einem langen Schweif, einer Ranke oder Ähnlichem." }, "vineWhip": { - name: "Vine Whip", - effect: "The target is struck with slender, whiplike vines to inflict damage." + name: "Rankenhieb", + effect: "Peitschenähnlicher Schlag mit Ranken." }, "stomp": { - name: "Stomp", - effect: "The target is stomped with a big foot. This may also make the target flinch." + name: "Stampfer", + effect: "Stampfen mit dem Fuß. Das Ziel schreckt eventuell zurück." }, "doubleKick": { - name: "Double Kick", - effect: "The target is quickly kicked twice in succession using both feet." + name: "Doppelkick", + effect: "Der Anwender tritt in einer Runde zweimal schnell zu." }, "megaKick": { - name: "Mega Kick", - effect: "The target is attacked by a kick launched with muscle-packed power." + name: "Megakick", + effect: "Das Ziel wird mit einem extrem heftigen Tritt angegriffen." }, "jumpKick": { - name: "Jump Kick", - effect: "The user jumps up high, then strikes with a kick. If the kick misses, the user hurts itself." + name: "Sprungkick", + effect: "Der Angreifer hüpft hoch und tritt zu. Bei Misserfolg schadet er sich selbst." }, "rollingKick": { - name: "Rolling Kick", - effect: "The user lashes out with a quick, spinning kick. This may also make the target flinch." + name: "Fegekick", + effect: "Heftiger Tritt aus einer schnellen Drehbewegung. Lässt das Ziel eventuell zurückschrecken." }, "sandAttack": { - name: "Sand Attack", - effect: "Sand is hurled in the target's face, reducing the target's accuracy." + name: "Sandwirbel", + effect: "Senkt Genauigkeit des Zieles, indem ihm Sand ins Gesicht geworfen wird." }, "headbutt": { - name: "Headbutt", - effect: "The user sticks out its head and attacks by charging straight into the target. This may also make the target flinch." + name: "Kopfnuss", + effect: "Rammt das Ziel mit einer Kopfnuss. Ziel schreckt eventuell zurück." }, "hornAttack": { - name: "Horn Attack", - effect: "The target is jabbed with a sharply pointed horn to inflict damage." + name: "Hornattacke", + effect: "Spießt das Ziel mit einem spitzen Horn auf." }, "furyAttack": { - name: "Fury Attack", - effect: "The target is jabbed repeatedly with a horn or beak two to five times in a row." + name: "Furienschlag", + effect: "Spießt das Ziel zwei- bis fünfmal mit spitzem Horn oder Schnabel auf." }, "hornDrill": { - name: "Horn Drill", - effect: "The user stabs the target with a horn that rotates like a drill. The target faints instantly if this attack hits." + name: "Hornbohrer", + effect: "K.O.-Attacke, bei der ein Horn als Bohrer eingesetzt wird." }, "tackle": { name: "Tackle", - effect: "A physical attack in which the user charges and slams into the target with its whole body." + effect: "Trifft das Ziel mit vollem Körpereinsatz." }, "bodySlam": { - name: "Body Slam", - effect: "The user drops onto the target with its full body weight. This may also leave the target with paralysis." + name: "Bodyslam", + effect: "Trifft das Ziel mit vollem Körpereinsatz. Bewirkt eventuell Paralyse." }, "wrap": { - name: "Wrap", - effect: "A long body, vines, or the like are used to wrap and squeeze the target for four to five turns." + name: "Wickel", + effect: "Umwickelt das Ziel über vier bis fünf Runden mit Ranken oder Ähnlichem und fügt ihm Schaden zu." }, "takeDown": { - name: "Take Down", - effect: "A reckless, full-body charge attack for slamming into the target. This also damages the user a little." + name: "Bodycheck", + effect: "Rücksichtslose Attacke, bei der sich der Angreifer selbst leicht verletzt." }, "thrash": { - name: "Thrash", - effect: "The user rampages and attacks for two to three turns. The user then becomes confused." + name: "Fuchtler", + effect: "Attacke über zwei bis drei Runden, die den Angreifer verwirrt." }, "doubleEdge": { - name: "Double-Edge", - effect: "A reckless, life-risking tackle in which the user rushes the target. This also damages the user quite a lot." + name: "Risikotackle", + effect: "Lebensgefährlicher Angriff, bei dem sich der Angreifer selbst verletzt." }, "tailWhip": { - name: "Tail Whip", - effect: "The user wags its tail cutely, making opposing Pokémon less wary and lowering their Defense stats." + name: "Rutenschlag", + effect: "Hieb mit dem Schweif. Senkt die Verteidigung des Zieles." }, "poisonSting": { - name: "Poison Sting", - effect: "The user stabs the target with a poisonous stinger. This may also poison the target." + name: "Giftstachel", + effect: "Angriff mit Giftstachel. Das Ziel wird eventuell vergiftet." }, "twineedle": { - name: "Twineedle", - effect: "The user damages the target twice in succession by jabbing it with two spikes. This may also poison the target." + name: "Duonadel", + effect: "Stacheln treffen das Ziel zweimal. Das Ziel wird eventuell vergiftet." }, "pinMissile": { - name: "Pin Missile", - effect: "Sharp spikes are shot at the target in rapid succession. They hit two to five times in a row." + name: "Nadelrakete", + effect: "Spitze Nadeln treffen das Ziel zwei- bis fünfmal hintereinander." }, "leer": { - name: "Leer", - effect: "The user gives opposing Pokémon an intimidating leer that lowers the Defense stat." + name: "Silberblick", + effect: "Gegnerischer Verteidigungs-Wert wird durch angsteinflößenden Blick gesenkt." }, "bite": { - name: "Bite", - effect: "The target is bitten with viciously sharp fangs. This may also make the target flinch." + name: "Biss", + effect: "Beißt zu und lässt das Ziel eventuell zurückschrecken." }, "growl": { - name: "Growl", - effect: "The user growls in an endearing way, making opposing Pokémon less wary. This lowers their Attack stats." + name: "Heuler", + effect: "Der Anwender nimmt das Ziel für sich ein und senkt dessen Angriffs-Wert." }, "roar": { - name: "Roar", - effect: "The target is scared off, and a different Pokémon is dragged out. In the wild, this ends a battle against a single Pokémon." + name: "Brüller", + effect: "Verjagt das Ziel und ersetzt es durch ein anderes Pokémon. Beendet den Kampf in der Wildnis." }, "sing": { - name: "Sing", - effect: "A soothing lullaby is sung in a calming voice that puts the target into a deep slumber." + name: "Gesang", + effect: "Ein Lied, das das Ziel in tiefen Schlaf versetzt." }, "supersonic": { - name: "Supersonic", - effect: "The user generates odd sound waves from its body that confuse the target." + name: "Superschall", + effect: "Ausstoß bizarrer Schallwellen. Das Ziel wird verwirrt." }, "sonicBoom": { - name: "Sonic Boom", - effect: "The target is hit with a destructive shock wave that always inflicts 20 HP damage." + name: "Ultraschall", + effect: "Das Ziel wird von einer Schockwelle getroffen, die stets 20 KP Schaden anrichtet." }, "disable": { - name: "Disable", - effect: "For four turns, this move prevents the target from using the move it last used." + name: "Aussetzer", + effect: "Die zuletzt eingesetzte Attacke des Zieles wird für mehrere Runden blockiert." }, "acid": { - name: "Acid", - effect: "Opposing Pokémon are attacked with a spray of harsh acid. This may also lower their Sp. Def stats." + name: "Säure", + effect: "Versprüht ätzende Flüssigkeit, die eventuell die Spezial-Verteidigung der Gegner in der Nähe des Anwenders senkt." }, "ember": { - name: "Ember", - effect: "The target is attacked with small flames. This may also leave the target with a burn." + name: "Glut", + effect: "Schwache Feuer-Attacke, durch die das Ziel eventuell Verbrennungen erleidet." }, "flamethrower": { - name: "Flamethrower", - effect: "The target is scorched with an intense blast of fire. This may also leave the target with a burn." + name: "Flammenwurf", + effect: "Starke Feuer-Attacke, durch die das Ziel eventuell Verbrennungen erleidet." }, "mist": { - name: "Mist", - effect: "The user cloaks itself and its allies in a white mist that prevents any of their stats from being lowered for five turns." + name: "Weißnebel", + effect: "Anwender schützt das Team mit einem Nebel. Verhindert Statussenkungen für fünf Runden." }, "waterGun": { - name: "Water Gun", - effect: "The target is blasted with a forceful shot of water." + name: "Aquaknarre", + effect: "Das Ziel wird mit Wasser bespritzt." }, "hydroPump": { - name: "Hydro Pump", - effect: "The target is blasted by a huge volume of water launched under great pressure." + name: "Hydropumpe", + effect: "Spritzt eine Menge Wasser mit Hochdruck auf das Ziel." }, "surf": { - name: "Surf", - effect: "The user attacks everything around it by swamping its surroundings with a giant wave." + name: "Surfer", + effect: "Eine Welle bricht über alle Pokémon in der Nähe des Anwenders herein." }, "iceBeam": { - name: "Ice Beam", - effect: "The target is struck with an icy-cold beam of energy. This may also leave the target frozen." + name: "Eisstrahl", + effect: "Das Ziel wird von einem Eisstrahl getroffen und friert eventuell ein." }, "blizzard": { name: "Blizzard", - effect: "A howling blizzard is summoned to strike opposing Pokémon. This may also leave the opposing Pokémon frozen." + effect: "Ein Schneesturm wütet, der das Ziel einfrieren kann." }, "psybeam": { - name: "Psybeam", - effect: "The target is attacked with a peculiar ray. This may also leave the target confused." + name: "Psystrahl", + effect: "Feuert einen Strahl ab, der das Ziel verwirren kann." }, "bubbleBeam": { - name: "Bubble Beam", - effect: "A spray of bubbles is forcefully ejected at the target. This may also lower the target's Speed stat." + name: "Blubbstrahl", + effect: "Versprüht Blasen, die eventuell den Initiative-Wert des Zieles senken." }, "auroraBeam": { - name: "Aurora Beam", - effect: "The target is hit with a rainbow-colored beam. This may also lower the target's Attack stat." + name: "Aurorastrahl", + effect: "Regenbogenfarbener Strahl, der eventuell den Angriffs-Wert des Zieles senkt." }, "hyperBeam": { - name: "Hyper Beam", - effect: "The target is attacked with a powerful beam. The user can't move on the next turn." + name: "Hyperstrahl", + effect: "Starke Attacke, die den Anwender zwingt, eine Runde auszusetzen." }, "peck": { - name: "Peck", - effect: "The target is jabbed with a sharply pointed beak or horn." + name: "Pikser", + effect: "Greift das Ziel mit dem Schnabel oder Horn an." }, "drillPeck": { - name: "Drill Peck", - effect: "A corkscrewing attack that strikes the target with a sharp beak acting as a drill." + name: "Bohrschnabel", + effect: "Korkenzieherangriff, bei dem der Schnabel als Bohrer dient." }, "submission": { - name: "Submission", - effect: "The user grabs the target and recklessly dives for the ground. This also damages the user a little." + name: "Überroller", + effect: "Harte Körperattacke, bei der sich der Angreifer selbst leicht verletzt." }, "lowKick": { - name: "Low Kick", - effect: "A powerful low kick that makes the target fall over. The heavier the target, the greater the move's power." + name: "Fußkick", + effect: "Ein Tritt, der das Ziel umwirft. Je schwerer das Ziel ist, desto mehr Schaden fügt ihm die Attacke zu." }, "counter": { - name: "Counter", - effect: "A retaliation move that counters any physical attack, inflicting double the damage taken." + name: "Konter", + effect: "Kontert physische Treffer und fügt dem Ziel das Doppelte des Schadens zu, den der Anwender erlitten hat." }, "seismicToss": { - name: "Seismic Toss", - effect: "The target is thrown using the power of gravity. It inflicts damage equal to the user's level." + name: "Geowurf", + effect: "Ziel wird mit der Kraft der Gravitation umgeworfen. Richtet Schaden gemäß Level des Angreifers an." }, "strength": { - name: "Strength", - effect: "The target is slugged with a punch thrown at maximum power." + name: "Stärke", + effect: "Das Ziel wird extrem stark getroffen. Macht Verschieben von Felsen möglich." }, "absorb": { - name: "Absorb", - effect: "A nutrient-draining attack. The user's HP is restored by half the damage taken by the target." + name: "Absorber", + effect: "Attacke, die die Hälfte des Schadens absorbiert." }, "megaDrain": { - name: "Mega Drain", - effect: "A nutrient-draining attack. The user's HP is restored by half the damage taken by the target." + name: "Megasauger", + effect: "Attacke, die die Hälfte des Schadens absorbiert." }, "leechSeed": { - name: "Leech Seed", - effect: "A seed is planted on the target. It steals some HP from the target every turn." + name: "Egelsamen", + effect: "Ziel wird bepflanzt und verliert jede Runde KP, die ein Pokémon aus dem Team des Anwenders heilen." }, "growth": { - name: "Growth", - effect: "The user's body grows all at once, raising the Attack and Sp. Atk stats." + name: "Wachstum", + effect: "Der Körper wächst. Dadurch steigen Angriff und Spezial-Angriff." }, "razorLeaf": { - name: "Razor Leaf", - effect: "Sharp-edged leaves are launched to slash at opposing Pokémon. Critical hits land more easily." + name: "Rasierblatt", + effect: "Trifft das Ziel mit Blättern. Hohe Volltrefferquote." }, "solarBeam": { - name: "Solar Beam", - effect: "In this two-turn attack, the user gathers light, then blasts a bundled beam on the next turn." + name: "Solarstrahl", + effect: "Absorbiert Licht in Runde 1. In Runde 2 erfolgt der Angriff." }, "poisonPowder": { - name: "Poison Powder", - effect: "The user scatters a cloud of poisonous dust that poisons the target." + name: "Giftpuder", + effect: "Verstreut giftigen Puder auf das Ziel." }, "stunSpore": { - name: "Stun Spore", - effect: "The user scatters a cloud of numbing powder that paralyzes the target." + name: "Stachelspore", + effect: "Verstreut lähmenden Puder." }, "sleepPowder": { - name: "Sleep Powder", - effect: "The user scatters a big cloud of sleep-inducing dust around the target." + name: "Schlafpuder", + effect: "Verstreut Schlafpuder, der das Ziel eventuell in Schlaf versetzt." }, "petalDance": { - name: "Petal Dance", - effect: "The user attacks the target by scattering petals for two to three turns. The user then becomes confused." + name: "Blättertanz", + effect: "Angriff mit Blütenblättern für zwei bis drei Runden. Angreifer wird verwirrt." }, "stringShot": { - name: "String Shot", - effect: "Opposing Pokémon are bound with silk blown from the user's mouth that harshly lowers the Speed stat." + name: "Fadenschuss", + effect: "Umwickelt Ziele in der Nähe mit Fäden aus dem Mund und senkt den Initiative-Wert." }, "dragonRage": { - name: "Dragon Rage", - effect: "This attack hits the target with a shock wave of pure rage. This attack always inflicts 40 HP damage." + name: "Drachenwut", + effect: "Stößt eine wutgeladene Schockwelle aus, die stets 40 KP Schaden anrichtet." }, "fireSpin": { - name: "Fire Spin", - effect: "The target becomes trapped within a fierce vortex of fire that rages for four to five turns." + name: "Feuerwirbel", + effect: "Das Ziel wird für vier bis fünf Runden in einem Feuerkreis gefangen." }, "thunderShock": { - name: "Thunder Shock", - effect: "A jolt of electricity crashes down on the target to inflict damage. This may also leave the target with paralysis." + name: "Donnerschock", + effect: "Eine Elektro-Attacke, die das Ziel eventuell paralysiert." }, "thunderbolt": { - name: "Thunderbolt", - effect: "A strong electric blast crashes down on the target. This may also leave the target with paralysis." + name: "Donnerblitz", + effect: "Eine starke Elektro-Attacke, die das Ziel eventuell paralysiert." }, "thunderWave": { - name: "Thunder Wave", - effect: "The user launches a weak jolt of electricity that paralyzes the target." + name: "Donnerwelle", + effect: "Ein schwacher Stromstoß, der das Ziel paralysiert." }, "thunder": { - name: "Thunder", - effect: "A wicked thunderbolt is dropped on the target to inflict damage. This may also leave the target with paralysis." + name: "Donner", + effect: "Eine verheerende Elektro-Attacke, die das Ziel eventuell paralysiert." }, "rockThrow": { - name: "Rock Throw", - effect: "The user picks up and throws a small rock at the target to attack." + name: "Steinwurf", + effect: "Das Ziel wird mit einem kleinen Stein beworfen." }, "earthquake": { - name: "Earthquake", - effect: "The user sets off an earthquake that strikes every Pokémon around it." + name: "Erdbeben", + effect: "Ein mächtiges Beben, das die anderen Pokémon in der Nähe des Anwenders trifft." }, "fissure": { - name: "Fissure", - effect: "The user opens up a fissure in the ground and drops the target in. The target faints instantly if this attack hits." + name: "Geofissur", + effect: "Das Ziel wird in eine Erdspalte geworfen. Ist die Attacke erfolgreich, führt sie zu einem K.O." }, "dig": { - name: "Dig", - effect: "The user burrows into the ground, then attacks on the next turn." + name: "Schaufler", + effect: "In Runde 1 gräbt sich der Anwender ein und in Runde 2 greift er an. Macht Flucht aus Höhlen möglich." }, "toxic": { - name: "Toxic", - effect: "A move that leaves the target badly poisoned. Its poison damage worsens every turn." + name: "Toxin", + effect: "Vergiftet das Ziel mit einem potenten Toxin schwer. Vergiftung wird von Runde zu Runde stärker." }, "confusion": { - name: "Confusion", - effect: "The target is hit by a weak telekinetic force. This may also confuse the target." + name: "Konfusion", + effect: "Das Ziel wird von schwacher telekinetischer Energie getroffen und eventuell verwirrt." }, "psychic": { - name: "Psychic", - effect: "The target is hit by a strong telekinetic force. This may also lower the target's Sp. Def stat." + name: "Psychokinese", + effect: "Starke Psycho-Attacke, die eventuell die Spezial-Verteidigung des Zieles senkt." }, "hypnosis": { - name: "Hypnosis", - effect: "The user employs hypnotic suggestion to make the target fall into a deep sleep." + name: "Hypnose", + effect: "Hypnose-Attacke, die das Ziel in Schlaf versetzt." }, "meditate": { - name: "Meditate", - effect: "The user meditates to awaken the power deep within its body and raise its Attack stat." + name: "Meditation", + effect: "Anwender aktiviert Kräfte, die tief in seinem Inneren schlummern, und steigert so seinen Angriffs-Wert." }, "agility": { - name: "Agility", - effect: "The user relaxes and lightens its body to move faster. This sharply raises the Speed stat." + name: "Agilität", + effect: "Entspannt den Körper, um den Initiative-Wert stark zu steigern." }, "quickAttack": { - name: "Quick Attack", - effect: "The user lunges at the target at a speed that makes it almost invisible. This move always goes first." + name: "Ruckzuckhieb", + effect: "Sehr schneller Angriff mit Erstschlaggarantie." }, "rage": { - name: "Rage", - effect: "As long as this move is in use, the power of rage raises the Attack stat each time the user is hit in battle." + name: "Raserei", + effect: "Erhöht Angriff des Anwenders, wenn dieser getroffen wird, solange die Attacke aktiviert ist." }, "teleport": { name: "Teleport", - effect: "The user switches places with a party Pokémon in waiting, if any. If a wild Pokémon uses this move, it flees." + effect: "Der Anwender tauscht den Platz mit einem anderen Team-Mitglied, sofern vorhanden. Setzen wilde Pokémon die Attacke ein, ergreifen diese die Flucht." }, "nightShade": { - name: "Night Shade", - effect: "The user makes the target see a frightening mirage. It inflicts damage equal to the user's level." + name: "Nachtnebel", + effect: "Das Ziel sieht eine Illusion. Richtet Schaden gemäß dem Level des Anwenders an." }, "mimic": { - name: "Mimic", - effect: "The user copies the target's last move. The move can be used during battle until the Pokémon is switched out." + name: "Mimikry", + effect: "Kopiert die zuvor ausgeführte Attacke des Zieles. Kann im Kampf bis zur Auswechslung verwendet werden." }, "screech": { - name: "Screech", - effect: "An earsplitting screech harshly lowers the target's Defense stat." + name: "Kreideschrei", + effect: "Stößt einen Schrei aus, um die Verteidigung des Zieles stark zu senken." }, "doubleTeam": { - name: "Double Team", - effect: "By moving rapidly, the user makes illusory copies of itself to raise its evasiveness." + name: "Doppelteam", + effect: "Erzeugt durch schnelle Bewegungen Ebenbilder, um den Fluchtwert zu erhöhen." }, "recover": { - name: "Recover", - effect: "Restoring its own cells, the user restores its own HP by half of its max HP." + name: "Genesung", + effect: "Eine Selbstheilung. KP des Anwenders werden um 50 % des maximalen Wertes aufgefüllt." }, "harden": { - name: "Harden", - effect: "The user stiffens all the muscles in its body to raise its Defense stat." + name: "Härtner", + effect: "Stärkt die Muskulatur und erhöht den Verteidigungs-Wert." }, "minimize": { - name: "Minimize", - effect: "The user compresses its body to make itself look smaller, which sharply raises its evasiveness." + name: "Komprimator", + effect: "Anwender schrumpft, um seinen Fluchtwert stark zu erhöhen." }, "smokescreen": { - name: "Smokescreen", - effect: "The user releases an obscuring cloud of smoke or ink. This lowers the target's accuracy." + name: "Rauchwolke", + effect: "Senkt Genauigkeit des Zieles mit Rauch, Tinte oder Ähnlichem." }, "confuseRay": { - name: "Confuse Ray", - effect: "The target is exposed to a sinister ray that triggers confusion." + name: "Konfusstrahl", + effect: "Ein fieser Strahl, der das Ziel verwirrt." }, "withdraw": { - name: "Withdraw", - effect: "The user withdraws its body into its hard shell, raising its Defense stat." + name: "Panzerschutz", + effect: "Rückzug in den harten Panzer. Erhöht den Verteidigungs-Wert." }, "defenseCurl": { - name: "Defense Curl", - effect: "The user curls up to conceal weak spots and raise its Defense stat." + name: "Einigler", + effect: "Verbirgt Schwächen durch Einrollen und hebt gleichzeitig den Verteidigungs-Wert." }, "barrier": { - name: "Barrier", - effect: "The user throws up a sturdy wall that sharply raises its Defense stat." + name: "Barriere", + effect: "Erzeugt eine Barriere, die den Verteidigungs-Wert stark erhöht." }, "lightScreen": { - name: "Light Screen", - effect: "A wondrous wall of light is put up to reduce damage from special attacks for five turns." + name: "Lichtschild", + effect: "Erzeugt eine Lichtwand und senkt den Schaden durch Spezial-Angriffe für fünf Runden." }, "haze": { - name: "Haze", - effect: "The user creates a haze that eliminates every stat change among all the Pokémon engaged in battle." + name: "Dunkelnebel", + effect: "Erzeugt einen dunklen Nebel. Alle Veränderungen der Statuswerte der Kampfteilnehmer werden annulliert." }, "reflect": { - name: "Reflect", - effect: "A wondrous wall of light is put up to reduce damage from physical attacks for five turns." + name: "Reflektor", + effect: "Eine mysteriöse Wand, die fünf Runden den Schaden von physischen gegnerischen Treffern reduziert." }, "focusEnergy": { - name: "Focus Energy", - effect: "The user takes a deep breath and focuses so that critical hits land more easily." + name: "Energiefokus", + effect: "Anwender atmet ein und bündelt Kraft. Die Volltrefferquote steigt dadurch." }, "bide": { - name: "Bide", - effect: "The user endures attacks for two turns, then strikes back to cause double the damage taken." + name: "Geduld", + effect: "Erträgt zwei Runden Angriffe und schlägt dann mit dem doppelten Wert des erlittenen Schadens zurück." }, "metronome": { - name: "Metronome", - effect: "The user waggles a finger and stimulates its brain into randomly using nearly any move." + name: "Metronom", + effect: "Bewegt Finger, um das Gehirn zu stimulieren. Wählt zufällig eine Attacke aus." }, "mirrorMove": { - name: "Mirror Move", - effect: "The user counters the target by mimicking the target's last move." + name: "Spiegeltrick", + effect: "Kopiert die letzte Attacke des Zieles und greift es an." }, "selfDestruct": { - name: "Self-Destruct", - effect: "The user attacks everything around it by causing an explosion. The user faints upon using this move." + name: "Finale", + effect: "Anwender sprengt sich, richtet rundum Riesenschaden an und wird dabei besiegt." }, "eggBomb": { - name: "Egg Bomb", - effect: "A large egg is hurled at the target with maximum force to inflict damage." + name: "Eierbombe", + effect: "Ein großes Ei wird auf das Ziel abgefeuert, um ihm zu schaden." }, "lick": { - name: "Lick", - effect: "The target is licked with a long tongue, causing damage. This may also leave the target with paralysis." + name: "Schlecker", + effect: "Leck-Attacke mit langer Zunge. Das Ziel wird eventuell paralysiert." }, "smog": { name: "Smog", - effect: "The target is attacked with a discharge of filthy gases. This may also poison the target." + effect: "Angriff mit Gas. Das Ziel kann eventuell vergiftet werden." }, "sludge": { - name: "Sludge", - effect: "Unsanitary sludge is hurled at the target. This may also poison the target." + name: "Schlammbad", + effect: "Wirft Schlamm auf das Ziel. Dieses wird eventuell vergiftet." }, "boneClub": { - name: "Bone Club", - effect: "The user clubs the target with a bone. This may also make the target flinch." + name: "Knochenkeule", + effect: "Schlägt das Ziel mit einer Keule und lässt es eventuell zurückschrecken." }, "fireBlast": { - name: "Fire Blast", - effect: "The target is attacked with an intense blast of all-consuming fire. This may also leave the target with a burn." + name: "Feuersturm", + effect: "Feuersbrunst, die das Ziel versengt und ihm eventuell eine Verbrennung zufügt." }, "waterfall": { - name: "Waterfall", - effect: "The user charges at the target and may make it flinch." + name: "Kaskade", + effect: "Eine mächtige Attacke, durch die das Ziel eventuell zurückschreckt." }, "clamp": { - name: "Clamp", - effect: "The target is clamped and squeezed by the user's very thick and sturdy shell for four to five turns." + name: "Schnapper", + effect: "Fängt und quetscht das Ziel über vier bis fünf Runden durch die harte Schale des Anwenders." }, "swift": { - name: "Swift", - effect: "Star-shaped rays are shot at opposing Pokémon. This attack never misses." + name: "Sternschauer", + effect: "Verschießt sternförmige Strahlen, die stets treffen, auf Ziele in der Umgebung." }, "skullBash": { - name: "Skull Bash", - effect: "The user tucks in its head to raise its Defense stat on the first turn, then rams the target on the next turn." + name: "Schädelwumme", + effect: "Der Anwender erhöht in Runde 1 seine Verteidigung und greift in Runde 2 an." }, "spikeCannon": { - name: "Spike Cannon", - effect: "Sharp spikes are shot at the target in rapid succession. They hit two to five times in a row." + name: "Dornkanone", + effect: "Spitze Nadeln treffen das Ziel zwei- bis fünfmal hintereinander." }, "constrict": { - name: "Constrict", - effect: "The target is attacked with long, creeping tentacles, vines, or the like. This may also lower the target's Speed stat." + name: "Umklammerung", + effect: "Angriff mit langen Tentakeln oder Ranken. Senkt eventuell den Initiative-Wert." }, "amnesia": { - name: "Amnesia", - effect: "The user temporarily empties its mind to forget its concerns. This sharply raises the user's Sp. Def stat." + name: "Amnesie", + effect: "Gedächtnisverlust, der die Spezial-Verteidigung stark erhöht." }, "kinesis": { - name: "Kinesis", - effect: "The user distracts the target by bending a spoon. This lowers the target's accuracy." + name: "Psykraft", + effect: "Lenkt Ziel durch Verbiegen eines Löffels ab. Senkt dessen Genauigkeit." }, "softBoiled": { - name: "Soft-Boiled", - effect: "The user restores its own HP by up to half of its max HP." + name: "Weichei", + effect: "KP des Anwenders werden um 50 % der maximalen KP aufgefüllt." }, "highJumpKick": { - name: "High Jump Kick", - effect: "The target is attacked with a knee kick from a jump. If it misses, the user is hurt instead." + name: "Turmkick", + effect: "Sprungtritt mit Knie. Bei Misserfolg verletzt sich der Anwender selbst." }, "glare": { - name: "Glare", - effect: "The user intimidates the target with the pattern on its belly to cause paralysis." + name: "Schlangenblick", + effect: "Schüchtert Ziel mit dem Muster auf seinem Bauch ein, sodass dieses paralysiert wird." }, "dreamEater": { - name: "Dream Eater", - effect: "The user eats the dreams of a sleeping target. The user's HP is restored by half the damage taken by the target." + name: "Traumfresser", + effect: "Attacke gegen schlafendes Ziel. Die Hälfte des zugefügten Schadens wird dem Anwender gutgeschrieben." }, "poisonGas": { - name: "Poison Gas", - effect: "A cloud of poison gas is sprayed in the face of opposing Pokémon, poisoning those it hits." + name: "Giftwolke", + effect: "Hüllt Ziele in der Umgebung in Gas ein, das sie eventuell vergiftet." }, "barrage": { - name: "Barrage", - effect: "Round objects are hurled at the target to strike two to five times in a row." + name: "Stakkato", + effect: "Wirft zwei- bis fünfmal runde Gegenstände auf das Ziel." }, "leechLife": { - name: "Leech Life", - effect: "The user drains the target's blood. The user's HP is restored by half the damage taken by the target." + name: "Blutsauger", + effect: "Die Hälfte des zugefügten Schadens wird dem Anwender gutgeschrieben." }, "lovelyKiss": { - name: "Lovely Kiss", - effect: "With a scary face, the user tries to force a kiss on the target. If it succeeds, the target falls asleep." + name: "Todeskuss", + effect: "Anwender zwingt dem Ziel einen Kuss auf, der Schlaf verursacht." }, "skyAttack": { - name: "Sky Attack", - effect: "A second-turn attack move where critical hits land more easily. This may also make the target flinch." + name: "Himmelsfeger", + effect: "Anwender greift in der zweiten Runde mit hoher Volltrefferquote an. Ziel schreckt eventuell zurück." }, "transform": { - name: "Transform", - effect: "The user transforms into a copy of the target right down to having the same move set." + name: "Wandler", + effect: "Anwender verwandelt sich in ein Abbild des Zieles und kann so auf die gleichen Attacken zugreifen." }, "bubble": { - name: "Bubble", - effect: "A spray of countless bubbles is jetted at the opposing Pokémon. This may also lower their Speed stat." + name: "Blubber", + effect: "Angriff mit Blasen. Initiative-Wert des Zieles wird eventuell gesenkt." }, "dizzyPunch": { - name: "Dizzy Punch", - effect: "The target is hit with rhythmically launched punches. This may also leave the target confused." + name: "Irrschlag", + effect: "Rhythmische Schläge, die das Ziel verwirren können." }, "spore": { - name: "Spore", - effect: "The user scatters bursts of spores that induce sleep." + name: "Pilzspore", + effect: "Erzeugt eine Wolke aus einschläfernden Sporen." }, "flash": { - name: "Flash", - effect: "The user flashes a bright light that cuts the target's accuracy." + name: "Blitz", + effect: "Erzeugt helles Licht, das die Genauigkeit des Zieles senkt." }, "psywave": { - name: "Psywave", - effect: "The target is attacked with an odd psychic wave. The attack varies in intensity." + name: "Psywelle", + effect: "Anwender erzeugt eine mysteriöse Energiewelle, deren Intensität von Mal zu Mal anders ausfällt." }, "splash": { - name: "Splash", - effect: "The user just flops and splashes around to no effect at all..." + name: "Platscher", + effect: "Nur ein Platscher, der überhaupt nichts bewirkt." }, "acidArmor": { - name: "Acid Armor", - effect: "The user alters its cellular structure to liquefy itself, sharply raising its Defense stat." + name: "Säurepanzer", + effect: "Verflüssigt Körperzellen des Anwenders. Erhöht den Verteidigungs-Wert stark." }, "crabhammer": { - name: "Crabhammer", - effect: "The target is hammered with a large pincer. Critical hits land more easily." + name: "Krabbhammer", + effect: "Schlägt mit Schere zu. Hohe Volltrefferquote." }, "explosion": { name: "Explosion", - effect: "The user attacks everything around it by causing a tremendous explosion. The user faints upon using this move." + effect: "Anwender explodiert, richtet bei allen Pokémon in seiner Umgebung großen Schaden an und wird selbst kampfunfähig." }, "furySwipes": { - name: "Fury Swipes", - effect: "The target is raked with sharp claws or scythes quickly two to five times in a row." + name: "Kratzfurie", + effect: "Beharkt das Ziel zwei- bis fünfmal mit scharfen Klauen oder Sicheln." }, "bonemerang": { - name: "Bonemerang", - effect: "The user throws the bone it holds. The bone loops around to hit the target twice—coming and going." + name: "Knochmerang", + effect: "Ein Bumerang aus Knochen, der zweimal trifft." }, "rest": { - name: "Rest", - effect: "The user goes to sleep for two turns. This fully restores the user's HP and heals any status conditions." + name: "Erholung", + effect: "Anwender wird vollkommen geheilt und schläft die folgenden zwei Runden." }, "rockSlide": { - name: "Rock Slide", - effect: "Large boulders are hurled at opposing Pokémon to inflict damage. This may also make the opposing Pokémon flinch." + name: "Steinhagel", + effect: "Schleudert riesige Felsen auf Ziele in der Umgebung, die eventuell zurückschrecken." }, "hyperFang": { - name: "Hyper Fang", - effect: "The user bites hard on the target with its sharp front fangs. This may also make the target flinch." + name: "Hyperzahn", + effect: "Angriff mit scharfen Reißzähnen. Ziel schreckt eventuell zurück." }, "sharpen": { - name: "Sharpen", - effect: "The user makes its edges more jagged, which raises its Attack stat." + name: "Schärfer", + effect: "Anwender senkt die Polygonzahl, um Kanten zu erzeugen, die den Angriffs-Wert erhöhen." }, "conversion": { - name: "Conversion", - effect: "The user changes its type to become the same type as the move at the top of the list of moves it knows." + name: "Umwandlung", + effect: "Wandelt den Typ des Anwenders in den Typ der ersten Attacke des Anwenders um." }, "triAttack": { - name: "Tri Attack", - effect: "The user strikes with a simultaneous three-beam attack. This may also burn, freeze, or paralyze the target." + name: "Triplette", + effect: "Feuert drei Strahlen ab. Verursacht eventuell Paralyse, Verbrennung oder Einfrieren." }, "superFang": { - name: "Super Fang", - effect: "The user chomps hard on the target with its sharp front fangs. This cuts the target's HP in half." + name: "Superzahn", + effect: "Greift mit scharfen Reißzähnen an. KP des Zieles werden halbiert." }, "slash": { - name: "Slash", - effect: "The target is attacked with a slash of claws or blades. Critical hits land more easily." + name: "Schlitzer", + effect: "Hieb mit Klauen oder Ähnlichem. Hohe Volltrefferquote." }, "substitute": { - name: "Substitute", - effect: "The user creates a substitute for itself using some of its HP. The substitute serves as the user's decoy." + name: "Delegator", + effect: "Anwender setzt eine kleine Menge an KP ein, um einen Doppelgänger zu erzeugen, der für ihn Schläge einsteckt." }, "struggle": { - name: "Struggle", - effect: "This attack is used in desperation only if the user has no PP. It also damages the user a little." + name: "Verzweifler", + effect: "Angriff nur bei verbrauchten AP. Anwender verletzt sich selbst leicht." }, "sketch": { - name: "Sketch", - effect: "It enables the user to permanently learn the move last used by the target. Once used, Sketch disappears." + name: "Nachahmer", + effect: "Anwender lernt die letzte Attacke des Zieles dauerhaft. Nachahmer verschwindet nach Gebrauch." }, "tripleKick": { - name: "Triple Kick", - effect: "A consecutive three-kick attack that becomes more powerful with each successful hit." + name: "Dreifachkick", + effect: "Tritt das Ziel ein- bis dreimal nacheinander. Die Härte der Tritte nimmt von Treffer zu Treffer zu." }, "thief": { - name: "Thief", - effect: "The user attacks and has a 30% chance to steal the target's held item simultaneously." + name: "Raub", + effect: "Erlaubt es, das Item des Zieles zu stehlen, solang der Anwender selbst keins bei sich trägt." }, "spiderWeb": { - name: "Spider Web", - effect: "The user ensnares the target with thin, gooey silk so it can't flee from battle." + name: "Spinnennetz", + effect: "Wickelt das Ziel ein. Flucht oder Tausch unmöglich." }, "mindReader": { - name: "Mind Reader", - effect: "The user senses the target's movements with its mind to ensure its next attack does not miss the target." + name: "Willensleser", + effect: "Ahnt Bewegungen des Zieles voraus, um zu gewährleisten, dass die nächste eigene Attacke trifft." }, "nightmare": { - name: "Nightmare", - effect: "A sleeping target sees a nightmare that inflicts some damage every turn." + name: "Nachtmahr", + effect: "Dem schlafenden Ziel wird durch einen Alptraum in jeder Runde Schaden zugefügt, solang es schläft." }, "flameWheel": { - name: "Flame Wheel", - effect: "The user cloaks itself in fire and charges at the target. This may also leave the target with a burn." + name: "Flammenrad", + effect: "Feuer-Attacke, die das Ziel eventuell verbrennt." }, "snore": { - name: "Snore", - effect: "This attack can be used only if the user is asleep. The harsh noise may also make the target flinch." + name: "Schnarcher", + effect: "Attacke nur im Schlaf möglich. Ziel schreckt eventuell zurück." }, "curse": { - name: "Curse", - effect: "A move that works differently for the Ghost type than for all other types." + name: "Fluch", + effect: "Attacke, deren Wirkung davon abhängt, ob der Anwender ein Geist-Pokémon ist." }, "flail": { - name: "Flail", - effect: "The user flails about aimlessly to attack. The less HP the user has, the greater the move's power." + name: "Dreschflegel", + effect: "Attacke richtet mehr Schaden an, wenn eigene KP niedrig sind." }, "conversion2": { - name: "Conversion 2", - effect: "The user changes its type to make itself resistant to the type of the attack the target used last." + name: "Umwandlung2", + effect: "Anwender ändert Typ und wird gegen letzten Angriffstyp resistent." }, "aeroblast": { - name: "Aeroblast", - effect: "A vortex of air is shot at the target to inflict damage. Critical hits land more easily." + name: "Luftstoß", + effect: "Erzeugt Luftstrudel gegen das Ziel. Hohe Volltrefferquote." }, "cottonSpore": { - name: "Cotton Spore", - effect: "The user releases cotton-like spores that cling to opposing Pokémon, which harshly lowers their Speed stats." + name: "Baumwollsaat", + effect: "Wattebäusche heften sich an das Ziel. Der Initiative-Wert sinkt stark." }, "reversal": { - name: "Reversal", - effect: "An all-out attack that becomes more powerful the less HP the user has." + name: "Gegenschlag", + effect: "Richtet mehr Schaden an, wenn eigene KP niedrig sind." }, "spite": { - name: "Spite", - effect: "The user unleashes its grudge on the move last used by the target by cutting 4 PP from it." + name: "Groll", + effect: "AP der letzten Attacke des Zieles werden um 4 gesenkt." }, "powderSnow": { - name: "Powder Snow", - effect: "The user attacks with a chilling gust of powdery snow. This may also freeze opposing Pokémon." + name: "Pulverschnee", + effect: "Angriff mit Schnee. Das Ziel wird eventuell eingefroren." }, "protect": { - name: "Protect", - effect: "This move enables the user to protect itself from all attacks. Its chance of failing rises if it is used in succession." + name: "Schutzschild", + effect: "Anwender weicht jeder Attacke aus. Scheitert eventuell bei Wiederholung." }, "machPunch": { - name: "Mach Punch", - effect: "The user throws a punch at blinding speed. This move always goes first." + name: "Tempohieb", + effect: "Extrem schneller Hieb, der stets zuerst trifft." }, "scaryFace": { - name: "Scary Face", - effect: "The user frightens the target with a scary face to harshly lower its Speed stat." + name: "Grimasse", + effect: "Jagt dem Ziel mit einer Grimasse Angst ein. Dessen Initiative-Wert sinkt stark." }, "feintAttack": { - name: "Feint Attack", - effect: "The user approaches the target disarmingly, then throws a sucker punch. This attack never misses." + name: "Finte", + effect: "Anwender nähert sich mit Unschuldsmiene dem Ziel und schlägt zu, sobald dieses unachtsam wird. Ein Treffer ist gewiss." }, "sweetKiss": { - name: "Sweet Kiss", - effect: "The user kisses the target with a sweet, angelic cuteness that causes confusion." + name: "Bitterkuss", + effect: "Anwender küsst das Ziel, das durch diese Niedlichkeit verwirrt wird." }, "bellyDrum": { - name: "Belly Drum", - effect: "The user maximizes its Attack stat in exchange for HP equal to half its max HP." + name: "Bauchtrommel", + effect: "Der Anwender maximiert den Angriffs-Wert auf Kosten der Hälfte seiner maximalen KP." }, "sludgeBomb": { - name: "Sludge Bomb", - effect: "Unsanitary sludge is hurled at the target. This may also poison the target." + name: "Matschbombe", + effect: "Wirft Schlamm auf das Ziel. Dieses wird eventuell vergiftet." }, "mudSlap": { - name: "Mud-Slap", - effect: "The user hurls mud in the target's face to inflict damage and lower its accuracy." + name: "Lehmschelle", + effect: "Schadet dem Ziel durch Matsch. Dessen Genauigkeit sinkt." }, "octazooka": { name: "Octazooka", - effect: "The user attacks by spraying ink in the target's face or eyes. This may also lower the target's accuracy." + effect: "Schießt mit Tinte, um Schaden anzurichten und die Genauigkeit zu senken." }, "spikes": { - name: "Spikes", - effect: "The user lays a trap of spikes at the opposing team's feet. The trap hurts Pokémon that switch into battle." + name: "Stachler", + effect: "Der Anwender verteilt Stacheln, die gegnerische Pokémon verletzen, die in den Kampf gerufen werden." }, "zapCannon": { - name: "Zap Cannon", - effect: "The user fires an electric blast like a cannon to inflict damage and cause paralysis." + name: "Blitzkanone", + effect: "Kanonenähnlicher Elektro-Schuss, der schadet und paralysiert." }, "foresight": { - name: "Foresight", - effect: "Enables a Ghost-type target to be hit by Normal- and Fighting-type attacks. This also enables an evasive target to be hit." + name: "Scharfblick", + effect: "Erlaubt es, Geist-Pokémon mit Normal- und Kampf-Attacken anzugreifen. Ignoriert den Fluchtwert des Zieles." }, "destinyBond": { - name: "Destiny Bond", - effect: "After using this move, if the user faints, the Pokémon that landed the knockout hit also faints. Its chance of failing rises if it is used in succession." + name: "Abgangsbund", + effect: "Wird der Anwender nach Einsatz dieser Attacke besiegt, führt dies auch beim Ziel zum K.O." }, "perishSong": { - name: "Perish Song", - effect: "Any Pokémon that hears this song faints in three turns, unless it switches out of battle." + name: "Abgesang", + effect: "Wer diese Musik hört, wird nach drei Runden besiegt. Rettung ist durch den Eintausch eines neuen Pokémon möglich." }, "icyWind": { - name: "Icy Wind", - effect: "The user attacks with a gust of chilled air. This also lowers opposing Pokémon's Speed stats." + name: "Eissturm", + effect: "Eis-Attacke, die dem Ziel Schaden zufügt und seinen Initiative-Wert senkt." }, "detect": { - name: "Detect", - effect: "This move enables the user to protect itself from all attacks. Its chance of failing rises if it is used in succession." + name: "Scanner", + effect: "Anwender weicht jeder Attacke aus. Scheitert eventuell bei Wiederholung." }, "boneRush": { - name: "Bone Rush", - effect: "The user strikes the target with a hard bone two to five times in a row." + name: "Knochenhatz", + effect: "Greift Ziel zwei- bis fünfmal in Folge mit einem harten Knochen an." }, "lockOn": { - name: "Lock-On", - effect: "The user takes sure aim at the target. This ensures the next attack does not miss the target." + name: "Zielschuss", + effect: "Visiert das Ziel an und trifft in der nächsten Runde garantiert." }, "outrage": { - name: "Outrage", - effect: "The user rampages and attacks for two to three turns. The user then becomes confused." + name: "Wutanfall", + effect: "Attacke über zwei bis drei Runden, die den Anwender verwirrt." }, "sandstorm": { - name: "Sandstorm", - effect: "A five-turn sandstorm is summoned to hurt all combatants except Rock, Ground, and Steel types. It raises the Sp. Def stat of Rock types." + name: "Sandsturm", + effect: "Sandsturm für fünf Runden. Fügt Pokémon von jedem Typ außer Gestein, Boden und Stahl Schaden zu." }, "gigaDrain": { - name: "Giga Drain", - effect: "A nutrient-draining attack. The user's HP is restored by half the damage taken by the target." + name: "Gigasauger", + effect: "Das Ziel wird angegriffen und die Hälfte des zugefügten Schadens dem Angreifer als KP gutgeschrieben." }, "endure": { - name: "Endure", - effect: "The user endures any attack with at least 1 HP. Its chance of failing rises if it is used in succession." + name: "Ausdauer", + effect: "Nach fatalen Attacken bleibt stets 1 KP übrig. Misserfolg bei Wiederholung möglich." }, "charm": { - name: "Charm", - effect: "The user gazes at the target rather charmingly, making it less wary. This harshly lowers the target's Attack stat." + name: "Charme", + effect: "Betört das Ziel und reduziert dessen Angriffs-Wert stark." }, "rollout": { - name: "Rollout", - effect: "The user continually rolls into the target over five turns. It becomes more powerful each time it hits." + name: "Walzer", + effect: "Attacke, die fünf Runden dauert. Die Härte nimmt von Mal zu Mal zu." }, "falseSwipe": { - name: "False Swipe", - effect: "A restrained attack that prevents the target from fainting. The target is left with at least 1 HP." + name: "Trugschlag", + effect: "Ein Angriff, der dem Ziel zumindest 1 KP lässt." }, "swagger": { - name: "Swagger", - effect: "The user enrages and confuses the target. However, this also sharply raises the target's Attack stat." + name: "Angeberei", + effect: "Verwirrt das Ziel und erhöht dessen Angriffs-Wert stark." }, "milkDrink": { - name: "Milk Drink", - effect: "The user restores its own HP by up to half of its max HP." + name: "Milchgetränk", + effect: "KP des Anwenders werden um 50 % der maximalen KP aufgefüllt." }, "spark": { - name: "Spark", - effect: "The user throws an electrically charged tackle at the target. This may also leave the target with paralysis." + name: "Funkensprung", + effect: "Elektro-Hieb, der das Ziel paralysieren kann." }, "furyCutter": { - name: "Fury Cutter", - effect: "The target is slashed with scythes or claws. This attack becomes more powerful if it hits in succession." + name: "Zornklinge", + effect: "Eine Attacke mit Scheren oder Klauen, deren Härte bei aufeinanderfolgenden Treffern zunimmt." }, "steelWing": { - name: "Steel Wing", - effect: "The target is hit with wings of steel. This may also raise the user's Defense stat." + name: "Stahlflügel", + effect: "Trifft das Ziel mit Stahlflügeln. Verteidigungs-Wert des Anwenders steigt eventuell." }, "meanLook": { - name: "Mean Look", - effect: "The user pins the target with a dark, arresting look. The target becomes unable to flee." + name: "Horrorblick", + effect: "Böser Blick, der die Flucht des Zieles vereitelt." }, "attract": { - name: "Attract", - effect: "If it is the opposite gender of the user, the target becomes infatuated and less likely to attack." + name: "Anziehung", + effect: "Angriff auf Anwender vom anderen Geschlecht wird unwahrscheinlich." }, "sleepTalk": { - name: "Sleep Talk", - effect: "While it is asleep, the user randomly uses one of the moves it knows." + name: "Schlafrede", + effect: "Anwender setzt per Zufall eine ihm bekannte Attacke im Schlaf ein." }, "healBell": { - name: "Heal Bell", - effect: "The user makes a soothing bell chime to heal the status conditions of all the party Pokémon." + name: "Vitalglocke", + effect: "Läutet beruhigend und heilt alle Statusprobleme im Team." }, "return": { - name: "Return", - effect: "This full-power attack grows more powerful the more the user likes its Trainer." + name: "Rückkehr", + effect: "Angriff, dessen Kraft bei Freundschaft zum Trainer größer wird." }, "present": { - name: "Present", - effect: "The user attacks by giving the target a gift with a hidden trap. It restores HP sometimes, however." + name: "Geschenk", + effect: "Eine Bombe als Geschenk. Kann auch KP des Zieles wiederherstellen." }, "frustration": { name: "Frustration", - effect: "This full-power attack grows more powerful the less the user likes its Trainer." + effect: "Die Attacke wird stärker, je weniger der Anwender seinen Trainer mag." }, "safeguard": { - name: "Safeguard", - effect: "The user creates a protective field that prevents status conditions for five turns." + name: "Bodyguard", + effect: "Team des Anwenders ist fünf Runden vor Statusproblemen geschützt." }, "painSplit": { - name: "Pain Split", - effect: "The user adds its HP to the target's HP, then equally shares the combined HP with the target." + name: "Leidteiler", + effect: "Addiert KP von Anwender und Ziel. Teilt sie gerecht auf." }, "sacredFire": { - name: "Sacred Fire", - effect: "The target is razed with a mystical fire of great intensity. This may also leave the target with a burn." + name: "Läuterfeuer", + effect: "Mystische Feuer-Attacke, durch die das Ziel eventuell Verbrennungen erleidet." }, "magnitude": { - name: "Magnitude", - effect: "The user attacks everything around it with a ground-shaking quake. Its power varies." + name: "Intensität", + effect: "Erdbebenartiger Angriff von zufälliger Stärke gegen andere Pokémon in der Umgebung des Anwenders." }, "dynamicPunch": { - name: "Dynamic Punch", - effect: "The user punches the target with full, concentrated power. This confuses the target if it hits." + name: "Wuchtschlag", + effect: "Kräftiger Schlag, der das Ziel bei Erfolg verwirrt." }, "megahorn": { - name: "Megahorn", - effect: "Using its tough and impressive horn, the user rams into the target with no letup." + name: "Vielender", + effect: "Brutaler Ramm-Angriff mit spitzem, beeindruckendem Horn." }, "dragonBreath": { - name: "Dragon Breath", - effect: "The user exhales a mighty gust that inflicts damage. This may also leave the target with paralysis." + name: "Feuerodem", + effect: "Fegt das Ziel mit zerstörerisch heißem Atem weg. Paralysiert das Ziel eventuell." }, "batonPass": { - name: "Baton Pass", - effect: "The user switches places with a party Pokémon in waiting and passes along any stat changes." + name: "Stafette", + effect: "Tauscht das eigene Pokémon aus. Alle Statusveränderungen bleiben bestehen." }, "encore": { - name: "Encore", - effect: "The user compels the target to keep using the move it encored for three turns." + name: "Zugabe", + effect: "Das Ziel wiederholt die letzte Attacke drei Runden lang." }, "pursuit": { - name: "Pursuit", - effect: "The power of this attack move is doubled if it's used on a target that's switching out of battle." + name: "Verfolgung", + effect: "Die Attacke richtet beim Ziel doppelten Schaden an, falls es ausgetauscht wird." }, "rapidSpin": { - name: "Rapid Spin", - effect: "A spin attack that can also eliminate such moves as Bind, Wrap, and Leech Seed. This also raises the user's Speed stat." + name: "Turbodreher", + effect: "Trifft das Ziel mit einer Dreh-Attacke. Befreit sich unter anderem von Wickel, Klammergriff, Egelsamen und Stachler." }, "sweetScent": { - name: "Sweet Scent", - effect: "A sweet scent that harshly lowers opposing Pokémon's evasiveness." + name: "Lockduft", + effect: "Lockt Ziele an und senkt deren Fluchtwert. Lockt im Gras auch wilde Pokémon an." }, "ironTail": { - name: "Iron Tail", - effect: "The target is slammed with a steel-hard tail. This may also lower the target's Defense stat." + name: "Eisenschweif", + effect: "Attacke mit hartem Eisenschweif. Senkt eventuell den Verteidigungs-Wert des Zieles." }, "metalClaw": { - name: "Metal Claw", - effect: "The target is raked with steel claws. This may also raise the user's Attack stat." + name: "Metallklaue", + effect: "Klauen-Attacke, die eventuell den Angriffs-Wert des Anwenders erhöht." }, "vitalThrow": { - name: "Vital Throw", - effect: "The user attacks last. In return, this throw move never misses." + name: "Überwurf", + effect: "Anwender greift als Letzter an, hat dafür aber eine Treffergarantie beim eigenen Angriff." }, "morningSun": { - name: "Morning Sun", - effect: "The user restores its own HP. The amount of HP regained varies with the weather." + name: "Morgengrauen", + effect: "Füllt KP des Anwenders auf. Die Menge hängt vom Wetter ab." }, "synthesis": { - name: "Synthesis", - effect: "The user restores its own HP. The amount of HP regained varies with the weather." + name: "Synthese", + effect: "Füllt KP des Anwenders auf. Die Menge hängt vom Wetter ab." }, "moonlight": { - name: "Moonlight", - effect: "The user restores its own HP. The amount of HP regained varies with the weather." + name: "Mondschein", + effect: "Füllt KP des Anwenders auf. Die Menge hängt vom Wetter ab." }, "hiddenPower": { - name: "Hidden Power", - effect: "A unique attack that varies in type depending on the Pokémon using it." + name: "Kraftreserve", + effect: "Wirkung und Typ der Attacke hängen vom Anwender ab." }, "crossChop": { - name: "Cross Chop", - effect: "The user delivers a double chop with its forearms crossed. Critical hits land more easily." + name: "Kreuzhieb", + effect: "Doppelter Hieb mit den Unterarmen. Hohe Volltrefferquote." }, "twister": { - name: "Twister", - effect: "The user whips up a vicious tornado to tear at opposing Pokémon. This may also make them flinch." + name: "Windhose", + effect: "Trifft Ziele in der Umgebung mit einem heftigen Wirbelsturm, was diese eventuell zurückschrecken lässt." }, "rainDance": { - name: "Rain Dance", - effect: "The user summons a heavy rain that falls for five turns, powering up Water-type moves. It lowers the power of Fire-type moves." + name: "Regentanz", + effect: "Anwender erzeugt starken Regen. Die Stärke von Wasser-Attacken erhöht sich fünf Runden lang." }, "sunnyDay": { - name: "Sunny Day", - effect: "The user intensifies the sun for five turns, powering up Fire-type moves. It lowers the power of Water-type moves." + name: "Sonnentag", + effect: "Die Sonne brennt unbarmherzig fünf Runden lang. Dadurch werden Attacken vom Typ Feuer verstärkt." }, "crunch": { - name: "Crunch", - effect: "The user crunches up the target with sharp fangs. This may also lower the target's Defense stat." + name: "Knirscher", + effect: "Beißt mit scharfen Reißzähnen zu und senkt eventuell die Verteidigung." }, "mirrorCoat": { - name: "Mirror Coat", - effect: "A retaliation move that counters any special attack, inflicting double the damage taken." + name: "Spiegelcape", + effect: "Kontert den Spezial-Angriff des Gegners mit doppeltem Schaden." }, "psychUp": { - name: "Psych Up", - effect: "The user hypnotizes itself into copying any stat change made by the target." + name: "Psycho-Plus", + effect: "Der Anwender hypnotisiert sich selbst, um die Statusveränderungen des Zieles zu kopieren." }, "extremeSpeed": { - name: "Extreme Speed", - effect: "The user charges the target at blinding speed. This move always goes first." + name: "Turbotempo", + effect: "Extrem schnelle und kraftvolle Attacke, die stets zuerst trifft." }, "ancientPower": { - name: "Ancient Power", - effect: "The user attacks with a prehistoric power. This may also raise all the user's stats at once." + name: "Antik-Kraft", + effect: "Angriff mit antiker Kraft, der alle Statuswerte erhöhen kann." }, "shadowBall": { - name: "Shadow Ball", - effect: "The user hurls a shadowy blob at the target. This may also lower the target's Sp. Def stat." + name: "Spukball", + effect: "Bewirft das Ziel mit gruseligem Ball und senkt eventuell die Spezial-Verteidigung." }, "futureSight": { - name: "Future Sight", - effect: "Two turns after this move is used, a hunk of psychic energy attacks the target." + name: "Seher", + effect: "Zwei Runden, nachdem Seher eingesetzt wurde, erfolgt der Angriff." }, "rockSmash": { - name: "Rock Smash", - effect: "The user attacks with a punch. This may also lower the target's Defense stat." + name: "Zertrümmerer", + effect: "Diese steinbrechende Attacke kann den Verteidigungs-Wert des Zieles senken und außerhalb von Kämpfen rissige Felsen zertrümmern." }, "whirlpool": { name: "Whirlpool", - effect: "The user traps the target in a violent swirling whirlpool for four to five turns." + effect: "Das Ziel wird für vier bis fünf Runden in einer Wasserhose gefangen." }, "beatUp": { - name: "Beat Up", - effect: "The user gets all party Pokémon to attack the target. The more party Pokémon, the greater the number of attacks." + name: "Prügler", + effect: "Das gesamte Team nimmt aktiv am Kampf teil. Je mehr Pokémon, desto höher die Anzahl der Angriffe." }, "fakeOut": { - name: "Fake Out", - effect: "This attack hits first and makes the target flinch. It only works the first turn each time the user enters battle." + name: "Mogelhieb", + effect: "Diese Attacke trifft zuerst. Das Ziel schreckt zurück. Gelingt nur in der ersten Runde eines Kampfes." }, "uproar": { - name: "Uproar", - effect: "The user attacks in an uproar for three turns. During that time, no Pokémon can fall asleep." + name: "Aufruhr", + effect: "Anwender greift an, indem er über drei Runden hinweg einen Aufruhr erzeugt. Verhindert Schlaf." }, "stockpile": { - name: "Stockpile", - effect: "The user charges up power and raises both its Defense and Sp. Def stats. The move can be used three times." + name: "Horter", + effect: "Lädt Kraft für später auf. Erhöht Verteidigung und Spezial-Verteidigung. Kann bis zu dreimal eingesetzt werden." }, "spitUp": { - name: "Spit Up", - effect: "The power stored using the move Stockpile is released at once in an attack. The more power is stored, the greater the move's power." + name: "Entfessler", + effect: "Entlädt die Kraft, die während des Einsatzes von Horter gesammelt wurde." }, "swallow": { - name: "Swallow", - effect: "The power stored using the move Stockpile is absorbed by the user to heal its HP. Storing more power heals more HP." + name: "Verzehrer", + effect: "Absorbiert die gehortete Kraft, um KP aufzufüllen." }, "heatWave": { - name: "Heat Wave", - effect: "The user attacks by exhaling hot breath on opposing Pokémon. This may also leave those Pokémon with a burn." + name: "Hitzewelle", + effect: "Ziele werden von Sturm aus heißer Luft getroffen und verbrennen sich eventuell." }, "hail": { - name: "Hail", - effect: "The user summons a hailstorm lasting five turns. It damages all Pokémon except Ice types." + name: "Hagelsturm", + effect: "Hagelsturm für fünf Runden. Schadet allen, außer Eis-Pokémon." }, "torment": { - name: "Torment", - effect: "The user torments and enrages the target, making it incapable of using the same move twice in a row." + name: "Folterknecht", + effect: "Erzürnt das Ziel, um wiederholten Einsatz derselben Attacke zu verhindern." }, "flatter": { - name: "Flatter", - effect: "Flattery is used to confuse the target. However, this also raises the target's Sp. Atk stat." + name: "Schmeichler", + effect: "Schmeichelt dem Ziel, um es zu verwirren. Erhöht dessen Spezial-Angriff." }, "willOWisp": { - name: "Will-O-Wisp", - effect: "The user shoots a sinister flame at the target to inflict a burn." + name: "Irrlicht", + effect: "Angriff mit unheimlicher Flamme, die das Ziel verbrennt." }, "memento": { - name: "Memento", - effect: "The user faints when using this move. In return, this harshly lowers the target's Attack and Sp. Atk stats." + name: "Memento-Mori", + effect: "Der Anwender wird besiegt und senkt den Angriffs-Wert und den Spezial-Angriff des Zieles stark." }, "facade": { - name: "Facade", - effect: "This attack move doubles its power if the user is poisoned, burned, or paralyzed." + name: "Fassade", + effect: "Doppelte Stärke nach Verbrennung, Paralyse oder Vergiftung." }, "focusPunch": { - name: "Focus Punch", - effect: "The user focuses its mind before launching a punch. This move fails if the user is hit before it is used." + name: "Power-Punch", + effect: "Anwender konzentriert sich, bevor er angreift. Wird er vorher getroffen, ist die Attacke erfolglos." }, "smellingSalts": { - name: "Smelling Salts", - effect: "This attack's power is doubled when used on a target with paralysis. This also cures the target's paralysis, however." + name: "Riechsalz", + effect: "Doppelt wirksam gegen paralysierte Ziele, heilt sie aber auch von der Paralyse." }, "followMe": { - name: "Follow Me", - effect: "The user draws attention to itself, making all targets take aim only at the user." + name: "Spotlight", + effect: "Zieht Aufmerksamkeit auf sich. Gegner greift nur Anwender an." }, "naturePower": { - name: "Nature Power", - effect: "This attack makes use of nature's power. Its effects vary depending on the user's environment." + name: "Natur-Kraft", + effect: "Angriff mit der Kraft der Natur, dessen Typ vom Ort abhängt, wo er durchgeführt wird." }, "charge": { - name: "Charge", - effect: "The user boosts the power of the Electric move it uses on the next turn. This also raises the user's Sp. Def stat." + name: "Ladevorgang", + effect: "Lädt Energie für die kommende Elektro-Attacke auf. Erhöht die Spezial-Verteidigung." }, "taunt": { - name: "Taunt", - effect: "The target is taunted into a rage that allows it to use only attack moves for three turns." + name: "Verhöhner", + effect: "Bringt das Ziel in Rage. Dieses kann über drei Runden hinweg nur noch angreifen." }, "helpingHand": { - name: "Helping Hand", - effect: "The user assists an ally by boosting the power of that ally's attack." + name: "Rechte Hand", + effect: "Anwender steigert die Kraft eines Angriffes eines Freundes." }, "trick": { - name: "Trick", - effect: "The user catches the target off guard and swaps its held item with its own." + name: "Trickbetrug", + effect: "Der Anwender überrumpelt das Ziel und tauscht mit ihm die getragenen Items." }, "rolePlay": { - name: "Role Play", - effect: "The user mimics the target completely, copying the target's Ability." + name: "Rollenspiel", + effect: "Parodiert das Ziel und kopiert seine Fähigkeit." }, "wish": { - name: "Wish", - effect: "One turn after this move is used, the user's or its replacement's HP is restored by half the user's max HP." + name: "Wunschtraum", + effect: "Ein Wunsch füllt in der nächsten Runde 50 % der KP des Anwenders bei diesem oder einem eingewechselten Pokémon auf." }, "assist": { - name: "Assist", - effect: "The user hurriedly and randomly uses a move among those known by ally Pokémon." + name: "Zuschuss", + effect: "Greift zufällig mit einer Attacke eines Mitstreiters an." }, "ingrain": { - name: "Ingrain", - effect: "The user lays roots that restore its HP on every turn. Because it's rooted, it can't switch out." + name: "Verwurzler", + effect: "Verwurzelung füllt jede Runde KP auf. Austausch ist unmöglich." }, "superpower": { - name: "Superpower", - effect: "The user attacks the target with great power. However, this also lowers the user's Attack and Defense stats." + name: "Kraftkoloss", + effect: "Starke Attacke, die jedoch auch den Angriff und die Verteidigung des Anwenders senkt." }, "magicCoat": { - name: "Magic Coat", - effect: "Moves like Leech Seed and moves that inflict status conditions are blocked by a barrier and reflected back to the user of those moves." + name: "Magiemantel", + effect: "Egelsamen und alle Attacken mit Status verändernden Effekten prallen ab." }, "recycle": { - name: "Recycle", - effect: "The user recycles a held item that has been used in battle so it can be used again." + name: "Aufbereitung", + effect: "Recycling eines getragenen Items, das zuvor im Kampf verwendet wurde." }, "revenge": { - name: "Revenge", - effect: "This attack move's power is doubled if the user has been hurt by the opponent in the same turn." + name: "Vergeltung", + effect: "Schaden verdoppelt sich, wenn der Anwender in der Runde bereits Schaden vom Ziel des Angriffes genommen hat." }, "brickBreak": { - name: "Brick Break", - effect: "The user attacks with a swift chop. It can also break barriers, such as Light Screen and Reflect." + name: "Durchbruch", + effect: "Ein beherzter Handkantenschlag. Durchbricht Barrieren wie Lichtschild und Reflektor." }, "yawn": { - name: "Yawn", - effect: "The user lets loose a huge yawn that lulls the target into falling asleep on the next turn." + name: "Gähner", + effect: "Angreifer gähnt und das Ziel schläft in der nächsten Runde ein." }, "knockOff": { - name: "Knock Off", - effect: "The user slaps down the target's held item, and that item can't be used in that battle. The move does more damage if the target has a held item." + name: "Abschlag", + effect: "Schlägt das Item des Zieles weg und vereitelt so dessen Gebrauch während des Kampfes. Mehr Schaden gegen Ziele, die ein Item bei sich tragen." }, "endeavor": { - name: "Endeavor", - effect: "This attack move cuts down the target's HP to equal the user's HP." + name: "Notsituation", + effect: "Trifft nur, wenn KP des Anwenders geringer als KP des Zieles sind. Senkt dessen KP auf die Höhe der KP des Anwenders." }, "eruption": { name: "Eruption", - effect: "The user attacks opposing Pokémon with explosive fury. The lower the user's HP, the lower the move's power." + effect: "Explosiver Angriff. Je höher die KP des Anwenders sind, desto mehr Schaden wird angerichtet." }, "skillSwap": { - name: "Skill Swap", - effect: "The user employs its psychic power to exchange Abilities with the target." + name: "Fähigkeitstausch", + effect: "Anwender tauscht Fähigkeit mit dem Ziel." }, "imprison": { - name: "Imprison", - effect: "If opposing Pokémon know any move also known by the user, they are prevented from using it." + name: "Begrenzer", + effect: "Hindert Gegner am Einsatz von Attacken, die der Anwender selbst auch kennt." }, "refresh": { - name: "Refresh", - effect: "The user rests to cure itself of poisoning, a burn, or paralysis." + name: "Heilung", + effect: "Selbstheilung bei Vergiftung, Paralyse und Verbrennung." }, "grudge": { - name: "Grudge", - effect: "If the user faints, the user's grudge fully depletes the PP of the opponent's move that knocked it out." + name: "Nachspiel", + effect: "Bei K.O. des Anwenders werden die AP der Attacke, durch die er besiegt wurde, auf 0 herabgesetzt." }, "snatch": { - name: "Snatch", - effect: "The user steals the effects of any attempts to use a healing or stat-changing move." + name: "Übernahme", + effect: "Raubt den Effekt eingesetzter heilender oder Werte verändernder Attacken." }, "secretPower": { - name: "Secret Power", - effect: "The additional effects of this attack depend upon where it was used." + name: "Geheimpower", + effect: "Angriff, der abhängig vom Anwendungsort einen unterschiedlichen Zusatz-Effekt hat." }, "dive": { - name: "Dive", - effect: "Diving on the first turn, the user floats up and attacks on the next turn." + name: "Taucher", + effect: "Taucht in Runde 1 ab und greift in Runde 2 aus der Tiefe an." }, "armThrust": { - name: "Arm Thrust", - effect: "The user lets loose a flurry of open-palmed arm thrusts that hit two to five times in a row." + name: "Armstoß", + effect: "Schläge mit geradem Arm, die das Ziel zwei- bis fünfmal treffen." }, "camouflage": { - name: "Camouflage", - effect: "The user's type is changed depending on its environment, such as at water's edge, in grass, or in a cave." + name: "Tarnung", + effect: "Der Typ des Anwenders passt sich der Umgebung an, sei es im Wasser, im Gras oder in einer Höhle." }, "tailGlow": { - name: "Tail Glow", - effect: "The user stares at flashing lights to focus its mind, drastically raising its Sp. Atk stat." + name: "Schweifglanz", + effect: "Ein blinkendes Licht, das den Spezial-Angriff drastisch erhöht." }, "lusterPurge": { - name: "Luster Purge", - effect: "The user lets loose a damaging burst of light. This may also lower the target's Sp. Def stat." + name: "Scheinwerfer", + effect: "Angriff mit grellem Licht, der die Spezial-Verteidigung des Zieles eventuell senkt." }, "mistBall": { - name: "Mist Ball", - effect: "A mist-like flurry of down envelops and damages the target. This may also lower the target's Sp. Atk stat." + name: "Nebelball", + effect: "Angriff mit einer Kugel aus Wasser, die Nebel enthält. Senkt eventuell den Spezial-Angriff des Zieles." }, "featherDance": { - name: "Feather Dance", - effect: "The user covers the target's body with a mass of down that harshly lowers its Attack stat." + name: "Daunenreigen", + effect: "Hüllt das Ziel in Daunen und senkt dessen Angriffs-Wert stark." }, "teeterDance": { - name: "Teeter Dance", - effect: "The user performs a wobbly dance that confuses the Pokémon around it." + name: "Taumeltanz", + effect: "Ein Wackeltanz, der andere Pokémon in der Umgebung des Anwenders verwirrt." }, "blazeKick": { - name: "Blaze Kick", - effect: "The user launches a kick that lands a critical hit more easily. This may also leave the target with a burn." + name: "Feuerfeger", + effect: "Starker Tritt mit hoher Volltrefferquote. Verursacht eventuell Verbrennung." }, "mudSport": { - name: "Mud Sport", - effect: "The user kicks up mud on the battlefield. This weakens Electric-type moves for five turns." + name: "Lehmsuhler", + effect: "Schwächt Elektro-Attacken, solang der Anwender am Kampf teilnimmt." }, "iceBall": { - name: "Ice Ball", - effect: "The user attacks the target for five turns. The move's power increases each time it hits." + name: "Frostbeule", + effect: "Attacke, die fünf Runden dauert. Die Härte nimmt von Mal zu Mal zu." }, "needleArm": { - name: "Needle Arm", - effect: "The user attacks by wildly swinging its thorny arms. This may also make the target flinch." + name: "Nietenranke", + effect: "Angriff mit dornigen Armen. Das Ziel schreckt eventuell zurück." }, "slackOff": { - name: "Slack Off", - effect: "The user slacks off, restoring its own HP by up to half of its max HP." + name: "Tagedieb", + effect: "Durch Müßiggang werden KP des Anwenders um 50 % der maximalen KP aufgefüllt." }, "hyperVoice": { - name: "Hyper Voice", - effect: "The user lets loose a horribly echoing shout with the power to inflict damage." + name: "Schallwelle", + effect: "Laute Attacke mit Schallwellen." }, "poisonFang": { - name: "Poison Fang", - effect: "The user bites the target with toxic fangs. This may also leave the target badly poisoned." + name: "Giftzahn", + effect: "Angriff mit giftigen Reißzähnen. Das Ziel wird eventuell schwer vergiftet." }, "crushClaw": { - name: "Crush Claw", - effect: "The user slashes the target with hard and sharp claws. This may also lower the target's Defense stat." + name: "Zermalmklaue", + effect: "Angriff mit scharfen Klauen. Senkt eventuell den Verteidigungs-Wert." }, "blastBurn": { - name: "Blast Burn", - effect: "The target is razed by a fiery explosion. The user can't move on the next turn." + name: "Lohekanonade", + effect: "Das Ziel wird von starker Explosion getroffen. Angreifer setzt eine Runde aus." }, "hydroCannon": { - name: "Hydro Cannon", - effect: "The target is hit with a watery blast. The user can't move on the next turn." + name: "Aquahaubitze", + effect: "Das Ziel wird von Wasserkanone getroffen. Angreifer setzt eine Runde aus." }, "meteorMash": { - name: "Meteor Mash", - effect: "The target is hit with a hard punch fired like a meteor. This may also raise the user's Attack stat." + name: "Sternenhieb", + effect: "Angriff mit einem harten, schnellen Schlag. Erhöht eventuell Angriffs-Wert des Anwenders." }, "astonish": { - name: "Astonish", - effect: "The user attacks the target while shouting in a startling fashion. This may also make the target flinch." + name: "Erstauner", + effect: "Anwender greift mit einem Schrei an. Ein Angriff, der das Ziel eventuell zurückschrecken lässt." }, "weatherBall": { - name: "Weather Ball", - effect: "This attack move varies in power and type depending on the weather." + name: "Meteorologe", + effect: "Typ und Stärke der Attacke sind vom Wetter zum Zeitpunkt der Anwendung abhängig." }, "aromatherapy": { - name: "Aromatherapy", - effect: "The user releases a soothing scent that heals all status conditions affecting the user's party." + name: "Aromakur", + effect: "Heilt alle Statusprobleme des Teams mit beruhigendem Duft." }, "fakeTears": { - name: "Fake Tears", - effect: "The user feigns crying to fluster the target, harshly lowering its Sp. Def stat." + name: "Trugträne", + effect: "Täuscht Weinen vor, um die Spezial-Verteidigung des Zieles stark zu senken." }, "airCutter": { - name: "Air Cutter", - effect: "The user launches razor-like wind to slash opposing Pokémon. Critical hits land more easily." + name: "Windschnitt", + effect: "Greift mit rasierklingenartigem Wind an. Hohe Volltrefferquote." }, "overheat": { - name: "Overheat", - effect: "The user attacks the target at full power. The attack's recoil harshly lowers the user's Sp. Atk stat." + name: "Hitzekoller", + effect: "Angriff mit voller Kraft, der den Spezial-Angriff des Anwenders durch den Rückstoß stark senkt." }, "odorSleuth": { - name: "Odor Sleuth", - effect: "Enables a Ghost-type target to be hit by Normal- and Fighting-type attacks. This also enables an evasive target to be hit." + name: "Schnüffler", + effect: "Erlaubt es, Geist-Pokémon mit Normal- und Kampf-Attacken anzugreifen. Ignoriert den Fluchtwert des Zieles." }, "rockTomb": { - name: "Rock Tomb", - effect: "Boulders are hurled at the target. This also lowers the target's Speed stat by preventing its movement." + name: "Felsgrab", + effect: "Angriff mit Felsen. Bei Erfolg wird der Initiative-Wert des Zieles gesenkt." }, "silverWind": { - name: "Silver Wind", - effect: "The target is attacked with powdery scales blown by the wind. This may also raise all the user's stats." + name: "Silberhauch", + effect: "Angriff mit Silberstaub. Eventuell werden alle Statuswerte des Anwenders erhöht." }, "metalSound": { - name: "Metal Sound", - effect: "A horrible sound like scraping metal harshly lowers the target's Sp. Def stat." + name: "Metallsound", + effect: "Stößt einen spitzen Schrei aus, der die Spezial-Verteidigung des Zieles stark senkt." }, "grassWhistle": { - name: "Grass Whistle", - effect: "The user plays a pleasant melody that lulls the target into a deep sleep." + name: "Grasflöte", + effect: "Versetzt das Ziel durch eine schöne Melodie in Tiefschlaf." }, "tickle": { - name: "Tickle", - effect: "The user tickles the target into laughing, reducing its Attack and Defense stats." + name: "Spaßkanone", + effect: "Bringt das Ziel zum Lachen und senkt dadurch dessen Angriff und Verteidigung." }, "cosmicPower": { - name: "Cosmic Power", - effect: "The user absorbs a mystical power from space to raise its Defense and Sp. Def stats." + name: "Kosmik-Kraft", + effect: "Erhöht Verteidigung und Spezial-Verteidigung durch eine mystische Kraft." }, "waterSpout": { - name: "Water Spout", - effect: "The user spouts water to damage opposing Pokémon. The lower the user's HP, the lower the move's power." + name: "Fontränen", + effect: "Wasser-Attacke, die wirkungsvoller ist, wenn KP des Anwenders hoch sind." }, "signalBeam": { - name: "Signal Beam", - effect: "The user attacks with a sinister beam of light. This may also confuse the target." + name: "Ampelleuchte", + effect: "Strahlenattacke, die das Ziel eventuell verwirrt." }, "shadowPunch": { - name: "Shadow Punch", - effect: "The user throws a punch from the shadows. This attack never misses." + name: "Finsterfaust", + effect: "Angriff mit der Faust aus dem Schattenreich. Ausweichen unmöglich." }, "extrasensory": { - name: "Extrasensory", - effect: "The user attacks with an odd, unseeable power. This may also make the target flinch." + name: "Sondersensor", + effect: "Besonderer Angriff mit einer unsichtbaren Kraft, die das Ziel eventuell zurückschrecken lässt." }, "skyUppercut": { - name: "Sky Uppercut", - effect: "The user attacks the target with an uppercut thrown skyward with force." + name: "Himmelhieb", + effect: "Kinnhaken, der das Ziel gen Himmel schickt." }, "sandTomb": { - name: "Sand Tomb", - effect: "The user traps the target inside a harshly raging sandstorm for four to five turns." + name: "Sandgrab", + effect: "Das Ziel leidet für vier bis fünf Runden in einer Sandhose." }, "sheerCold": { - name: "Sheer Cold", - effect: "The target faints instantly. It's less likely to hit the target if it's used by Pokémon other than Ice types." + name: "Eiseskälte", + effect: "Angriff mit Kälte, die das Ziel bei Erfolg besiegt." }, "muddyWater": { - name: "Muddy Water", - effect: "The user attacks by shooting muddy water at opposing Pokémon. This may also lower their accuracy." + name: "Lehmbrühe", + effect: "Greift mit Matsch an und senkt eventuell die Genauigkeit des Zieles." }, "bulletSeed": { - name: "Bullet Seed", - effect: "The user forcefully shoots seeds at the target two to five times in a row." + name: "Kugelsaat", + effect: "Der Anwender wirft zwei- bis fünfmal in rascher Folge Samen auf das Ziel." }, "aerialAce": { - name: "Aerial Ace", - effect: "The user confounds the target with speed, then slashes. This attack never misses." + name: "Aero-Ass", + effect: "Eine extrem schnelle Attacke, der das Ziel nicht ausweichen kann." }, "icicleSpear": { - name: "Icicle Spear", - effect: "The user launches sharp icicles at the target two to five times in a row." + name: "Eisspeer", + effect: "Feuert zwei bis fünf Eiszapfen auf das Ziel." }, "ironDefense": { - name: "Iron Defense", - effect: "The user hardens its body's surface like iron, sharply raising its Defense stat." + name: "Eisenabwehr", + effect: "Anwender stärkt den Körper, um den Verteidigungs-Wert stark zu erhöhen." }, "block": { - name: "Block", - effect: "The user blocks the target's way with arms spread wide to prevent escape." + name: "Rückentzug", + effect: "Anwender versperrt den Fluchtweg des Zieles." }, "howl": { - name: "Howl", - effect: "The user howls loudly to raise the spirit of itself and allies. This raises their Attack stats." + name: "Jauler", + effect: "Anwender jault, um seinen Kampfgeist und seinen Angriffs-Wert zu erhöhen." }, "dragonClaw": { - name: "Dragon Claw", - effect: "The user slashes the target with huge sharp claws." + name: "Drachenklaue", + effect: "Das Ziel wird mit riesigen, scharfen Klauen stark verletzt." }, "frenzyPlant": { - name: "Frenzy Plant", - effect: "The user slams the target with the roots of an enormous tree. The user can't move on the next turn." + name: "Flora-Statue", + effect: "Angriff mit dickem Ast. Der Angreifer muss eine Runde aussetzen." }, "bulkUp": { - name: "Bulk Up", - effect: "The user tenses its muscles to bulk up its body, raising both its Attack and Defense stats." + name: "Protzer", + effect: "Pumpt den Körper auf, um den Angriff und die Verteidigung zu erhöhen." }, "bounce": { - name: "Bounce", - effect: "The user bounces up high, then drops on the target on the second turn. This may also leave the target with paralysis." + name: "Sprungfeder", + effect: "Angreifer springt und landet in der nächsten Runde auf dem Ziel. Das Ziel wird eventuell paralysiert." }, "mudShot": { - name: "Mud Shot", - effect: "The user attacks by hurling a blob of mud at the target. This also lowers the target's Speed stat." + name: "Lehmschuss", + effect: "Angriff mit Lehm, der den Initiative-Wert des Zieles senkt." }, "poisonTail": { - name: "Poison Tail", - effect: "The user hits the target with its tail. This may also poison the target. Critical hits land more easily." + name: "Giftschweif", + effect: "Angriff mit hoher Volltrefferquote. Diese Schweifattacke vergiftet das Ziel eventuell." }, "covet": { - name: "Covet", - effect: "The user endearingly approaches the target, then has a 30% chance to steal the target's held item." + name: "Bezirzer", + effect: "Bittet charmant um das getragene Item des Zieles und stiehlt es dann." }, "voltTackle": { - name: "Volt Tackle", - effect: "The user electrifies itself and charges the target. This also damages the user quite a lot. This attack may leave the target with paralysis." + name: "Volttackle", + effect: "Angriff mit Elektro-Tackle. Der Anwender verletzt sich dabei. Das Ziel wird eventuell paralysiert." }, "magicalLeaf": { - name: "Magical Leaf", - effect: "The user scatters curious leaves that chase the target. This attack never misses." + name: "Zauberblatt", + effect: "Magischer Blattangriff, dem nicht auszuweichen ist." }, "waterSport": { - name: "Water Sport", - effect: "The user soaks the battlefield with water. This weakens Fire-type moves for five turns." + name: "Nassmacher", + effect: "Der Anwender lässt Wasser herabregnen und schwächt damit fünf Runden lang Feuer-Attacken." }, "calmMind": { - name: "Calm Mind", - effect: "The user quietly focuses its mind and calms its spirit to raise its Sp. Atk and Sp. Def stats." + name: "Gedankengut", + effect: "Erhöht Spezial-Angriff und Spezial-Verteidigung durch Konzentration." }, "leafBlade": { - name: "Leaf Blade", - effect: "The user handles a sharp leaf like a sword and attacks by cutting its target. Critical hits land more easily." + name: "Laubklinge", + effect: "Hieb mit scharfkantigem Blatt. Hohe Volltrefferquote." }, "dragonDance": { - name: "Dragon Dance", - effect: "The user vigorously performs a mystic, powerful dance that raises its Attack and Speed stats." + name: "Drachentanz", + effect: "Ein mystischer Tanz, der den Angriffs- und Initiative-Wert erhöht." }, "rockBlast": { - name: "Rock Blast", - effect: "The user hurls hard rocks at the target. Two to five rocks are launched in a row." + name: "Felswurf", + effect: "Wirft zwei- bis fünfmal in Folge Felsblöcke auf das Ziel." }, "shockWave": { - name: "Shock Wave", - effect: "The user strikes the target with a quick jolt of electricity. This attack never misses." + name: "Schockwelle", + effect: "Angriff mit schnellem Elektro-Schlag. Ausweichen nicht möglich." }, "waterPulse": { - name: "Water Pulse", - effect: "The user attacks the target with a pulsing blast of water. This may also confuse the target." + name: "Aquawelle", + effect: "Angriff mit Wasserwelle, die das Ziel eventuell verwirren kann." }, "doomDesire": { - name: "Doom Desire", - effect: "Two turns after this move is used, a concentrated bundle of light blasts the target." + name: "Kismetwunsch", + effect: "Angriff mit gebündeltem Licht erfolgt zwei Runden nach Attackeneinsatz." }, "psychoBoost": { - name: "Psycho Boost", - effect: "The user attacks the target at full power. The attack's recoil harshly lowers the user's Sp. Atk stat." + name: "Psyschub", + effect: "Angriff mit voller Kraft, der den Spezial-Angriff des Anwenders durch den Rückstoß stark senkt." }, "roost": { - name: "Roost", - effect: "The user lands and rests its body. This move restores the user's HP by up to half of its max HP." + name: "Ruheort", + effect: "Anwender landet und ruht sich aus. KP des Anwenders werden um 50 % der maximalen KP aufgefüllt." }, "gravity": { - name: "Gravity", - effect: "This move enables Flying-type Pokémon or Pokémon with the Levitate Ability to be hit by Ground-type moves. Moves that involve flying can't be used." + name: "Erdanziehung", + effect: "Die Gravitation wird für fünf Runden erhöht. Macht Fliegen unmöglich und verhindert Schwebe." }, "miracleEye": { - name: "Miracle Eye", - effect: "Enables a Dark-type target to be hit by Psychic-type attacks. This also enables an evasive target to be hit." + name: "Wunderauge", + effect: "Erlaubt es, Unlicht-Pokémon mit Psycho-Attacken anzugreifen. Ignoriert den Fluchtwert des Zieles." }, "wakeUpSlap": { - name: "Wake-Up Slap", - effect: "This attack inflicts big damage on a sleeping target. This also wakes the target up, however." + name: "Weckruf", + effect: "Richtet großen Schaden bei einem schlafenden Ziel an, weckt es aber auch auf." }, "hammerArm": { - name: "Hammer Arm", - effect: "The user swings and hits with its strong, heavy fist. It lowers the user's Speed, however." + name: "Hammerarm", + effect: "Anwender trifft mit einem starken Hieb. Senkt Initiative des Anwenders." }, "gyroBall": { - name: "Gyro Ball", - effect: "The user tackles the target with a high-speed spin. The slower the user compared to the target, the greater the move's power." + name: "Gyroball", + effect: "Angriff mit hoher Geschwindigkeit. Je niedriger die Initiative des Anwenders, desto höher der Schaden." }, "healingWish": { - name: "Healing Wish", - effect: "The user faints. In return, the Pokémon taking its place will have its HP restored and status conditions cured." + name: "Heilopfer", + effect: "Anwender geht K.O. Das an seine Stelle tretende Pokémon hat volle KP. Statusprobleme werden geheilt." }, "brine": { - name: "Brine", - effect: "If the target's HP is half or less, this attack will hit with double the power." + name: "Lake", + effect: "Hat das Ziel die Hälfte oder weniger seiner maximalen KP, trifft diese Attacke mit doppelter Kraft." }, "naturalGift": { - name: "Natural Gift", - effect: "The user draws power to attack by using its held Berry. The Berry determines the move's type and power." + name: "Beerenkräfte", + effect: "Anwender zieht aus seiner derzeitigen Beere Kraft. Sie bestimmt Typ und Stärke der Attacke." }, "feint": { - name: "Feint", - effect: "This attack hits a target using a move such as Protect or Detect. This also lifts the effects of those moves." + name: "Offenlegung", + effect: "Ziele, die Schutzschild oder Scanner verwenden, werden getroffen. Entfernt Effekte dieser Attacken." }, "pluck": { - name: "Pluck", - effect: "The user pecks the target. If the target is holding a Berry, the user eats it and gains its effect." + name: "Pflücker", + effect: "Anwender pickt das Ziel, nimmt die Beere, falls das Ziel eine trägt, und erhält ihren Effekt." }, "tailwind": { - name: "Tailwind", - effect: "The user whips up a turbulent whirlwind that ups the Speed stats of the user and its allies for four turns." + name: "Rückenwind", + effect: "Anwender erzeugt einen Wirbelwind, der die Initiative aller Pokémon im Team für vier Runden steigert." }, "acupressure": { - name: "Acupressure", - effect: "The user applies pressure to stress points, sharply boosting one of its or its allies' stats." + name: "Akupressur", + effect: "Anwender erhöht Druck auf Stresspunkte und steigert einen Statuswert stark." }, "metalBurst": { - name: "Metal Burst", - effect: "The user retaliates with much greater force against the opponent that last inflicted damage on it." + name: "Metallstoß", + effect: "Attacke mit großer Kraft gegen das Ziel, das dem Anwender in derselben Runde zuletzt Schaden zufügte." }, "uTurn": { - name: "U-turn", - effect: "After making its attack, the user rushes back to switch places with a party Pokémon in waiting." + name: "Kehrtwende", + effect: "Nach der Attacke eilt der Anwender zurück und tauscht den Platz mit einem anderen Pokémon." }, "closeCombat": { - name: "Close Combat", - effect: "The user fights the target up close without guarding itself. This also lowers the user's Defense and Sp. Def stats." + name: "Nahkampf", + effect: "Nahkampf-Attacke ohne Rücksicht auf Verluste. Senkt Verteidigung und Spezial-Verteidigung des Anwenders." }, "payback": { - name: "Payback", - effect: "The user stores power, then attacks. If the user moves after the target, this attack's power will be doubled." + name: "Gegenstoß", + effect: "Der Anwender lädt die Attacke auf. Handelt das Ziel vor dem Anwender, verdoppelt sich die Kraft der Attacke." }, "assurance": { - name: "Assurance", - effect: "If the target has already taken some damage in the same turn, this attack's power is doubled." + name: "Gewissheit", + effect: "Hat das Ziel während der Runde schon Schaden genommen, wird die Kraft der Attacke verdoppelt." }, "embargo": { - name: "Embargo", - effect: "This move prevents the target from using its held item for five turns. Its Trainer is also prevented from using items on it." + name: "Itemsperre", + effect: "Verhindert, dass auf das Ziel Items verwendet werden." }, "fling": { - name: "Fling", - effect: "The user flings its held item at the target to attack. This move's power and effects depend on the item." + name: "Schleuder", + effect: "Anwender schleudert sein Item auf das Ziel. Kraft und Effekt der Attacke hängen vom Item ab." }, "psychoShift": { - name: "Psycho Shift", - effect: "Using its psychic power of suggestion, the user transfers its status conditions to the target." + name: "Psybann", + effect: "Anwender nutzt seine Suggestivkräfte, um eigene Statusprobleme auf das Ziel zu transferieren." }, "trumpCard": { - name: "Trump Card", - effect: "The fewer PP this move has, the greater its power." + name: "Trumpfkarte", + effect: "Je weniger AP diese Attacke hat, desto mehr Angriffskraft besitzt sie." }, "healBlock": { - name: "Heal Block", - effect: "For five turns, the user prevents the opposing team from using any moves, Abilities, or held items that recover HP." + name: "Heilblockade", + effect: "Anwender verhindert für fünf Runden, dass Ziele durch Attacken, Fähigkeiten oder Items KP regenerieren." }, "wringOut": { - name: "Wring Out", - effect: "The user powerfully wrings the target. The more HP the target has, the greater the move's power." + name: "Auswringen", + effect: "Anwender presst sein Ziel aus. Je höher die KP des Zieles, desto kraftvoller die Attacke." }, "powerTrick": { - name: "Power Trick", - effect: "The user employs its psychic power to switch its Attack stat with its Defense stat." + name: "Krafttrick", + effect: "Anwender setzt Psycho-Kräfte ein, um eigenen Angriffs- mit Verteidigungs-Wert auszutauschen." }, "gastroAcid": { - name: "Gastro Acid", - effect: "The user hurls up its stomach acids on the target. The fluid eliminates the effect of the target's Ability." + name: "Magensäfte", + effect: "Anwender greift das Ziel mit eigenen Magensäften an. Entfernt Effekte von dessen Fähigkeit." }, "luckyChant": { - name: "Lucky Chant", - effect: "The user chants an incantation toward the sky, preventing opposing Pokémon from landing critical hits for five turns." + name: "Beschwörung", + effect: "Anwender singt eine Beschwörungsformel, die Volltreffer gegen ihn verhindert." }, "meFirst": { - name: "Me First", - effect: "The user cuts ahead of the target to copy and use the target's intended move with greater power. This move fails if it isn't used first." + name: "Egotrip", + effect: "Anwender stiehlt und führt die Attacke eines langsameren Zieles zuerst und mit größerer Kraft aus." }, "copycat": { - name: "Copycat", - effect: "The user mimics the move used immediately before it. The move fails if no other move has been used yet." + name: "Imitator", + effect: "Anwender imitiert gerade verwendete Attacke. Dies schlägt fehl, falls zuvor keine Attacke verwendet wurde." }, "powerSwap": { - name: "Power Swap", - effect: "The user employs its psychic power to switch changes to its Attack and Sp. Atk stats with the target." + name: "Krafttausch", + effect: "Psychische Kräfte tauschen Änderungen an Angriff und Spezial-Angriff mit denen des Zieles." }, "guardSwap": { - name: "Guard Swap", - effect: "The user employs its psychic power to switch changes to its Defense and Sp. Def stats with the target." + name: "Schutztausch", + effect: "Psychische Kräfte tauschen Änderungen an Verteidigung und Spezial-Verteidigung mit denen des Zieles." }, "punishment": { - name: "Punishment", - effect: "The more the target has powered up with stat changes, the greater the move's power." + name: "Strafattacke", + effect: "Je stärker das Ziel durch Statusveränderungen ist, desto stärker wirkt diese Attacke." }, "lastResort": { - name: "Last Resort", - effect: "This move can be used only after the user has used all the other moves it knows in the battle." + name: "Zuflucht", + effect: "Diese Attacke kann nur eingesetzt werden, nachdem alle verfügbaren Attacken ausgeführt worden sind." }, "worrySeed": { - name: "Worry Seed", - effect: "A seed that causes worry is planted on the target. It prevents sleep by making the target's Ability Insomnia." + name: "Sorgensamen", + effect: "Ziel wird bepflanzt. Wandelt Fähigkeit in Insomnia um. Verhindert so Schlaf." }, "suckerPunch": { - name: "Sucker Punch", - effect: "This move enables the user to attack first. This move fails if the target is not readying an attack." + name: "Tiefschlag", + effect: "Ermöglicht den Erstschlag. Gelingt aber nur, wenn das Ziel gerade eine Attacke vorbereitet." }, "toxicSpikes": { - name: "Toxic Spikes", - effect: "The user lays a trap of poison spikes at the feet of the opposing team. The spikes will poison opposing Pokémon that switch into battle." + name: "Giftspitzen", + effect: "Anwender legt eine Falle mit Giftdornen aus. In den Kampf eingewechselte gegnerische Pokémon werden vergiftet." }, "heartSwap": { - name: "Heart Swap", - effect: "The user employs its psychic power to switch stat changes with the target." + name: "Statustausch", + effect: "Anwender setzt Psycho-Kräfte ein, um Statusveränderungen des Zieles mit den eigenen zu tauschen." }, "aquaRing": { - name: "Aqua Ring", - effect: "The user envelops itself in a veil made of water. It regains some HP every turn." + name: "Wasserring", + effect: "Anwender umgibt sich mit einem Schleier aus Wasser. Dabei regeneriert er einige KP pro Runde." }, "magnetRise": { - name: "Magnet Rise", - effect: "The user levitates using electrically generated magnetism for five turns." + name: "Magnetflug", + effect: "Anwender schwebt für fünf Runden durch elektrisch erzeugten Magnetismus." }, "flareBlitz": { - name: "Flare Blitz", - effect: "The user cloaks itself in fire and charges the target. This also damages the user quite a lot. This attack may leave the target with a burn." + name: "Flammenblitz", + effect: "Anwender hüllt sich in Flammen und stürmt auf das Ziel zu, das sich eventuell verbrennt. Anwender nimmt selbst großen Schaden." }, "forcePalm": { - name: "Force Palm", - effect: "The target is attacked with a shock wave. This may also leave the target with paralysis." + name: "Kraftwelle", + effect: "Das Ziel wird mit einer Schockwelle angegriffen, die es eventuell paralysiert." }, "auraSphere": { - name: "Aura Sphere", - effect: "The user lets loose a blast of aura power from deep within its body at the target. This attack never misses." + name: "Aurasphäre", + effect: "Tief aus dem Inneren des Anwenders löst sich ein kraftvoller Stoß Auraenergie. Trifft in jedem Fall." }, "rockPolish": { - name: "Rock Polish", - effect: "The user polishes its body to reduce drag. This sharply raises the Speed stat." + name: "Steinpolitur", + effect: "Anwender reduziert so gut wie möglich den Luftwiderstand. Kann Initiative-Wert stark steigern." }, "poisonJab": { - name: "Poison Jab", - effect: "The target is stabbed with a tentacle, arm, or the like steeped in poison. This may also poison the target." + name: "Gifthieb", + effect: "Ziel wird mit vergiftetem Arm oder Tentakel verletzt. Es wird dabei eventuell vergiftet." }, "darkPulse": { - name: "Dark Pulse", - effect: "The user releases a horrible aura imbued with dark thoughts. This may also make the target flinch." + name: "Finsteraura", + effect: "Anwender greift mit fürchterlicher Aura schlechter Gedanken an. Ziel schreckt eventuell zurück." }, "nightSlash": { - name: "Night Slash", - effect: "The user slashes the target the instant an opportunity arises. Critical hits land more easily." + name: "Nachthieb", + effect: "Anwender greift bei der ersten Gelegenheit mit scharfen Klauen an. Hohe Volltrefferquote." }, "aquaTail": { - name: "Aqua Tail", - effect: "The user attacks by swinging its tail as if it were a vicious wave in a raging storm." + name: "Nassschweif", + effect: "Anwender attackiert mit dem Schweif, als ob dieser eine brutale Welle in einem tosenden Sturm sei." }, "seedBomb": { - name: "Seed Bomb", - effect: "The user slams a barrage of hard-shelled seeds down on the target from above." + name: "Samenbomben", + effect: "Anwender lässt eine Menge Samen mit harter Schale von oben auf das Ziel fallen." }, "airSlash": { - name: "Air Slash", - effect: "The user attacks with a blade of air that slices even the sky. This may also make the target flinch." + name: "Luftschnitt", + effect: "Das Ziel wird mit einer Luftklinge angegriffen. Ziel schreckt eventuell zurück." }, "xScissor": { - name: "X-Scissor", - effect: "The user slashes at the target by crossing its scythes or claws as if they were a pair of scissors." + name: "Kreuzschere", + effect: "Der Anwender führt eine Attacke aus, die einer Scherenbewegung ähnelt." }, "bugBuzz": { - name: "Bug Buzz", - effect: "The user generates a damaging sound wave by vibration. This may also lower the target's Sp. Def stat." + name: "Käfergebrumm", + effect: "Anwender schlägt mit den Flügeln und erzeugt eine Schockwelle. Senkt eventuell Spezial-Verteidigung des Zieles." }, "dragonPulse": { - name: "Dragon Pulse", - effect: "The target is attacked with a shock wave generated by the user's gaping mouth." + name: "Drachenpuls", + effect: "Das Ziel wird mit einer Schockwelle angegriffen, die aus dem offenen Maul des Anwenders kommt." }, "dragonRush": { - name: "Dragon Rush", - effect: "The user tackles the target while exhibiting overwhelming menace. This may also make the target flinch." + name: "Drachenstoß", + effect: "Anwender führt einen gefährlichen Angriff aus. Das Ziel schreckt eventuell zurück." }, "powerGem": { - name: "Power Gem", - effect: "The user attacks with a ray of light that sparkles as if it were made of gemstones." + name: "Juwelenkraft", + effect: "Anwender attackiert mit einem Lichtstrahl, der funkelt, als sei er aus Juwelen." }, "drainPunch": { - name: "Drain Punch", - effect: "An energy-draining punch. The user's HP is restored by half the damage taken by the target." + name: "Ableithieb", + effect: "Entzieht dem Ziel Energie. Die Hälfte des Schadens wird den KP des Anwenders zugerechnet." }, "vacuumWave": { - name: "Vacuum Wave", - effect: "The user whirls its fists to send a wave of pure vacuum at the target. This move always goes first." + name: "Vakuumwelle", + effect: "Ein Faustwirbel sendet eine Vakuumwelle auf das Ziel. Erstschlaggarantie." }, "focusBlast": { - name: "Focus Blast", - effect: "The user heightens its mental focus and unleashes its power. This may also lower the target's Sp. Def stat." + name: "Fokusstoß", + effect: "Anwender erhöht seinen mentalen Fokus und greift dann an. Senkt eventuell Spezial-Verteidigung des Zieles." }, "energyBall": { - name: "Energy Ball", - effect: "The user draws power from nature and fires it at the target. This may also lower the target's Sp. Def stat." + name: "Energieball", + effect: "Anwender zieht Kraft aus der Natur und feuert sie auf das Ziel. Senkt eventuell Spezial-Verteidigung des Zieles." }, "braveBird": { - name: "Brave Bird", - effect: "The user tucks in its wings and charges from a low altitude. This also damages the user quite a lot." + name: "Sturzflug", + effect: "Anwender greift aus niedriger Höhe an. Er erleidet bei dieser Attacke selbst großen Schaden." }, "earthPower": { - name: "Earth Power", - effect: "The user makes the ground under the target erupt with power. This may also lower the target's Sp. Def stat." + name: "Erdkräfte", + effect: "Der Boden unter dem Ziel erzittert durch die Kraft der Erde. Senkt eventuell Spezial-Verteidigung." }, "switcheroo": { - name: "Switcheroo", - effect: "The user trades held items with the target faster than the eye can follow." + name: "Wechseldich", + effect: "Item wird in Windeseile mit dem Ziel getauscht." }, "gigaImpact": { - name: "Giga Impact", - effect: "The user charges at the target using every bit of its power. The user can't move on the next turn." + name: "Gigastoß", + effect: "Anwender rennt mit seiner ganzen Kraft gegen das Ziel an und muss dann eine Runde ruhen." }, "nastyPlot": { - name: "Nasty Plot", - effect: "The user stimulates its brain by thinking bad thoughts. This sharply raises the user's Sp. Atk stat." + name: "Ränkeschmied", + effect: "Anwender stimuliert sein Gehirn und hat finstere Gedanken. Steigert Spezial-Angriff stark." }, "bulletPunch": { - name: "Bullet Punch", - effect: "The user strikes the target with tough punches as fast as bullets. This move always goes first." + name: "Patronenhieb", + effect: "Das Ziel wird von ultraschnellen Hieben getroffen. Erstschlaggarantie." }, "avalanche": { - name: "Avalanche", - effect: "The power of this attack move is doubled if the user has been hurt by the target in the same turn." + name: "Lawine", + effect: "Wurde der Anwender in dieser Runde vom Ziel getroffen, macht diese Attacke doppelten Schaden." }, "iceShard": { - name: "Ice Shard", - effect: "The user flash-freezes chunks of ice and hurls them at the target. This move always goes first." + name: "Eissplitter", + effect: "Das Ziel wird mit Eisklumpen beworfen. Diese Attacke hat Erstschlaggarantie." }, "shadowClaw": { - name: "Shadow Claw", - effect: "The user slashes with a sharp claw made from shadows. Critical hits land more easily." + name: "Dunkelklaue", + effect: "Das Ziel wird mit scharfen Klauen aus der Schattenwelt attackiert. Hohe Volltrefferquote." }, "thunderFang": { - name: "Thunder Fang", - effect: "The user bites with electrified fangs. This may also make the target flinch or leave it with paralysis." + name: "Donnerzahn", + effect: "Anwender beißt mit elektrifizierten Reißzähnen zu. Das Ziel schreckt eventuell zurück oder wird paralysiert." }, "iceFang": { - name: "Ice Fang", - effect: "The user bites with cold-infused fangs. This may also make the target flinch or leave it frozen." + name: "Eiszahn", + effect: "Anwender beißt mit eiskalten Reißzähnen zu. Ziel schreckt eventuell zurück oder friert ein." }, "fireFang": { - name: "Fire Fang", - effect: "The user bites with flame-cloaked fangs. This may also make the target flinch or leave it with a burn." + name: "Feuerzahn", + effect: "Anwender beißt mit flammenden Reißzähnen zu. Ziel schreckt eventuell zurück oder verbrennt sich." }, "shadowSneak": { - name: "Shadow Sneak", - effect: "The user extends its shadow and attacks the target from behind. This move always goes first." + name: "Schattenstoß", + effect: "Anwender erweitert Schatten und greift das Ziel von hinten an. Erstschlaggarantie." }, "mudBomb": { - name: "Mud Bomb", - effect: "The user launches a hard-packed mud ball to attack. This may also lower the target's accuracy." + name: "Schlammbombe", + effect: "Anwender greift mit einem festen Schlammklumpen an. Senkt eventuell Genauigkeit des Zieles." }, "psychoCut": { - name: "Psycho Cut", - effect: "The user tears at the target with blades formed by psychic power. Critical hits land more easily." + name: "Psychoklinge", + effect: "Das Ziel wird mit Klingen attackiert, die aus Psycho-Energie bestehen. Hohe Volltrefferquote." }, "zenHeadbutt": { - name: "Zen Headbutt", - effect: "The user focuses its willpower to its head and attacks the target. This may also make the target flinch." + name: "Zen-Kopfstoß", + effect: "Anwender konzentriert seinen Willen und rammt das Ziel. Dieses schreckt eventuell zurück." }, "mirrorShot": { - name: "Mirror Shot", - effect: "The user lets loose a flash of energy at the target from its polished body. This may also lower the target's accuracy." + name: "Spiegelsalve", + effect: "Anwender feuert Energiestrahl aus seinem Körper ab. Senkt eventuell Genauigkeit des Zieles." }, "flashCannon": { - name: "Flash Cannon", - effect: "The user gathers all its light energy and releases it all at once. This may also lower the target's Sp. Def stat." + name: "Lichtkanone", + effect: "Anwender sammelt Lichtenergie und feuert sie auf einmal ab. Senkt eventuell Spezial-Verteidigung des Zieles." }, "rockClimb": { - name: "Rock Climb", - effect: "The user attacks the target by smashing into it with incredible force. This may also confuse the target." + name: "Kraxler", + effect: "Eine stürmische Attacke, die das Ziel eventuell verwirrt." }, "defog": { - name: "Defog", - effect: "A strong wind blows away the target's barriers such as Reflect or Light Screen. This also lowers the target's evasiveness." + name: "Auflockern", + effect: "Starker Wind hebt Attacken wie Reflektor und Lichtschild des Zieles auf. Senkt außerdem den Fluchtwert." }, "trickRoom": { - name: "Trick Room", - effect: "The user creates a bizarre area in which slower Pokémon get to move first for five turns." + name: "Bizarroraum", + effect: "Anwender erzeugt einen bizarren Raum, in dem langsame Pokémon fünf Runden lang zuerst agieren." }, "dracoMeteor": { name: "Draco Meteor", - effect: "Comets are summoned down from the sky onto the target. The attack's recoil harshly lowers the user's Sp. Atk stat." + effect: "Kometen werden heraufbeschworen. Der Rückstoß reduziert den Spezial-Angriff des Anwenders stark." }, "discharge": { - name: "Discharge", - effect: "The user strikes everything around it by letting loose a flare of electricity. This may also cause paralysis." + name: "Ladungsstoß", + effect: "Anwender greift alle Pokémon im Umkreis mit Elektrizität an. Diese werden eventuell auch paralysiert." }, "lavaPlume": { - name: "Lava Plume", - effect: "The user torches everything around it in an inferno of scarlet flames. This may also leave those it hits with a burn." + name: "Flammensturm", + effect: "Greift alles in seiner Umgebung mit tiefroten Flammen an. Ziel kann Verbrennungen erleiden." }, "leafStorm": { - name: "Leaf Storm", - effect: "The user whips up a storm of leaves around the target. The attack's recoil harshly lowers the user's Sp. Atk stat." + name: "Blättersturm", + effect: "Anwender erzeugt einen Sturm aus scharfen Blättern. Rückstoß senkt Spezial-Angriff des Anwenders stark." }, "powerWhip": { - name: "Power Whip", - effect: "The user violently whirls its vines, tentacles, or the like to harshly lash the target." + name: "Blattgeißel", + effect: "Anwender wirbelt seine Ranken oder Tentakel peitschenartig gegen das Ziel." }, "rockWrecker": { - name: "Rock Wrecker", - effect: "The user launches a huge boulder at the target to attack. The user can't move on the next turn." + name: "Felswerfer", + effect: "Anwender wirft einen riesigen Felsen auf das Ziel. In der nächsten Runde muss der Anwender ruhen." }, "crossPoison": { - name: "Cross Poison", - effect: "A slashing attack with a poisonous blade that may also poison the target. Critical hits land more easily." + name: "Giftstreich", + effect: "Ein schneidender Hieb, der das Ziel eventuell vergiftet. Hat eine hohe Volltrefferquote." }, "gunkShot": { - name: "Gunk Shot", - effect: "The user shoots filthy garbage at the target to attack. This may also poison the target." + name: "Mülltreffer", + effect: "Anwender schießt mit Müll auf das Ziel. Vergiftet dieses eventuell." }, "ironHead": { - name: "Iron Head", - effect: "The user slams the target with its steel-hard head. This may also make the target flinch." + name: "Eisenschädel", + effect: "Ziel wird durch stahlharten Kopf des Anwenders getroffen und schreckt eventuell zurück." }, "magnetBomb": { - name: "Magnet Bomb", - effect: "The user launches steel bombs that stick to the target. This attack never misses." + name: "Magnetbombe", + effect: "Ziel wird durch Haftbomben getroffen. Diese Attacke trifft immer." }, "stoneEdge": { - name: "Stone Edge", - effect: "The user stabs the target from below with sharpened stones. Critical hits land more easily." + name: "Steinkante", + effect: "Anwender sticht das Ziel mit spitzen Steinen. Hohe Volltrefferquote." }, "captivate": { - name: "Captivate", - effect: "If any opposing Pokémon is the opposite gender of the user, it is charmed, which harshly lowers its Sp. Atk stat." + name: "Liebreiz", + effect: "Charme-Attacke, die den Spezial-Angriff des Zieles stark senkt, falls es dem anderen Geschlecht angehört." }, "stealthRock": { - name: "Stealth Rock", - effect: "The user lays a trap of levitating stones around the opposing team. The trap hurts opposing Pokémon that switch into battle." + name: "Tarnsteine", + effect: "Falle mit schwebenden Steinen. In den Kampf eingewechselte Ziele nehmen Schaden." }, "grassKnot": { - name: "Grass Knot", - effect: "The user snares the target with grass and trips it. The heavier the target, the greater the move's power." + name: "Strauchler", + effect: "Ziel wird durch Gras ins Straucheln gebracht. Je schwerer das Ziel, desto mehr Schaden." }, "chatter": { - name: "Chatter", - effect: "The user attacks the target with sound waves of deafening chatter. This confuses the target." + name: "Geschwätz", + effect: "Attacke mit Schallwellen. Verwirrt das Ziel." }, "judgment": { - name: "Judgment", - effect: "The user releases countless shots of light at the target. This move's type varies depending on the kind of Plate the user is holding." + name: "Urteilskraft", + effect: "Anwender feuert unzählige Lichtstrahlen ab. Deren Typ hängt von der gehaltenen Tafel ab." }, "bugBite": { - name: "Bug Bite", - effect: "The user bites the target. If the target is holding a Berry, the user eats it and gains its effect." + name: "Käferbiss", + effect: "Anwender beißt das Ziel. Trägt dieses eine Beere, isst der Anwender sie und erhält ihren Effekt." }, "chargeBeam": { - name: "Charge Beam", - effect: "The user attacks the target with an electric charge. The user may use any remaining electricity to raise its Sp. Atk stat." + name: "Ladestrahl", + effect: "Ziel wird von einem Elektrostrahl getroffen. Steigert eventuell Spezial-Angriff des Anwenders." }, "woodHammer": { - name: "Wood Hammer", - effect: "The user slams its rugged body into the target to attack. This also damages the user quite a lot." + name: "Holzhammer", + effect: "Anwender attackiert mit seinem robusten Körper. Er erleidet dabei auch selbst großen Schaden." }, "aquaJet": { - name: "Aqua Jet", - effect: "The user lunges at the target at a speed that makes it almost invisible. This move always goes first." + name: "Wasserdüse", + effect: "Bei dieser Erstschlag-Attacke stürzt sich der Anwender so schnell auf das Ziel, dass er quasi unsichtbar wird." }, "attackOrder": { - name: "Attack Order", - effect: "The user calls out its underlings to pummel the target. Critical hits land more easily." + name: "Schlagbefehl", + effect: "Anwender ruft seine Untergebenen zum Angriff. Hat eine hohe Volltrefferquote." }, "defendOrder": { - name: "Defend Order", - effect: "The user calls out its underlings to shield its body, raising its Defense and Sp. Def stats." + name: "Blockbefehl", + effect: "Untergebene bilden einen lebenden Schild um den Anwender. Steigert Verteidigung und Spezial-Verteidigung." }, "healOrder": { - name: "Heal Order", - effect: "The user calls out its underlings to heal it. The user regains up to half of its max HP." + name: "Heilbefehl", + effect: "Untergebene heilen den Anwender. KP des Anwenders werden um 50 % der maximalen KP aufgefüllt." }, "headSmash": { - name: "Head Smash", - effect: "The user attacks the target with a hazardous, full-power headbutt. This also damages the user terribly." + name: "Kopfstoß", + effect: "Anwender greift unter Einsatz seines Lebens mit einem Kopfstoß an und nimmt dabei selbst jede Menge Schaden." }, "doubleHit": { - name: "Double Hit", - effect: "The user slams the target with a long tail, vines, or a tentacle. The target is hit twice in a row." + name: "Doppelschlag", + effect: "Anwender trifft das Ziel mit dem Schweif oder Ähnlichem. Ziel wird doppelt getroffen." }, "roarOfTime": { - name: "Roar of Time", - effect: "The user blasts the target with power that distorts even time. The user can't move on the next turn." + name: "Zeitenlärm", + effect: "Anwender attackiert mit einer Kraft, die selbst die Zeit verzerrt. In der nächsten Runde muss er ruhen." }, "spacialRend": { - name: "Spacial Rend", - effect: "The user tears the target along with the space around it. Critical hits land more easily." + name: "Raumschlag", + effect: "Schwere, raumgreifende Attacke. Hohe Volltrefferquote." }, "lunarDance": { - name: "Lunar Dance", - effect: "The user faints. In return, the Pokémon taking its place will have its status and HP fully restored." + name: "Lunartanz", + effect: "Anwender geht K.O. Das an seine Stelle tretende Pokémon hat dafür volle KP und AP. Statusprobleme werden geheilt." }, "crushGrip": { - name: "Crush Grip", - effect: "The target is crushed with great force. The more HP the target has left, the greater this move's power." + name: "Quetschgriff", + effect: "Ziel wird mit großer Kraft getroffen. Je höher die KP des Zieles, desto stärker die Attacke." }, "magmaStorm": { - name: "Magma Storm", - effect: "The target becomes trapped within a maelstrom of fire that rages for four to five turns." + name: "Lavasturm", + effect: "Das Ziel wird in einen Feuersog gezogen, der vier bis fünf Runden aktiv ist." }, "darkVoid": { - name: "Dark Void", - effect: "Opposing Pokémon are dragged into a world of total darkness that makes them sleep." + name: "Schlummerort", + effect: "Das Ziel wird in eine Welt der Dunkelheit gezogen und in Schlaf versetzt." }, "seedFlare": { - name: "Seed Flare", - effect: "The user emits a shock wave from its body to attack its target. This may also harshly lower the target's Sp. Def stat." + name: "Schocksamen", + effect: "Anwender erzeugt eine Schockwelle. Spezial-Verteidigung des Zieles wird stark gesenkt." }, "ominousWind": { - name: "Ominous Wind", - effect: "The user blasts the target with a gust of repulsive wind. This may also raise all the user's stats at once." + name: "Unheilböen", + effect: "Das Ziel treffen abscheuliche Winde. Steigert eventuell alle Statuswerte des Anwenders." }, "shadowForce": { - name: "Shadow Force", - effect: "The user disappears, then strikes the target on the next turn. This move hits even if the target protects itself." + name: "Schemenkraft", + effect: "Anwender verschwindet in Runde 1 und attackiert in Runde 2. Trifft auch, wenn sich das Ziel selbst schützt." }, "honeClaws": { - name: "Hone Claws", - effect: "The user sharpens its claws to boost its Attack stat and accuracy." + name: "Klauenwetzer", + effect: "Wetzt seine Klauen, um sie zu schärfen. Erhöht Angriff und Genauigkeit des Anwenders." }, "wideGuard": { - name: "Wide Guard", - effect: "The user and its allies are protected from wide-ranging attacks for one turn." + name: "Rundumschutz", + effect: "Schützt eine Runde lang vor Angriffen, die alle Pokémon auf deiner Seite treffen." }, "guardSplit": { - name: "Guard Split", - effect: "The user employs its psychic power to average its Defense and Sp. Def stats with those of the target." + name: "Schutzteiler", + effect: "Durch Psycho-Kräfte werden Verteidigung und Spezial-Verteidigung des Anwenders und des Zieles addiert und in zwei gleiche Hälften geteilt." }, "powerSplit": { - name: "Power Split", - effect: "The user employs its psychic power to average its Attack and Sp. Atk stats with those of the target." + name: "Kraftteiler", + effect: "Durch Psycho-Kräfte werden Angriff und Spezial-Angriff des Anwenders und des Zieles addiert und in zwei gleiche Hälften geteilt." }, "wonderRoom": { - name: "Wonder Room", - effect: "The user creates a bizarre area in which Pokémon's Defense and Sp. Def stats are swapped for five turns." + name: "Wunderraum", + effect: "Anwender erzeugt bizarren Raum, in dem über fünf Runden die Verteidigung aller Pokémon mit ihrer Spezial-Verteidigung getauscht wird." }, "psyshock": { - name: "Psyshock", - effect: "The user materializes an odd psychic wave to attack the target. This attack does physical damage." + name: "Psychoschock", + effect: "Anwender erzeugt eine seltsame Energiewelle, die dem Ziel physischen Schaden zufügt." }, "venoshock": { - name: "Venoshock", - effect: "The user drenches the target in a special poisonous liquid. This move's power is doubled if the target is poisoned." + name: "Giftschock", + effect: "Überschüttet das Ziel mit einer speziellen toxischen Flüssigkeit. Doppelt so stark gegen vergiftete Ziele." }, "autotomize": { - name: "Autotomize", - effect: "The user sheds part of its body to make itself lighter and sharply raise its Speed stat." + name: "Autotomie", + effect: "Anwender trennt sich von überflüssigen Körperteilen und steigert seine Initiative stark. Sein Gewicht nimmt deutlich ab." }, "ragePowder": { - name: "Rage Powder", - effect: "The user scatters a cloud of irritating powder to draw attention to itself. Opposing Pokémon aim only at the user." + name: "Wutpulver", + effect: "Anwender zieht gegnerische Aufmerksamkeit und Angriffe auf sich, indem er ein Wut erzeugendes Pulver über sich streut." }, "telekinesis": { - name: "Telekinesis", - effect: "The user makes the target float with its psychic power. The target is easier to hit for three turns." + name: "Telekinese", + effect: "Bringt das Ziel durch Psycho-Kräfte zum Schweben. Dieses lässt sich so über drei Runden hinweg besonders leicht treffen." }, "magicRoom": { - name: "Magic Room", - effect: "The user creates a bizarre area in which Pokémon's held items lose their effects for five turns." + name: "Magieraum", + effect: "Anwender erzeugt einen bizarren Raum, in dem über fünf Runden die Wirkung aller von Pokémon getragenen Items aufgehoben ist." }, "smackDown": { - name: "Smack Down", - effect: "The user throws a stone or similar projectile to attack the target. A flying Pokémon will fall to the ground when it's hit." + name: "Katapult", + effect: "Greift das Ziel mit Steinen und Wurfgeschossen an. Fliegende Ziele fallen dabei vom Himmel und landen auf dem Boden." }, "stormThrow": { - name: "Storm Throw", - effect: "The user strikes the target with a fierce blow. This attack always results in a critical hit." + name: "Bergsturm", + effect: "Ein Angriff mit voller Wucht und Volltreffergarantie." }, "flameBurst": { - name: "Flame Burst", - effect: "The user attacks the target with a bursting flame. The bursting flame damages Pokémon next to the target as well." + name: "Funkenflug", + effect: "Bei Erfolg greift der Anwender mit berstenden Feuerblasen an. Die Funken der geplatzten Blasen treffen auch benachbarte Ziele." }, "sludgeWave": { - name: "Sludge Wave", - effect: "The user strikes everything around it by swamping the area with a giant sludge wave. This may also poison those hit." + name: "Schlammwoge", + effect: "Greift Pokémon in der Nähe des Anwenders mit einer Schlammwelle an. Diese werden eventuell vergiftet." }, "quiverDance": { - name: "Quiver Dance", - effect: "The user lightly performs a beautiful, mystic dance. This boosts the user's Sp. Atk, Sp. Def, and Speed stats." + name: "Falterreigen", + effect: "Anwender legt behände einen mystischen, formvollendeten Tanz aufs Parkett. Spezial-Angriff, Spezial-Verteidigung und Initiative steigen." }, "heavySlam": { - name: "Heavy Slam", - effect: "The user slams into the target with its heavy body. The more the user outweighs the target, the greater the move's power." + name: "Rammboss", + effect: "Anwender rammt das Ziel mit massivem Körper. Je schwerer er im Vergleich zum Ziel ist, desto stärker die Attacke." }, "synchronoise": { - name: "Synchronoise", - effect: "Using an odd shock wave, the user inflicts damage on any Pokémon of the same type in the area around it." + name: "Synchrolärm", + effect: "Fügt Pokémon vom selben Typ, die sich in der Nähe des Anwenders aufhalten, mit seltsamen Druckwellen Schaden zu." }, "electroBall": { - name: "Electro Ball", - effect: "The user hurls an electric orb at the target. The faster the user is than the target, the greater the move's power." + name: "Elektroball", + effect: "Je höher die Initiative des Anwenders im Vergleich zum Ziel ist, desto stärker trifft dieses eine geballte Ladung Strom." }, "soak": { - name: "Soak", - effect: "The user shoots a torrent of water at the target and changes the target's type to Water." + name: "Überflutung", + effect: "Überschüttet das Ziel mit Unmengen an Wasser und ändert den Typ damit in Wasser um." }, "flameCharge": { - name: "Flame Charge", - effect: "Cloaking itself in flame, the user attacks the target. Then, building up more power, the user raises its Speed stat." + name: "Nitroladung", + effect: "Anwender hüllt sich in Flammen und greift das Ziel an. Sammelt seine Energie und erhöht dadurch die eigene Initiative." }, "coil": { - name: "Coil", - effect: "The user coils up and concentrates. This raises its Attack and Defense stats as well as its accuracy." + name: "Einrollen", + effect: "Anwender rollt sich zusammen und sammelt sich. Dabei werden Angriff, Verteidigung und Genauigkeit erhöht." }, "lowSweep": { - name: "Low Sweep", - effect: "The user makes a swift attack on the target's legs, which lowers the target's Speed stat." + name: "Fußtritt", + effect: "Anwender greift mit blitzschnellen Bewegungen die Beine des Zieles an und senkt dessen Initiative." }, "acidSpray": { - name: "Acid Spray", - effect: "The user spits fluid that works to melt the target. This harshly lowers the target's Sp. Def stat." + name: "Säurespeier", + effect: "Anwender greift an, indem er eine ätzende Flüssigkeit auf das Ziel speit. Senkt dessen Spezial-Verteidigung stark." }, "foulPlay": { - name: "Foul Play", - effect: "The user turns the target's power against it. The higher the target's Attack stat, the greater the damage it deals." + name: "Schmarotzer", + effect: "Anwender macht sich die Kraft des Zieles zunutze. Je höher dessen Angriff, desto mehr Schaden richtet die Attacke an." }, "simpleBeam": { - name: "Simple Beam", - effect: "The user's mysterious psychic wave changes the target's Ability to Simple." + name: "Wankelstrahl", + effect: "Bestrahlt das Ziel mit mysteriösen Energiewellen. Bei einem Treffer wird dessen Fähigkeit zu Wankelmut." }, "entrainment": { - name: "Entrainment", - effect: "The user dances with an odd rhythm that compels the target to mimic it, making the target's Ability the same as the user's." + name: "Zwango", + effect: "Anwender tanzt zu einem seltsamem Rhythmus und zwingt das Ziel mitzumachen. Dieses nimmt dabei die Fähigkeit des Anwenders an." }, "afterYou": { - name: "After You", - effect: "The user helps the target and makes it use its move right after the user." + name: "Galanterie", + effect: "Anwender ermöglicht dem Ziel direkt nach ihm zu handeln, solange der Anwender als Erstes zum Zug kommt." }, "round": { - name: "Round", - effect: "The user attacks the target with a song. Others can join in the Round to increase the power of the attack." + name: "Kanon", + effect: "Angriff mit Gesang. Singt der Anwender mit allen im Kanon, steigt die Stärke." }, "echoedVoice": { - name: "Echoed Voice", - effect: "The user attacks the target with an echoing voice. If this move is used every turn, its power is increased." + name: "Widerhall", + effect: "Angriff mit widerhallender Stimme. Wenn in jeder Runde ein Teilnehmer wiederholt die Attacke einsetzt, steigt die Stärke." }, "chipAway": { - name: "Chip Away", - effect: "Looking for an opening, the user strikes consistently. The target's stat changes don't affect this attack's damage." + name: "Zermürben", + effect: "Eine durchdachte Attacke zu rechter Zeit. Richtet unabhängig von den Statusveränderungen des Zieles Schaden an." }, "clearSmog": { - name: "Clear Smog", - effect: "The user attacks the target by throwing a clump of special mud. All stat changes are returned to normal." + name: "Klärsmog", + effect: "Anwender greift das Ziel mit spezialgefertigten Schlammklumpen an. Setzt Statusveränderungen zurück." }, "storedPower": { - name: "Stored Power", - effect: "The user attacks the target with stored power. The more the user's stats are raised, the greater the move's power." + name: "Kraftvorrat", + effect: "Angriff mit angesparter Energie. Je höher die Statuswerte des Anwenders, desto stärker fällt die Attacke aus." }, "quickGuard": { - name: "Quick Guard", - effect: "The user protects itself and its allies from priority moves." + name: "Rapidschutz", + effect: "Schützt Anwender und Mitstreiter vor gegnerischen Erstschlag-Attacken." }, "allySwitch": { - name: "Ally Switch", - effect: "The user teleports using a strange power and switches places with one of its allies." + name: "Seitentausch", + effect: "Wundersame Kräfte teleportieren den Anwender an den Platz eines Mitstreiters." }, "scald": { - name: "Scald", - effect: "The user shoots boiling hot water at its target. This may also leave the target with a burn." + name: "Siedewasser", + effect: "Heizt dem Ziel mit einem Schwall siedend heißen Kochwassers ein. Das Ziel erleidet dabei eventuell Verbrennungen." }, "shellSmash": { - name: "Shell Smash", - effect: "The user breaks its shell, which lowers Defense and Sp. Def stats but sharply raises its Attack, Sp. Atk, and Speed stats." + name: "Hausbruch", + effect: "Anwender zerbricht seine Schale und senkt seine Verteidigung und Spezial-Verteidigung, aber dafür steigen Angriff, Spezial-Angriff und Initiative stark." }, "healPulse": { - name: "Heal Pulse", - effect: "The user emits a healing pulse that restores the target's HP by up to half of its max HP." + name: "Heilwoge", + effect: "Anwender löst eine Schmerzen lindernde Welle aus und heilt dabei das Ziel mit der Hälfte seiner maximalen KP." }, "hex": { - name: "Hex", - effect: "This relentless attack does massive damage to a target affected by status conditions." + name: "Bürde", + effect: "Eine Attacke, bei der der Anwender das Ziel bedrängt. Fügt Zielen mit Statusproblemen hohen Schaden zu." }, "skyDrop": { - name: "Sky Drop", - effect: "The user takes the target into the sky, then drops it during the next turn. The target cannot attack while in the sky." + name: "Freier Fall", + effect: "Steigt in Runde 1 mit dem Ziel in die Luft auf und lässt es in Runde 2 fallen. Das Ziel kann dabei nicht angreifen." }, "shiftGear": { - name: "Shift Gear", - effect: "The user rotates its gears, raising its Attack stat and sharply raising its Speed stat." + name: "Gangwechsel", + effect: "Durch Drehen der Zahnräder erhöht sich nicht nur der Angriffs-Wert, sondern auch die Initiative des Anwenders stark." }, "circleThrow": { - name: "Circle Throw", - effect: "The target is thrown, and a different Pokémon is dragged out. In the wild, this ends a battle against a single Pokémon." + name: "Überkopfwurf", + effect: "Schleudert das Ziel davon und bewirkt damit, dass ein anderes Pokémon eingewechselt wird. Beendet Kämpfe gegen wilde Pokémon." }, "incinerate": { - name: "Incinerate", - effect: "The user attacks opposing Pokémon with fire. If a Pokémon is holding a certain item, such as a Berry, the item becomes burned up and unusable." + name: "Einäschern", + effect: "Eine Feuer-Attacke. Trägt das Ziel eine Beere oder ein ähnliches Item bei sich, wird dieses von den Flammen verzehrt und geht verloren." }, "quash": { - name: "Quash", - effect: "The user suppresses the target and makes its move go last." + name: "Verzögerung", + effect: "Anwender stemmt sich gegen das Ziel und bewirkt, dass dieses erst als Letztes angreift." }, "acrobatics": { - name: "Acrobatics", - effect: "The user nimbly strikes the target. If the user is not holding an item, this attack inflicts massive damage." + name: "Akrobatik", + effect: "Ein graziler Angriff auf das Ziel. Trägt der Anwender kein Item bei sich, richtet die Attacke großen Schaden an." }, "reflectType": { - name: "Reflect Type", - effect: "The user reflects the target's type, making the user the same type as the target." + name: "Typenspiegel", + effect: "Anwender bildet das Ziel nach und nimmt dabei dessen Typ an." }, "retaliate": { - name: "Retaliate", - effect: "The user gets revenge for a fainted ally. If an ally fainted in the previous turn, this move's power is increased." + name: "Heimzahlung", + effect: "Anwender nimmt Rache für einen besiegten Mitstreiter. Wurde in der vorigen Runde ein Mitstreiter besiegt, steigt die Kraft." }, "finalGambit": { - name: "Final Gambit", - effect: "The user risks everything to attack its target. The user faints but does damage equal to its HP." + name: "Wagemut", + effect: "Ein Angriff, der dem Ziel Schaden in Höhe der aktuellen KP des Anwenders zufügt. Letzterer wird dadurch selbst besiegt." }, "bestow": { - name: "Bestow", - effect: "The user passes its held item to the target when the target isn't holding an item." + name: "Offerte", + effect: "Trägt das Ziel gerade kein Item bei sich, erhält es das Item, das sich aktuell im Besitz des Anwenders befindet." }, "inferno": { name: "Inferno", - effect: "The user attacks by engulfing the target in an intense fire. This leaves the target with a burn." + effect: "Anwender greift das Ziel an, indem er es mit dichten Flammen umhüllt. Ziel erleidet Verbrennungen." }, "waterPledge": { - name: "Water Pledge", - effect: "A column of water hits the target. When used with its fire equivalent, its power increases and a rainbow appears." + name: "Wassersäulen", + effect: "Ein Angriff mit Wassersäulen. Mit Feuersäulen kombiniert steigt die Wirkung und ein Regenbogen erscheint." }, "firePledge": { - name: "Fire Pledge", - effect: "A column of fire hits the target. When used with its grass equivalent, its power increases and a vast sea of fire appears." + name: "Feuersäulen", + effect: "Ein Angriff mit Feuersäulen. Mit Pflanzsäulen kombiniert steigt die Wirkung und die Umgebung wird zu einem Meer aus Feuer." }, "grassPledge": { - name: "Grass Pledge", - effect: "A column of grass hits the target. When used with its water equivalent, its power increases and a vast swamp appears." + name: "Pflanzensäulen", + effect: "Ein Angriff mit Pflanzsäulen. Mit Wassersäulen kombiniert steigt die Wirkung und die Umgebung wird zu einem Sumpf." }, "voltSwitch": { - name: "Volt Switch", - effect: "After making its attack, the user rushes back to switch places with a party Pokémon in waiting." + name: "Voltwechsel", + effect: "Anwender kehrt nach dem Angriff mit atemberaubender Geschwindigkeit zurück und tauscht Platz mit einem anderen Pokémon." }, "struggleBug": { - name: "Struggle Bug", - effect: "While resisting, the user attacks opposing Pokémon. This lowers the Sp. Atk stats of those hit." + name: "Käfertrutz", + effect: "Anwender leistet Widerstand und greift an. Der Spezial-Angriff der Ziele sinkt." }, "bulldoze": { - name: "Bulldoze", - effect: "The user strikes everything around it by stomping down on the ground. This lowers the Speed stats of those hit." + name: "Dampfwalze", + effect: "Anwender greift an, indem er den Boden um sich herum plattwalzt. Die Initiative aller betroffenen Pokémon sinkt." }, "frostBreath": { - name: "Frost Breath", - effect: "The user blows its cold breath on the target. This attack always results in a critical hit." + name: "Eisesodem", + effect: "Anwender greift an, indem er dem Ziel eisigen Atem entgegenhaucht. Volltreffergarantie." }, "dragonTail": { - name: "Dragon Tail", - effect: "The target is knocked away, and a different Pokémon is dragged out. In the wild, this ends a battle against a single Pokémon." + name: "Drachenrute", + effect: "Putzt das Ziel vom Feld und wechselt es mit einem anderen Pokémon aus. Beendet Kämpfe gegen wilde Pokémon." }, "workUp": { - name: "Work Up", - effect: "The user is roused, and its Attack and Sp. Atk stats increase." + name: "Kraftschub", + effect: "Anwender erhält einen Kraftschub, der seinen Angriff und Spezial-Angriff erhöht." }, "electroweb": { - name: "Electroweb", - effect: "The user attacks and captures opposing Pokémon using an electric net. This lowers their Speed stats." + name: "Elektronetz", + effect: "Fängt Ziele mit einem elektrischen Netz und senkt deren Initiative." }, "wildCharge": { - name: "Wild Charge", - effect: "The user shrouds itself in electricity and smashes into its target. This also damages the user a little." + name: "Stromstoß", + effect: "Anwender erzeugt Spannung und greift an, indem er auf Kollisionskurs geht. Er selbst erleidet dabei ebenfalls leichten Schaden." }, "drillRun": { - name: "Drill Run", - effect: "The user crashes into its target while rotating its body like a drill. Critical hits land more easily." + name: "Schlagbohrer", + effect: "Anwender rammt das Ziel, während er seinen Körper wie einen Bohrer dreht. Hohe Volltrefferquote." }, "dualChop": { - name: "Dual Chop", - effect: "The user attacks its target by hitting it with brutal strikes. The target is hit twice in a row." + name: "Doppelhieb", + effect: "Versetzt dem Ziel mit massiven Extremitäten Hiebe. Angriff erfolgt zweimal hintereinander." }, "heartStamp": { - name: "Heart Stamp", - effect: "The user unleashes a vicious blow after its cute act makes the target less wary. This may also make the target flinch." + name: "Herzstempel", + effect: "Verleitet Ziel durch Kokettieren zu Unachtsamkeit und verpasst ihm dann einen harten Schlag. Ziel schreckt eventuell zurück." }, "hornLeech": { - name: "Horn Leech", - effect: "The user drains the target's energy with its horns. The user's HP is restored by half the damage taken by the target." + name: "Holzgeweih", + effect: "Greift Ziel mit Astgeweih an und zapft diesem Nährstoffe ab. Anwender wird um die Hälfte des zugefügten Schadens geheilt." }, "sacredSword": { - name: "Sacred Sword", - effect: "The user attacks by slicing with a long horn. The target's stat changes don't affect this attack's damage." + name: "Sanctoklinge", + effect: "Schneideangriff mit langem Horn. Richtet Schaden unabhängig von Statusveränderungen des Zieles an." }, "razorShell": { - name: "Razor Shell", - effect: "The user cuts its target with sharp shells. This may also lower the target's Defense stat." + name: "Kalkklinge", + effect: "Schneideangriff mit einer scharfen Muschelschale. Senkt eventuell die Verteidigung des Zieles." }, "heatCrash": { - name: "Heat Crash", - effect: "The user slams its target with its flame-covered body. The more the user outweighs the target, the greater the move's power." + name: "Brandstempel", + effect: "Rempelattacke mit brennendem Körper. Je schwerer der Anwender im Vergleich zum Ziel ist, desto stärker die Attacke." }, "leafTornado": { - name: "Leaf Tornado", - effect: "The user attacks its target by encircling it in sharp leaves. This attack may also lower the target's accuracy." + name: "Grasmixer", + effect: "Anwender greift an, indem er das Ziel in scharfes Blattwerk einwickelt. Kann die Genauigkeit senken." }, "steamroller": { - name: "Steamroller", - effect: "The user crushes its target by rolling over the target with its rolled-up body. This may also make the target flinch." + name: "Quetschwalze", + effect: "Anwender rollt mit rundlichem Körper über das Ziel und drückt es platt. Ziel schreckt eventuell zurück." }, "cottonGuard": { - name: "Cotton Guard", - effect: "The user protects itself by wrapping its body in soft cotton, which drastically raises the user's Defense stat." + name: "Watteschild", + effect: "Anwender schützt sich, indem er sich in einen luftigen Flaum hüllt. Erhöht die Verteidigung drastisch." }, "nightDaze": { - name: "Night Daze", - effect: "The user lets loose a pitch-black shock wave at its target. This may also lower the target's accuracy." + name: "Nachtflut", + effect: "Anwender greift Ziel mit finsteren Schockwellen an. Senkt eventuell die Genauigkeit." }, "psystrike": { - name: "Psystrike", - effect: "The user materializes an odd psychic wave to attack the target. This attack does physical damage." + name: "Psychostoß", + effect: "Anwender erzeugt seltsame Energiewellen, die dem Ziel physischen Schaden zufügen." }, "tailSlap": { - name: "Tail Slap", - effect: "The user attacks by striking the target with its hard tail. It hits the target two to five times in a row." + name: "Kehrschelle", + effect: "Anwender greift das Ziel mit seiner schlagfesten Rute zwei- bis fünfmal hintereinander an." }, "hurricane": { - name: "Hurricane", - effect: "The user attacks by wrapping its opponent in a fierce wind that flies up into the sky. This may also confuse the target." + name: "Orkan", + effect: "Anwender greift das Ziel an, indem er es mit heftigen Windböen umgibt. Ziel wird eventuell verwirrt." }, "headCharge": { - name: "Head Charge", - effect: "The user charges its head into its target, using its powerful guard hair. This also damages the user a little." + name: "Steinschädel", + effect: "Rempelattacke mit ausgeflippter Retrofrisur. Anwender nimmt selbst leichten Schaden." }, "gearGrind": { - name: "Gear Grind", - effect: "The user attacks by throwing steel gears at its target twice." + name: "Klikkdiskus", + effect: "Anwender greift an, indem er stählerne Zahnräder auf das Ziel schleudert. Angriff erfolgt zweimal hintereinander." }, "searingShot": { - name: "Searing Shot", - effect: "The user torches everything around it in an inferno of scarlet flames. This may also leave those it hits with a burn." + name: "Flammenball", + effect: "Greift alles in seiner Umgebung mit tiefroten Flammen an. Ziel kann Verbrennungen erleiden." }, "technoBlast": { - name: "Techno Blast", - effect: "The user fires a beam of light at its target. The move's type changes depending on the Drive the user holds." + name: "Techblaster", + effect: "Anwender feuert ein Lichtgeschoss auf das Ziel ab. Der Typ der Attacke hängt von dem des Moduls ab." }, "relicSong": { - name: "Relic Song", - effect: "The user sings an ancient song and attacks by appealing to the hearts of the listening opposing Pokémon. This may also induce sleep." + name: "Urgesang", + effect: "Anwender greift mit Urgesang an, der Ziele in der Nähe im tiefsten Inneren anspricht. Diese schlafen eventuell ein." }, "secretSword": { - name: "Secret Sword", - effect: "The user cuts with its long horn. The odd power contained in the horn does physical damage to the target." + name: "Mystoschwert", + effect: "Schneideangriff mit dem langen Schwert des Anwenders. Die mysteriöse Kraft aus dem Horn erzeugt physischen Schaden." }, "glaciate": { - name: "Glaciate", - effect: "The user attacks by blowing freezing cold air at opposing Pokémon. This lowers their Speed stats." + name: "Eiszeit", + effect: "Anwender greift an, indem er dem Ziel klirrend kalte Luft entgegenbläst. Senkt die Initiative des Zieles." }, "boltStrike": { - name: "Bolt Strike", - effect: "The user surrounds itself with a great amount of electricity and charges its target. This may also leave the target with paralysis." + name: "Blitzschlag", + effect: "Lädt seinen Körper mit einer gewaltigen Menge an Elektrizität auf und rammt damit das Ziel. Ziel wird eventuell paralysiert." }, "blueFlare": { - name: "Blue Flare", - effect: "The user attacks by engulfing the target in an intense, yet beautiful, blue flame. This may also leave the target with a burn." + name: "Blauflammen", + effect: "Anwender greift an, indem er das Ziel in wunderschöne, intensivblaue Flammen hüllt, die es eventuell verbrennen." }, "fieryDance": { - name: "Fiery Dance", - effect: "Cloaked in flames, the user attacks the target by dancing and flapping its wings. This may also raise the user's Sp. Atk stat." + name: "Feuerreigen", + effect: "Hüllt das Ziel mit einer Feuerhose in Flammen. Kann den Spezial-Angriff des Anwenders erhöhen." }, "freezeShock": { - name: "Freeze Shock", - effect: "On the second turn, the user hits the target with electrically charged ice. This may also leave the target with paralysis." + name: "Frostvolt", + effect: "Feuert in der zweiten Runde elektrisch geladene Eisklumpen auf das Ziel ab. Paralysiert das Ziel eventuell." }, "iceBurn": { - name: "Ice Burn", - effect: "On the second turn, an ultracold, freezing wind surrounds the target. This may leave the target with a burn." + name: "Frosthauch", + effect: "Umgibt das Ziel in der nächsten Runde mit heftigen, alles gefrierenden Eisböen. Fügt dem Ziel eventuell Verbrennungen zu." }, "snarl": { - name: "Snarl", - effect: "The user yells as if it's ranting about something, which lowers the Sp. Atk stats of opposing Pokémon." + name: "Standpauke", + effect: "Wäscht Zielen in der Nähe mit einer ausführlichen Standpauke den Kopf und senkt dabei deren Spezial-Angriff." }, "icicleCrash": { - name: "Icicle Crash", - effect: "The user attacks by harshly dropping large icicles onto the target. This may also make the target flinch." + name: "Eiszapfhagel", + effect: "Lässt große, schwere Eiszapfen auf das Ziel herabregnen. Ziel schreckt eventuell zurück." }, "vCreate": { - name: "V-create", - effect: "With a hot flame on its forehead, the user hurls itself at its target. This lowers the user's Defense, Sp. Def, and Speed stats." + name: "V-Generator", + effect: "Eine Verzweiflungsattacke. Anwender entfacht glühend heißes Feuer. Senkt dessen Verteidigung, Spezial-Verteidigung und Initiative." }, "fusionFlare": { - name: "Fusion Flare", - effect: "The user brings down a giant flame. This move's power is increased when influenced by an enormous lightning bolt." + name: "Kreuzflamme", + effect: "Feuert eine monströse Flamme ab. Wird die Attacke durch einen gigantischen Blitz modifiziert, steigt die Stärke." }, "fusionBolt": { - name: "Fusion Bolt", - effect: "The user throws down a giant lightning bolt. This move's power is increased when influenced by an enormous flame." + name: "Kreuzdonner", + effect: "Feuert einen monströsen Blitz ab. Wird die Attacke durch eine gigantische Flamme modifiziert, steigt die Stärke." }, "flyingPress": { name: "Flying Press", - effect: "The user dives down onto the target from the sky. This move is Fighting and Flying type simultaneously." + effect: "Der Anwender stürzt sich aus der Luft auf das Ziel. Die Attacke gehört sowohl dem Typ Kampf als auch dem Typ Flug an." }, "matBlock": { - name: "Mat Block", - effect: "Using a pulled-up mat as a shield, the user protects itself and its allies from damaging moves. This does not stop status moves." + name: "Tatami-Schild", + effect: "Der Anwender richtet eine Tatami-Matte auf, um sich und sein Team vor Schaden zu schützen. Kein Schutz vor Status-Attacken." }, "belch": { - name: "Belch", - effect: "The user lets out a damaging belch at the target. The user must eat a held Berry to use this move." + name: "Rülpser", + effect: "Der Anwender fügt dem Ziel Schaden zu, indem er es anrülpst. Diese Attacke gelingt nur nach dem Konsum einer getragenen Beere." }, "rototiller": { - name: "Rototiller", - effect: "Tilling the soil, the user makes it easier for plants to grow. This raises the Attack and Sp. Atk stats of Grass-type Pokémon." + name: "Pflüger", + effect: "Der Anwender pflügt den Boden und macht die Erde fruchtbarer. Erhöht den Angriff und den Spezial-Angriff von Pflanzen-Pokémon." }, "stickyWeb": { - name: "Sticky Web", - effect: "The user weaves a sticky net around the opposing team, which lowers their Speed stats upon switching into battle." + name: "Klebenetz", + effect: "Der Anwender spinnt in der Umgebung des gegnerischen Teams ein klebriges Netz und senkt so die Initiative neu eingewechselter Pokémon." }, "fellStinger": { - name: "Fell Stinger", - effect: "When the user knocks out a target with this move, the user's Attack stat rises drastically." + name: "Stachelfinale", + effect: "Gelingt es dem Anwender, das Ziel mit dieser Attacke zu besiegen, steigt sein Angriffs-Wert stark." }, "phantomForce": { - name: "Phantom Force", - effect: "The user vanishes somewhere, then strikes the target on the next turn. This move hits even if the target protects itself." + name: "Phantomkraft", + effect: "Der Anwender verschwindet, um eine Runde lang seine Kraft zu sammeln und in der nächsten Runde anzugreifen. Durchbricht die Defensive des Zieles." }, "trickOrTreat": { - name: "Trick-or-Treat", - effect: "The user takes the target trick-or-treating. This adds Ghost type to the target's type." + name: "Halloween", + effect: "Der Anwender lehrt das Ziel das Fürchten. Dieses nimmt dadurch zusätzlich den Typ Geist an." }, "nobleRoar": { - name: "Noble Roar", - effect: "Letting out a noble roar, the user intimidates the target and lowers its Attack and Sp. Atk stats." + name: "Kampfgebrüll", + effect: "Der Anwender stößt ein Kampfgebrüll aus, das das Ziel einschüchtert und zugleich seinen Angriffs- und Spezial-Angriffs-Wert senkt." }, "ionDeluge": { - name: "Ion Deluge", - effect: "The user disperses electrically charged particles, which changes Normal-type moves to Electric-type moves." + name: "Plasmaschauer", + effect: "Versprüht elektrisch geladene Partikel und bewirkt, dass Normal-Attacken den Typ Elektro annehmen." }, "parabolicCharge": { - name: "Parabolic Charge", - effect: "The user attacks everything around it. The user's HP is restored by half the damage taken by those hit." + name: "Parabolladung", + effect: "Fügt allen Pokémon in der Umgebung Schaden zu. Der Anwender wird um die Hälfte des insgesamt angerichteten Schadens geheilt." }, "forestsCurse": { - name: "Forest's Curse", - effect: "The user puts a forest curse on the target. The target is now Grass type as well." + name: "Waldesfluch", + effect: "Der Anwender belegt das Ziel mit einem Waldesfluch, durch den dieses zusätzlich den Typ Pflanze annimmt." }, "petalBlizzard": { - name: "Petal Blizzard", - effect: "The user stirs up a violent petal blizzard and attacks everything around it." + name: "Blütenwirbel", + effect: "Der Anwender erzeugt einen turbulenten Blütenwirbel, der alle Pokémon in der Nähe erfasst und ihnen Schaden zufügt." }, "freezeDry": { - name: "Freeze-Dry", - effect: "The user rapidly cools the target. This may also leave the target frozen. This move is super effective on Water types." + name: "Gefriertrockner", + effect: "Das Ziel wird stark abgekühlt und manchmal sogar eingefroren. Die Attacke ist sehr effektiv gegen Wasser-Pokémon." }, "disarmingVoice": { - name: "Disarming Voice", - effect: "Letting out a charming cry, the user does emotional damage to opposing Pokémon. This attack never misses." + name: "Säuselstimme", + effect: "Der Anwender stößt einen bezirzenden Ruf aus, mit dem er das Ziel in seinen Bann schlägt und ihm immer mentalen Schaden zufügt." }, "partingShot": { - name: "Parting Shot", - effect: "With a parting threat, the user lowers the target's Attack and Sp. Atk stats. Then it switches with a party Pokémon." + name: "Abgangstirade", + effect: "Schüchtert das Ziel mit einer Abgangstirade ein, sodass dessen Angriffs- und Spezial-Angriffs-Wert sinken. Danach wird der Anwender ausgewechselt." }, "topsyTurvy": { - name: "Topsy-Turvy", - effect: "All stat changes affecting the target turn topsy-turvy and become the opposite of what they were." + name: "Invertigo", + effect: "Invertiert alle Statusveränderungen des Zieles." }, "drainingKiss": { - name: "Draining Kiss", - effect: "The user steals the target's HP with a kiss. The user's HP is restored by over half of the damage taken by the target." + name: "Diebeskuss", + effect: "Der Anwender stiehlt dem Ziel mit einem Kuss KP. Die Höhe der Heilung beträgt mehr als die Hälfte des beim Ziel angerichteten Schadens." }, "craftyShield": { - name: "Crafty Shield", - effect: "The user protects itself and its allies from status moves with a mysterious power. This does not stop moves that do damage." + name: "Trickschutz", + effect: "Schützt sich und Mitstreiter mit einer mysteriösen Macht vor Status-Attacken. Es werden jedoch weiterhin KP-Schäden erlitten." }, "flowerShield": { - name: "Flower Shield", - effect: "The user raises the Defense stats of all Grass-type Pokémon in battle with a mysterious power." + name: "Floraschutz", + effect: "Erhöht mit einer mysteriösen Macht die Verteidigung aller am Kampf beteiligten Pflanzen-Pokémon." }, "grassyTerrain": { - name: "Grassy Terrain", - effect: "The user turns the ground to grass for five turns. This restores the HP of Pokémon on the ground a little every turn and powers up Grass-type moves." + name: "Grasfeld", + effect: "Verwandelt den Untergrund fünf Runden lang in ein Grasfeld und heilt in jeder neuen Runde alle Pokémon, die den Boden berühren." }, "mistyTerrain": { - name: "Misty Terrain", - effect: "This protects Pokémon on the ground from status conditions and halves damage from Dragon-type moves for five turns." + name: "Nebelfeld", + effect: "Verwandelt den Untergrund fünf Runden lang in ein Nebelfeld und schützt alle Pokémon, die den Boden berühren, vor Statusproblemen." }, "electrify": { - name: "Electrify", - effect: "If the target is electrified before it uses a move during that turn, the target's move becomes Electric type." + name: "Elektrifizierung", + effect: "Kommt die Attacke zum Einsatz, bevor das Ziel seine Attacke ausführt, nimmt diese für die Dauer dieser Runde den Typ Elektro an." }, "playRough": { - name: "Play Rough", - effect: "The user plays rough with the target and attacks it. This may also lower the target's Attack stat." + name: "Knuddler", + effect: "Der Anwender knuddelt das Ziel und greift es an. Gelegentlich sinkt dabei auch dessen Angriffs-Wert." }, "fairyWind": { - name: "Fairy Wind", - effect: "The user stirs up a fairy wind and strikes the target with it." + name: "Feenbrise", + effect: "Lässt eine Feenbrise aufkommen, die das Ziel erfasst und ihm Schaden zufügt." }, "moonblast": { - name: "Moonblast", - effect: "Borrowing the power of the moon, the user attacks the target. This may also lower the target's Sp. Atk stat." + name: "Mondgewalt", + effect: "Der Anwender macht sich die Kraft des Mondes zunutze, um anzugreifen. Gelegentlich wird dabei der Spezial-Angriff des Zieles gesenkt." }, "boomburst": { - name: "Boomburst", - effect: "The user attacks everything around it with the destructive power of a terrible, explosive sound." + name: "Überschallknall", + effect: "Der Anwender greift alle Pokémon in der Umgebung mit einem gewaltigen Knall an." }, "fairyLock": { - name: "Fairy Lock", - effect: "By locking down the battlefield, the user keeps all Pokémon from fleeing during the next turn." + name: "Feenschloss", + effect: "Der Anwender sperrt alle Pokémon ein und hindert sie damit in der nächsten Runde an der Flucht." }, "kingsShield": { - name: "King's Shield", - effect: "The user takes a defensive stance while it protects itself from damage. It also lowers the Attack stat of any attacker that makes direct contact." + name: "Königsschild", + effect: "Der Anwender weicht dem gegnerischen Angriff aus und geht in die Defensive. Berührt ihn nun ein Pokémon, sinkt der Angriffs-Wert dieses Gegners." }, "playNice": { - name: "Play Nice", - effect: "The user and the target become friends, and the target loses its will to fight. This lowers the target's Attack stat." + name: "Kameradschaft", + effect: "Der Anwender schließt mit dem Ziel Freundschaft und nimmt ihm seine Angriffslust. Der Angriffs-Wert des Zieles sinkt." }, "confide": { - name: "Confide", - effect: "The user tells the target a secret, and the target loses its ability to concentrate. This lowers the target's Sp. Atk stat." + name: "Vertrauenssache", + effect: "Der Anwender vertraut dem Ziel ein Geheimnis an und stört auf diese Weise seine Konzentration. Der Spezial-Angriff des Zieles sinkt." }, "diamondStorm": { - name: "Diamond Storm", - effect: "The user whips up a storm of diamonds to damage opposing Pokémon. This may also sharply raise the user's Defense stat." + name: "Diamantsturm", + effect: "Der Anwender beschwört einen zerstörerischen Diamantsturm herauf. Kann die Verteidigung des Anwenders erhöhen." }, "steamEruption": { - name: "Steam Eruption", - effect: "The user immerses the target in superheated steam. This may also leave the target with a burn." + name: "Dampfschwall", + effect: "Der Anwender feuert einen siedend heißen Dampfschwall auf das Ziel ab. Dieses kann dabei Verbrennungen erleiden." }, "hyperspaceHole": { - name: "Hyperspace Hole", - effect: "Using a hyperspace hole, the user appears right next to the target and strikes. This also hits a target using a move such as Protect or Detect." + name: "Dimensionsloch", + effect: "Der Anwender positioniert sich mithilfe eines Dimensionslochs direkt neben dem Ziel und durchbricht selbst Schutzschild und Scanner." }, "waterShuriken": { - name: "Water Shuriken", - effect: "The user hits the target with throwing stars two to five times in a row. This move always goes first." + name: "Wasser-Shuriken", + effect: "Der Anwender schleudert dem Ziel Wurfsterne aus einem verdickten Sekret entgegen. Eine Serien-Attacke, die zwei- bis fünfmal trifft." }, "mysticalFire": { - name: "Mystical Fire", - effect: "The user attacks by breathing a special, hot fire. This also lowers the target's Sp. Atk stat." + name: "Magieflamme", + effect: "Der Anwender greift das Ziel an, indem er ihm eine besondere, heiße Flamme entgegenbläst. Der Spezial-Angriff des Zieles sinkt." }, "spikyShield": { - name: "Spiky Shield", - effect: "In addition to protecting the user from attacks, this move also damages any attacker that makes direct contact." + name: "Schutzstacheln", + effect: "Der Anwender weicht gegnerischen Angriffen aus. Gleichzeitig nehmen alle Pokémon, die mit ihm in Berührung kommen, Schaden." }, "aromaticMist": { - name: "Aromatic Mist", - effect: "The user raises the Sp. Def stat of an ally Pokémon by using a mysterious aroma." + name: "Duftwolke", + effect: "Der Anwender erhöht mithilfe eines mysteriösen Duftes die Spezial-Verteidigung eines Mitstreiters." }, "eerieImpulse": { - name: "Eerie Impulse", - effect: "The user's body generates an eerie impulse. Exposing the target to it harshly lowers the target's Sp. Atk stat." + name: "Mystowellen", + effect: "Der Körper des Anwenders erzeugt mysteriöse Wellen und senkt den Spezial-Angriff des Zieles dadurch stark." }, "venomDrench": { - name: "Venom Drench", - effect: "Opposing Pokémon are drenched in an odd poisonous liquid. This lowers the Attack, Sp. Atk, and Speed stats of a poisoned target." + name: "Giftfalle", + effect: "Anwender bespritzt das Ziel mit einer speziellen Giftflüssigkeit. Senkt den Angriff, den Spezial- Angriff und die Initiative von vergifteten Zielen." }, "powder": { - name: "Powder", - effect: "The user covers the target in a combustible powder. If the target uses a Fire-type move, the powder explodes and damages the target." + name: "Pulverschleuder", + effect: "Setzt das Ziel nach Einsatz von Pulverschleuder in derselben Runde eine Feuer-Attacke ein, kommt es zu einer Explosion, die ihm schadet." }, "geomancy": { - name: "Geomancy", - effect: "The user absorbs energy and sharply raises its Sp. Atk, Sp. Def, and Speed stats on the next turn." + name: "Geokontrolle", + effect: "Der Anwender saugt in Runde 1 Energie auf. In Runde 2 steigen folgende Statuswerte stark: Spezial-Angriff, Spezial-Verteidigung und Initiative." }, "magneticFlux": { - name: "Magnetic Flux", - effect: "The user manipulates magnetic fields, which raises the Defense and Sp. Def stats of ally Pokémon with the Plus or Minus Ability." + name: "Magnetregler", + effect: "Das Magnetfeld wird so manipuliert, dass Spezial- Verteidigung und Verteidigung von Team-Pokémon mit der Fähigkeit Plus oder Minus steigen." }, "happyHour": { - name: "Happy Hour", - effect: "Using Happy Hour doubles the amount of prize money received after battle." + name: "Goldene Zeiten", + effect: "Nach Einsatz der Attacke Goldene Zeiten verdoppelt sich das Preisgeld, das du im Falle eines Sieges erhältst." }, "electricTerrain": { - name: "Electric Terrain", - effect: "The user electrifies the ground for five turns, powering up Electric-type moves. Pokémon on the ground no longer fall asleep." + name: "Elektrofeld", + effect: "Verwandelt den Untergrund fünf Runden lang in ein Elektrofeld und hindert alle Pokémon, die den Boden berühren, am Einschlafen." }, "dazzlingGleam": { - name: "Dazzling Gleam", - effect: "The user damages opposing Pokémon by emitting a powerful flash." + name: "Zauberschein", + effect: "Der Anwender feuert einen mächtigen Lichtblitz ab, der dem Ziel Schaden zufügt." }, "celebrate": { - name: "Celebrate", - effect: "The Pokémon congratulates you on your special day!" + name: "Ehrentag", + effect: "Das Pokémon gratuliert dir zu deinem Geburtstag!" }, "holdHands": { - name: "Hold Hands", - effect: "The user and an ally hold hands. This makes them very happy." + name: "Händchenhalten", + effect: "Der Anwender und ein Mitstreiter reichen einander die Hände und verfallen in einen Zustand tiefster Zufriedenheit." }, "babyDollEyes": { - name: "Baby-Doll Eyes", - effect: "The user stares at the target with its baby-doll eyes, which lowers the target's Attack stat. This move always goes first." + name: "Kulleraugen", + effect: "Der Anwender erobert das Herz des Zieles, indem er es mit Kulleraugen ansieht. Senkt den Angriffs-Wert. Erstschlaggarantie." }, "nuzzle": { - name: "Nuzzle", - effect: "The user attacks by nuzzling its electrified cheeks against the target. This also leaves the target with paralysis." + name: "Wangenrubbler", + effect: "Der Anwender lädt seine Wangen elektrisch auf und greift an, indem er sich damit am Ziel reibt. Das Ziel wird paralysiert." }, "holdBack": { - name: "Hold Back", - effect: "The user holds back when it attacks, and the target is left with at least 1 HP." + name: "Zurückhaltung", + effect: "Der Anwender hält sich beim Angriff zurück und sorgt auf diese Weise dafür, dass dem Ziel danach mindestens 1 KP verbleibt." }, "infestation": { - name: "Infestation", - effect: "The target is infested and attacked for four to five turns. The target can't flee during this time." + name: "Plage", + effect: "Der Anwender fällt vier bis fünf Runden lang wie eine Plage über das Ziel her und greift es an. In diesem Zeitraum kann es nicht fliehen." }, "powerUpPunch": { - name: "Power-Up Punch", - effect: "Striking opponents over and over makes the user's fists harder. Hitting a target raises the Attack stat." + name: "Steigerungshieb", + effect: "Die Fäuste des Anwenders härten durch wiederholtes Zuschlagen ab. Mit jedem Treffer steigt sein Angriffs-Wert." }, "oblivionWing": { - name: "Oblivion Wing", - effect: "The user absorbs its target's HP. The user's HP is restored by over half of the damage taken by the target." + name: "Unheilsschwingen", + effect: "Der Anwender raubt dem Ziel KP. Die Höhe der Heilung beträgt mehr als die Hälfte des beim Ziel angerichteten Schadens." }, "thousandArrows": { - name: "Thousand Arrows", - effect: "This move also hits opposing Pokémon that are in the air. Those Pokémon are knocked down to the ground." + name: "Tausend Pfeile", + effect: "Die Attacke erfasst auch schwebende Pokémon. Erfasst sie ein Pokémon im Schwebe-Zustand, fällt es zu Boden." }, "thousandWaves": { - name: "Thousand Waves", - effect: "The user attacks with a wave that crawls along the ground. Those it hits can't flee from battle." + name: "Tausend Wellen", + effect: "Der Anwender greift mit einer Welle an, die dicht über dem Boden verläuft und alle Pokémon, die sie erfasst, an der Flucht hindert." }, "landsWrath": { - name: "Land's Wrath", - effect: "The user gathers the energy of the land and focuses that power on opposing Pokémon to damage them." + name: "Bodengewalt", + effect: "Der Anwender sammelt die Kraft des weiten Landes und greift an, indem er sie gebündelt auf das Ziel lenkt." }, "lightOfRuin": { - name: "Light of Ruin", - effect: "Drawing power from the Eternal Flower, the user fires a powerful beam of light. This also damages the user quite a lot." + name: "Lux Calamitatis", + effect: "Die Attacke basiert auf der Kraft des Ewigblütlers, die als mächtiger Lichtstrahl abgefeuert wird. Der Anwender nimmt dabei selbst großen Schaden." }, "originPulse": { - name: "Origin Pulse", - effect: "The user attacks opposing Pokémon with countless beams of light that glow a deep and brilliant blue." + name: "Ursprungswoge", + effect: "Der Anwender greift das Ziel mit unzähligen blau leuchtenden Strahlen an." }, "precipiceBlades": { - name: "Precipice Blades", - effect: "The user attacks opposing Pokémon by manifesting the power of the land in fearsome blades of stone." + name: "Abgrundsklinge", + effect: "Der Anwender wandelt die Kraft des Erdreichs in Klingen um, mit denen er das Ziel angreift." }, "dragonAscent": { - name: "Dragon Ascent", - effect: "After soaring upward, the user attacks its target by dropping out of the sky at high speeds. But it lowers its own Defense and Sp. Def stats in the process." + name: "Zenitstürmer", + effect: "Der Anwender greift das Ziel aus atemberaubender Höhe im Sturzflug an. Senkt Verteidigung und Spezial-Verteidigung des Anwenders." }, "hyperspaceFury": { - name: "Hyperspace Fury", - effect: "Using its many arms, the user unleashes a barrage of attacks that ignore the effects of moves like Protect and Detect. But the user's Defense stat falls." + name: "Dimensionswahn", + effect: "Eine Angriffsserie mit vielen Armen, die die Wirkung von Schutzschild und Scanner durchbricht. Dabei sinkt die Verteidigung des Anwenders." }, "breakneckBlitzPhysical": { - name: "Breakneck Blitz", - effect: "The user builds up its momentum using its Z-Power and crashes into the target at full speed. The power varies, depending on the original move." + name: "Hyper-Sprintangriff", + effect: "Der durch Z-Kraft energiegeladene Anwender rennt mit ganzer Kraft gegen das Ziel. Die Stärke variiert je nach zugrunde liegender Attacke." }, "breakneckBlitzSpecial": { name: "Breakneck Blitz", effect: "Dummy Data" }, "allOutPummelingPhysical": { - name: "All-Out Pummeling", - effect: "The user rams an energy orb created by its Z-Power into the target with full force. The power varies, depending on the original move." + name: "Fulminante Faustschläge", + effect: "Aus Z-Kraft hergestellte Energiebälle prallen mit voller Wucht auf das Ziel. Die Stärke variiert je nach zugrunde liegender Attacke." }, "allOutPummelingSpecial": { name: "All-Out Pummeling", effect: "Dummy Data" }, "supersonicSkystrikePhysical": { - name: "Supersonic Skystrike", - effect: "The user soars up with its Z-Power and plummets toward the target at full speed. The power varies, depending on the original move." + name: "Finaler Steilflug", + effect: "Der Anwender schwingt sich durch Z-Kraft in die Lüfte und stürzt sich dann auf das Ziel hinab. Die Stärke variiert je nach zugrunde liegender Attacke." }, "supersonicSkystrikeSpecial": { name: "Supersonic Skystrike", effect: "Dummy Data" }, "acidDownpourPhysical": { - name: "Acid Downpour", - effect: "The user creates a poisonous swamp using its Z-Power and sinks the target into it at full force. The power varies, depending on the original move." + name: "Vernichtender Säureregen", + effect: "Der Anwender kreiert mit Z-Kraft ein giftiges Moor, in dem das Ziel versinkt. Die Stärke variiert je nach zugrunde liegender Attacke." }, "acidDownpourSpecial": { name: "Acid Downpour", effect: "Dummy Data" }, "tectonicRagePhysical": { - name: "Tectonic Rage", - effect: "The user burrows deep into the ground and slams into the target with the full force of its Z-Power. The power varies, depending on the original move." + name: "Seismische Eruption", + effect: "Der Anwender zerrt das Ziel mit Z-Kraft tief in den Boden und kollidiert dort mit ihm. Die Stärke variiert je nach zugrunde liegender Attacke." }, "tectonicRageSpecial": { name: "Tectonic Rage", effect: "Dummy Data" }, "continentalCrushPhysical": { - name: "Continental Crush", - effect: "The user summons a huge rock mountain using its Z-Power and drops it onto the target with full force. The power varies, depending on the original move." + name: "Apokalyptische Steinpresse", + effect: "Der Anwender beschwört mit Z-Kraft einen großen Felsen herbei und lässt ihn auf das Ziel fallen. Die Stärke variiert je nach zugrunde liegender Attacke." }, "continentalCrushSpecial": { name: "Continental Crush", effect: "Dummy Data" }, "savageSpinOutPhysical": { - name: "Savage Spin-Out", - effect: "The user binds the target with full force with threads of silk that the user spits using its Z-Power. The power varies, depending on the original move." + name: "Wirbelnder Insektenhieb", + effect: "Mithilfe von Z-Kraft umwickelt der Anwender das Ziel mit Fäden. Die Stärke variiert je nach zugrunde liegender Attacke." }, "savageSpinOutSpecial": { name: "Savage Spin-Out", effect: "Dummy Data" }, "neverEndingNightmarePhysical": { - name: "Never-Ending Nightmare", - effect: "Deep-seated grudges summoned by the user's Z-Power trap the target. The power varies, depending on the original move." + name: "Ewige Nacht", + effect: "Der Anwender beschwört mit Z-Kraft tiefen Groll herbei und lässt diesen auf das Ziel los. Die Stärke variiert je nach zugrunde liegender Attacke." }, "neverEndingNightmareSpecial": { name: "Never-Ending Nightmare", effect: "Dummy Data" }, "corkscrewCrashPhysical": { - name: "Corkscrew Crash", - effect: "The user spins very fast and rams into the target with the full force of its Z-Power. The power varies, depending on the original move." + name: "Turbo-Spiralkombo", + effect: "Der Anwender wirbelt durch Z-Kraft sehr schnell umher und prallt mit dem Ziel zusammen. Die Stärke variiert je nach zugrunde liegender Attacke." }, "corkscrewCrashSpecial": { name: "Corkscrew Crash", effect: "Dummy Data" }, "infernoOverdrivePhysical": { - name: "Inferno Overdrive", - effect: "The user breathes a stream of intense fire toward the target with the full force of its Z-Power. The power varies depending on the original move." + name: "Dynamische Maxiflamme", + effect: "Der Anwender speit dank Z-Kraft eine gewaltige Kugel aus Flammen auf das Ziel. Die Stärke variiert je nach zugrunde liegender Attacke." }, "infernoOverdriveSpecial": { name: "Inferno Overdrive", effect: "Dummy Data" }, "hydroVortexPhysical": { - name: "Hydro Vortex", - effect: "The user creates a huge whirling current using its Z-Power to swallow the target with full force. The power varies, depending on the original move." + name: "Super-Wassertornado", + effect: "Der Anwender kreiert mit Z-Kraft einen riesigen Wasserstrudel, der das Ziel verschluckt. Die Stärke variiert je nach zugrunde liegender Attacke." }, "hydroVortexSpecial": { name: "Hydro Vortex", effect: "Dummy Data" }, "bloomDoomPhysical": { - name: "Bloom Doom", - effect: "The user collects energy from plants using its Z-Power and attacks the target with full force. The power varies, depending on the original move." + name: "Brillante Blütenpracht", + effect: "Der Anwender leiht sich durch Z-Kraft die Energie von Wiesenblumen und greift das Ziel damit an. Die Stärke variiert je nach zugrunde liegender Attacke." }, "bloomDoomSpecial": { name: "Bloom Doom", effect: "Dummy Data" }, "gigavoltHavocPhysical": { - name: "Gigavolt Havoc", - effect: "The user hits the target with a powerful electric current collected by its Z-Power. The power varies, depending on the original move." + name: "Gigavolt-Funkensalve", + effect: "Der Anwender greift das Ziel mit durch Z-Kraft gesammelter starker Elektrizität an. Die Stärke variiert je nach zugrunde liegender Attacke." }, "gigavoltHavocSpecial": { name: "Gigavolt Havoc", effect: "Dummy Data" }, "shatteredPsychePhysical": { - name: "Shattered Psyche", - effect: "The user controls the target with its Z-Power and hurts the target with full force. The power varies, depending on the original move." + name: "Psycho-Schmetterschlag", + effect: "Der Anwender kontrolliert das Ziel mit Z-Kraft und macht ihm so das Leben schwer. Die Stärke variiert je nach zugrunde liegender Attacke." }, "shatteredPsycheSpecial": { name: "Shattered Psyche", effect: "Dummy Data" }, "subzeroSlammerPhysical": { - name: "Subzero Slammer", - effect: "The user dramatically drops the temperature using its Z-Power and freezes the target with full force. The power varies, depending on the original move." + name: "Tobender Geofrost", + effect: "Der Anwender senkt mit Z-Kraft die Temperatur drastisch und lässt das Ziel einfrieren. Die Stärke variiert je nach zugrunde liegender Attacke." }, "subzeroSlammerSpecial": { name: "Subzero Slammer", effect: "Dummy Data" }, "devastatingDrakePhysical": { - name: "Devastating Drake", - effect: "The user materializes its aura using its Z-Power and attacks the target with full force. The power varies, depending on the original move." + name: "Drastisches Drachendröhnen", + effect: "Der Anwender materialisiert durch Z-Kraft seine Aura und greift damit das Ziel an. Die Stärke variiert je nach zugrunde liegender Attacke." }, "devastatingDrakeSpecial": { name: "Devastating Drake", effect: "Dummy Data" }, "blackHoleEclipsePhysical": { - name: "Black Hole Eclipse", - effect: "The user gathers dark energy using its Z-Power and sucks the target into it. The power varies, depending on the original move." + name: "Schwarzes Loch des Grauens", + effect: "Der Anwender sammelt mit Z-Kraft dunkle Energie an, die das Ziel verschlingt. Die Stärke variiert je nach zugrunde liegender Attacke." }, "blackHoleEclipseSpecial": { name: "Black Hole Eclipse", effect: "Dummy Data" }, "twinkleTacklePhysical": { - name: "Twinkle Tackle", - effect: "The user creates a very charming space using its Z-Power and totally toys with the target. The power varies, depending on the original move." + name: "Entzückender Sternenstoß", + effect: "Der Anwender kreiert mit Z-Kraft eine zauberhafte Dimension und treibt dort sein Spiel mit dem Ziel. Die Stärke variiert je nach zugrunde liegender Attacke." }, "twinkleTackleSpecial": { name: "Twinkle Tackle", effect: "Dummy Data" }, "catastropika": { - name: "Catastropika", - effect: "The user, Pikachu, surrounds itself with the maximum amount of electricity using its Z-Power and pounces on its target with full force." + name: "Perfektes Pika-Projektil", + effect: "Pikachu umhüllt sich durch Z-Kraft mit gewaltiger elektrischer Energie und stürzt sich mit voller Kraft auf das Ziel." }, "shoreUp": { - name: "Shore Up", - effect: "The user regains up to half of its max HP. It restores more HP in a sandstorm." + name: "Sandsammler", + effect: "KP des Anwenders werden um 50 % der maximalen KP aufgefüllt. Tobt ein Sandsturm, werden noch mehr KP aufgefüllt." }, "firstImpression": { - name: "First Impression", - effect: "Although this move has great power, it only works the first turn each time the user enters battle." + name: "Überrumpler", + effect: "Eine sehr starke Attacke, die jedoch nur erfolgreich ist, wenn sie sofort eingesetzt wird, nachdem der Anwender das Kampffeld betreten hat." }, "banefulBunker": { - name: "Baneful Bunker", - effect: "In addition to protecting the user from attacks, this move also poisons any attacker that makes direct contact." + name: "Bunker", + effect: "Der Anwender wird vor Angriffen geschützt. Gleichzeitig werden alle Pokémon, die mit ihm in Berührung kommen, vergiftet." }, "spiritShackle": { - name: "Spirit Shackle", - effect: "The user attacks while simultaneously stitching the target's shadow to the ground to prevent the target from escaping." + name: "Schattenfessel", + effect: "Der Anwender greift das Ziel an und näht zugleich dessen Schatten am Boden fest, sodass es nicht entkommen kann." }, "darkestLariat": { - name: "Darkest Lariat", - effect: "The user swings both arms and hits the target. The target's stat changes don't affect this attack's damage." + name: "Dark Lariat", + effect: "Der Anwender wirbelt mit beiden Armen und prallt so auf das Ziel. Richtet unabhängig von den Statusveränderungen des Zieles Schaden an." }, "sparklingAria": { - name: "Sparkling Aria", - effect: "The user bursts into song, emitting many bubbles. Any Pokémon suffering from a burn will be healed by the touch of these bubbles." + name: "Schaumserenade", + effect: "Durch Gesang erzeugte Blasen werden auf das Ziel geschleudert. Alle Pokémon, die dadurch Schaden erleiden, werden auch von Verbrennungen geheilt." }, "iceHammer": { - name: "Ice Hammer", - effect: "The user swings and hits with its strong, heavy fist. It lowers the user's Speed, however." + name: "Eishammer", + effect: "Anwender trifft mit einem starken Hieb. Senkt Initiative des Anwenders." }, "floralHealing": { - name: "Floral Healing", - effect: "The user restores the target's HP by up to half of its max HP. It restores more HP when the terrain is grass." + name: "Florakur", + effect: "KP des Zieles werden um 50 % der maximalen KP aufgefüllt. Die Wirkung steigt, wenn der Untergrund in ein Grasfeld verwandelt wurde." }, "highHorsepower": { - name: "High Horsepower", - effect: "The user fiercely attacks the target using its entire body." + name: "Pferdestärke", + effect: "Der Anwender greift das Ziel mit einer heftigen Ganzkörper-Attacke an." }, "strengthSap": { - name: "Strength Sap", - effect: "The user restores its HP by the same amount as the target's Attack stat. It also lowers the target's Attack stat." + name: "Kraftabsorber", + effect: "Ein Angriff, der die KP des Anwenders um die Höhe des Angriffs-Werts des Zieles heilt. Anschließend wird der Angriff des Zieles gesenkt." }, "solarBlade": { - name: "Solar Blade", - effect: "In this two-turn attack, the user gathers light and fills a blade with the light's energy, attacking the target on the next turn." + name: "Solarklinge", + effect: "Der Anwender absorbiert in der 1. Runde Licht, das er in der 2. Runde zu einem Schwert formt, mit dem er angreift." }, "leafage": { - name: "Leafage", - effect: "The user attacks by pelting the target with leaves." + name: "Blattwerk", + effect: "Der Anwender greift das Ziel mit Blättern an." }, "spotlight": { - name: "Spotlight", - effect: "The user shines a spotlight on the target so that only the target will be attacked during the turn." + name: "Rampenlicht", + effect: "Der Anwender lenkt die Aufmerksamkeit auf das Ziel, sodass in dieser Runde nur noch dieses Pokémon angegriffen wird." }, "toxicThread": { - name: "Toxic Thread", - effect: "The user shoots poisonous threads to poison the target and lower the target's Speed stat." + name: "Giftfaden", + effect: "Der Anwender schießt giftige Fäden auf das Ziel, das dadurch vergiftet wird. Außerdem sinkt seine Initiative." }, "laserFocus": { - name: "Laser Focus", - effect: "The user concentrates intensely. The attack on the next turn always results in a critical hit." + name: "Konzentration", + effect: "Der Anwender konzentriert sich, wodurch sein nächster Angriff garantiert ein Volltreffer wird." }, "gearUp": { - name: "Gear Up", - effect: "The user engages its gears to raise the Attack and Sp. Atk stats of ally Pokémon with the Plus or Minus Ability." + name: "Hilfsmechanik", + effect: "Der Anwender erhöht mithilfe von Zahnrädern Angriff und Spezial-Angriff von Team-Pokémon mit der Fähigkeit Plus oder Minus." }, "throatChop": { - name: "Throat Chop", - effect: "The user attacks the target's throat, and the resultant suffering prevents the target from using moves that emit sound for two turns." + name: "Neck Strike", + effect: "Das Pokémon, das von dieser Attacke getroffen wird, erleidet starke Schmerzen und kann deswegen zwei Runden lang keine Lärm-Attacken mehr einsetzen." }, "pollenPuff": { - name: "Pollen Puff", - effect: "The user attacks the enemy with a pollen puff that explodes. If the target is an ally, it gives the ally a pollen puff that restores its HP instead." + name: "Pollenknödel", + effect: "Der Anwender greift mit einem Ball aus Pollen an, der beim Ziel explodiert. Mitstreiter werden von einem Ball getroffen, der ihre KP auffüllt." }, "anchorShot": { - name: "Anchor Shot", - effect: "The user entangles the target with its anchor chain while attacking. The target becomes unable to flee." + name: "Ankerschuss", + effect: "Der Anwender greift das Ziel an, indem er es mit einer Ankerkette umwickelt. Dadurch wird das Ziel an der Flucht gehindert." }, "psychicTerrain": { - name: "Psychic Terrain", - effect: "This protects Pokémon on the ground from priority moves and powers up Psychic-type moves for five turns." + name: "Psychofeld", + effect: "Verhindert für fünf Runden, dass Pokémon am Boden von Attacken mit hoher Erstschlagquote getroffen werden. Erhöht die Stärke von Psycho-Attacken." }, "lunge": { - name: "Lunge", - effect: "The user makes a lunge at the target, attacking with full force. This also lowers the target's Attack stat." + name: "Anfallen", + effect: "Der Anwender greift das Ziel mit ganzer Kraft an, wodurch auch der Angriffs-Wert des Zieles sinkt." }, "fireLash": { - name: "Fire Lash", - effect: "The user strikes the target with a burning lash. This also lowers the target's Defense stat." + name: "Feuerpeitsche", + effect: "Der Anwender greift das Ziel mit einer brennenden Peitsche an und senkt dabei zusätzlich dessen Verteidigungs-Wert." }, "powerTrip": { - name: "Power Trip", - effect: "The user boasts its strength and attacks the target. The more the user's stats are raised, the greater the move's power." + name: "Überheblichkeit", + effect: "Der Anwender prahlt mit seiner Stärke und greift das Ziel an. Dieser Angriff ist umso stärker, je weiter die Statuswerte des Anwenders erhöht sind." }, "burnUp": { - name: "Burn Up", - effect: "To inflict massive damage, the user burns itself out. After using this move, the user will no longer be Fire type." + name: "Ausbrennen", + effect: "Der Anwender nutzt das gesamte Feuer in seinem Körper, um großen Schaden auszuteilen. Die restliche Kampfdauer gehört er nicht mehr dem Typ Feuer an." }, "speedSwap": { - name: "Speed Swap", - effect: "The user exchanges Speed stats with the target." + name: "Initiativetausch", + effect: "Der Anwender tauscht seinen Initiative-Wert mit dem des Zieles." }, "smartStrike": { - name: "Smart Strike", - effect: "The user stabs the target with a sharp horn. This attack never misses." + name: "Schmalhorn", + effect: "Der Anwender durchbohrt das Ziel mit seinem spitzen Horn. Diese Attacke trifft immer." }, "purify": { - name: "Purify", - effect: "The user heals the target's status condition. If the move succeeds, it also restores the user's own HP." + name: "Läuterung", + effect: "Der Anwender heilt das Statusproblem des Zieles und füllt dadurch seine eigenen KP auf." }, "revelationDance": { - name: "Revelation Dance", - effect: "The user attacks the target by dancing very hard. The user's type determines the type of this move." + name: "Wecktanz", + effect: "Der Anwender tanzt und greift dabei das Ziel mit voller Kraft an. Die Attacke hat denselben Typ wie das Pokémon, das sie einsetzt." }, "coreEnforcer": { - name: "Core Enforcer", - effect: "If the Pokémon the user has inflicted damage on have already used their moves, this move eliminates the effect of the target's Ability." + name: "Sanktionskern", + effect: "Hat das Pokémon, das durch diese Attacke Schaden genommen hat, in dieser Runde bereits gehandelt, verliert es seine Fähigkeit." }, "tropKick": { - name: "Trop Kick", - effect: "The user lands an intense kick of tropical origins on the target. This also lowers the target's Attack stat." + name: "Tropenkick", + effect: "Der Anwender greift den Gegner mit einem heftigen Tritt tropischer Herkunft an. Dabei sinkt auch der Angriffs-Wert des Gegners." }, "instruct": { - name: "Instruct", - effect: "The user instructs the target to use the target's last move again." + name: "Kommando", + effect: "Der Anwender befiehlt dem Ziel, dessen zuletzt ausgeführte Attacke sofort wieder einzusetzen." }, "beakBlast": { - name: "Beak Blast", - effect: "The user first heats up its beak, and then it attacks the target. Making direct contact with the Pokémon while it's heating up its beak results in a burn." + name: "Schnabelkanone", + effect: "Der Anwender erhitzt zuerst seinen Schnabel und greift dann an. Pokémon, die ihn während des Erhitzens berühren, erleiden Verbrennungen." }, "clangingScales": { - name: "Clanging Scales", - effect: "The user rubs the scales on its entire body and makes a huge noise to attack opposing Pokémon. The user's Defense stat goes down after the attack." + name: "Schuppenrasseln", + effect: "Der Anwender erzeugt durch das Rasseln mit seinen Schuppen ein lautes Geräusch und greift an. Anschließend sinkt seine Verteidigung." }, "dragonHammer": { - name: "Dragon Hammer", - effect: "The user uses its body like a hammer to attack the target and inflict damage." + name: "Drachenhammer", + effect: "Der Anwender nutzt seinen Körper wie einen Hammer und stürzt sich auf das Ziel, wodurch dieses Schaden erleidet." }, "brutalSwing": { - name: "Brutal Swing", - effect: "The user swings its body around violently to inflict damage on everything in its vicinity." + name: "Wirbler", + effect: "Der Anwender dreht schwungvoll seinen Körper und fügt den Pokémon in seiner Nähe dabei Schaden zu." }, "auroraVeil": { - name: "Aurora Veil", - effect: "This move reduces damage from physical and special moves for five turns. This can be used only when it is snowing." + name: "Auroraschleier", + effect: "Diese Attacke schwächt fünf Runden lang den durch physische sowie durch Spezial-Attacken erhaltenen Schaden. Kann nur bei Hagel eingesetzt werden." }, "sinisterArrowRaid": { - name: "Sinister Arrow Raid", - effect: "The user, Decidueye, creates countless arrows using its Z-Power and shoots the target with full force." + name: "Schatten-Pfeilregen", + effect: "Silvarro stellt mit Z-Kraft unzählige Pfeile her und lässt diese auf das Ziel niederprasseln." }, "maliciousMoonsault": { - name: "Malicious Moonsault", - effect: "The user, Incineroar, strengthens its body using its Z-Power and crashes into the target with full force." + name: "Hyper Dark Crusher", + effect: "Mit seinem durch Z-Kraft gestählten Körper stürzt sich Fuegro mit ganzer Kraft auf das Ziel." }, "oceanicOperetta": { - name: "Oceanic Operetta", - effect: "The user, Primarina, summons a massive amount of water using its Z-Power and attacks the target with full force." + name: "Grandiose Meeressymphonie", + effect: "Primarene ruft mit Z-Kraft große Mengen an Wasser herbei und greift damit das Ziel an." }, "guardianOfAlola": { - name: "Guardian of Alola", - effect: "The user, the Land Spirit Pokémon, obtains Alola's energy using its Z-Power and attacks the target with full force. This reduces the target's HP greatly." + name: "Alolas Wächter", + effect: "Ein gewaltiger Angriff des Schutzpatrons, der durch Z-Kraft die Kraft Alolas erlangt hat. Reduziert die verbleibenden KP des Zieles stark." }, "soulStealing7StarStrike": { - name: "Soul-Stealing 7-Star Strike", - effect: "After obtaining Z-Power, the user, Marshadow, punches and kicks the target consecutively with full force." + name: "Sternbild des Seelenraubes", + effect: "Marshadow schlägt mit durch Z-Kraft gestärkten Schlägen und Tritten in einer Serien-Attacke auf das Ziel ein." }, "stokedSparksurfer": { - name: "Stoked Sparksurfer", - effect: "After obtaining Z-Power, the user, Alolan Raichu, attacks the target with full force. This move leaves the target with paralysis." + name: "Blitz-Wellenritt", + effect: "Das Alola-Raichu greift das Ziel mithilfe von Z-Kraft mit voller Wucht an und paralysiert es." }, "pulverizingPancake": { - name: "Pulverizing Pancake", - effect: "Z-Power brings out the true capabilities of the user, Snorlax. The Pokémon moves its enormous body energetically and attacks the target with full force." + name: "Schluss mit lustig", + effect: "Relaxo wird von Z-Kraft erfüllt und macht Ernst. Es bringt seinen riesigen Körper in Schwung und stürzt sich mit ganzer Kraft auf das Ziel." }, "extremeEvoboost": { - name: "Extreme Evoboost", - effect: "After obtaining Z-Power, the user, Eevee, gets energy from its evolved friends and boosts its stats sharply." + name: "Macht der Neun", + effect: "Evoli macht sich durch Z-Kraft die Stärke seiner Weiterentwicklungen zunutze und erhöht seine Statuswerte stark." }, "genesisSupernova": { - name: "Genesis Supernova", - effect: "After obtaining Z-Power, the user, Mew, attacks the target with full force. The terrain will be charged with psychic energy." + name: "Supernova des Ursprungs", + effect: "Mew greift das Ziel mithilfe von Z-Kraft mit voller Wucht an. Der Untergrund wird dabei in ein Psychofeld verwandelt." }, "shellTrap": { - name: "Shell Trap", - effect: "The user sets a shell trap. If the user is hit by a physical move, the trap will explode and inflict damage on opposing Pokémon." + name: "Panzerfalle", + effect: "Der Anwender legt eine Panzerfalle. Wird er von einer physischen Attacke getroffen, explodiert die Falle und fügt dem Angreifer Schaden zu." }, "fleurCannon": { - name: "Fleur Cannon", - effect: "The user unleashes a strong beam. The attack's recoil harshly lowers the user's Sp. Atk stat." + name: "Kanonenbouquet", + effect: "Der Anwender greift das Ziel mit einem gewaltigen Strahl an. Sein eigener Spezial-Angriff sinkt dadurch stark." }, "psychicFangs": { - name: "Psychic Fangs", - effect: "The user bites the target with its psychic capabilities. This can also destroy Light Screen and Reflect." + name: "Psychobeißer", + effect: "Der Anwender beißt das Ziel mithilfe von Psycho-Kräften. Die Attacke durchbricht auch Barrieren wie Lichtschild und Reflektor." }, "stompingTantrum": { - name: "Stomping Tantrum", - effect: "Driven by frustration, the user attacks the target. If the user's previous move has failed, the power of this move doubles." + name: "Fruststampfer", + effect: "Von Frust getrieben greift der Anwender an. Wenn seine vorige Attacke fehlgeschlagen ist, verdoppelt sich die Stärke der Attacke." }, "shadowBone": { - name: "Shadow Bone", - effect: "The user attacks by beating the target with a bone that contains a spirit. This may also lower the target's Defense stat." + name: "Schattenknochen", + effect: "Der Anwender greift das Ziel mit einem Knochen an, in dem eine Seele haust. Senkt eventuell die Verteidigung des Zieles." }, "accelerock": { - name: "Accelerock", - effect: "The user smashes into the target at high speed. This move always goes first." + name: "Turbofelsen", + effect: "Der Anwender prallt mit großer Geschwindigkeit auf das Ziel. Hohe Erstschlagquote." }, "liquidation": { - name: "Liquidation", - effect: "The user slams into the target using a full-force blast of water. This may also lower the target's Defense stat." + name: "Aquadurchstoß", + effect: "Der Anwender greift das Ziel mit der Kraft des Wassers an. Senkt eventuell die Verteidigung des Zieles." }, "prismaticLaser": { - name: "Prismatic Laser", - effect: "The user shoots powerful lasers using the power of a prism. The user can't move on the next turn." + name: "Prisma-Laser", + effect: "Der Anwender feuert mithilfe von Prisma-Kraft mächtige Lichtstrahlen ab. In der nächsten Runde kann er nicht handeln." }, "spectralThief": { - name: "Spectral Thief", - effect: "The user hides in the target's shadow, steals the target's stat boosts, and then attacks." + name: "Diebesschatten", + effect: "Der Anwender schleicht sich in den Schatten des Zieles, stiehlt dessen erhöhte Statuswerte und fügt ihm Schaden zu." }, "sunsteelStrike": { - name: "Sunsteel Strike", - effect: "The user slams into the target with the force of a meteor. This move can be used on the target regardless of its Abilities." + name: "Stahlgestirn", + effect: "Der Anwender stürzt mit der Gewalt eines Meteors auf das Ziel. Die Fähigkeit des Zieles wird dabei ignoriert." }, "moongeistBeam": { - name: "Moongeist Beam", - effect: "The user emits a sinister ray to attack the target. This move can be used on the target regardless of its Abilities." + name: "Schattenstrahl", + effect: "Der Anwender greift mit einem unheimlichen Lichtstrahl an. Diese Attacke ignoriert die Fähigkeit des Zieles." }, "tearfulLook": { - name: "Tearful Look", - effect: "The user gets teary eyed to make the target lose its combative spirit. This lowers the target's Attack and Sp. Atk stats." + name: "Tränendrüse", + effect: "Dem Anwender stehen Tränen in den Augen, wodurch das Ziel seinen Kampfeswillen verliert. Angriff und Spezial-Angriff des Zieles sinken." }, "zingZap": { - name: "Zing Zap", - effect: "A strong electric blast crashes down on the target, giving it an electric shock. This may also make the target flinch." + name: "Elektropikser", + effect: "Der Anwender rammt das Ziel und schockt es mit starkem Strom. Das Ziel schreckt eventuell zurück." }, "naturesMadness": { - name: "Nature's Madness", - effect: "The user hits the target with the force of nature. It halves the target's HP." + name: "Naturzorn", + effect: "Das Ziel wird vom Zorn der Natur getroffen und verliert dadurch die Hälfte seiner KP." }, "multiAttack": { - name: "Multi-Attack", - effect: "Cloaking itself in high energy, the user slams into the target. The memory held determines the move's type." + name: "Multi-Angriff", + effect: "Der Anwender sammelt eine große Menge Energie und greift das Ziel damit an. Der Typ der Attacke hängt von dem der Disc ab." }, "tenMillionVoltThunderbolt": { name: "10,000,000 Volt Thunderbolt", effect: "The user, Pikachu wearing a cap, powers up a jolt of electricity using its Z-Power and unleashes it. Critical hits land more easily." }, "mindBlown": { - name: "Mind Blown", - effect: "The user attacks everything around it by causing its own head to explode. This also damages the user." + name: "Knallkopf", + effect: "Der Anwender greift alle Pokémon in der Umgebung an, indem er seinen Kopf explodieren lässt. Dabei verletzt er sich auch selbst." }, "plasmaFists": { - name: "Plasma Fists", - effect: "The user attacks with electrically charged fists. This move changes Normal-type moves to Electric-type moves." + name: "Plasmafäuste", + effect: "Ein Angriff mit elektrisch geladenen Fäusten, der bewirkt, dass Normal-Attacken den Typ Elektro annehmen." }, "photonGeyser": { - name: "Photon Geyser", - effect: "The user attacks a target with a pillar of light. This move inflicts Attack or Sp. Atk damage—whichever stat is higher for the user." + name: "Photonen-Geysir", + effect: "Ein Angriff mit einer Lichtsäule. Ist der Angriff höher als der Spezial-Angriff, wird die Höhe des Schadens durch den Angriff bestimmt und umgekehrt." }, "lightThatBurnsTheSky": { - name: "Light That Burns the Sky", - effect: "This attack inflicts Attack or Sp. Atk damage—whichever stat is higher for the user, Necrozma. This move ignores the target's Ability." + name: "Licht des Erlöschens", + effect: "Ist der Angriff höher als der Spezial-Angriff, wird die Höhe des Schadens durch den Angriff bestimmt und umgekehrt. Ignoriert die Fähigkeit des Zieles." }, "searingSunrazeSmash": { - name: "Searing Sunraze Smash", - effect: "After obtaining Z-Power, the user, Solgaleo, attacks the target with full force. This move can ignore the effect of the target's Ability." + name: "Schmetternde Sonnenwalze", + effect: "Solgaleo greift das Ziel mithilfe von Z-Kraft mit voller Wucht an. Ignoriert die Fähigkeit des Zieles." }, "menacingMoonrazeMaelstrom": { - name: "Menacing Moonraze Maelstrom", - effect: "After obtaining Z-Power, the user, Lunala, attacks the target with full force. This move can ignore the effect of the target's Ability." + name: "Geballter Mondlaser", + effect: "Lunala greift das Ziel mithilfe von Z-Kraft mit voller Wucht an. Ignoriert die Fähigkeit des Zieles." }, "letsSnuggleForever": { - name: "Let's Snuggle Forever", - effect: "After obtaining Z-Power, the user, Mimikyu, punches the target with full force." + name: "Herzliche Knuddelkloppe", + effect: "Mimigma greift das Ziel mithilfe von Z-Kraft mit voller Wucht und viel Liebe an." }, "splinteredStormshards": { - name: "Splintered Stormshards", - effect: "After obtaining Z-Power, the user, Lycanroc, attacks the target with full force. This move negates the effect on the battlefield." + name: "Fataler Steinregen", + effect: "Wolwerock greift das Ziel mithilfe von Z-Kraft mit voller Wucht an. Herrschen besondere Feldeffekte, werden diese zusätzlich neutralisiert." }, "clangorousSoulblaze": { - name: "Clangorous Soulblaze", - effect: "After obtaining Z-Power, the user, Kommo-o, attacks the opposing Pokémon with full force. This move boosts the user's stats." + name: "Rasselnder Seelentanz", + effect: "Grandiras greift Gegner mithilfe von Z-Kraft mit voller Wucht an. Zusätzlich werden seine Statuswerte erhöht." }, "zippyZap": { - name: "Zippy Zap", - effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and results in a critical hit." + name: "Britzelturbo", + effect: "Ein stürmischer Blitz-Angriff mit hoher Erstschlag- und Volltrefferquote." }, "splishySplash": { - name: "Splishy Splash", - effect: "The user charges a huge wave with electricity and hits the opposing Pokémon with the wave. This may also leave the opposing Pokémon with paralysis." + name: "Plätschersurfer", + effect: "Pikachu greift das Ziel mit einer großen, elektrisch aufgeladenen Welle an. Das Ziel wird eventuell paralysiert." }, "floatyFall": { - name: "Floaty Fall", - effect: "The user floats in the air, and then dives at a steep angle to attack the target. This may also make the target flinch." + name: "Schwebesturz", + effect: "Pikachu schwebt nach oben und stürzt dann unvermittelt auf das Ziel herab. Das Ziel schreckt eventuell zurück." }, "pikaPapow": { - name: "Pika Papow", - effect: "The more Pikachu loves its Trainer, the greater the move's power. It never misses." + name: "Pika-Flash", + effect: "Je größer Pikachus Vertrauen zu seinem Trainer ist, desto stärker fällt dieser Angriff aus. Diese Attacke trifft immer." }, "bouncyBubble": { - name: "Bouncy Bubble", - effect: "The user attacks by shooting water bubbles at the target. It then absorbs water and restores its HP by half the damage taken by the target." + name: "Blubbsauger", + effect: "Evoli greift mit Wasserblasen an. Evolis KP werden um die Hälfte des vom Wasser angerichteten Schadens geheilt." }, "buzzyBuzz": { - name: "Buzzy Buzz", - effect: "The user shoots a jolt of electricity to attack the target. This also leaves the target with paralysis." + name: "Knisterladung", + effect: "Evoli greift das Ziel mit Elektrizität an, wodurch dieses paralysiert wird." }, "sizzlySlide": { - name: "Sizzly Slide", - effect: "The user cloaks itself in fire and charges at the target. This also leaves the target with a burn." + name: "Flackerbrand", + effect: "Evoli hüllt sich in Flammen und stürzt sich beherzt auf das Ziel, welches dadurch Verbrennungen erleidet." }, "glitzyGlow": { - name: "Glitzy Glow", - effect: "The user bombards the target with telekinetic force. A wondrous wall of light is put up to weaken the power of the opposing Pokémon's special moves." + name: "Pulsieraura", + effect: "Evoli greift das Ziel gnadenlos mit telekinetischer Energie an. Dabei wird eine geheimnisvolle Wand erzeugt, die Spezial-Attacken des Ziels abschwächt." }, "baddyBad": { - name: "Baddy Bad", - effect: "The user acts bad and attacks the target. A wondrous wall of light is put up to weaken the power of the opposing Pokémon's physical moves." + name: "Quälzone", + effect: "Evoli zeigt sich von seiner dunklen Seite und greift an. Dabei wird eine geheimnisvolle Wand erzeugt, die physische Attacken des Ziels abschwächt." }, "sappySeed": { - name: "Sappy Seed", - effect: "The user grows a gigantic stalk that scatters seeds to attack the target. The seeds drain the target's HP every turn." + name: "Sprießbomben", + effect: "Evoli lässt eine riesige Ranke wachsen, von der Samen herabfallen, die dem Ziel schaden und ihm in jeder Runde KP absaugen." }, "freezyFrost": { - name: "Freezy Frost", - effect: "The user attacks with a crystal made of cold frozen haze. It eliminates every stat change among all the Pokémon engaged in battle." + name: "Klirrfrost", + effect: "Evoli greift mit einem schwarzen Kristall aus gefrorenem Nebel an. Die Statusveränderungen aller am Kampf beteiligten Pokémon werden zurückgesetzt." }, "sparklySwirl": { - name: "Sparkly Swirl", - effect: "The user attacks the target by wrapping it with a whirlwind of an overpowering scent. This also heals all status conditions of the user's party." + name: "Glitzersturm", + effect: "Evoli greift an, indem es das Ziel in einen nahezu erstickend wohlriechenden Wirbelwind hüllt. Das Team des Anwenders wird von Statusproblemen geheilt." }, "veeveeVolley": { - name: "Veevee Volley", - effect: "The more Eevee loves its Trainer, the greater the move's power. It never misses." + name: "Evo-Crash", + effect: "Je größer Evolis Vertrauen zu seinem Trainer ist, desto stärker fällt dieser Angriff aus. Diese Attacke trifft immer." }, "doubleIronBash": { - name: "Double Iron Bash", - effect: "The user rotates, centering the hex nut in its chest, and then strikes with its arms twice in a row. This may also make the target flinch." + name: "Panzerfäuste", + effect: "Der Anwender rotiert um die Schraubenmutter in seinem Brustkorb und schlägt zweimal hintereinander mit den Armen zu. Das Ziel schreckt eventuell zurück." }, "maxGuard": { - name: "Max Guard", - effect: "This move enables the user to protect itself from all attacks. Its chance of failing rises if it is used in succession." + name: "Dyna-Wall", + effect: "Anwender wehrt jede Attacke ab. Scheitert eventuell bei Wiederholung." }, "dynamaxCannon": { - name: "Dynamax Cannon", - effect: "The user unleashes a strong beam from its core. This move deals twice the damage if the target is over level 200." + name: "Dynamax-Kanone", + effect: "Der Anwender schießt einen Strahl aus seinem Kern ab. Dynamaximierte Ziele erleiden doppelten Schaden." }, "snipeShot": { - name: "Snipe Shot", - effect: "The user ignores the effects of opposing Pokémon's moves and Abilities that draw in moves, allowing this move to hit the chosen target." + name: "Präzisionsschuss", + effect: "Die Attacke richtet sich gegen das ausgewählte Ziel, unabhängig von Fähigkeiten oder Attacken, die Angriffe auf sich ziehen." }, "jawLock": { - name: "Jaw Lock", - effect: "This move prevents the user and the target from switching out until either of them faints. The effect goes away if either of the Pokémon leaves the field." + name: "Fesselbiss", + effect: "Anwender und Ziel können nicht ausgetauscht werden, bis einer von ihnen kampfunfähig wird. Der Effekt endet, wenn eines der Pokémon das Kampffeld verlässt." }, "stuffCheeks": { - name: "Stuff Cheeks", - effect: "The user eats its held Berry, then sharply raises its Defense stat." + name: "Backenstopfer", + effect: "Der Anwender frisst die Beere, die er trägt, wodurch seine Verteidigung stark erhöht wird." }, "noRetreat": { - name: "No Retreat", - effect: "This move raises all the user's stats but prevents the user from switching out or fleeing." + name: "Finalformation", + effect: "Alle Statuswerte des Anwenders werden erhöht, aber dafür kann er weder ausgewechselt werden noch fliehen." }, "tarShot": { - name: "Tar Shot", - effect: "The user pours sticky tar over the target, lowering the target's Speed stat. The target becomes weaker to Fire-type moves." + name: "Teerschuss", + effect: "Der Anwender übergießt das Ziel mit klebrigem Teer und senkt so dessen Initiative. Dadurch wird es schwach gegenüber Feuer-Attacken." }, "magicPowder": { - name: "Magic Powder", - effect: "The user scatters a cloud of magic powder that changes the target to Psychic type." + name: "Magiepuder", + effect: "Das Ziel wird mit magischem Puder bestreut und nimmt den Typ Psycho an." }, "dragonDarts": { - name: "Dragon Darts", - effect: "The user attacks twice using Dreepy. If there are two targets, this move hits each target once." + name: "Drachenpfeile", + effect: "Der Anwender greift zweimal mit Grolldra an. Bei zwei Zielen werden beide jeweils einmal angegriffen." }, "teatime": { name: "Teatime", - effect: "The user has teatime with all the Pokémon in the battle. Each Pokémon eats its held Berry." + effect: "Der Anwender lädt alle am Kampf beteiligten Pokémon zu einem Teekränzchen ein, woraufhin diese die Beeren essen, die sie bei sich tragen." }, "octolock": { - name: "Octolock", - effect: "The user locks the target in and prevents it from fleeing. This move also lowers the target's Defense and Sp. Def every turn." + name: "Octoklammer", + effect: "Das Ziel wird an der Flucht gehindert und seine Verteidigung und Spezial-Verteidigung sinken jede Runde." }, "boltBeak": { - name: "Bolt Beak", - effect: "The user stabs the target with its electrified beak. If the user attacks before the target, the power of this move is doubled." + name: "Schockschnabel", + effect: "Der Anwender sticht mit einem elektrisch aufgeladenen Schnabel zu. Kommt er vor dem Ziel zum Zug, verdoppelt sich die Stärke der Attacke." }, "fishiousRend": { - name: "Fishious Rend", - effect: "The user rends the target with its hard gills. If the user attacks before the target, the power of this move is doubled." + name: "Kiemenbiss", + effect: "Der Anwender beißt mit seinen harten Kiemen zu. Kommt er vor dem Ziel zum Zug, verdoppelt sich die Stärke der Attacke." }, "courtChange": { - name: "Court Change", - effect: "With its mysterious power, the user swaps the effects on either side of the field." + name: "Seitenwechsel", + effect: "Durch eine mysteriöse Macht werden wirksame Effekte auf Mitstreiterseite und gegnerischer Seite getauscht." }, "maxFlare": { - name: "Max Flare", - effect: "This is a Fire-type attack Dynamax Pokémon use. The user intensifies the sun for five turns." + name: "Dyna-Brand", + effect: "Eine Feuer-Attacke, die nur Dynamax-Pokémon einsetzen können. Die Sonne brennt unbarmherzig fünf Runden lang." }, "maxFlutterby": { - name: "Max Flutterby", - effect: "This is a Bug-type attack Dynamax Pokémon use. This lowers the target's Sp. Atk stat." + name: "Dyna-Schwarm", + effect: "Eine Käfer-Attacke, die nur Dynamax-Pokémon einsetzen können. Senkt den Spezial-Angriff des Zieles." }, "maxLightning": { - name: "Max Lightning", - effect: "This is an Electric-type attack Dynamax Pokémon use. The user turns the ground into Electric Terrain for five turns." + name: "Dyna-Gewitter", + effect: "Eine Elektro-Attacke, die nur Dynamax-Pokémon einsetzen können. Erzeugt fünf Runden lang ein Elektrofeld." }, "maxStrike": { - name: "Max Strike", - effect: "This is a Normal-type attack Dynamax Pokémon use. This lowers the target's Speed stat." + name: "Dyna-Angriff", + effect: "Eine Normal-Attacke, die nur Dynamax-Pokémon einsetzen können. Senkt die Initiative des Zieles." }, "maxKnuckle": { - name: "Max Knuckle", - effect: "This is a Fighting-type attack Dynamax Pokémon use. This raises ally Pokémon's Attack stats." + name: "Dyna-Faust", + effect: "Eine Kampf-Attacke, die nur Dynamax-Pokémon einsetzen können. Erhöht den Angriff der Mitstreiterseite." }, "maxPhantasm": { - name: "Max Phantasm", - effect: "This is a Ghost-type attack Dynamax Pokémon use. This lowers the target's Defense stat." + name: "Dyna-Spuk", + effect: "Eine Geister-Attacke, die nur Dynamax-Pokémon einsetzen können. Senkt die Verteidigung des Zieles." }, "maxHailstorm": { - name: "Max Hailstorm", - effect: "This is an Ice-type attack Dynamax Pokémon use. The user summons a hailstorm lasting five turns." + name: "Dyna-Frost", + effect: "Eine Eis-Attacke, die nur Dynamax-Pokémon einsetzen können. Lässt fünf Runden lang einen Hagelsturm toben." }, "maxOoze": { - name: "Max Ooze", - effect: "This is a Poison-type attack Dynamax Pokémon use. This raises ally Pokémon's Sp. Atk stats." + name: "Dyna-Giftschwall", + effect: "Eine Gift-Attacke, die nur Dynamax-Pokémon einsetzen können. Erhöht den Spezial-Angriff der Mitstreiterseite." }, "maxGeyser": { - name: "Max Geyser", - effect: "This is a Water-type attack Dynamax Pokémon use. The user summons a heavy rain that falls for five turns." + name: "Dyna-Flut", + effect: "Eine Wasser-Attacke, die nur Dynamax-Pokémon einsetzen können. Löst fünf Runden lang strömenden Regen aus." }, "maxAirstream": { - name: "Max Airstream", - effect: "This is a Flying-type attack Dynamax Pokémon use. This raises ally Pokémon's Speed stats." + name: "Dyna-Düse", + effect: "Eine Flug-Attacke, die nur Dynamax-Pokémon einsetzen können. Erhöht die Initiative der Mitstreiterseite." }, "maxStarfall": { - name: "Max Starfall", - effect: "This is a Fairy-type attack Dynamax Pokémon use. The user turns the ground into Misty Terrain for five turns." + name: "Dyna-Zauber", + effect: "Eine Feen-Attacke, die nur Dynamax-Pokémon einsetzen können. Erzeugt fünf Runden lang ein Nebelfeld." }, "maxWyrmwind": { - name: "Max Wyrmwind", - effect: "This is a Dragon-type attack Dynamax Pokémon use. This lowers the target's Attack stat." + name: "Dyna-Wyrm", + effect: "Eine Drachen-Attacke, die nur Dynamax-Pokémon einsetzen können. Senkt den Angriff des Zieles." }, "maxMindstorm": { - name: "Max Mindstorm", - effect: "This is a Psychic-type attack Dynamax Pokémon use. The user turns the ground into Psychic Terrain for five turns." + name: "Dyna-Kinese", + effect: "Eine Psycho-Attacke, die nur Dynamax-Pokémon einsetzen können. Erzeugt fünf Runden lang ein Psychofeld." }, "maxRockfall": { - name: "Max Rockfall", - effect: "This is a Rock-type attack Dynamax Pokémon use. The user summons a sandstorm lasting five turns." + name: "Dyna-Brocken", + effect: "Eine Gesteins-Attacke, die nur Dynamax-Pokémon einsetzen können. Lässt fünf Runden lang einen Sandsturm toben." }, "maxQuake": { - name: "Max Quake", - effect: "This is a Ground-type attack Dynamax Pokémon use. This raises ally Pokémon's Sp. Def stats." + name: "Dyna-Erdstoß", + effect: "Eine Boden-Attacke, die nur Dynamax-Pokémon einsetzen können. Erhöht die Spezial-Verteidigung der Mitstreiterseite." }, "maxDarkness": { - name: "Max Darkness", - effect: "This is a Dark-type attack Dynamax Pokémon use. This lowers the target's Sp. Def stat." + name: "Dyna-Dunkel", + effect: "Eine Unlicht-Attacke, die nur Dynamax-Pokémon einsetzen können. Senkt die Spezial-Verteidigung des Zieles." }, "maxOvergrowth": { - name: "Max Overgrowth", - effect: "This is a Grass-type attack Dynamax Pokémon use. The user turns the ground into Grassy Terrain for five turns." + name: "Dyna-Flora", + effect: "Eine Pflanzen-Attacke, die nur Dynamax-Pokémon einsetzen können. Erzeugt fünf Runden lang ein Grasfeld." }, "maxSteelspike": { - name: "Max Steelspike", - effect: "This is a Steel-type attack Dynamax Pokémon use. This raises ally Pokémon's Defense stats." + name: "Dyna-Stahlzacken", + effect: "Eine Stahl-Attacke, die nur Dynamax-Pokémon einsetzen können. Erhöht die Verteidigung der Mitstreiterseite." }, "clangorousSoul": { - name: "Clangorous Soul", - effect: "The user raises all its stats by using some of its HP." + name: "Seelentanz", + effect: "Der Anwender setzt eine kleine Menge an KP ein, um alle seine Statuswerte zu erhöhen." }, "bodyPress": { name: "Body Press", - effect: "The user attacks by slamming its body into the target. The higher the user's Defense, the more damage it can inflict on the target." + effect: "Der Anwender greift mit seinem ganzen Körper an. Je höher seine Verteidigung ist, desto mehr Schaden richtet er an." }, "decorate": { - name: "Decorate", - effect: "The user sharply raises the target's Attack and Sp. Atk stats by decorating the target." + name: "Verzierung", + effect: "Durch Verzierungen werden der Angriff und Spezial-Angriff des Zieles stark erhöht." }, "drumBeating": { - name: "Drum Beating", - effect: "The user plays its drum, controlling the drum's roots to attack the target. This also lowers the target's Speed stat." + name: "Trommelschläge", + effect: "Der Anwender kontrolliert durch Trommeln Wurzeln, die das Ziel angreifen und dessen Initiative senken." }, "snapTrap": { - name: "Snap Trap", - effect: "The user snares the target in a snap trap for four to five turns." + name: "Fangeisen", + effect: "Das Ziel wird vier bis fünf Runden lang in einem Fangeisen festgehalten und angegriffen." }, "pyroBall": { - name: "Pyro Ball", - effect: "The user attacks by igniting a small stone and launching it as a fiery ball at the target. This may also leave the target with a burn." + name: "Feuerball", + effect: "Der Anwender greift mit einem Ball aus Feuer an, den er durch Anzünden eines kleinen Steins erzeugt. Fügt dem Ziel eventuell Verbrennungen zu." }, "behemothBlade": { - name: "Behemoth Blade", - effect: "The user wields a large, powerful sword using its whole body and cuts the target in a vigorous attack." + name: "Gigantenhieb", + effect: "Der Anwender wird zu einem riesigen Schwert und greift das Ziel an. Dynamaximierte Ziele erleiden doppelten Schaden." }, "behemothBash": { - name: "Behemoth Bash", - effect: "The user's body becomes a firm shield and slams into the target fiercely." + name: "Gigantenstoß", + effect: "Der Anwender wird zu einem riesigen Schild und greift das Ziel an. Dynamaximierte Ziele erleiden doppelten Schaden." }, "auraWheel": { - name: "Aura Wheel", - effect: "Morpeko attacks and raises its Speed with the energy stored in its cheeks. This move's type changes depending on the user's form." + name: "Aura-Rad", + effect: "Mithilfe der in den Backentaschen gespeicherten Energie greift der Anwender an und erhöht seine Initiative. Der Typ der Attacke hängt von Morpekos Form ab." }, "breakingSwipe": { - name: "Breaking Swipe", - effect: "The user swings its tough tail wildly and attacks opposing Pokémon. This also lowers their Attack stats." + name: "Breitseite", + effect: "Der Anwender schwingt heftig seinen robusten Schweif, um damit gegnerische Pokémon anzugreifen und ihren Angriffs-Wert zu senken." }, "branchPoke": { - name: "Branch Poke", - effect: "The user attacks the target by poking it with a sharply pointed branch." + name: "Zweigstoß", + effect: "Der Anwender attackiert das Ziel mit einem spitzen Zweig." }, "overdrive": { name: "Overdrive", - effect: "The user attacks opposing Pokémon by twanging a guitar or bass guitar, causing a huge echo and strong vibration." + effect: "Der Anwender haut in die Saiten seiner Gitarre oder seines Basses und erzeugt dröhnende, kraftvolle Vibrationen, die gegnerischen Pokémon schaden." }, "appleAcid": { - name: "Apple Acid", - effect: "The user attacks the target with an acidic liquid created from tart apples. This also lowers the target's Sp. Def stat." + name: "Apfelsäure", + effect: "Der Anwender greift mit einer aus einem sauren Apfel hergestellten säurehaltigen Flüssigkeit an. Dabei wird die Spezial-Verteidigung des Zieles gesenkt." }, "gravApple": { - name: "Grav Apple", - effect: "The user inflicts damage by dropping an apple from high above. This also lowers the target's Defense stat." + name: "Gravitation", + effect: "Ein Apfel fällt aus großer Höhe herab und richtet Schaden an. Dabei wird die Verteidigung des Zieles gesenkt." }, "spiritBreak": { - name: "Spirit Break", - effect: "The user attacks the target with so much force that it could break the target's spirit. This also lowers the target's Sp. Atk stat." + name: "Seelenbruch", + effect: "Die Attacke trifft das Ziel mit so viel Wucht, dass es den Mut verliert. Dabei wird sein Spezial-Angriff gesenkt." }, "strangeSteam": { - name: "Strange Steam", - effect: "The user attacks the target by emitting steam. This may also confuse the target." + name: "Wunderdampf", + effect: "Der Anwender stößt Dampf aus, mit dem er das Ziel angreift. Dieses wird eventuell verwirrt." }, "lifeDew": { - name: "Life Dew", - effect: "The user scatters mysterious water around and restores the HP of itself and its ally Pokémon in the battle." + name: "Lebenstropfen", + effect: "Wundersames Wasser heilt die KP des Anwenders und seiner am Kampf beteiligten Mitstreiter." }, "obstruct": { - name: "Obstruct", - effect: "This move enables the user to protect itself from all attacks. Its chance of failing rises if it is used in succession. Direct contact harshly lowers the attacker's Defense stat." + name: "Abblocker", + effect: "Der Anwender wehrt jede Attacke ab. Berührt ihn währenddessen ein Pokémon, sinkt dessen Verteidigung stark. Scheitert eventuell bei Wiederholung." }, "falseSurrender": { - name: "False Surrender", - effect: "The user pretends to bow its head, but then it stabs the target with its disheveled hair. This attack never misses." + name: "Kniefalltrick", + effect: "Der Anwender tut so, als würde er sich verneigen, und sticht dann mit seinem zerzausten Fell zu. Diese Attacke trifft immer." }, "meteorAssault": { - name: "Meteor Assault", - effect: "The user attacks wildly with its thick leek. The user can't move on the next turn, because the force of this move makes it stagger." + name: "Sternensturm", + effect: "Der Anwender greift mit seiner Lauchstange an. Von der Wucht der Attacke wird ihm jedoch so schwindelig, dass er in der nächsten Runde nicht handeln kann." }, "eternabeam": { - name: "Eternabeam", - effect: "This is Eternatus's most powerful attack in its original form. The user can't move on the next turn." + name: "Unendynastrahlen", + effect: "Der mächtigste Angriff, über den Endynalos in seiner ursprünglichen Form verfügt. In der nächsten Runde kann der Anwender nicht handeln." }, "steelBeam": { - name: "Steel Beam", - effect: "The user fires a beam of steel that it collected from its entire body. This also damages the user." + name: "Stahlstrahl", + effect: "Der Anwender schießt Stahl, den er in seinem ganzen Körper angesammelt hat, in Form eines mächtigen Strahls ab. Dabei verletzt er sich auch selbst." }, "expandingForce": { - name: "Expanding Force", - effect: "The user attacks the target with its psychic power. This move's power goes up and damages all opposing Pokémon on Psychic Terrain." + name: "Flächenmacht", + effect: "Der Anwender greift das Ziel mit Psycho-Kräften an. Wenn ein Psychofeld aktiv ist, steigt die Stärke und es wird allen gegnerischen Pokémon Schaden zugefügt." }, "steelRoller": { - name: "Steel Roller", - effect: "The user attacks while destroying the terrain. This move fails when the ground hasn't turned into a terrain." + name: "Eisenwalze", + effect: "Der Anwender greift an und zerstört dabei etwaige Felder. Ist kein Feld aktiv, schlägt die Attacke fehl." }, "scaleShot": { - name: "Scale Shot", - effect: "The user attacks by shooting scales two to five times in a row. This move boosts the user's Speed stat but lowers its Defense stat." + name: "Schuppenschuss", + effect: "Der Anwender greift das Ziel zwei- bis fünfmal hintereinander mit Schuppen-Geschossen an. Erhöht die eigene Initiative, aber senkt die Verteidigung." }, "meteorBeam": { - name: "Meteor Beam", - effect: "In this two-turn attack, the user gathers space power and boosts its Sp. Atk stat, then attacks the target on the next turn." + name: "Meteorstrahl", + effect: "Der Anwender sammelt in Runde 1 kosmische Kräfte und erhöht damit seinen Spezial-Angriff, bevor er in Runde 2 das Ziel angreift." }, "shellSideArm": { - name: "Shell Side Arm", - effect: "This move inflicts physical or special damage, whichever will be more effective. This may also poison the target." + name: "Muschelwaffe", + effect: "Je nachdem, was höher ausfällt, richtet diese Attacke entweder physischen oder Spezial-Schaden an. Das Ziel wird eventuell vergiftet." }, "mistyExplosion": { - name: "Misty Explosion", - effect: "The user attacks everything around it and faints upon using this move. This move's power is increased on Misty Terrain." + name: "Nebelexplosion", + effect: "Der Anwender greift alle Pokémon im Umkreis an und wird danach kampfunfähig. Die Stärke dieser Attacke steigt, wenn ein Nebelfeld aktiv ist." }, "grassyGlide": { - name: "Grassy Glide", - effect: "Gliding on the ground, the user attacks the target. This move always goes first on Grassy Terrain." + name: "Grasrutsche", + effect: "Der Anwender rutscht über den Boden und greift das Ziel an. Ermöglicht den Erstschlag, wenn ein Grasfeld aktiv ist." }, "risingVoltage": { - name: "Rising Voltage", - effect: "The user attacks with electric voltage rising from the ground. This move's power doubles when the target is on Electric Terrain." + name: "Hochspannung", + effect: "Der Anwender greift mit aus dem Boden aufsteigender Elektrizität an. Die Stärke der Attacke wird verdoppelt, wenn beim Gegner ein Elektrofeld aktiv ist." }, "terrainPulse": { - name: "Terrain Pulse", - effect: "The user utilizes the power of the terrain to attack. This move's type and power changes depending on the terrain when it's used." + name: "Feldimpuls", + effect: "Der Anwender nutzt die Kraft des aktiven Feldes für seinen Angriff. Der Typ und die Stärke der Attacke ändern sich je nach Art des aktiven Feldes." }, "skitterSmack": { - name: "Skitter Smack", - effect: "The user skitters behind the target to attack. This also lowers the target's Sp. Atk stat." + name: "Krabbelkracher", + effect: "Der Anwender kriecht hinter das Ziel, greift es an und senkt dabei dessen Spezial-Angriff." }, "burningJealousy": { - name: "Burning Jealousy", - effect: "The user attacks with energy from jealousy. This leaves all opposing Pokémon that have had their stats boosted during the turn with a burn." + name: "Neidflammen", + effect: "Der Anwender greift mit der Energie seines Neids an und fügt allen gegnerischen Pokémon, deren Statuswerte in dieser Runde erhöht wurden, Verbrennungen zu." }, "lashOut": { - name: "Lash Out", - effect: "The user lashes out to vent its frustration toward the target. If the user's stats were lowered during this turn, the power of this move is doubled." + name: "Frustventil", + effect: "Der Anwender entlädt seinen Frust in einem Angriff. Die Stärke der Attacke wird verdoppelt, wenn seine Statuswerte in dieser Runde gesenkt wurden." }, "poltergeist": { name: "Poltergeist", - effect: "The user attacks the target by controlling the target's item. The move fails if the target doesn't have an item." + effect: "Der Anwender greift das Ziel mit dessen getragenem Item an. Die Attacke schlägt fehl, wenn das Ziel kein Item trägt." }, "corrosiveGas": { - name: "Corrosive Gas", - effect: "The user surrounds everything around it with highly acidic gas and melts away items they hold." + name: "Korrosionsgas", + effect: "Der Anwender greift alle Pokémon im Umkreis mit einem ätzenden Gas an. Getragene Items werden dadurch zersetzt." }, "coaching": { name: "Coaching", - effect: "The user properly coaches its ally Pokémon, boosting their Attack and Defense stats." + effect: "Der Anwender sorgt durch geschickte Anweisungen dafür, dass der Angriff und die Verteidigung seiner Mitstreiter steigen." }, "flipTurn": { - name: "Flip Turn", - effect: "After making its attack, the user rushes back to switch places with a party Pokémon in waiting." + name: "Rollwende", + effect: "Nach der Attacke eilt der Anwender zurück und tauscht den Platz mit einem anderen Pokémon." }, "tripleAxel": { - name: "Triple Axel", - effect: "A consecutive three-kick attack that becomes more powerful with each successful hit." + name: "Dreifach-Axel", + effect: "Tritt das Ziel ein- bis dreimal nacheinander. Die Härte der Tritte nimmt von Treffer zu Treffer zu." }, "dualWingbeat": { - name: "Dual Wingbeat", - effect: "The user slams the target with its wings. The target is hit twice in a row." + name: "Doppelflügel", + effect: "Der Anwender trifft das Ziel zweimal hintereinander mit seinen Flügeln und fügt ihm so Schaden zu." }, "scorchingSands": { - name: "Scorching Sands", - effect: "The user throws scorching sand at the target to attack. This may also leave the target with a burn." + name: "Brandsand", + effect: "Der Anwender greift das Ziel mit brennend heißem Sand an und fügt ihm eventuell Verbrennungen zu." }, "jungleHealing": { - name: "Jungle Healing", - effect: "The user becomes one with the jungle, restoring HP and healing any status conditions of itself and its ally Pokémon in battle." + name: "Dschungelheilung", + effect: "Der Anwender wird eins mit dem Dschungel und heilt bei sich und seinen am Kampf beteiligten Mitstreitern KP und hebt jegliche Statusprobleme auf." }, "wickedBlow": { - name: "Wicked Blow", - effect: "The user, having mastered the Dark style, strikes the target with a fierce blow. This attack always results in a critical hit." + name: "Finstertreffer", + effect: "Der Anwender hat den Stil des Unlichts gemeistert und führt einen fokussierten, harten Schlag mit Volltreffergarantie aus." }, "surgingStrikes": { - name: "Surging Strikes", - effect: "The user, having mastered the Water style, strikes the target with a flowing motion three times in a row. This attack always results in a critical hit." + name: "Trefferschwall", + effect: "Der Anwender hat den Stil des Wassers gemeistert und führt mit fließenden Bewegungen drei Angriffe in Folge mit Volltreffergarantie aus." }, "thunderCage": { - name: "Thunder Cage", - effect: "The user traps the target in a cage of sparking electricity for four to five turns." + name: "Blitzgefängnis", + effect: "Das Ziel wird für vier bis fünf Runden in einem elektrischen Käfig gefangen." }, "dragonEnergy": { - name: "Dragon Energy", - effect: "Converting its life-force into power, the user attacks opposing Pokémon. The lower the user's HP, the lower the move's power." + name: "Drachenkräfte", + effect: "Der Anwender wandelt seine Lebenskraft in Energie um und greift gegnerische Pokémon an. Je höher seine KP sind, desto mehr Schaden wird angerichtet." }, "freezingGlare": { - name: "Freezing Glare", - effect: "The user shoots its psychic power from its eyes to attack. This may also leave the target frozen." + name: "Eisiger Blick", + effect: "Der Anwender greift das Ziel mit Psycho-Kräften an, die er aus seinen Augen abschießt. Das Ziel friert eventuell ein." }, "fieryWrath": { - name: "Fiery Wrath", - effect: "The user transforms its wrath into a fire-like aura to attack. This may also make opposing Pokémon flinch." + name: "Brennender Zorn", + effect: "Der Anwender wandelt seinen Zorn in eine flammende Aura um und greift damit gegnerische Pokémon an. Diese schrecken eventuell zurück." }, "thunderousKick": { - name: "Thunderous Kick", - effect: "The user overwhelms the target with lightning-like movement before delivering a kick. This also lowers the target's Defense stat." + name: "Donnernder Tritt", + effect: "Der Anwender bringt das Ziel mit blitzschnellen Bewegungen durcheinander und tritt dann zu. Senkt die Verteidigung des Zieles." }, "glacialLance": { - name: "Glacial Lance", - effect: "The user attacks by hurling a blizzard-cloaked icicle lance at opposing Pokémon." + name: "Blizzardlanze", + effect: "Der Anwender wirft eine in einen Blizzard gehüllte Lanze aus Eis auf gegnerische Pokémon." }, "astralBarrage": { - name: "Astral Barrage", - effect: "The user attacks by sending a frightful amount of small ghosts at opposing Pokémon." + name: "Astralfragmente", + effect: "Der Anwender greift gegnerische Pokémon mit vielen kleinen Spukgestalten an." }, "eerieSpell": { - name: "Eerie Spell", - effect: "The user attacks with its tremendous psychic power. This also removes 3 PP from the target's last move." + name: "Schauderspruch", + effect: "Der Anwender greift mit gewaltigen Psycho-Kräften an. Die AP der letzten Attacke des Zieles werden um 3 Punkte gesenkt." }, "direClaw": { name: "Dire Claw", diff --git a/src/locales/de/pokemon.ts b/src/locales/de/pokemon.ts index db92ccc5c..9efecb819 100644 --- a/src/locales/de/pokemon.ts +++ b/src/locales/de/pokemon.ts @@ -605,208 +605,208 @@ export const pokemon: SimpleTranslationEntries = { "tynamo": "Zapplardin", "eelektrik": "Zapplalek", "eelektross": "Zapplarang", - "elgyem": "Elgyem", - "beheeyem": "Beheeyem", - "litwick": "Litwick", - "lampent": "Lampent", - "chandelure": "Chandelure", - "axew": "Axew", - "fraxure": "Fraxure", - "haxorus": "Haxorus", - "cubchoo": "Cubchoo", - "beartic": "Beartic", - "cryogonal": "Cryogonal", - "shelmet": "Shelmet", - "accelgor": "Accelgor", - "stunfisk": "Stunfisk", - "mienfoo": "Mienfoo", - "mienshao": "Mienshao", - "druddigon": "Druddigon", - "golett": "Golett", - "golurk": "Golurk", - "pawniard": "Pawniard", - "bisharp": "Bisharp", - "bouffalant": "Bouffalant", - "rufflet": "Rufflet", - "braviary": "Braviary", - "vullaby": "Vullaby", - "mandibuzz": "Mandibuzz", - "heatmor": "Heatmor", - "durant": "Durant", - "deino": "Deino", - "zweilous": "Zweilous", - "hydreigon": "Hydreigon", - "larvesta": "Larvesta", - "volcarona": "Volcarona", - "cobalion": "Cobalion", - "terrakion": "Terrakion", - "virizion": "Virizion", - "tornadus": "Tornadus", - "thundurus": "Thundurus", + "elgyem": "Pygraulon", + "beheeyem": "Megalon", + "litwick": "Lichtel", + "lampent": "Laternecto", + "chandelure": "Skelabra", + "axew": "Milza", + "fraxure": "Scharfax", + "haxorus": "Maxax", + "cubchoo": "Petznief", + "beartic": "Siberio", + "cryogonal": "Frigometri", + "shelmet": "Schnuthelm", + "accelgor": "Hydragil", + "stunfisk": "Flunschlik", + "mienfoo": "Lin-Fu", + "mienshao": "Wie-Shu", + "druddigon": "Shardrago", + "golett": "Golbit", + "golurk": "Golgantes", + "pawniard": "Gladiantri", + "bisharp": "Ceasurio", + "bouffalant": "Bisofank", + "rufflet": "Geronimatz", + "braviary": "Washakwil", + "vullaby": "Skallyk", + "mandibuzz": "Grypheldis", + "heatmor": "Furnifraß", + "durant": "Fermicula", + "deino": "Kapuno", + "zweilous": "Duodino", + "hydreigon": "Trikephalo", + "larvesta": "Ignivor", + "volcarona": "Ramoth", + "cobalion": "Kobalium", + "terrakion": "Terrakium", + "virizion": "Viridium", + "tornadus": "Boreos", + "thundurus": "Voltolos", "reshiram": "Reshiram", "zekrom": "Zekrom", - "landorus": "Landorus", + "landorus": "Dementeros", "kyurem": "Kyurem", "keldeo": "Keldeo", "meloetta": "Meloetta", "genesect": "Genesect", - "chespin": "Chespin", - "quilladin": "Quilladin", - "chesnaught": "Chesnaught", - "fennekin": "Fennekin", - "braixen": "Braixen", - "delphox": "Delphox", - "froakie": "Froakie", - "frogadier": "Frogadier", - "greninja": "Greninja", - "bunnelby": "Bunnelby", - "diggersby": "Diggersby", - "fletchling": "Fletchling", - "fletchinder": "Fletchinder", - "talonflame": "Talonflame", - "scatterbug": "Scatterbug", - "spewpa": "Spewpa", + "chespin": "Igamaro", + "quilladin": "Igastarnish", + "chesnaught": "Brigaron", + "fennekin": "Fynx", + "braixen": "Rutena", + "delphox": "Fennexis", + "froakie": "Froxy", + "frogadier": "Amphizel", + "greninja": "Quajutsu", + "bunnelby": "Scoppel", + "diggersby": "Grebbit", + "fletchling": "Dartiri", + "fletchinder": "Dartignis", + "talonflame": "Fiaro", + "scatterbug": "Purmel", + "spewpa": "Puponcho", "vivillon": "Vivillon", - "litleo": "Litleo", - "pyroar": "Pyroar", + "litleo": "Leufeo", + "pyroar": "Pyroleo", "flabebe": "Flabébé", "floette": "Floette", "florges": "Florges", - "skiddo": "Skiddo", - "gogoat": "Gogoat", - "pancham": "Pancham", - "pangoro": "Pangoro", - "furfrou": "Furfrou", - "espurr": "Espurr", - "meowstic": "Meowstic", - "honedge": "Honedge", - "doublade": "Doublade", - "aegislash": "Aegislash", - "spritzee": "Spritzee", - "aromatisse": "Aromatisse", - "swirlix": "Swirlix", - "slurpuff": "Slurpuff", - "inkay": "Inkay", - "malamar": "Malamar", - "binacle": "Binacle", - "barbaracle": "Barbaracle", - "skrelp": "Skrelp", - "dragalge": "Dragalge", - "clauncher": "Clauncher", - "clawitzer": "Clawitzer", - "helioptile": "Helioptile", - "heliolisk": "Heliolisk", - "tyrunt": "Tyrunt", - "tyrantrum": "Tyrantrum", - "amaura": "Amaura", - "aurorus": "Aurorus", - "sylveon": "Sylveon", - "hawlucha": "Hawlucha", + "skiddo": "Mähikel", + "gogoat": "Chevrumm", + "pancham": "Pam-Pam", + "pangoro": "Pandrago", + "furfrou": "Coiffwaff", + "espurr": "Psiau", + "meowstic": "Psiaugon", + "honedge": "Gramokles", + "doublade": "Duokles", + "aegislash": "Durengard", + "spritzee": "Parfi", + "aromatisse": "Parfinesse", + "swirlix": "Flauschling", + "slurpuff": "Sabbaione", + "inkay": "Iscalar", + "malamar": "Calamanero", + "binacle": "Bithora", + "barbaracle": "Thanathora", + "skrelp": "Algitt", + "dragalge": "Tandrak", + "clauncher": "Scampisto", + "clawitzer": "Wummer", + "helioptile": "Eguana", + "heliolisk": "Elezard", + "tyrunt": "Balgoras", + "tyrantrum": "Monargoras", + "amaura": "Amarino", + "aurorus": "Amagarga", + "sylveon": "Feelinara", + "hawlucha": "Resladero", "dedenne": "Dedenne", - "carbink": "Carbink", - "goomy": "Goomy", - "sliggoo": "Sliggoo", - "goodra": "Goodra", - "klefki": "Klefki", - "phantump": "Phantump", - "trevenant": "Trevenant", - "pumpkaboo": "Pumpkaboo", - "gourgeist": "Gourgeist", - "bergmite": "Bergmite", - "avalugg": "Avalugg", - "noibat": "Noibat", - "noivern": "Noivern", + "carbink": "Rocara", + "goomy": "Viscora", + "sliggoo": "Viscargot", + "goodra": "Viscogon", + "klefki": "Clavion", + "phantump": "Paragoni", + "trevenant": "Trombork", + "pumpkaboo": "Irrbis", + "gourgeist": "Pumpdjinn", + "bergmite": "Arktip", + "avalugg": "Arktilas", + "noibat": "eF-eM", + "noivern": "UHaFnir", "xerneas": "Xerneas", "yveltal": "Yveltal", "zygarde": "Zygarde", "diancie": "Diancie", "hoopa": "Hoopa", "volcanion": "Volcanion", - "rowlet": "Rowlet", - "dartrix": "Dartrix", - "decidueye": "Decidueye", - "litten": "Litten", - "torracat": "Torracat", - "incineroar": "Incineroar", - "popplio": "Popplio", - "brionne": "Brionne", - "primarina": "Primarina", - "pikipek": "Pikipek", - "trumbeak": "Trumbeak", - "toucannon": "Toucannon", - "yungoos": "Yungoos", - "gumshoos": "Gumshoos", - "grubbin": "Grubbin", - "charjabug": "Charjabug", - "vikavolt": "Vikavolt", - "crabrawler": "Crabrawler", - "crabominable": "Crabominable", - "oricorio": "Oricorio", - "cutiefly": "Cutiefly", - "ribombee": "Ribombee", - "rockruff": "Rockruff", - "lycanroc": "Lycanroc", - "wishiwashi": "Wishiwashi", - "mareanie": "Mareanie", - "toxapex": "Toxapex", - "mudbray": "Mudbray", - "mudsdale": "Mudsdale", - "dewpider": "Dewpider", - "araquanid": "Araquanid", - "fomantis": "Fomantis", - "lurantis": "Lurantis", - "morelull": "Morelull", - "shiinotic": "Shiinotic", - "salandit": "Salandit", - "salazzle": "Salazzle", - "stufful": "Stufful", - "bewear": "Bewear", - "bounsweet": "Bounsweet", - "steenee": "Steenee", - "tsareena": "Tsareena", - "comfey": "Comfey", - "oranguru": "Oranguru", - "passimian": "Passimian", - "wimpod": "Wimpod", - "golisopod": "Golisopod", - "sandygast": "Sandygast", - "palossand": "Palossand", - "pyukumuku": "Pyukumuku", - "type_null": "Type: Null", - "silvally": "Silvally", - "minior": "Minior", - "komala": "Komala", + "rowlet": "Bauz", + "dartrix": "Arboretoss", + "decidueye": "Silvarro", + "litten": "Flamiau", + "torracat": "Miezunder", + "incineroar": "Fuegro", + "popplio": "Robball", + "brionne": "Marikeck", + "primarina": "Primarene", + "pikipek": "Peppeck", + "trumbeak": "Trompeck", + "toucannon": "Tukanon", + "yungoos": "Mangunior", + "gumshoos": "Manguspektor", + "grubbin": "Mabula", + "charjabug": "Akkup", + "vikavolt": "Donarion", + "crabrawler": "Krabbox", + "crabominable": "Krawell", + "oricorio": "Choreogel", + "cutiefly": "Wommel", + "ribombee": "Bandelby", + "rockruff": "Wuffels", + "lycanroc": "Wolwerock", + "wishiwashi": "Lusardin", + "mareanie": "Garstella", + "toxapex": "Aggrostella", + "mudbray": "Pampuli", + "mudsdale": "Pampross", + "dewpider": "Araqua", + "araquanid": "Aranestro", + "fomantis": "Imantis", + "lurantis": "Mantidea", + "morelull": "Bubungus", + "shiinotic": "Lamellus", + "salandit": "Molunk", + "salazzle": "Amfira", + "stufful": "Velursi", + "bewear": "Kosturso", + "bounsweet": "Frubberl", + "steenee": "Frubaila", + "tsareena": "Fruyal", + "comfey": "Curelei", + "oranguru": "Kommandutan", + "passimian": "Quartermak", + "wimpod": "Reißlaus", + "golisopod": "Tectass", + "sandygast": "Sankabuh", + "palossand": "Colossand", + "pyukumuku": "Gufa", + "type_null": "Typ:Null", + "silvally": "Amigento", + "minior": "Meteno", + "komala": "Koalelu", "turtonator": "Turtonator", "togedemaru": "Togedemaru", - "mimikyu": "Mimikyu", - "bruxish": "Bruxish", - "drampa": "Drampa", - "dhelmise": "Dhelmise", - "jangmo_o": "Jangmo-o", - "hakamo_o": "Hakamo-o", - "kommo_o": "Kommo-o", - "tapu_koko": "Tapu Koko", - "tapu_lele": "Tapu Lele", - "tapu_bulu": "Tapu Bulu", - "tapu_fini": "Tapu Fini", + "mimikyu": "Mimigma", + "bruxish": "Knirfish", + "drampa": "Sen-Long", + "dhelmise": "Moruda", + "jangmo_o": "Miniras", + "hakamo_o": "Mediras", + "kommo_o": "Grandiras", + "tapu_koko": "Kapu-Riki", + "tapu_lele": "Kapu-Fala", + "tapu_bulu": "Kapu-Toro", + "tapu_fini": "Kapu-Kime", "cosmog": "Cosmog", - "cosmoem": "Cosmoem", + "cosmoem": "Cosmovum", "solgaleo": "Solgaleo", "lunala": "Lunala", - "nihilego": "Nihilego", - "buzzwole": "Buzzwole", - "pheromosa": "Pheromosa", - "xurkitree": "Xurkitree", - "celesteela": "Celesteela", - "kartana": "Kartana", - "guzzlord": "Guzzlord", + "nihilego": "Anego", + "buzzwole": "Masskito", + "pheromosa": "Schabelle", + "xurkitree": "Voltriant", + "celesteela": "Kaguron", + "kartana": "Katagami", + "guzzlord": "Schlingking", "necrozma": "Necrozma", "magearna": "Magearna", "marshadow": "Marshadow", - "poipole": "Poipole", - "naganadel": "Naganadel", - "stakataka": "Stakataka", - "blacephalon": "Blacephalon", + "poipole": "Venicro", + "naganadel": "Agoyon", + "stakataka": "Muramura", + "blacephalon": "Kopplosio", "zeraora": "Zeraora", "meltan": "Meltan", "melmetal": "Melmetal", diff --git a/src/locales/de/starter-select-ui-handler.ts b/src/locales/de/starter-select-ui-handler.ts new file mode 100644 index 000000000..c7595cb2f --- /dev/null +++ b/src/locales/de/starter-select-ui-handler.ts @@ -0,0 +1,32 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +/** + * The menu namespace holds most miscellaneous text that isn't directly part of the game's + * contents or directly related to Pokemon data. This includes menu navigation, settings, + * account interactions, descriptive text, etc. + */ +export const starterSelectUiHandler: SimpleTranslationEntries = { + "confirmStartTeam":'Begin with these Pokémon?', + "growthRate": "Growth Rate:", + "ability": "Ability:", + "passive": "Passive:", + "nature": "Nature:", + "eggMoves": 'Egg Moves', + "start": "Start", + "addToParty": "Add to Party", + "toggleIVs": 'Toggle IVs', + "manageMoves": 'Manage Moves', + "useCandies": 'Use Candies', + "selectMoveSwapOut": "Select a move to swap out.", + "selectMoveSwapWith": "Select a move to swap with", + "unlockPassive": "Unlock Passive", + "reduceCost": "Reduce Cost", + "cycleShiny": "R: Cycle Shiny", + "cycleForm": 'F: Cycle Form', + "cycleGender": 'G: Cycle Gender', + "cycleAbility": 'E: Cycle Ability', + "cycleNature": 'N: Cycle Nature', + "cycleVariant": 'V: Cycle Variant', + "enablePassive": "Enable Passive", + "disablePassive": "Disable Passive" +} \ No newline at end of file diff --git a/src/locales/en/battle.ts b/src/locales/en/battle.ts new file mode 100644 index 000000000..e307a3a52 --- /dev/null +++ b/src/locales/en/battle.ts @@ -0,0 +1,53 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "{{bossName}} appeared.", + "trainerAppeared": "{{trainerName}}\nwould like to battle!", + "singleWildAppeared": "A wild {{pokemonName}} appeared!", + "multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!", + "playerComeBack": "Come back, {{pokemonName}}!", + "trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!", + "playerGo": "Go! {{pokemonName}}!", + "trainerGo": "{{trainerName}} sent out {{pokemonName}}!", + "switchQuestion": "Will you switch\n{{pokemonName}}?", + "trainerDefeated": `You defeated\n{{trainerName}}!`, + "pokemonCaught": "{{pokemonName}} was caught!", + "pokemon": "Pokémon", + "sendOutPokemon": "Go! {{pokemonName}}!", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!", + "attackFailed": "But it failed!", + "attackHitsCount": `Hit {{count}} time(s)!`, + "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", + "levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", + "learnMove": "{{pokemonName}} learned\n{{moveName}}!", + "learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", + "learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", + "learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", + "learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", + "learnMoveForgetQuestion": "Which move should be forgotten?", + "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", + "levelCapUp": "The level cap\nhas increased to {{levelCap}}!", + "moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.", + "moveNoPP": "There's no PP left for\nthis move!", + "moveDisabled": "{{moveName}} is disabled!", + "noPokeballForce": "An unseen force\nprevents using Poké Balls.", + "noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!", + "noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!", + "noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!", + "noEscapeForce": "An unseen force\nprevents escape.", + "noEscapeTrainer": "You can't run\nfrom a trainer battle!", + "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!", + "runAwaySuccess": "You got away safely!", + "runAwayCannotEscape": 'You can\'t escape!', + "escapeVerbSwitch": "switching", + "escapeVerbFlee": "fleeing", + "notDisabled": "{{moveName}} is disabled\nno more!", + "skipItemQuestion": "Are you sure you want to skip taking an item?", + "eggHatching": "Oh?", + "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts new file mode 100644 index 000000000..11cbc42d9 --- /dev/null +++ b/src/locales/en/config.ts @@ -0,0 +1,28 @@ +import { ability } from "./ability"; +import { battle } from "./battle"; +import { commandUiHandler } from "./command-ui-handler"; +import { fightUiHandler } from "./fight-ui-handler"; +import { menu } from "./menu"; +import { menuUiHandler } from "./menu-ui-handler"; +import { move } from "./move"; +import { pokeball } from "./pokeball"; +import { pokemon } from "./pokemon"; +import { pokemonStat } from "./pokemon-stat"; +import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { tutorial } from "./tutorial"; + + +export const enConfig = { + ability: ability, + battle: battle, + commandUiHandler: commandUiHandler, + fightUiHandler: fightUiHandler, + menuUiHandler: menuUiHandler, + menu: menu, + move: move, + pokeball: pokeball, + pokemonStat: pokemonStat, + pokemon: pokemon, + starterSelectUiHandler: starterSelectUiHandler, + tutorial: tutorial +} \ No newline at end of file diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 82a09e49d..7a5043a98 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -35,52 +35,12 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "Are you a boy or a girl?", "boy": "Boy", "girl": "Girl", - "bossAppeared": "{{bossName}} appeared.", - "trainerAppeared": "{{trainerName}}\nwould like to battle!", - "singleWildAppeared": "A wild {{pokemonName}} appeared!", - "multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!", - "playerComeBack": "Come back, {{pokemonName}}!", - "trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!", - "playerGo": "Go! {{pokemonName}}!", - "trainerGo": "{{trainerName}} sent out {{pokemonName}}!", - "switchQuestion": "Will you switch\n{{pokemonName}}?", - "trainerDefeated": `You defeated\n{{trainerName}}!`, - "pokemonCaught": "{{pokemonName}} was caught!", - "pokemon": "Pokémon", - "sendOutPokemon": "Go! {{pokemonName}}!", - "attackFailed": "But it failed!", - "attackHitsCount": `Hit {{count}} time(s)!`, - "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", - "levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", - "learnMove": "{{pokemonName}} learned\n{{moveName}}!", - "learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", - "learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", - "learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", - "learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", - "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", - "learnMoveForgetQuestion": "Which move should be forgotten?", - "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", - "levelCapUp": "The level cap\nhas increased to {{levelCap}}!", - "moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.", - "moveDisabled": "{{moveName}} is disabled!", - "noPokeballForce": "An unseen force\nprevents using Poké Balls.", - "noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!", - "noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!", - "noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!", - "noEscapeForce": "An unseen force\nprevents escape.", - "noEscapeTrainer": "You can't run\nfrom a trainer battle!", - "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!", - "runAwaySuccess": "You got away safely!", - "runAwayCannotEscape": 'You can\'t escape!', - "escapeVerbSwitch": "switching", - "escapeVerbFlee": "fleeing", - "notDisabled": "{{moveName}} is disabled\nno more!", - "skipItemQuestion": "Are you sure you want to skip taking an item?", - "eggHatching": "Oh?", - "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?", "dailyRankings": "Daily Rankings", "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", } as const; \ No newline at end of file diff --git a/src/locales/en/starter-select-ui-handler.ts b/src/locales/en/starter-select-ui-handler.ts new file mode 100644 index 000000000..c7595cb2f --- /dev/null +++ b/src/locales/en/starter-select-ui-handler.ts @@ -0,0 +1,32 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +/** + * The menu namespace holds most miscellaneous text that isn't directly part of the game's + * contents or directly related to Pokemon data. This includes menu navigation, settings, + * account interactions, descriptive text, etc. + */ +export const starterSelectUiHandler: SimpleTranslationEntries = { + "confirmStartTeam":'Begin with these Pokémon?', + "growthRate": "Growth Rate:", + "ability": "Ability:", + "passive": "Passive:", + "nature": "Nature:", + "eggMoves": 'Egg Moves', + "start": "Start", + "addToParty": "Add to Party", + "toggleIVs": 'Toggle IVs', + "manageMoves": 'Manage Moves', + "useCandies": 'Use Candies', + "selectMoveSwapOut": "Select a move to swap out.", + "selectMoveSwapWith": "Select a move to swap with", + "unlockPassive": "Unlock Passive", + "reduceCost": "Reduce Cost", + "cycleShiny": "R: Cycle Shiny", + "cycleForm": 'F: Cycle Form', + "cycleGender": 'G: Cycle Gender', + "cycleAbility": 'E: Cycle Ability', + "cycleNature": 'N: Cycle Nature', + "cycleVariant": 'V: Cycle Variant', + "enablePassive": "Enable Passive", + "disablePassive": "Disable Passive" +} \ No newline at end of file diff --git a/src/locales/es/battle.ts b/src/locales/es/battle.ts new file mode 100644 index 000000000..f4bf22bb9 --- /dev/null +++ b/src/locales/es/battle.ts @@ -0,0 +1,53 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "¡{{bossName}} te corta el paso!", + "trainerAppeared": "¡{{trainerName}}\nte desafía!", + "singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!", + "multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!", + "playerComeBack": "¡{{pokemonName}}, ven aquí!", + "trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!", + "playerGo": "¡Adelante, {{pokemonName}}!", + "trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!", + "switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?", + "trainerDefeated": "¡Has derrotado a\n{{trainerName}}!", + "pokemonCaught": "¡{{pokemonName}} atrapado!", + "pokemon": "Pokémon", + "sendOutPokemon": "¡Adelante, {{pokemonName}}!", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!", + "attackFailed": "¡Pero ha fallado!", + "attackHitsCount": `N.º de golpes: {{count}}.`, + "expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", + "levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!", + "learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!", + "learnMovePrompt": "{{pokemonName}} quiere aprender\n{{moveName}}.", + "learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.", + "learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?", + "learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.", + "learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?", + "learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.", + "levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!", + "moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.", + "moveNoPP": "There's no PP left for\nthis move!", + "moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!", + "noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.", + "noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!", + "noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!", + "noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!", + "noEscapeForce": "Una fuerza misteriosa\nte impide huir.", + "noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!", + "noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!", + "runAwaySuccess": "¡Escapas sin problemas!", + "runAwayCannotEscape": "¡No has podido escapar!", + "escapeVerbSwitch": "cambiar", + "escapeVerbFlee": "huir", + "notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!", + "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", + "eggHatching": "¿Y esto?", + "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/es/command-ui-handler.ts b/src/locales/es/command-ui-handler.ts index 237e779db..66a892f8f 100644 --- a/src/locales/es/command-ui-handler.ts +++ b/src/locales/es/command-ui-handler.ts @@ -2,7 +2,7 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const commandUiHandler: SimpleTranslationEntries = { "fight": "Luchar", - "ball": "Ball", + "ball": "Balls", "pokemon": "Pokémon", "run": "Huir", "actionMessage": "¿Qué debería\nhacer {{pokemonName}}?", diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts new file mode 100644 index 000000000..093a4b393 --- /dev/null +++ b/src/locales/es/config.ts @@ -0,0 +1,28 @@ +import { ability } from "./ability"; +import { battle } from "./battle"; +import { commandUiHandler } from "./command-ui-handler"; +import { fightUiHandler } from "./fight-ui-handler"; +import { menu } from "./menu"; +import { menuUiHandler } from "./menu-ui-handler"; +import { move } from "./move"; +import { pokeball } from "./pokeball"; +import { pokemon } from "./pokemon"; +import { pokemonStat } from "./pokemon-stat"; +import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { tutorial } from "./tutorial"; + + +export const esConfig = { + ability: ability, + battle: battle, + commandUiHandler: commandUiHandler, + fightUiHandler: fightUiHandler, + menuUiHandler: menuUiHandler, + menu: menu, + move: move, + pokeball: pokeball, + pokemonStat: pokemonStat, + pokemon: pokemon, + starterSelectUiHandler: starterSelectUiHandler, + tutorial: tutorial +} \ No newline at end of file diff --git a/src/locales/es/fight-ui-handler.ts b/src/locales/es/fight-ui-handler.ts new file mode 100644 index 000000000..b431e3b70 --- /dev/null +++ b/src/locales/es/fight-ui-handler.ts @@ -0,0 +1,6 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const fightUiHandler: SimpleTranslationEntries = { + "pp": "PP", + "power": "POTENCIA", +} as const; diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index 5dccc2e4e..4839630bc 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -13,58 +13,34 @@ export const menu: SimpleTranslationEntries = { "newGame": "Nueva partida", "selectGameMode": "Elige un modo de juego.", "logInOrCreateAccount": "Inicia sesión o crea una cuenta para empezar. ¡No se requiere correo electrónico!", + "username": "Usuario", + "password": "Contraseña", + "login": "Iniciar Sesión", + "register": "Registrarse", + "emptyUsername": "El usuario no puede estar vacío", + "invalidLoginUsername": "El usuario no es válido", + "invalidRegisterUsername": "El usuario solo puede contener letras, números y guiones bajos", + "invalidLoginPassword": "La contraseña no es válida", + "invalidRegisterPassword": "Contraseña debe tener 6 o más caracter.", + "usernameAlreadyUsed": "El usuario ya está en uso", + "accountNonExistent": "El usuario no existe", + "unmatchingPassword": "La contraseña no coincide", + "passwordNotMatchingConfirmPassword": "Las contraseñas deben coincidir", + "confirmPassword": "Confirmar Contra.", + "registrationAgeWarning": "Al registrarte, confirmas tener 13 o más años de edad.", + "backToLogin": "Volver al Login", "failedToLoadSaveData": "No se ha podido cargar los datos guardados. Por favor, recarga la página.\nSi el fallo continúa, por favor contacta al administrador.", "sessionSuccess": "Sesión cargada con éxito.", "failedToLoadSession": "No se ha podido cargar los datos de tu sesión.\nPuede que estén corruptos.", "boyOrGirl": "¿Eres un chico o una chica?", "boy": "Chico", "girl": "Chica", - "bossAppeared": "¡{{bossName}} te corta el paso!", - "trainerAppeared": "¡{{trainerName}}\nte desafía!", - "singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!", - "multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!", - "playerComeBack": "¡{{pokemonName}}, ven aquí!", - "trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!", - "playerGo": "¡Adelante, {{pokemonName}}!", - "trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!", - "switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?", - "trainerDefeated": "¡Has derrotado a\n{{trainerName}}!", - "pokemonCaught": "¡{{pokemonName}} atrapado!", - "pokemon": "Pokémon", - "sendOutPokemon": "¡Adelante, {{pokemonName}}!", - "attackFailed": "¡Pero ha fallado!", - "attackHitsCount": `N.º de golpes: {{count}}.`, - "expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", - "levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!", - "learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!", - "learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.", - "learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.", - "learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?", - "learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?", - "learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.", - "learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?", - "learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.", - "levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!", - "moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.", - "moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!", - "noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.", - "noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!", - "noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!", - "noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!", - "noEscapeForce": "Una fuerza misteriosa\nte impide huir.", - "noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!", - "noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!", - "runAwaySuccess": "¡Escapas sin problemas!", - "runAwayCannotEscape": "¡No has podido escapar!", - "escapeVerbSwitch": "cambiar", - "escapeVerbFlee": "huir", - "notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!", - "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", - "eggHatching": "¿Y esto?", - "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?", - "dailyRankings": "Daily Rankings", - "weeklyRankings": "Weekly Rankings", - "noRankings": "No Rankings", - "loading": "Loading…", - "playersOnline": "Players Online" + "dailyRankings": "Rankings Diarios", + "weeklyRankings": "Rankings Semanales", + "noRankings": "Sin Rankings", + "loading": "Cargando…", + "playersOnline": "Jugadores en Línea", + "empty":"Vacío", + "yes":"Sí", + "no":"No", } as const; \ No newline at end of file diff --git a/src/locales/es/pokemon-stat.ts b/src/locales/es/pokemon-stat.ts index 276b099bf..514ef1989 100644 --- a/src/locales/es/pokemon-stat.ts +++ b/src/locales/es/pokemon-stat.ts @@ -4,13 +4,13 @@ export const pokemonStat: SimpleTranslationEntries = { "HP": "PV", "HPshortened": "PV", "ATK": "Ataque", - "ATKshortened": "Ataque", + "ATKshortened": "Ata", "DEF": "Defensa", - "DEFshortened": "Defensa", + "DEFshortened": "Def", "SPATK": "At. Esp.", - "SPATKshortened": "At. Esp.", + "SPATKshortened": "AtEsp", "SPDEF": "Def. Esp.", - "SPDEFshortened": "Def. Esp.", + "SPDEFshortened": "DefEsp", "SPD": "Velocidad", "SPDshortened": "Veloc." } as const; \ No newline at end of file diff --git a/src/locales/es/starter-select-ui-handler.ts b/src/locales/es/starter-select-ui-handler.ts new file mode 100644 index 000000000..629e25632 --- /dev/null +++ b/src/locales/es/starter-select-ui-handler.ts @@ -0,0 +1,32 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +/** + * The menu namespace holds most miscellaneous text that isn't directly part of the game's + * contents or directly related to Pokemon data. This includes menu navigation, settings, + * account interactions, descriptive text, etc. + */ +export const starterSelectUiHandler: SimpleTranslationEntries = { + "confirmStartTeam":'¿Comenzar con estos Pokémon?', + "growthRate": "Crecimiento:", + "ability": "Habilid:", + "passive": "Pasiva:", + "nature": "Natur:", + "eggMoves": "Mov. Huevo", + "start": "Iniciar", + "addToParty": "Añadir a Equipo", + "toggleIVs": "Mostrar IVs", + "manageMoves": "Gestionar Movs.", + "useCandies": "Usar Caramelos", + "selectMoveSwapOut": "Elige el movimiento que sustituir.", + "selectMoveSwapWith": "Elige el movimiento que sustituirá a", + "unlockPassive": "Añadir Pasiva", + "reduceCost": "Reducir Coste", + "cycleShiny": "R: Cambiar Shiny", + "cycleForm": 'F: Cambiar Forma', + "cycleGender": 'G: Cambiar Género', + "cycleAbility": 'E: Cambiar Habilidad', + "cycleNature": 'N: Cambiar Naturaleza', + "cycleVariant": 'V: Cambiar Variante', + "enablePassive": "Activar Pasiva", + "disablePassive": "Desactivar Pasiva" +} \ No newline at end of file diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts index 2773b6710..6e131f9b0 100644 --- a/src/locales/es/tutorial.ts +++ b/src/locales/es/tutorial.ts @@ -1,42 +1,49 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const tutorial: SimpleTranslationEntries = { - "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. - $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. - $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. - $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + "intro": `¡Bienvenido/a a PokéRogue! Este es un fangame de Pokémon centrado en el combate con elementos roguelite. + $Este juego no está monetizado y no reclamamos ningún derecho de propiedad sobre Pokémon ni sobre ninguno de + $los recursos con copyright utilizados. + $El juego está en proceso, pero es completamente jugable.\nPara reportar bugs, por favor, hazlo en nuestra + $comunidad de Discord. + $Si el juego va lento, por favor, asegúrate de que tengas activada la opción 'Aceleración de gráficos' en los + $ajustes de tu navegador.`, - "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + "accessMenu": `Para acceder al menú, pulsa M o Escape cuando\ntengas el control. + $El menú contiene los ajustes y otras funciones.`, - "menu": `From this menu you can access the settings. - $From the settings you can change game speed, window style, and other options. - $There are also various other features here, so be sure to check them all!`, + "menu": `Desde este menú podrás acceder a los ajustes. + $Podrás cambiar la velocidad del juego, el estilo de la ventana y demás. + $Hay más opciones, ¡así que pruébalas todas!`, - "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. - $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. - $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. - $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + "starterSelect": `En esta pantalla podrás elegir tus iniciales. Estos serán tus\nmiembros de equipo al comenzar la partida. + $Cada inicial tiene un valor. Tu equipo puede contener hasta 6\nmiembros mientras el valor total no pase de 10. + $También puedes elegir su género, habilidad y forma\ndependiendo de las variantes que hayas conseguido. + $Los IVs de los iniciales corresponderán al valor más alto de\nlos Pokémon de la misma especie que hayas obtenido. + $¡Así que intenta conseguir muchos Pokémon de la misma\nespecie!`, - "pokerus": `A daily random 3 selectable starters have a purple border. - $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "pokerus": `Cada día, 3 iniciales aleatorios tendrán un borde morado. + $Si ves un inicial que tengas con este borde, prueba a\nañadirlo a tu equipo. ¡No olvides revisar sus datos!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, + "statChange": `Los cambios de estadísticas se mantienen entre combates\nmientras que el Pokémon no vuelva a la Poké Ball. + $Tus Pokémon vuelven a sus Poké Balls antes de combates contra entrenadores y de entrar a un nuevo bioma. + $También puedes ver los cambios de estadísticas del Pokémon en campo manteniendo pulsado C o Shift.`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. - $These range from consumables, to Pokémon held items, to passive permanent items. - $Most non-consumable item effects will stack in various ways. - $Some items will only show up if they can be used, such as evolution items. - $You can also transfer held items between Pokémon using the transfer option. - $The transfer option will appear in the bottom right once you have obtained a held item. - $You may purchase consumable items with money, and a larger variety will be available the further you get. - $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + "selectItem": `Tras cada combate, tendrás la opción de elegir entre tres objetos aleatorios. Solo podrás escoger uno. + $Estos objetos pueden ser consumibles, objetos equipables u objetos pasivos permanentes (hasta acabar la partida). + $La mayoría de los efectos de objetos no consumibles se acumularán de varias maneras. + $Algunos objetos solo aparecerán si pueden ser utilizados, como las piedras evolutivas. + $También puedes transferir objetos equipados entre Pokémon utilizando la opción de transferir. + $La opción de transferir aparecerá en la parte inferior derecha una vez hayas obtenido un objeto equipable. + $También puedes comprar objetos consumibles con dinero y su variedad irá aumentando según tu avance. + $Asegúrate de comprar antes de escoger un objeto aleatorio, ya que se avanzará al siguiente combate.`, - "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. - $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. - $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. - $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. - $Some Pokémon can only even be obtained from eggs. - $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, + "eggGacha": `En esta pantalla podrás canjear tus vales por huevos\nde Pokémon. + $Los huevos deben eclosionar y estarán más cerca de\nhacerlo tras cada combate. + $Los huevos más raros tardarán más en eclosionar. + $Los Pokémon que hayan salido del huevo no se\nañadirán a tu equipo, pero sí a tus iniciales. + $Los Pokémon salidos de un huevo suelen tener mejores\nIVs que los Pokémon salvajes. + $Algunos Pokémon solo pueden ser obtenidos de huevos. + $Hay 3 máquinas diferentes entre las que elegir, cada\nuna con zdiferentes bonificaciones. + $¡Así que escoge la que más te interese!`, } as const; \ No newline at end of file diff --git a/src/locales/fr/battle.ts b/src/locales/fr/battle.ts new file mode 100644 index 000000000..56ab69215 --- /dev/null +++ b/src/locales/fr/battle.ts @@ -0,0 +1,53 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "Un {{bossName}} apparaît.", + "trainerAppeared": "Un combat est lancé\npar {{trainerName}} !", + "singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !", + "multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !", + "playerComeBack": "{{pokemonName}}, on change !\nReviens !", + "trainerComeBack": "{{trainerName}} retire {{pokemonName}} !", + "playerGo": "{{pokemonName}} ! Go !", + "trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !", + "switchQuestion": "Voulez-vous changer\nvotre {{pokemonName}} ?", + "trainerDefeated": `Vous avez battu\n{{trainerName}} !`, + "pokemonCaught": "Vous avez attrapé {{pokemonName}} !", + "pokemon": "Pokémon", + "sendOutPokemon": "{{pokemonName}} ! Go !", + "hitResultCriticalHit": "Coup critique !", + "hitResultSuperEffective": "C’est super efficace !", + "hitResultNotVeryEffective": "Ce n’est pas très efficace…", + "hitResultNoEffect": "Ça n’affecte pas {{pokemonName}}…", + "hitResultOneHitKO": "K.O. en un coup !", + "attackFailed": "Mais cela échoue !", + "attackHitsCount": `Touché {{count}} fois !`, + "expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !", + "levelUp": "{{pokemonName}} monte au\nN. {{level}} !", + "learnMove": "{{pokemonName}} apprend\n{{moveName}} !", + "learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.", + "learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.", + "learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?", + "learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?", + "learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.", + "learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?", + "learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.", + "levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !", + "moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.", + "moveNoPP": "Il n’y a plus de PP pour\ncette capacité !", + "moveDisabled": "{{moveName}} est sous entrave !", + "noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.", + "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", + "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !", + "noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !", + "noEscapeForce": "Une force mystérieuse\nempêche la fuite.", + "noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !", + "noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !", + "runAwaySuccess": "Vous prenez la fuite !", + "runAwayCannotEscape": "Fuite impossible !", + "escapeVerbSwitch": "le changement", + "escapeVerbFlee": "la fuite", + "notDisabled": "{{moveName}} n’est plus sous entrave !", + "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", + "eggHatching": "Oh ?", + "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?" +} as const; diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts new file mode 100644 index 000000000..a2e678ca6 --- /dev/null +++ b/src/locales/fr/config.ts @@ -0,0 +1,28 @@ +import { ability } from "./ability"; +import { battle } from "./battle"; +import { commandUiHandler } from "./command-ui-handler"; +import { fightUiHandler } from "./fight-ui-handler"; +import { menu } from "./menu"; +import { menuUiHandler } from "./menu-ui-handler"; +import { move } from "./move"; +import { pokeball } from "./pokeball"; +import { pokemon } from "./pokemon"; +import { pokemonStat } from "./pokemon-stat"; +import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { tutorial } from "./tutorial"; + + +export const frConfig = { + ability: ability, + battle: battle, + commandUiHandler: commandUiHandler, + fightUiHandler: fightUiHandler, + menuUiHandler: menuUiHandler, + menu: menu, + move: move, + pokeball: pokeball, + pokemonStat: pokemonStat, + pokemon: pokemon, + starterSelectUiHandler: starterSelectUiHandler, + tutorial: tutorial +} \ No newline at end of file diff --git a/src/locales/fr/menu-ui-handler.ts b/src/locales/fr/menu-ui-handler.ts index 684a8cc07..54328a05e 100644 --- a/src/locales/fr/menu-ui-handler.ts +++ b/src/locales/fr/menu-ui-handler.ts @@ -13,9 +13,9 @@ export const menuUiHandler: SimpleTranslationEntries = { "LOG_OUT": "Déconnexion", "slot": "Emplacement {{slotNumber}}", "importSession": "Importer session", - "importSlotSelect": "Sélectionnez l'emplacement vers lequel importer les données.", + "importSlotSelect": "Sélectionnez l’emplacement vers lequel importer les données.", "exportSession": "Exporter session", - "exportSlotSelect": "Sélectionnez l'emplacement depuis lequel exporter les données.", + "exportSlotSelect": "Sélectionnez l’emplacement depuis lequel exporter les données.", "importData": "Importer données", "exportData": "Exporter données", "cancel": "Retour", diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index d5478c67a..b073bbbfb 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -30,52 +30,12 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "Es-tu un garçon ou une fille ?", "boy": "Garçon", "girl": "Fille", - "bossAppeared": "Un {{bossName}} apparaît.", - "trainerAppeared": "Un combat est lancé\npar {{trainerName}} !", - "singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !", - "multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !", - "playerComeBack": "{{pokemonName}}, on change !\nReviens !", - "trainerComeBack": "{{trainerName}} retire {{pokemonName}} !", - "playerGo": "{{pokemonName}} ! Go !", - "trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !", - "switchQuestion": "Voulez-vous changer\n{{pokemonName}} ?", - "trainerDefeated": `Vous avez battu\n{{trainerName}} !`, - "pokemonCaught": "Vous avez attrapé {{pokemonName}} !", - "pokemon": "Pokémon", - "sendOutPokemon": "{{pokemonName}} ! Go !", - "attackFailed": "Mais cela échoue !", - "attackHitsCount": `Touché {{count}} fois !`, - "expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !", - "levelUp": "{{pokemonName}} monte au\nN. {{level}} !", - "learnMove": "{{pokemonName}} apprend \n{{moveName}} !", - "learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.", - "learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.", - "learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?", - "learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?", - "learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.", - "learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?", - "learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.", - "levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !", - "moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.", - "moveDisabled": "{{moveName}} est sous entrave !", - "noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.", - "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", - "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!", - "noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !", - "noEscapeForce": "Une force mystérieuse\nempêche la fuite.", - "noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !", - "noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !", - "runAwaySuccess": "Vous prenez la fuite !", - "runAwayCannotEscape": "Fuite impossible !", - "escapeVerbSwitch": "le changement", - "escapeVerbFlee": "la fuite", - "notDisabled": "{{moveName}} n’est plus sous entrave !", - "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", - "eggHatching": "Oh ?", - "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?", "dailyRankings": "Classement du Jour", "weeklyRankings": "Classement de la Semaine", "noRankings": "Pas de Classement", "loading": "Chargement…", - "playersOnline": "Joueurs Connectés" + "playersOnline": "Joueurs Connectés", + "empty":"Vide", + "yes":"Oui", + "no":"Non", } as const; diff --git a/src/locales/fr/starter-select-ui-handler.ts b/src/locales/fr/starter-select-ui-handler.ts new file mode 100644 index 000000000..77a79387a --- /dev/null +++ b/src/locales/fr/starter-select-ui-handler.ts @@ -0,0 +1,32 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +/** + * The menu namespace holds most miscellaneous text that isn't directly part of the game's + * contents or directly related to Pokemon data. This includes menu navigation, settings, + * account interactions, descriptive text, etc. + */ +export const starterSelectUiHandler: SimpleTranslationEntries = { + "confirmStartTeam":'Commencer avec ces Pokémon ?', + "growthRate": "Croissance :", + "ability": "Talent :", + "passive": "Passif :", + "nature": "Nature :", + "eggMoves": "Capacités Œuf", + "start": "Lancer", + "addToParty": "Ajouter à l’équipe", + "toggleIVs": "Voir IVs", + "manageMoves": "Gérer Capacités", + "useCandies": "Utiliser Bonbons", + "selectMoveSwapOut": "Sélectionnez la capacité à échanger.", + "selectMoveSwapWith": "Sélectionnez laquelle échanger avec", + "unlockPassive": "Débloquer Passif", + "reduceCost": "Diminuer le cout", + "cycleShiny": "R: » Chromatiques", + "cycleForm": "F: » Formes", + "cycleGender": "G: » Sexes", + "cycleAbility": "E: » Talents", + "cycleNature": "N: » Natures", + "cycleVariant": "V: » Variants", + "enablePassive": "Activer Passif", + "disablePassive": "Désactiver Passif" +} diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index b60ccc03b..bcd76d61d 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -8,7 +8,7 @@ export const tutorial: SimpleTranslationEntries = { $Tout signalement de bugs passe par le serveur Discord. $Si le jeu est lent, vérifiez que l’Accélération Matérielle est activée dans les paramètres du navigateur.`, - "accessMenu": `Accédez au menu avec M ou Échap lors de l'attente d’une\naction. + "accessMenu": `Accédez au menu avec M ou Échap lors de l’attente d’une\naction. $Il contient les paramètres et diverses fonctionnalités`, "menu": `Vous pouvez accéder aux paramètres depuis ce menu. @@ -17,17 +17,17 @@ export const tutorial: SimpleTranslationEntries = { $jetez-y un œil !`, "starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ. - $Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un coût de 10. + $Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un cout de 10. $Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos. $Les IVs d’un starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc d’en obtenir plusieurs !`, "pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour $violet. Si un starter que vous possédez l’a, essayez de - $ l’ajouter à votre équipe. Vérifiez bien son résumé !`, + $l’ajouter à votre équipe. Vérifiez bien son résumé !`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, + "statChange": `Les changements de stats restent à travers les combats tant que le Pokémon n’est pas rappelé. + $Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer dans un nouveau biome. + $Vous pouvez également voir en combat les changements de stats d’un Pokémon en maintenant C ou Maj.`, "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. @@ -44,4 +44,4 @@ export const tutorial: SimpleTranslationEntries = { $Les Pokémon issus d’Œufs ont généralement de\nmeilleurs IVs que les Pokémon sauvages. $Certains Pokémon ne peuvent être obtenus\nque dans des Œufs. $Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !`, -} as const; \ No newline at end of file +} as const; diff --git a/src/locales/it/ability.ts b/src/locales/it/ability.ts new file mode 100644 index 000000000..4955813c4 --- /dev/null +++ b/src/locales/it/ability.ts @@ -0,0 +1,1244 @@ +import { AbilityTranslationEntries } from "#app/plugins/i18n.js"; + +export const ability: AbilityTranslationEntries = { + stench: { + name: "Tanfo", + description: "Quando il Pokémon attacca il bersaglio, può farlo tentennare grazie al cattivo odore che emana.", + }, + drizzle: { + name: "Piovischio", + description: "Quando il Pokémon entra in campo, attira la pioggia.", + }, + speedBoost: { + name: "Acceleratore", + description: "La Velocità aumenta a ogni turno.", + }, + battleArmor: { + name: "Lottascudo", + description: "Il Pokémon è protetto da una dura corazza che gli evita di subire brutti colpi.", + }, + sturdy: { + name: "Vigore", + description: "Evita che il Pokémon vada KO in un sol colpo se ha tutti i PS, e lo rende immune alle mosse che causano KO immediato.", + }, + damp: { + name: "Umidità", + description: "Aumenta l'umidità circostante, impedendo l'uso di Autodistruzione e di altre mosse esplosive.", + }, + limber: { + name: "Scioltezza", + description: "Il corpo flessibile del Pokémon gli impedisce di subire gli effetti della paralisi.", + }, + sandVeil: { + name: "Sabbiavelo", + description: "L'elusione aumenta durante le tempeste di sabbia.", + }, + static: { + name: "Statico", + description: "Il Pokémon si ricopre di elettricità statica e può causare paralisi a chi è entrato in contatto con lui.", + }, + voltAbsorb: { + name: "Assorbivolt", + description: "Se il Pokémon viene colpito da una mossa di tipo Elettro, recupera PS anziché subire danni.", + }, + waterAbsorb: { + name: "Assorbacqua", + description: "Se il Pokémon viene colpito da una mossa di tipo Acqua, recupera PS anziché subire danni.", + }, + oblivious: { + name: "Indifferenza", + description: "L'imperturbabilità del Pokémon lo protegge da infatuazioni, provocazioni e dall'effetto di Prepotenza.", + }, + cloudNine: { + name: "Antimeteo", + description: "Neutralizza gli effetti di tutte le condizioni atmosferiche.", + }, + compoundEyes: { + name: "Insettocchi", + description: "La precisione del Pokémon aumenta grazie ai suoi occhi composti.", + }, + insomnia: { + name: "Insonnia", + description: "Il Pokémon soffre d'insonnia e non può addormentarsi.", + }, + colorChange: { + name: "Cambiacolore", + description: "Il Pokémon acquisisce il tipo della mossa subita.", + }, + immunity: { + name: "Immunità", + description: "L'immunità naturale del Pokémon gli impedisce di essere avvelenato.", + }, + flashFire: { + name: "Fuocardore", + description: "Se il Pokémon subisce una mossa di tipo Fuoco, ne sfrutta il calore per potenziare le proprie mosse di tipo Fuoco.", + }, + shieldDust: { + name: "Polvoscudo", + description: "Il Pokémon è protetto da uno strato di scaglie che annulla gli effetti aggiuntivi delle mosse subite.", + }, + ownTempo: { + name: "Mente Locale", + description: "Il Pokémon affronta la vita al proprio ritmo e per questo non può essere confuso o subire l'effetto di Prepotenza.", + }, + suctionCups: { + name: "Ventose", + description: "Il Pokémon resiste a strumenti e mosse che causano la sostituzione appiccicandosi al terreno con le ventose.", + }, + intimidate: { + name: "Prepotenza", + description: "Quando il Pokémon entra in campo, la sua prepotenza crea soggezione, riducendo l'Attacco degli avversari intimiditi.", + }, + shadowTag: { + name: "Pedinombra", + description: "Il Pokémon impedisce la fuga o la sostituzione degli avversari di cui calpesta l'ombra.", + }, + roughSkin: { + name: "Cartavetro", + description: "Quando il Pokémon subisce un attacco, grazie alla sua pelle ruvida infligge a sua volta danni al Pokémon con cui è entrato in contatto.", + }, + wonderGuard: { + name: "Magidifesa", + description: "Un potere misterioso protegge il Pokémon e lo rende vulnerabile solo alle mosse superefficaci.", + }, + levitate: { + name: "Levitazione", + description: "La capacità di levitare conferisce al Pokémon immunità agli attacchi di tipo Terra.", + }, + effectSpore: { + name: "Spargispora", + description: "Può causare avvelenamento, paralisi o sonno a chi attacca il Pokémon entrando in contatto con lui.", + }, + synchronize: { + name: "Sincronismo", + description: "Se un Pokémon con questa abilità viene avvelenato, paralizzato o scottato, contagia con lo stesso problema di stato chi lo ha causato.", + }, + clearBody: { + name: "Corpochiaro", + description: "Impedisce la diminuzione delle statistiche causata da abilità o mosse di altri Pokémon.", + }, + naturalCure: { + name: "Alternacura", + description: "Quando il Pokémon lascia il campo, guarisce dai problemi di stato.", + }, + lightningRod: { + name: "Parafulmine", + description: "Il Pokémon attira e neutralizza le mosse di tipo Elettro, facendo aumentare il suo Attacco Speciale.", + }, + sereneGrace: { + name: "Leggiadro", + description: "Rende più probabili gli effetti aggiuntivi delle mosse.", + }, + swiftSwim: { + name: "Nuotovelox", + description: "Se piove, la Velocità aumenta.", + }, + chlorophyll: { + name: "Clorofilla", + description: "Se la luce del sole è intensa, la Velocità aumenta.", + }, + illuminate: { + name: "Risplendi", + description: "Illuminando l'ambiente circostante, impedisce che la precisione del pokémon sia diminuita.", + }, + trace: { + name: "Traccia", + description: "Quando il Pokémon entra in campo, copia l'abilità di un avversario.", + }, + hugePower: { + name: "Macroforza", + description: "Raddoppia la potenza degli attacchi fisici del Pokémon.", + }, + poisonPoint: { + name: "Velenopunto", + description: "Può avvelenare chi entra in contatto con il Pokémon.", + }, + innerFocus: { + name: "Forza Interiore", + description: "La capacità di concentrazione del Pokémon evita che tentenni per gli attacchi subiti e lo protegge dall'effetto di Prepotenza.", + }, + magmaArmor: { + name: "Magmascudo", + description: "Il magma riveste il corpo del Pokémon impedendogli di venire congelato.", + }, + waterVeil: { + name: "Idrovelo", + description: "Un velo d'acqua riveste il corpo del Pokémon impedendogli di venire scottato.", + }, + magnetPull: { + name: "Magnetismo", + description: "La carica magnetica attrae i Pokémon di tipo Acciaio impedendogli la fuga o la sostituzione.", + }, + soundproof: { + name: "Antisuono", + description: "Il Pokémon è dotato di una sorta di isolamento acustico che lo rende immune alle mosse basate sul suono.", + }, + rainDish: { + name: "Copripioggia", + description: "Il Pokémon recupera PS quando piove.", + }, + sandStream: { + name: "Sabbiafiume", + description: "Quando il Pokémon entra in campo, scatena una tempesta di sabbia.", + }, + pressure: { + name: "Pressione", + description: "Il Pokémon mette pressione agli avversari, facendogli consumare più PP.", + }, + thickFat: { + name: "Grassospesso", + description: "Il Pokémon è protetto da uno spesso strato di grasso che dimezza il danno causato da mosse di tipo Fuoco e Ghiaccio.", + }, + earlyBird: { + name: "Sveglialampo", + description: "Anche se il Pokémon si addormenta, può risvegliarsi due volte più velocemente.", + }, + flameBody: { + name: "Corpodifuoco", + description: "Può scottare chi entra in contatto con il Pokémon.", + }, + runAway: { + name: "Fugafacile", + description: "Garantisce la fuga dai Pokémon selvatici.", + }, + keenEye: { + name: "Sguardofermo", + description: "La vista acuta del Pokémon impedisce che la sua precisione diminuisca.", + }, + hyperCutter: { + name: "Ipertaglio", + description: "Le possenti chele o tenaglie di cui è dotato il Pokémon fanno sì che il suo Attacco non possa essere diminuito da altri.", + }, + pickup: { + name: "Raccolta", + description: "Il Pokémon può raccogliere strumenti usati da altri durante la lotta. Potrebbe raccogliere strumenti anche fuori dalla lotta.", + }, + truant: { + name: "Pigrone", + description: "Quando il Pokémon usa una mossa, nel turno successivo si riposerà.", + }, + hustle: { + name: "Tuttafretta", + description: "L'Attacco aumenta, ma la precisione diminuisce.", + }, + cuteCharm: { + name: "Incantevole", + description: "Può causare infatuazione a chi entra in contatto con il Pokémon.", + }, + plus: { + name: "Più", + description: "L'Attacco Speciale aumenta se ci sono alleati con l'abilità Meno o Più.", + }, + minus: { + name: "Meno", + description: "L'Attacco Speciale aumenta se ci sono alleati con l'abilità Meno o Più.", + }, + forecast: { + name: "Previsioni", + description: "Cambia il tipo del Pokémon in Acqua, Fuoco o Ghiaccio in base alle condizioni atmosferiche.", + }, + stickyHold: { + name: "Antifurto", + description: "Gli strumenti restano appiccicati al corpo adesivo del Pokémon e non possono essere rubati.", + }, + shedSkin: { + name: "Muta", + description: "Il Pokémon può guarire dai problemi di stato facendo la muta completa della pelle.", + }, + guts: { + name: "Dentistretti", + description: "Se il Pokémon è affetto da un problema di stato, tira fuori la grinta e aumenta il proprio Attacco.", + }, + marvelScale: { + name: "Pelledura", + description: "Se il Pokémon è affetto da un problema di stato, le squame sulla sua pelle si induriscono aumentando la sua Difesa.", + }, + liquidOoze: { + name: "Melma", + description: "La melma del Pokémon infligge danni a chi la assorbe, facendogli perdere PS a causa del fortissimo tanfo.", + }, + overgrow: { + name: "Erbaiuto", + description: "Quando al Pokémon rimangono pochi PS, la potenza delle sue mosse di tipo Erba aumenta.", + }, + blaze: { + name: "Aiutofuoco", + description: "Quando al Pokémon rimangono pochi PS, la potenza delle sue mosse di tipo Fuoco aumenta.", + }, + torrent: { + name: "Acquaiuto", + description: "Quando al Pokémon rimangono pochi PS, la potenza delle sue mosse di tipo Acqua aumenta.", + }, + swarm: { + name: "Aiutinsetto", + description: "Quando al Pokémon rimangono pochi PS, la potenza delle sue mosse di tipo Coleottero aumenta.", + }, + rockHead: { + name: "Testadura", + description: "Anche se il Pokémon usa delle mosse che causano un contraccolpo, non perde PS.", + }, + drought: { + name: "Siccità", + description: "Quando il Pokémon entra in campo, la luce solare diventa intensa.", + }, + arenaTrap: { + name: "Trappoarena", + description: "Impedisce la fuga agli avversari.", + }, + vitalSpirit: { + name: "Spiritovivo", + description: "Il Pokémon è talmente vivace che non può addormentarsi.", + }, + whiteSmoke: { + name: "Fumochiaro", + description: "Il Pokémon è protetto da un fumo chiaro che impedisce ai nemici di diminuire le sue statistiche.", + }, + purePower: { + name: "Forzapura", + description: "L'Attacco del Pokémon raddoppia grazie alla sua padronanza delle tecniche yoga.", + }, + shellArmor: { + name: "Guscioscudo", + description: "Il Pokémon è protetto da un guscio robusto che gli evita di subire brutti colpi.", + }, + airLock: { + name: "Riparo", + description: "Neutralizza gli effetti di tutte le condizioni atmosferiche.", + }, + tangledFeet: { + name: "Intricopiedi", + description: "Se il Pokémon è confuso, la sua elusione aumenta.", + }, + motorDrive: { + name: "Elettrorapid", + description: "Se il Pokémon viene colpito da una mossa di tipo Elettro, la neutralizza e sfrutta la carica elettrica per aumentare la propria Velocità.", + }, + rivalry: { + name: "Antagonismo", + description: "Rende più forti contro nemici dello stesso sesso, ma più deboli contro nemici di sesso opposto.", + }, + steadfast: { + name: "Cuordeciso", + description: "Se il Pokémon tentenna, il suo animo indomito si risveglia e la sua Velocità aumenta.", + }, + snowCloak: { + name: "Mantelneve", + description: "Se grandina, l'elusione aumenta.", + }, + gluttony: { + name: "Voracità", + description: "Il Pokémon non attende di aver perso molti PS per mangiare certe bacche, ma lo fa non appena i suoi PS scendono a metà o meno.", + }, + angerPoint: { + name: "Grancollera", + description: "Se il Pokémon subisce un brutto colpo, monta su tutte le furie e il suo Attacco aumenta al massimo.", + }, + unburden: { + name: "Agiltecnica", + description: "Se il Pokémon usa o perde uno strumento, la sua Velocità aumenta.", + }, + heatproof: { + name: "Antifuoco", + description: "Il corpo termoresistente del Pokémon dimezza i danni che subisce dalle mosse di tipo Fuoco.", + }, + simple: { + name: "Disinvoltura", + description: "Raddoppia le modifiche alle statistiche.", + }, + drySkin: { + name: "Pellearsa", + description: "Il Pokémon recupera PS se piove o se subisce mosse di tipo Acqua, ma perde PS con la luce solare intensa. Subisce più danni da mosse di tipo Fuoco.", + }, + download: { + name: "Download", + description: "Il Pokémon analizza Difesa e Difesa Speciale del nemico e, a seconda di qual è più bassa, aumenta il proprio Attacco o Attacco Speciale.", + }, + ironFist: { + name: "Ferropugno", + description: "Potenzia le mosse che utilizzano pugni.", + }, + poisonHeal: { + name: "Velencura", + description: "Se il Pokémon è avvelenato, recupera PS anziché perderli.", + }, + adaptability: { + name: "Adattabilità", + description: "Potenzia di molto le mosse dello stesso tipo del Pokémon.", + }, + skillLink: { + name: "Abillegame", + description: "Le mosse multicolpo mandano a segno sempre il massimo dei colpi possibili.", + }, + hydration: { + name: "Idratazione", + description: "Se piove, il Pokémon guarisce dai problemi di stato.", + }, + solarPower: { + name: "Solarpotere", + description: "Se la luce del sole è intensa, l'Attacco Speciale aumenta, ma il Pokémon perde PS a ogni turno.", + }, + quickFeet: { + name: "Piedisvelti", + description: "Se il Pokémon è affetto da un problema di stato, la Velocità aumenta.", + }, + normalize: { + name: "Normalità", + description: "Tutte le mosse del Pokémon diventano di tipo Normale e la loro potenza aumenta un po'.", + }, + sniper: { + name: "Cecchino", + description: "Aumenta ulteriormente i danni inflitti dai brutti colpi.", + }, + magicGuard: { + name: "Magicscudo", + description: "Il Pokémon subisce danni solo dagli attacchi.", + }, + noGuard: { + name: "Nullodifesa", + description: "Il Pokémon e chiunque lo attacchi abbassano la guardia e le loro mosse vanno sempre a segno.", + }, + stall: { + name: "Rallentatore", + description: "Il Pokémon agisce sempre per ultimo.", + }, + technician: { + name: "Tecnico", + description: "Potenzia le mosse più deboli del Pokémon.", + }, + leafGuard: { + name: "Fogliamanto", + description: "Se la luce del sole è intensa, evita i problemi di stato.", + }, + klutz: { + name: "Impaccio", + description: "Il Pokémon non può usare lo strumento che ha con sé.", + }, + moldBreaker: { + name: "Rompiforma", + description: "Quando il Pokémon attacca, ignora l'abilità del bersaglio se questa ha effetto sulle mosse.", + }, + superLuck: { + name: "Supersorte", + description: "L'incredibile fortuna del Pokémon aumenta la sua probabilità di infliggere brutti colpi.", + }, + aftermath: { + name: "Scoppio", + description: "Chi manda KO questo Pokémon con un attacco diretto subisce dei danni.", + }, + anticipation: { + name: "Presagio", + description: "Rivela se il nemico ha mosse pericolose.", + }, + forewarn: { + name: "Premonizione", + description: "Quando il Pokémon entra in campo, rivela una delle mosse del nemico.", + }, + unaware: { + name: "Imprudenza", + description: "Quando il Pokémon attacca, ignora le modifiche alle statistiche del nemico.", + }, + tintedLens: { + name: "Lentifumé", + description: "Permette alle mosse non molto efficaci di infliggere danni normalmente.", + }, + filter: { + name: "Filtro", + description: "Riduce i danni subiti dalle mosse superefficaci.", + }, + slowStart: { + name: "Lentoinizio", + description: "Dimezza per cinque turni l'Attacco e la Velocità.", + }, + scrappy: { + name: "Nervisaldi", + description: "Permette di colpire Pokémon di tipo Spettro con mosse di tipo Normale e Lotta.", + }, + stormDrain: { + name: "Acquascolo", + description: "Il Pokémon attira e neutralizza le mosse di tipo Acqua e fa aumentare il proprio Attacco Speciale.", + }, + iceBody: { + name: "Corpogelo", + description: "Se grandina, il Pokémon recupera PS.", + }, + solidRock: { + name: "Solidroccia", + description: "Riduce i danni subiti dalle mosse superefficaci.", + }, + snowWarning: { + name: "Scendineve", + description: "Quando il Pokémon entra in campo, causa l'inizio di una nevicata.", + }, + honeyGather: { + name: "Mielincetta", + description: "Il Pokémon può raccogliere del Miele alla fine della lotta.", + }, + frisk: { + name: "Indagine", + description: "Quando il Pokémon entra in campo, rivela lo strumento del nemico.", + }, + reckless: { + name: "Temerarietà", + description: "Potenzia le mosse che causano contraccolpo.", + }, + multitype: { + name: "Multitipo", + description: "Cambia il tipo del Pokémon a seconda della lastra o del Cristallo Z che ha con sé.", + }, + flowerGift: { + name: "Regalfiore", + description: "Se la luce del sole è intensa, aumenta l'Attacco e la Difesa Speciale del Pokémon e dei suoi alleati.", + }, + badDreams: { + name: "Sogniamari", + description: "Infligge danni ai nemici addormentati.", + }, + pickpocket: { + name: "Arraffalesto", + description: "Se il Pokémon viene colpito da un attacco diretto, ruba lo strumento di chi lo ha attaccato.", + }, + sheerForce: { + name: "Forzabruta", + description: "Aumenta la potenza delle mosse, ma ne annulla gli effetti aggiuntivi.", + }, + contrary: { + name: "Inversione", + description: "Le modifiche alle statistiche hanno effetto inverso: le statistiche aumentano quando dovrebbero diminuire e viceversa.", + }, + unnerve: { + name: "Agitazione", + description: "Il nemico viene intimidito e non può mangiare bacche.", + }, + defiant: { + name: "Agonismo", + description: "L'Attacco aumenta di molto quando le statistiche diminuiscono a causa di un nemico.", + }, + defeatist: { + name: "Sconforto", + description: "Quando i PS scendono a metà o meno, il Pokémon si scoraggia e l'Attacco e l'Attacco Speciale vengono dimezzati.", + }, + cursedBody: { + name: "Corpofunesto", + description: "Può bloccare la mossa subita dal Pokémon.", + }, + healer: { + name: "Curacuore", + description: "A volte cura i problemi di stato degli alleati.", + }, + friendGuard: { + name: "Amicoscudo", + description: "I danni inflitti agli alleati del Pokémon vengono ridotti.", + }, + weakArmor: { + name: "Sottilguscio", + description: "Se il Pokémon subisce danni da mosse fisiche, la Difesa diminuisce e la Velocità aumenta di molto.", + }, + heavyMetal: { + name: "Metalpesante", + description: "Raddoppia il peso del Pokémon.", + }, + lightMetal: { + name: "Metalleggero", + description: "Dimezza il peso del Pokémon.", + }, + multiscale: { + name: "Multisquame", + description: "Se i PS sono al massimo, riduce il danno subito.", + }, + toxicBoost: { + name: "Velenimpeto", + description: "Se il Pokémon è avvelenato, la potenza delle sue mosse fisiche aumenta.", + }, + flareBoost: { + name: "Bruciaimpeto", + description: "Se il Pokémon è scottato, la potenza delle sue mosse speciali aumenta.", + }, + harvest: { + name: "Coglibacche", + description: "Può ricreare una bacca utilizzata.", + }, + telepathy: { + name: "Telepatia", + description: "Il Pokémon prevede ed evita gli attacchi degli alleati.", + }, + moody: { + name: "Altalena", + description: "A ogni turno, aumenta di molto una statistica e ne riduce un'altra.", + }, + overcoat: { + name: "Copricapo", + description: "Rende immuni ai danni da grandine e tempesta di sabbia, alle mosse Spora, Cottonspora, Sonnifero, Paralizzante e alle mosse “polvere”.", + }, + poisonTouch: { + name: "Velentocco", + description: "Il Pokémon può avvelenare il nemico al solo contatto.", + }, + regenerator: { + name: "Rigenergia", + description: "Il Pokémon recupera un po' di PS quando lascia il campo.", + }, + bigPecks: { + name: "Pettinfuori", + description: "Evita che la Difesa diminuisca.", + }, + sandRush: { + name: "Remasabbia", + description: "Se c'è una tempesta di sabbia, la Velocità aumenta.", + }, + wonderSkin: { + name: "Splendicute", + description: "Il Pokémon resiste più facilmente alle mosse di stato.", + }, + analytic: { + name: "Ponderazione", + description: "Se il Pokémon agisce per ultimo, la potenza della mossa aumenta.", + }, + illusion: { + name: "Illusione", + description: "Il Pokémon entra in campo con le sembianze dell'ultimo Pokémon della squadra.", + }, + imposter: { + name: "Sosia", + description: "Il Pokémon si trasforma nel nemico che ha davanti.", + }, + infiltrator: { + name: "Intrapasso", + description: "Il Pokémon attacca evitando le barriere e il sostituto del nemico.", + }, + mummy: { + name: "Mummia", + description: "Al contatto con il Pokémon, l'abilità del nemico diventa Mummia.", + }, + moxie: { + name: "Arroganza", + description: "Quando manda un nemico KO, il Pokémon si fa sicuro di sé e aumenta il proprio Attacco.", + }, + justified: { + name: "Giustizia", + description: "Quando il Pokémon viene colpito da una mossa di tipo Buio, il suo forte senso di giustizia fa sì che l'Attacco aumenti.", + }, + rattled: { + name: "Paura", + description: "Le mosse di tipo Buio, Spettro e Coleottero spaventano il Pokémon aumentandone la Velocità.", + }, + magicBounce: { + name: "Magispecchio", + description: "Il Pokémon respinge al mittente le mosse di stato senza subirne gli effetti.", + }, + sapSipper: { + name: "Mangiaerba", + description: "Se il Pokémon viene colpito da una mossa di tipo Erba, la neutralizza e aumenta il proprio Attacco.", + }, + prankster: { + name: "Burla", + description: "Le mosse di stato del Pokémon acquistano priorità alta.", + }, + sandForce: { + name: "Silicoforza", + description: "Potenzia le mosse di tipo Roccia, Terra e Acciaio durante le tempeste di sabbia.", + }, + ironBarbs: { + name: "Spineferrate", + description: "Se il Pokémon viene colpito da un attacco diretto, infligge danni a sua volta con le sue spine di ferro.", + }, + zenMode: { + name: "Stato Zen", + description: "Cambia la forma del Pokémon se i PS scendono a metà o meno.", + }, + victoryStar: { + name: "Vittorstella", + description: "Aumenta la precisione di tutta la squadra.", + }, + turboblaze: { + name: "Piroturbina", + description: "Quando il Pokémon attacca, ignora l'abilità del bersaglio se questa ha effetto sulle mosse.", + }, + teravolt: { + name: "Teravolt", + description: "Quando il Pokémon attacca, ignora l'abilità del bersaglio se questa ha effetto sulle mosse.", + }, + aromaVeil: { + name: "Aromavelo", + description: "Protegge tutta la squadra da effetti che ne limitano la libertà di scelta delle mosse.", + }, + flowerVeil: { + name: "Fiorvelo", + description: "Rende gli alleati di tipo Erba immuni alla diminuzione delle statistiche e ai problemi di stato.", + }, + cheekPouch: { + name: "Guancegonfie", + description: "Quando il Pokémon mangia una bacca, recupera anche dei PS.", + }, + protean: { + name: "Mutatipo", + description: "Cambia il tipo del Pokémon in quello della mossa che usa.", + }, + furCoat: { + name: "Foltopelo", + description: "Dimezza il danno subito dalle mosse fisiche.", + }, + magician: { + name: "Prestigiatore", + description: "Quando chi la usa colpisce un Pokémon con una mossa, gli ruba lo strumento.", + }, + bulletproof: { + name: "Antiproiettile", + description: "Protegge da alcune mosse a base di proiettili e bombe.", + }, + competitive: { + name: "Tenacia", + description: "L'Attacco Speciale aumenta di molto quando le statistiche diminuiscono a causa di un nemico.", + }, + strongJaw: { + name: "Ferromascella", + description: "La robusta mascella del Pokémon permette morsi molto potenti.", + }, + refrigerate: { + name: "Pellegelo", + description: "Le mosse di tipo Normale diventano di tipo Ghiaccio e la loro potenza aumenta un po'.", + }, + sweetVeil: { + name: "Dolcevelo", + description: "Rende il Pokémon e i suoi alleati immuni al sonno.", + }, + stanceChange: { + name: "Accendilotta", + description: "Assume la Forma Spada se usa una mossa d'attacco e la Forma Scudo se usa Scudo Reale.", + }, + galeWings: { + name: "Aliraffica", + description: "Se il Pokémon ha tutti i PS, le sue mosse di tipo Volante acquistano priorità alta.", + }, + megaLauncher: { + name: "Megalancio", + description: 'Potenzia le mosse "pulsar", Forzasfera e Ondasana.', + }, + grassPelt: { + name: "Peloderba", + description: "In presenza di un Campo Erboso, la Difesa aumenta.", + }, + symbiosis: { + name: "Simbiosi", + description: "Se un alleato usa uno strumento, il Pokémon gli passa il proprio.", + }, + toughClaws: { + name: "Unghiedure", + description: "Potenzia le mosse che causano un contatto fisico.", + }, + pixilate: { + name: "Pellefolletto", + description: "Le mosse di tipo Normale diventano di tipo Folletto e la loro potenza aumenta un po'.", + }, + gooey: { + name: "Viscosità", + description: "Se il Pokémon viene colpito da un attacco diretto, la Velocità di chi l'ha colpito diminuisce.", + }, + aerilate: { + name: "Pellecielo", + description: "Le mosse di tipo Normale diventano di tipo Volante e la loro potenza aumenta un po'.", + }, + parentalBond: { + name: "Amorefiliale", + description: "Il Pokémon e il suo piccolo attaccano insieme.", + }, + darkAura: { + name: "Auratetra", + description: "Potenzia le mosse di tipo Buio di tutti i Pokémon.", + }, + fairyAura: { + name: "Aurafolletto", + description: "Potenzia le mosse di tipo Folletto di tutti i Pokémon.", + }, + auraBreak: { + name: "Frangiaura", + description: "Inverte gli effetti di tutte le aure riducendone la potenza.", + }, + primordialSea: { + name: "Mare Primordiale", + description: "Crea un clima che rende inefficaci gli attacchi di tipo Fuoco.", + }, + desolateLand: { + name: "Terra Estrema", + description: "Crea un clima che rende inefficaci gli attacchi di tipo Acqua.", + }, + deltaStream: { + name: "Flusso Delta", + description: "Crea un clima che annulla i punti deboli del tipo Volante.", + }, + stamina: { + name: "Sopportazione", + description: "Se il Pokémon subisce un attacco, la sua Difesa aumenta.", + }, + wimpOut: { + name: "Fuggifuggi", + description: "Se i PS scendono a metà o meno, il Pokémon si fa prendere dalla paura e abbandona la lotta in tutta fretta.", + }, + emergencyExit: { + name: "Passoindietro", + description: "Se i PS scendono a metà o meno, il Pokémon abbandona la lotta per sfuggire al pericolo.", + }, + waterCompaction: { + name: "Idrorinforzo", + description: "Se il Pokémon subisce una mossa di tipo Acqua, la sua Difesa aumenta di molto.", + }, + merciless: { + name: "Spietatezza", + description: "Gli attacchi sferrati su un bersaglio avvelenato producono sempre brutti colpi.", + }, + shieldsDown: { + name: "Scudosoglia", + description: "Se i PS scendono a metà o meno, il guscio si rompe e il Pokémon si prepara all'offensiva.", + }, + stakeout: { + name: "Sorveglianza", + description: "Raddoppia i danni inflitti a un bersaglio che è appena entrato in campo per sostituire un altro Pokémon.", + }, + waterBubble: { + name: "Bolladacqua", + description: "Riduce i danni subiti dalle mosse di tipo Fuoco e rende immuni alle scottature.", + }, + steelworker: { + name: "Tempracciaio", + description: "Aumenta la potenza delle mosse di tipo Acciaio.", + }, + berserk: { + name: "Furore", + description: "Se i PS scendono a metà o meno a causa di un attacco, l'Attacco Speciale aumenta.", + }, + slushRush: { + name: "Spalaneve", + description: "Se grandina, la Velocità aumenta.", + }, + longReach: { + name: "Distacco", + description: "Il Pokémon è in grado di usare tutte le sue mosse senza entrare in contatto diretto con il bersaglio.", + }, + liquidVoice: { + name: "Idrovoce", + description: "Le mosse del Pokémon basate sul suono diventano di tipo Acqua.", + }, + triage: { + name: "Primacura", + description: "Le mosse che ripristinano direttamente i PS del Pokémon acquistano priorità alta.", + }, + galvanize: { + name: "Pellelettro", + description: "Le mosse di tipo Normale diventano di tipo Elettro e la loro potenza aumenta un po'.", + }, + surgeSurfer: { + name: "Codasurf", + description: "In presenza di un Campo Elettrico, la Velocità raddoppia.", + }, + schooling: { + name: "Banco", + description: "Quando ha molti PS, il Pokémon forma un banco con i propri simili e si rafforza. Quando ne ha pochi, il banco si disperde.", + }, + disguise: { + name: "Fantasmanto", + description: "Il panno che ricopre il Pokémon lo protegge da un singolo attacco.", + }, + battleBond: { + name: "Morfosintonia", + description: "Se il Pokémon manda KO un nemico, il legame con l'Allenatore si rafforza, attivando la trasformazione in Greninja Forma Ash. Acqualame si potenzia.", + }, + powerConstruct: { + name: "Sciamefusione", + description: "Se i PS del Pokémon scendono a metà o meno, le cellule si raggruppano e gli permettono di assumere la Forma Perfetta.", + }, + corrosion: { + name: "Corrosione", + description: "Il Pokémon è in grado di avvelenare il bersaglio anche se questo è di tipo Acciaio o Veleno.", + }, + comatose: { + name: "Sonno Assoluto", + description: "Il Pokémon si trova in un costante stato di dormiveglia che gli impedisce di svegliarsi. Può attaccare anche da addormentato.", + }, + queenlyMajesty: { + name: "Regalità", + description: "L'aura di regalità del Pokémon impedisce al nemico di attaccarlo con mosse che hanno priorità alta.", + }, + innardsOut: { + name: "Espellinterno", + description: "Se il Pokémon viene mandato KO da un attacco, infligge a chi lo ha sferrato tanti danni quanti erano i suoi PS prima di ricevere il colpo.", + }, + dancer: { + name: "Sincrodanza", + description: "Permette al Pokémon di copiare immediatamente qualsiasi mossa basata sulla danza usata da un altro Pokémon in campo.", + }, + battery: { + name: "Batteria", + description: "Aumenta la potenza delle mosse speciali degli alleati.", + }, + fluffy: { + name: "Morbidone", + description: "Dimezza il danno causato dagli attacchi diretti di un nemico, ma raddoppia quello subito dalle mosse di tipo Fuoco.", + }, + dazzling: { + name: "Corposgargiante", + description: "Il Pokémon sbalordisce il nemico e non gli permette di attaccarlo con mosse che hanno priorità alta.", + }, + soulHeart: { + name: "Cuoreanima", + description: "Aumenta l'Attacco Speciale ogni volta che un Pokémon va KO.", + }, + tanglingHair: { + name: "Boccolidoro", + description: "Se il Pokémon viene colpito da un attacco diretto, la Velocità di chi l'ha colpito diminuisce.", + }, + receiver: { + name: "Ricezione", + description: "Il Pokémon acquisisce l'abilità di un alleato andato KO.", + }, + powerOfAlchemy: { + name: "Forza Chimica", + description: "Il Pokémon trasforma la propria abilità in quella di un alleato andato KO.", + }, + beastBoost: { + name: "Ultraboost", + description: "Quando il Pokémon manda KO un altro Pokémon, aumenta la propria statistica di punta.", + }, + rksSystem: { + name: "Sistema Primevo", + description: "Il tipo del Pokémon cambia in base alla ROM installata.", + }, + electricSurge: { + name: "Elettrogenesi", + description: "Quando il Pokémon entra in campo, lo trasforma in un Campo Elettrico.", + }, + psychicSurge: { + name: "Psicogenesi", + description: "Quando il Pokémon entra in campo, lo trasforma in un Campo Psichico.", + }, + mistySurge: { + name: "Nebbiogenesi", + description: "Quando il Pokémon entra in campo, lo trasforma in un Campo Nebbioso.", + }, + grassySurge: { + name: "Erbogenesi", + description: "Quando il Pokémon entra in campo, lo trasforma in un Campo Erboso.", + }, + fullMetalBody: { + name: "Metalprotezione", + description: "Impedisce la diminuzione delle statistiche causata da abilità o mosse di altri Pokémon.", + }, + shadowShield: { + name: "Spettroguardia", + description: "Se i PS sono al massimo, riduce il danno subito.", + }, + prismArmor: { + name: "Scudoprisma", + description: "Riduce i danni subiti dalle mosse superefficaci.", + }, + neuroforce: { + name: "Cerebroforza", + description: "Potenzia le mosse superefficaci.", + }, + intrepidSword: { + name: "Spada Indomita", + description: "Quando il Pokémon entra in campo, il suo Attacco aumenta.", + }, + dauntlessShield: { + name: "Scudo Saldo", + description: "Quando il Pokémon entra in campo, la sua Difesa aumenta.", + }, + libero: { + name: "Libero", + description: "Cambia il tipo del Pokémon in quello della mossa che usa.", + }, + ballFetch: { + name: "Raccattapalle", + description: "Se il Pokémon non ha uno strumento con sé, raccoglie la Poké Ball del primo tentativo di cattura fallito.", + }, + cottonDown: { + name: "Lanugine", + description: "Se il Pokémon subisce un attacco, sparge della lanugine che diminuisce la Velocità di tutti i Pokémon in campo tranne la sua.", + }, + propellerTail: { + name: "Elicopinna", + description: "Permette di ignorare gli effetti di mosse e abilità che attirano altre mosse.", + }, + mirrorArmor: { + name: "Blindospecchio", + description: "Rimanda al mittente le diminuzioni alle statistiche subite.", + }, + gulpMissile: { + name: "Inghiottimissile", + description: "Quando usa Surf o Sub, il Pokémon cattura una preda. Se subisce dei danni, la sputa fuori per attaccare.", + }, + stalwart: { + name: "Volontà di Ferro", + description: "Permette di ignorare gli effetti di mosse e abilità che attirano altre mosse.", + }, + steamEngine: { + name: "Vapormacchina", + description: "Se il Pokémon viene colpito da una mossa di tipo Acqua o Fuoco, la sua Velocità aumenta moltissimo.", + }, + punkRock: { + name: "Punk Rock", + description: "Aumenta la potenza delle mosse basate sul suono. Inoltre, dimezza i danni subiti dal Pokémon se viene colpito da tali mosse.", + }, + sandSpit: { + name: "Sputasabbia", + description: "Quando il Pokémon viene colpito da un attacco, scatena una tempesta di sabbia.", + }, + iceScales: { + name: "Geloscaglie", + description: "Scaglie di ghiaccio proteggono il Pokémon dalle mosse speciali, dimezzandone i danni subiti.", + }, + ripen: { + name: "Maturazione", + description: "Fa maturare le bacche raddoppiandone gli effetti.", + }, + iceFace: { + name: "Gelofaccia", + description: "Grazie al ghiaccio sulla testa, il Pokémon può incassare i danni causati da mosse fisiche, ma cambia forma. Torna al suo stato originale quando grandina.", + }, + powerSpot: { + name: "Fonte Energetica", + description: "Potenzia le mosse di chi si trova nelle immediate vicinanze.", + }, + mimicry: { + name: "Mimetismo", + description: "Il tipo del Pokémon cambia a seconda dello stato del campo.", + }, + screenCleaner: { + name: "Annullabarriere", + description: "Quando il Pokémon entra in campo, annulla l'effetto di Schermoluce, Riflesso e Velaurora sia per i nemici che per gli alleati.", + }, + steelySpirit: { + name: "Spiritoferreo", + description: "Potenzia gli attacchi di tipo Acciaio degli alleati.", + }, + perishBody: { + name: "Ultimotocco", + description: "Se il Pokémon viene colpito da un attacco diretto, dopo tre turni va KO assieme a chi lo ha attaccato. Se uno dei due viene sostituito, non va KO.", + }, + wanderingSpirit: { + name: "Anima Errante", + description: "Se il Pokémon subisce un attacco diretto, scambia la sua abilità con quella di chi lo ha colpito.", + }, + gorillaTactics: { + name: "Vigorilla", + description: "Aumenta l'Attacco ma costringe il Pokémon a usare solo la prima mossa selezionata.", + }, + neutralizingGas: { + name: "Gas Reagente", + description: "Se in campo c'è un Pokémon con Gas Reagente, gli effetti delle abilità di tutti gli altri Pokémon vengono annullati o non si attivano.", + }, + pastelVeil: { + name: "Pastelvelo", + description: "Protegge il Pokémon e gli alleati dai problemi di stato causati dal veleno.", + }, + hungerSwitch: { + name: "Pancialterna", + description: "Alla fine di ogni turno cambia forma, alternando tra Motivo Panciapiena e Motivo Panciavuota.", + }, + quickDraw: { + name: "Pugni Invisibili", + description: "Quando il Pokémon utilizza un attacco diretto, gli effetti di mosse protettive vengono ignorati.", + }, + unseenFist: { + name: "Colpolesto", + description: "A volte permette al Pokémon di agire per primo.", + }, + curiousMedicine: { + name: "Stranofarmaco", + description: "Quando il Pokémon entra in campo, sparge un farmaco dalla conchiglia che annulla le modifiche alle statistiche degli alleati.", + }, + transistor: { + name: "Transistor", + description: "Potenzia le mosse di tipo Elettro.", + }, + dragonsMaw: { + name: "Dragomascelle", + description: "Potenzia le mosse di tipo Drago.", + }, + chillingNeigh: { + name: "Nitrito Bianco", + description: "Quando manda KO il nemico, emette un nitrito agghiacciante, aumentando il proprio Attacco.", + }, + grimNeigh: { + name: "Nitrito Nero", + description: "Quando manda KO il nemico, emette un nitrito spettrale, aumentando il proprio Attacco Speciale.", + }, + asOneGlastrier: { + name: "Sintonia Equina", + description: "Il Pokémon ha una doppia abilità: Agitazione di Calyrex e Nitrito Bianco di Glastrier", + }, + asOneSpectrier: { + name: "Sintonia Equina", + description: "Il Pokémon ha una doppia abilità: Agitazione di Calyrex e Nitrito Nero di Spectrier.", + }, + lingeringAroma: { + name: "Odore Tenace", + description: "L'abilità di chi entra in contatto con il Pokémon diventa Odore Tenace.", + }, + seedSower: { + name: "Spargisemi", + description: "Se il Pokémon subisce un attacco, il terreno entra nello stato di Campo Erboso.", + }, + thermalExchange: { + name: "Termoscambio", + description: "Impedisce al Pokémon di venire scottato e aumenta il suo Attacco se subisce una mossa di tipo Fuoco.", + }, + angerShell: { + name: "Iraguscio", + description: "Se un attacco subìto porta i PS a metà o meno, la rabbia del Pokémon ne riduce la Difesa e la Difesa Speciale ma ne aumenta l'Attacco, l'Attacco Speciale e la Velocità.", + }, + purifyingSalt: { + name: "Sale Purificante", + description: "Protegge il Pokémon dai problemi di stato e dimezza il danno causato dalle mosse di tipo Spettro.", + }, + wellBakedBody: { + name: "Bentostato", + description: "Se il Pokémon viene colpito da una mossa di tipo Fuoco, la neutralizza e aumenta di molto la propria Difesa.", + }, + windRider: { + name: "Vento Propizio", + description: "L'Attacco aumenta se vengono usate mosse come Ventoincoda o se il Pokémon è colpito da una mossa basata sul vento, che viene inoltre neutralizzata.", + }, + guardDog: { + name: "Cane da Guardia", + description: "Il Pokémon resiste a strumenti e mosse che causano la sostituzione. Se subisce l'effetto di Prepotenza, il suo Attacco aumenta.", + }, + rockyPayload: { + name: "Portamassi", + description: "Aumenta la potenza delle mosse di tipo Roccia.", + }, + windPower: { + name: "Energia Eolica", + description: "Se il Pokémon è esposto a una mossa basata sul vento, si carica di elettricità.", + }, + zeroToHero: { + name: "Supercambio", + description: "Se il Pokémon lascia il campo, assume la Forma Possente.", + }, + commander: { + name: "Torre di Comando", + description: "Quando il Pokémon entra in campo ed è presente un Dondozo alleato, si ficca nella bocca di quest'ultimo e da lì impartisce ordini.", + }, + electromorphosis: { + name: "Convertivolt", + description: "Se il Pokémon subisce danni, si carica di elettricità.", + }, + protosynthesis: { + name: "Paleoattivazione", + description: "Quando il Pokémon ha con sé una Capsula energetica o la luce solare è intensa, la sua statistica più alta aumenta.", + }, + quarkDrive: { + name: "Carica Quark", + description: "Quando il Pokémon ha con sé una Capsula energetica o è in presenza di un Campo Elettrico, la sua statistica più alta aumenta.", + }, + goodAsGold: { + name: "Corpo Aureo", + description: "Grazie al robusto e inossidabile corpo d'oro, il Pokémon è immune alle mosse di stato sferrate da altri.", + }, + vesselOfRuin: { + name: "Vaso Nefasto", + description: "L'Attacco Speciale degli altri Pokémon viene indebolito dal potere del vaso che richiama le disgrazie.", + }, + swordOfRuin: { + name: "Spada Nefasta", + description: "La Difesa degli altri Pokémon viene indebolita dal potere della spada che richiama le disgrazie.", + }, + tabletsOfRuin: { + name: "Amuleto Nefasto", + description: "L'Attacco degli altri Pokémon viene indebolito dal potere delle tavolette che richiamano le disgrazie.", + }, + beadsOfRuin: { + name: "Monile Nefasto", + description: "La Difesa Speciale degli altri Pokémon viene indebolita dal potere dei gioielli che richiamano le disgrazie.", + }, + orichalcumPulse: { + name: "Ritmo d'Oricalco", + description: "Quando il Pokémon entra in campo, la luce solare diventa intensa. Con la luce solare intensa l'Attacco del Pokémon aumenta grazie al battito dell'antichità.", + }, + hadronEngine: { + name: "Motore Adronico", + description: "Quando il Pokémon entra in campo, il terreno entra nello stato di Campo Elettrico. In presenza di Campo Elettrico l'Attacco Speciale aumenta grazie al motore del futuro.", + }, + opportunist: { + name: "Scrocco", + description: "Quando la statistica di un avversario viene aumentata, il Pokémon se ne approfitta e aumenta anche la propria.", + }, + cudChew: { + name: "Ruminante", + description: "Se il Pokémon mangia una bacca, alla fine del turno successivo questa risale dal suo stomaco per essere mangiata una seconda volta.", + }, + sharpness: { + name: "Affilama", + description: "Aumenta la potenza delle mosse che tagliano il bersaglio.", + }, + supremeOverlord: { + name: "Generale Supremo", + description: "Quando il Pokémon entra in campo, il suo Attacco e il suo Attacco Speciale aumentano un po' per ciascuno dei suoi compagni di squadra andati KO.", + }, + costar: { + name: "Coprotagonismo", + description: "Quando il Pokémon entra in campo, copia le modifiche alle statistiche dell'alleato.", + }, + toxicDebris: { + name: "Mantossina", + description: "Se il Pokémon subisce danni da mosse fisiche, piazza ai piedi degli avversari una trappola di punte velenose.", + }, + armorTail: { + name: "Codarmatura", + description: "La misteriosa coda che avvolge la testa del Pokémon impedisce agli avversari di usare mosse che hanno priorità alta contro di lui o i suoi alleati.", + }, + earthEater: { + name: "Mangiaterra", + description: "Se il Pokémon viene colpito da una mossa di tipo Terra, recupera PS anziché subire danni.", + }, + myceliumMight: { + name: "Micoforza", + description: "Quando usa mosse di stato, il Pokémon agisce più lentamente, ma ignora l'abilità del bersaglio se questa ha effetto su tali mosse.", + }, + mindsEye: { + name: "Ospitalità", + description: "Quando un Pokémon con questa abilità entra in campo ricopre di attenzioni l'alleato, restituendogli un po' dei suoi PS.", + }, + supersweetSyrup: { + name: "Occhio Interiore", + description: "Permette di colpire bersagli di tipo Spettro con mosse di tipo Normale e Lotta, di ignorare modifiche alla loro elusione e di non veder ridotta la propria precisione.", + }, + hospitality: { + name: "Albergamemorie", + description: "Il Pokémon riporta alla mente vecchi ricordi, facendo risplendere la Maschera Turchese e aumentando la propria Velocità.", + }, + toxicChain: { + name: "Albergamemorie", + description: "Il Pokémon riporta alla mente vecchi ricordi, facendo risplendere la Maschera Pozzo e aumentando la propria Difesa Speciale.", + }, + embodyAspectTeal: { + name: "Albergamemorie", + description: "Il Pokémon riporta alla mente vecchi ricordi, facendo risplendere la Maschera Focolare e aumentando il proprio Attacco.", + }, + embodyAspectWellspring: { + name: "Albergamemorie", + description: "Il Pokémon riporta alla mente vecchi ricordi, facendo risplendere la Maschera Fondamenta e aumentando la propria Difesa.", + }, + embodyAspectHearthflame: { + name: "Catena Tossica", + description: "Quando il Pokémon colpisce il bersaglio con una mossa, può iperavvelenarlo grazie al potere della catena intrisa di tossine.", + }, + embodyAspectCornerstone: { + name: "Sciroppo Sublime", + description: "La prima volta che il Pokémon entra in campo, spande un odore dolciastro che diminuisce l'elusione degli avversari.", + }, + teraShift: { + name: "Teramorfosi", + description: "Quando il Pokémon entra in campo, assorbe l'energia circostante e assume la Forma Teracristal.", + }, + teraShell: { + name: "Teraguscio", + description: "Grazie al suo guscio che racchiude il potere di tutti i tipi, se il Pokémon ha tutti i PS, le mosse che subisce non saranno molto efficaci.", + }, + teraformZero: { + name: "Zeroformazione", + description: "Quando assume la Forma Astrale, Terapagos azzera tutti gli effetti delle condizioni atmosferiche e lo stato del terreno di lotta grazie al suo potere occulto.", + }, + poisonPuppeteer: { + name: " Malia Tossica", + description: "I Pokémon avvelenati dalle mosse di Pecharunt entreranno anche in stato di confusione.", + }, +} as const; diff --git a/src/locales/it/battle.ts b/src/locales/it/battle.ts new file mode 100644 index 000000000..247e6e38e --- /dev/null +++ b/src/locales/it/battle.ts @@ -0,0 +1,53 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "{{bossName}} è apparso.", + "trainerAppeared": "{{trainerName}}\nvuole combattere!", + "singleWildAppeared": "Appare {{pokemonName}} selvatico!", + "multiWildAppeared": "Appaiono {{pokemonName1}}\ne {{pokemonName2}} salvatici!", + "playerComeBack": "Rientra, {{pokemonName}}!", + "trainerComeBack": "{{trainerName}} ha ritirato {{pokemonName}}!", + "playerGo": "Vai! {{pokemonName}}!", + "trainerGo": "{{trainerName}} manda in campo {{pokemonName}}!", + "switchQuestion": "Vuoi cambiare\n{{pokemonName}}?", + "trainerDefeated": `Hai sconfitto\n{{trainerName}}!`, + "pokemonCaught": "Preso! {{pokemonName}} è stato catturato!", + "pokemon": "Pokémon", + "sendOutPokemon": "Vai! {{pokemonName}}!", + "hitResultCriticalHit": "Brutto colpo!", + "hitResultSuperEffective": "È superefficace!", + "hitResultNotVeryEffective": "Non è molto efficace…", + "hitResultNoEffect": "Non ha effetto su {{pokemonName}}!", + "hitResultOneHitKO": "KO con un colpo!", + "attackFailed": "Ma ha fallito!", + "attackHitsCount": `Colpito {{count}} volta/e!`, + "expGain": "{{pokemonName}} ha guadagnato\n{{exp}} Punti Esperienza!", + "levelUp": "{{pokemonName}} è salito al \nlivello {{level}}!", + "learnMove": "{{pokemonName}} impara \n{{moveName}}!", + "learnMovePrompt": "{{pokemonName}} vorrebbe imparare\n{{moveName}}.", + "learnMoveLimitReached": "Tuttavia, {{pokemonName}} \nconosce già quattro mosse.", + "learnMoveReplaceQuestion": "Vuoi che ne dimentichi una e al suo \nposto la sostituisca con {{moveName}}?", + "learnMoveStopTeaching": "Vuoi smettere di fargli imparare \n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} non ha imparato\n{{moveName}}.", + "learnMoveForgetQuestion": "Quale mossa deve dimenticare?", + "learnMoveForgetSuccess": "{{pokemonName}} ha dimenticato la mossa\n{{moveName}}.", + "levelCapUp": "Il livello massimo\nè aumentato a {{levelCap}}!", + "moveNotImplemented": "{{moveName}} non è ancora implementata e non può essere selezionata.", + "moveNoPP": "Non ci sono PP rimanenti\nper questa mossa!", + "moveDisabled": "{{moveName}} è disabilitata!", + "noPokeballForce": "Una forza misteriosa\nimpedisce l'uso dell Poké Ball.", + "noPokeballTrainer": "Non puoi catturare\nPokémon di altri allenatori!", + "noPokeballMulti": "Puoi lanciare una Poké Ball\nquando rimane un solo Pokémon!", + "noPokeballStrong": "Il Pokémon avversario è troppo forte per essere catturato!\nDevi prima indebolirlo!", + "noEscapeForce": "Una forza misteriosa\nimpedisce la fuga.", + "noEscapeTrainer": "Non puoi sottrarti\nalla lotta con un'allenatore!", + "noEscapePokemon": "{{moveName}} di {{pokemonName}}\npreviene la {{escapeVerb}}!", + "runAwaySuccess": "Scampato pericolo!", + "runAwayCannotEscape": 'Non puoi fuggire!', + "escapeVerbSwitch": "cambiando", + "escapeVerbFlee": "fuggendo", + "notDisabled": "{{moveName}} non è più\ndisabilitata!", + "skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?", + "eggHatching": "Oh?", + "ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/it/command-ui-handler.ts b/src/locales/it/command-ui-handler.ts new file mode 100644 index 000000000..54af8f766 --- /dev/null +++ b/src/locales/it/command-ui-handler.ts @@ -0,0 +1,9 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const commandUiHandler: SimpleTranslationEntries = { + "fight": "Lotta", + "ball": "Borsa", + "pokemon": "Pokémon", + "run": "Fuga", + "actionMessage": "Cosa deve fare {{pokemonName}}?", +} as const; \ No newline at end of file diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts new file mode 100644 index 000000000..af394bd64 --- /dev/null +++ b/src/locales/it/config.ts @@ -0,0 +1,28 @@ +import { ability } from "./ability"; +import { battle } from "./battle"; +import { commandUiHandler } from "./command-ui-handler"; +import { fightUiHandler } from "./fight-ui-handler"; +import { menu } from "./menu"; +import { menuUiHandler } from "./menu-ui-handler"; +import { move } from "./move"; +import { pokeball } from "./pokeball"; +import { pokemon } from "./pokemon"; +import { pokemonStat } from "./pokemon-stat"; +import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { tutorial } from "./tutorial"; + + +export const itConfig = { + ability: ability, + battle: battle, + commandUiHandler: commandUiHandler, + fightUiHandler: fightUiHandler, + menuUiHandler: menuUiHandler, + menu: menu, + move: move, + pokeball: pokeball, + pokemonStat: pokemonStat, + pokemon: pokemon, + starterSelectUiHandler: starterSelectUiHandler, + tutorial: tutorial +} \ No newline at end of file diff --git a/src/locales/it/fight-ui-handler.ts b/src/locales/it/fight-ui-handler.ts new file mode 100644 index 000000000..0743e382c --- /dev/null +++ b/src/locales/it/fight-ui-handler.ts @@ -0,0 +1,6 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const fightUiHandler: SimpleTranslationEntries = { + "pp": "PP", + "power": "POTENZA", +} as const; \ No newline at end of file diff --git a/src/locales/it/menu-ui-handler.ts b/src/locales/it/menu-ui-handler.ts index 5fde37ae3..9def62d8d 100644 --- a/src/locales/it/menu-ui-handler.ts +++ b/src/locales/it/menu-ui-handler.ts @@ -1,23 +1,23 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const menuUiHandler: SimpleTranslationEntries = { - "GAME_SETTINGS": 'Game Settings', - "ACHIEVEMENTS": "Achievements", - "STATS": "Stats", - "VOUCHERS": "Vouchers", - "EGG_LIST": "Egg List", - "EGG_GACHA": "Egg Gacha", - "MANAGE_DATA": "Manage Data", + "GAME_SETTINGS": 'Impostazioni', + "ACHIEVEMENTS": "Risultati", + "STATS": "Statistiche", + "VOUCHERS": "Biglietti", + "EGG_LIST": "Lista Uova", + "EGG_GACHA": "Gacha Uova", + "MANAGE_DATA": "Gestisci Dati", "COMMUNITY": "Community", - "RETURN_TO_TITLE": "Return To Title", - "LOG_OUT": "Log Out", + "RETURN_TO_TITLE": "Ritorna al Titolo", + "LOG_OUT": "Disconnettiti", "slot": "Slot {{slotNumber}}", - "importSession": "Import Session", - "importSlotSelect": "Select a slot to import to.", - "exportSession": "Export Session", - "exportSlotSelect": "Select a slot to export from.", - "importData": "Import Data", - "exportData": "Export Data", - "cancel": "Cancel", - "losingProgressionWarning": "You will lose any progress since the beginning of the battle. Proceed?" + "importSession": "Importa Sessione", + "importSlotSelect": "Seleziona uno slot in cui importare.", + "exportSession": "Esporta Sessione", + "exportSlotSelect": "Seleziona uno slot da cui esportare.", + "importData": "Importa Dati", + "exportData": "Esporta Dati", + "cancel": "Annulla", + "losingProgressionWarning": "Perderai tutti i progressi dall'inizio della battaglia. Procedere?" } as const; \ No newline at end of file diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index c37a37b51..1344b21cc 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -1,5 +1,10 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; +/** + * The menu namespace holds most miscellaneous text that isn't directly part of the game's + * contents or directly related to Pokemon data. This includes menu navigation, settings, + * account interactions, descriptive text, etc. + */ export const menu: SimpleTranslationEntries = { "cancel": "Annulla", "continue": "Continua", @@ -7,9 +12,35 @@ export const menu: SimpleTranslationEntries = { "loadGame": "Carica Partita", "dailyRun": "Corsa Giornaliera (Beta)", "selectGameMode": "Seleziona una modalità di gioco.", - "dailyRankings": "Daily Rankings", - "weeklyRankings": "Weekly Rankings", - "noRankings": "No Rankings", - "loading": "Loading…", - "playersOnline": "Players Online" + "logInOrCreateAccount": "Accedi o crea un nuovo account per iniziare. Non è richiesta un'email!", + "username": "Nome Utente", + "password": "Password", + "login": "Accedi", + "register": "Registrati", + "emptyUsername": "Nome utente mancante!", + "invalidLoginUsername": "Nome utente non valido!", + "invalidRegisterUsername": "Il nome utente può contenere solo lettere, numeri o trattini bassi", + "invalidLoginPassword": "Password non valida!", + "invalidRegisterPassword": "La password deve contenere almeno 6 caratteri", + "usernameAlreadyUsed": "Il nome utente inserito è stato già utilizzato!", + "accountNonExistent": "Account inesistente!", + "unmatchingPassword": "La password inserita non è corretta!", + "passwordNotMatchingConfirmPassword": "La password deve essere uguale alla conferma password!", + "confirmPassword": "Conferma Password", + "registrationAgeWarning": "Registrandoti confermi di avere 13 anni o più.", + "backToLogin": "Torna all'accesso", + "failedToLoadSaveData": "Impossibile caricare i dati di salvataggio. Ricarica la pagina.\nSe il problema persiste, contatta l'amministratore.", + "sessionSuccess": "Sessione caricata correttamente.", + "failedToLoadSession": "Impossibile caricare i dati della sessione.\nPotrebbero essere danneggiati.", + "boyOrGirl": "Sei un ragazzo o una ragazza?", + "boy": "Ragazzo", + "girl": "Ragazza", + "dailyRankings": "Classifica Giornaliera", + "weeklyRankings": "Classifica Settimanale", + "noRankings": "Nessuna Classifica", + "loading": "Caricamento…", + "playersOnline": "Giocatori Online", + "empty":"Vuoto", + "yes":"Si", + "no":"No", } as const; \ No newline at end of file diff --git a/src/locales/it/move.ts b/src/locales/it/move.ts new file mode 100644 index 000000000..116a14b5d --- /dev/null +++ b/src/locales/it/move.ts @@ -0,0 +1,3812 @@ +import { MoveTranslationEntries } from "#app/plugins/i18n"; + +export const move: MoveTranslationEntries = { + pound: { + name: "Botta", + effect: "Colpisce il nemico con la coda o le zampe anteriori.", + }, + karateChop: { + name: "Colpokarate", + effect: "Colpisce il nemico con un colpo netto. Probabile brutto colpo.", + }, + doubleSlap: { + name: "Doppiasberla", + effect: "Schiaffeggia il nemico da due a cinque volte di fila.", + }, + cometPunch: { + name: "Cometapugno", + effect: "Colpisce il nemico con una scarica di pugni da due a cinque volte di fila.", + }, + megaPunch: { + name: "Megapugno", + effect: "Colpisce il nemico con un pugno poderoso.", + }, + payDay: { + name: "Giornopaga", + effect: "Colpisce il nemico con una gran quantità di monete recuperabili dopo la lotta.", + }, + firePunch: { + name: "Fuocopugno", + effect: "Colpisce il nemico con un pugno ardente che può scottarlo.", + }, + icePunch: { + name: "Gelopugno", + effect: "Colpisce il nemico con un pugno di ghiaccio che può congelarlo.", + }, + thunderPunch: { + name: "Tuonopugno", + effect: "Colpisce il nemico con un pugno elettrico che può paralizzarlo.", + }, + scratch: { + name: "Graffio", + effect: "Infligge danni al nemico con artigli acuminati, duri e affilati.", + }, + viseGrip: { + name: "Presa", + effect: "Stringe il nemico in una morsa usando enormi e possenti tenaglie.", + }, + guillotine: { + name: "Ghigliottina", + effect: "Attacca il nemico con pericolose tenaglie. Se l'attacco va a segno, il nemico va subito KO.", + }, + razorWind: { + name: "Ventagliente", + effect: "Chi la usa genera un turbine al primo turno e attacca al secondo. Probabile brutto colpo.", + }, + swordsDance: { + name: "Danzaspada", + effect: "Danza frenetica che incrementa lo spirito combattivo. Chi la usa aumenta di molto il suo Attacco.", + }, + cut: { + name: "Taglio", + effect: "Attacca il nemico con artigli o falci affilate. Fuori dalla lotta si usa per tagliare piccoli alberi.", + }, + gust: { + name: "Raffica", + effect: "Infligge danni al nemico con una folata di vento sollevata dalle ali.", + }, + wingAttack: { + name: "Attacco d'Ala", + effect: "Infligge danni al nemico spiegando delle grandi ali possenti.", + }, + whirlwind: { + name: "Turbine", + effect: "Il bersaglio è spazzato via ed è costretto a lasciare il posto ad un altro. Se è selvatico, la lotta finisce.", + }, + fly: { + name: "Volo", + effect: "Chi la usa si alza in volo per attaccare al turno seguente. Fuori dalla lotta permette di volare in città già visitate.", + }, + bind: { + name: "Legatutto", + effect: "Lega e stritola il nemico per quattro o cinque turni con tentacoli o con un corpo lungo.", + }, + slam: { + name: "Schianto", + effect: "Infligge danni al nemico con una coda, una liana o simili.", + }, + vineWhip: { + name: "Frustata", + effect: "Infligge danni al nemico con liane sottili simili a fruste.", + }, + stomp: { + name: "Pestone", + effect: "Colpisce il nemico con un grosso piede e può anche farlo tentennare.", + }, + doubleKick: { + name: "Doppiocalcio", + effect: "Colpisce il nemico due volte con un paio di rapidi calci inferti con entrambi i piedi.", + }, + megaKick: { + name: "Megacalcio", + effect: "Colpisce il nemico con un calcio sferrato con la forza di muscoli poderosi.", + }, + jumpKick: { + name: "Calciosalto", + effect: "Permette di saltare in alto per attaccare con un calcio. Se non va a buon fine, chi la usa si ferisce.", + }, + rollingKick: { + name: "Calciorullo", + effect: "Chi la usa infierisce sul nemico con un calcio rotante. Può anche farlo tentennare.", + }, + sandAttack: { + name: "Turbosabbia", + effect: "Getta sabbia in faccia al nemico e ne riduce la precisione.", + }, + headbutt: { + name: "Bottintesta", + effect: "Chi la usa si lancia diritto di testa contro il nemico. Può anche far tentennare.", + }, + hornAttack: { + name: "Incornata", + effect: "Danneggia il nemico infilzandolo con un corno affilato.", + }, + furyAttack: { + name: "Furia", + effect: "Infilza il nemico con corna affilate o un becco da due a cinque volte di fila.", + }, + hornDrill: { + name: "Perforcorno", + effect: "Colpisce il nemico con un corno perforante come un trapano. Se il colpo va a segno, il nemico va KO.", + }, + tackle: { + name: "Azione", + effect: "Attacco fisico che colpisce il nemico investendolo con tutto il corpo.", + }, + bodySlam: { + name: "Corposcontro", + effect: "Chi la usa carica il nemico con tutto il corpo. Può causarne anche la paralisi.", + }, + wrap: { + name: "Avvolgibotta", + effect: "Avvolge e stritola il nemico con un corpo lungo o con piante rampicanti per quattro o cinque turni.", + }, + takeDown: { + name: "Riduttore", + effect: "Carica spericolata con tutto il corpo contro il nemico. Danneggia un po' anche chi la usa.", + }, + thrash: { + name: "Colpo", + effect: "Assale e attacca il nemico per due o tre turni, ma confonde chi la usa.", + }, + doubleEdge: { + name: "Sdoppiatore", + effect: "Carica spietata e pericolosa che danneggia molto anche chi la usa.", + }, + tailWhip: { + name: "Colpocoda", + effect: "Chi la usa agita la coda per distrarre i nemici, riducendone la Difesa.", + }, + poisonSting: { + name: "Velenospina", + effect: "Colpisce il nemico con un aculeo tossico che può anche avvelenarlo.", + }, + twineedle: { + name: "Doppio Ago", + effect: "Colpisce il nemico due volte di seguito con un paio di aghi. Può anche avvelenarlo.", + }, + pinMissile: { + name: "Missilspillo", + effect: "Il nemico viene colpito da due a cinque volte con spilli appuntiti in rapida successione.", + }, + leer: { + name: "Fulmisguardo", + effect: "Il nemico viene guardato con sguardo intimidatorio da occhi acuti. Viene ridotta la difesa dell'avversario.", + }, + bite: { + name: "Morso", + effect: "Il nemico viene morso da denti affilatissimi che possono farlo tentennare.", + }, + growl: { + name: "Ruggito", + effect: "Il Pokémon ruggisce con cattiveria. Viene ridotto l'attacco dell'avversario.", + }, + roar: { + name: "Boato", + effect: "Il bersaglio è costretto a lasciare il campo e viene sostituito. Mette fine alle lotte contro Pokémon selvatici.", + }, + sing: { + name: "Canto", + effect: "Una ninna nanna è cantata con voce calma per far addormentare il nemico.", + }, + supersonic: { + name: "Supersuono", + effect: "Chi la usa genera dal proprio corpo strane onde acustiche che possono confondere il nemico.", + }, + sonicBoom: { + name: "Sonicboom", + effect: "Il nemico viene colpito con un suono distruttivo che infligge un danno sempre 20 PS.", + }, + disable: { + name: "Inibitore", + effect: "Per quattro turni impedisce al bersaglio di riutilizzare l'ultima mossa usata.", + }, + acid: { + name: "Acido", + effect: "Colpisce i nemici intorno spruzzando un acido corrosivo. Può anche ridurne la Difesa Speciale.", + }, + ember: { + name: "Braciere", + effect: "Il Pokémon attacca con piccole fiamme. Possono scottare il nemico.", + }, + flamethrower: { + name: "Lanciafiamme", + effect: "Il nemico viene colpito da intense fiammate che possono anche scottarlo.", + }, + mist: { + name: "Nebbia", + effect: "Chi la usa attira una nebbia che blocca la riduzione alle statistiche della sua squadra per cinque turni.", + }, + waterGun: { + name: "Pistolacqua", + effect: "Il nemico è colpito da un potente getto d'acqua.", + }, + hydroPump: { + name: "Idropompa", + effect: "Il nemico è travolto da un potente getto d'acqua spruzzato ad altissima pressione.", + }, + surf: { + name: "Surf", + effect: "Un'onda enorme sommerge il campo di lotta. Fuori dalla lotta si usa per spostarsi sull'acqua.", + }, + iceBeam: { + name: "Geloraggio", + effect: "Il nemico è colpito da un raggio di energia gelida che può anche congelarlo.", + }, + blizzard: { + name: "Bora", + effect: "Colpisce i bersagli con una tremenda tempesta di ghiaccio che può anche congelarli.", + }, + psybeam: { + name: "Psicoraggio", + effect: "Il nemico è attaccato con un raggio psichico. Può anche lasciare il nemico confuso.", + }, + bubbleBeam: { + name: "Bollaraggio", + effect: "Colpisce il nemico con una forte scarica di bolle. Può anche ridurne la Velocità.", + }, + auroraBeam: { + name: "Raggiaurora", + effect: "Il nemico viene colpito da un fascio color arcobaleno. Può ridurre l'attacco dell'avversario.", + }, + hyperBeam: { + name: "Iper Raggio", + effect: "Colpisce il nemico con un potente raggio. Chi la usa salta il turno successivo per recuperare energia.", + }, + peck: { + name: "Beccata", + effect: "Colpisce il nemico con un becco appuntito o un corno.", + }, + drillPeck: { + name: "Perforbecco", + effect: "Attacco a spirale con un becco aguzzo che fa da trapano.", + }, + submission: { + name: "Sottomissione", + effect: "Chi la usa carica il nemico in modo spericolato, ma danneggia anche se stesso.", + }, + lowKick: { + name: "Colpo Basso", + effect: "Un calcio basso e potente che fa cadere il nemico. Danneggia maggiormente i nemici più pesanti.", + }, + counter: { + name: "Contrattacco", + effect: "Una mossa di ritorsione che contrasta qualsiasi attacco fisico, infliggendo il doppio dei danni subiti.", + }, + seismicToss: { + name: "Movimento Sismico", + effect: "Colpisce il bersaglio con la forza di gravità. Infligge un danno pari al livello di chi la usa.", + }, + strength: { + name: "Forza", + effect: "Colpisce il nemico con un'enorme energia. Fuori dalla lotta si usa per spostare i massi.", + }, + absorb: { + name: "Assorbimento", + effect: "Mossa che assorbe PS. Chi la usa recupera una quantità di PS pari alla metà del danno inferto.", + }, + megaDrain: { + name: "Megassorbimento", + effect: "Mossa che assorbe PS. Chi la usa recupera un quantità di PS pari alla metà del danno inferto.", + }, + leechSeed: { + name: "Parassiseme", + effect: "Vengono piantati semi sul bersaglio. Questi sottraggono PS a ogni turno permettendo a chi la usa di curarsi.", + }, + growth: { + name: "Crescita", + effect: "Provoca la crescita immediata del corpo e l'aumento dell'Attacco e dell'Attacco Speciale di chi la usa.", + }, + razorLeaf: { + name: "Foglielama", + effect: "Foglie taglienti sferzano i nemici intorno. Probabile brutto colpo.", + }, + solarBeam: { + name: "Solarraggio", + effect: "Chi la usa assorbe luce al primo turno per proiettare un raggio intenso al turno successivo.", + }, + poisonPowder: { + name: "Velenpolvere", + effect: "Una nube di polvere velenosa è sparsa sul nemico. Può avvelenare il bersaglio.", + }, + stunSpore: { + name: "Paralizzante", + effect: "Investe il bersaglio con una nuvola di polvere che paralizza.", + }, + sleepPowder: { + name: "Sonnifero", + effect: "Investe il bersaglio con una grande nuvola di polvere soporifera che lo fa addormentare.", + }, + petalDance: { + name: "Petalodanza", + effect: "Attacca il nemico cospargendolo di petali per due o tre turni, ma chi la usa rimane confuso.", + }, + stringShot: { + name: "Millebave", + effect: "Chi la usa produce della seta che avvolge i nemici e ne riduce la Velocità.", + }, + dragonRage: { + name: "Ira di Drago", + effect: "Colpisce il nemico con un'onda d'urto generata dall'ira. Questo attacco provoca sempre un danno di 40 PS.", + }, + fireSpin: { + name: "Turbofuoco", + effect: "Intrappola il bersaglio in un turbine di fuoco che dura per quattro o cinque turni.", + }, + thunderShock: { + name: "Tuonoshock", + effect: "Danneggia il bersaglio con una scarica elettrica che può anche paralizzarlo.", + }, + thunderbolt: { + name: "Fulmine", + effect: "Il bersaglio viene colpito da una potente scarica elettrica che può anche paralizzarlo.", + }, + thunderWave: { + name: "Tuononda", + effect: "Il nemico viene colpito da una debole scarica elettrica che, se va a segno, ne causa la paralisi.", + }, + thunder: { + name: "Tuono", + effect: "Il nemico è colpito da un lampo molto violento che può anche paralizzarlo.", + }, + rockThrow: { + name: "Sassata", + effect: "Chi la usa solleva una roccia e la lancia contro il nemico.", + }, + earthquake: { + name: "Terremoto", + effect: "Chi la usa provoca un potente sisma che colpisce gli altri Pokémon in campo.", + }, + fissure: { + name: "Abisso", + effect: "Chi la usa crea una spaccatura nel terreno e cerca di gettarvici dentro il nemico. Se va a segno, il nemico va KO.", + }, + dig: { + name: "Fossa", + effect: "Chi la usa scava al primo turno e attacca al successivo. Fuori dalla lotta fa uscire da alcuni luoghi.", + }, + toxic: { + name: "Tossina", + effect: "Una mossa che lascia l'obiettivo gravemente avvelenato. Il danno da veleno peggiora ad ogni turno.", + }, + confusion: { + name: "Confusione", + effect: "Colpisce il nemico con una leggera forza telecinetica e può anche confonderlo.", + }, + psychic: { + name: "Psichico", + effect: "Il nemico viene colpito da una potente forza telecinetica che può anche ridurne la Difesa Speciale.", + }, + hypnosis: { + name: "Ipnosi", + effect: "Chi la usa si avvale della suggestione ipnotica per far addormentare il nemico.", + }, + meditate: { + name: "Meditazione", + effect: "Il Pokémon medita risvegliando il potere nel profondo del suo corpo ed aumentando il suo Attacco.", + }, + agility: { + name: "Agilità", + effect: "Chi la usa rilassa e alleggerisce il proprio corpo per far salire di molto la Velocità.", + }, + quickAttack: { + name: "Attacco Rapido", + effect: "Chi la usa colpisce sempre per primo e ad una tale velocità da rendersi quasi invisibile.", + }, + rage: { + name: "Ira", + effect: "Questa mossa ha il potere di aumentare la statistica Attacco ogni volta che chi la usa viene colpito durante una lotta.", + }, + teleport: { + name: "Teletrasporto", + effect: "Fa fuggire dai Pokémon selvatici. Fuori dalla lotta porta all'ultimo Centro Pokémon visitato.", + }, + nightShade: { + name: "Ombra Notturna", + effect: "Fa apparire un orribile miraggio al nemico e infligge un danno pari al livello di chi la usa.", + }, + mimic: { + name: "Mimica", + effect: "Copia l'ultima mossa usata dal bersaglio. La mossa copiata si può utilizzare fino alla sostituzione del Pokémon.", + }, + screech: { + name: "Stridio", + effect: "Stridio assordante che riduce di molto la Difesa del nemico.", + }, + doubleTeam: { + name: "Doppioteam", + effect: "Chi la usa si muove in fretta e crea copie illusorie di se stesso che aumentano la capacità di elusione.", + }, + recover: { + name: "Ripresa", + effect: "Una mossa di auto-guarigione. Il Pokémon ripristina i suoi PS fino a metà dei suoi PS massimi.", + }, + harden: { + name: "Rafforzatore", + effect: "Tutti i muscoli del corpo si tonificano per aumentare la Difesa.", + }, + minimize: { + name: "Minimizzato", + effect: "Il corpo di chi la usa si comprime e diventa più piccolo. La sua capacità di elusione aumenta di molto.", + }, + smokescreen: { + name: "Muro di Fumo", + effect: "Il Pokémon rilascia un'oscura cortina di fumo che riduce la precisione del nemico.", + }, + confuseRay: { + name: "Stordiraggio", + effect: "Il nemico è colpito da un raggio sinistro che lo confonde.", + }, + withdraw: { + name: "Ritirata", + effect: "Il corpo si ritira nel suo duro guscio per aumentare la Difesa.", + }, + defenseCurl: { + name: "Ricciolscudo", + effect: "Chi la usa si raggomitola per nascondere i punti deboli e aumentare la propria Difesa.", + }, + barrier: { + name: "Barriera", + effect: "Innalza una barriera resistente che aumenta molto la Difesa.", + }, + lightScreen: { + name: "Schermoluce", + effect: "Innalza una barriera di luce fantastica per ridurre i danni degli attacchi speciali alla squadra per cinque turni.", + }, + haze: { + name: "Nube", + effect: "Chi la usa crea una nube nera che annulla ogni modifica delle statistiche di tutti i Pokémon in campo.", + }, + reflect: { + name: "Riflesso", + effect: "Innalza una barriera di luce fantastica per ridurre i danni degli attacchi fisici alla squadra per cinque turni.", + }, + focusEnergy: { + name: "Focalenergia", + effect: "Chi la usa fa un profondo respiro e si concentra per rendere più probabili i brutti colpi.", + }, + bide: { + name: "Pazienza", + effect: "Chi la usa subisce attacchi per due turni e poi restituisce il danno moltiplicato per due.", + }, + metronome: { + name: "Metronomo", + effect: "Il Pokémon fa di no con il dito e stimola il cervello a usare a caso una delle tante mosse esistenti.", + }, + mirrorMove: { + name: "Speculmossa", + effect: "Chi la usa colpisce il bersaglio copiandone l'ultima mossa usata.", + }, + selfDestruct: { + name: "Autodistruzione", + effect: "Chi la usa esplode e infligge danni agli altri Pokémon in campo, ma poi va KO.", + }, + eggBomb: { + name: "Uovobomba", + effect: "Colpisce il nemico con un grande uovo scaraventato con enorme forza.", + }, + lick: { + name: "Leccata", + effect: "Una lingua lunga infligge danni al nemico e può anche paralizzarlo.", + }, + smog: { + name: "Smog", + effect: "Colpisce il nemico con una scarica di gas maleodoranti. Può anche avvelenarlo.", + }, + sludge: { + name: "Fango", + effect: "Lancio di fango malsano che arreca danno al nemico. Può anche avvelenarlo.", + }, + boneClub: { + name: "Ossoclava", + effect: "Il Pokémon colpisce il nemico con un bastone d'osso. Può anche fare tentennare l'obiettivo.", + }, + fireBlast: { + name: "Fuocobomba", + effect: "Investe il nemico con un'intensa fiammata che fa terra bruciata. Può anche scottarlo.", + }, + waterfall: { + name: "Cascata", + effect: "Carica il nemico a grande velocità e può farlo tentennare. Fuori dalla lotta fa risalire le cascate.", + }, + clamp: { + name: "Tenaglia", + effect: "Chi la usa intrappola e stritola il nemico con la sua corazza spessa e forte per quattro o cinque turni.", + }, + swift: { + name: "Comete", + effect: "Colpisce i nemici con raggi a forma di stella. Questo attacco è infallibile.", + }, + skullBash: { + name: "Capocciata", + effect: "Chi la usa ritira la testa per aumentare la Difesa e poi attacca al turno successivo.", + }, + spikeCannon: { + name: "Sparalance", + effect: "Il nemico viene colpito da due a cinque volte in rapida successione da spilli appuntiti.", + }, + constrict: { + name: "Limitazione", + effect: "Colpisce il nemico con lunghi tentacoli o piante rampicanti. Può anche ridurne la Velocità.", + }, + amnesia: { + name: "Amnesia", + effect: "Vuoto di memoria che aumenta esponenzialmente la difesa speciale.", + }, + kinesis: { + name: "Cinèsi", + effect: "Chi la usa distrae il bersaglio piegando un cucchiaio e ne riduce la precisione.", + }, + softBoiled: { + name: "Covauova", + effect: "Chi la usa recupera metà dei propri PS massimi. Fuori dalla lotta può anche far trasferire PS ai propri compagni.", + }, + highJumpKick: { + name: "Calcinvolo", + effect: "Chi la usa colpisce il nemico con una ginocchiata in volo: se fallisce, subisce danni.", + }, + glare: { + name: "Sguardo Feroce", + effect: "Chi la usa spaventa il nemico con uno sguardo terrificante e ne causa la paralisi.", + }, + dreamEater: { + name: "Mangiasogni", + effect: "Attacco che funziona solo su un nemico che dorme. Chi lo usa riceve metà dei PS persi dal nemico.", + }, + poisonGas: { + name: "Velenogas", + effect: "Spruzza in faccia al nemico una nuvola di gas tossico che avvelena.", + }, + barrage: { + name: "Attacco Pioggia", + effect: "Piovono enormi sfere sulla testa del nemico da due a cinque volte di fila.", + }, + leechLife: { + name: "Sanguisuga", + effect: "Mossa succhiasangue. Chi la usa recupera una quantità di PS pari alla metà del danno inferto.", + }, + lovelyKiss: { + name: "Demonbacio", + effect: "Chi la usa intimidisce il bersaglio con una faccia paurosa e gli schiocca un bacio che lo fa addormentare.", + }, + skyAttack: { + name: "Aeroattacco", + effect: "Un attacco in due turni e probabile brutto colpo. Può anche far tentennare il nemico.", + }, + transform: { + name: "Trasformazione", + effect: "Chi la usa si trasforma in una copia esatta del bersaglio per sfruttarne le caratteristiche.", + }, + bubble: { + name: "Bolla", + effect: "Uno spruzzo di bolle viene lanciato sul nemico. Può ridurne la velocità.", + }, + dizzyPunch: { + name: "Stordipugno", + effect: "Colpisce il bersaglio con una sequenza di pugni che può anche confonderlo.", + }, + spore: { + name: "Spora", + effect: "Nube di spore che fa sempre addormentare il bersaglio.", + }, + flash: { + name: "Flash", + effect: "Il Pokémon usa un lampo di luce contro il nemico riducendone la precisione. Può essere usata per illuminare luoghi oscuri.", + }, + psywave: { + name: "Psiconda", + effect: "Il nemico è attaccato con una strana onda di energia. L'intensità dell'attacco è variabile.", + }, + splash: { + name: "Splash", + effect: "Chi la usa sguazza nell'acqua, senza ottenere alcun effetto.", + }, + acidArmor: { + name: "Scudo Acido", + effect: "Il Pokémon modifica la sua struttura cellulare liquefandosi, per aumentare esponenzialmente la sua difesa.", + }, + crabhammer: { + name: "Martellata", + effect: "Colpisce il nemico con una grande tenaglia. Probabile brutto colpo.", + }, + explosion: { + name: "Esplosione", + effect: "Chi la usa esplode per infliggere danni agli altri Pokémon attorno, ma va KO.", + }, + furySwipes: { + name: "Sfuriate", + effect: "Colpisce il nemico con artigli o falci affilate da due a cinque volte in rapida successione.", + }, + bonemerang: { + name: "Ossomerang", + effect: "Chi la usa lancia l'osso che tiene. L'osso colpisce due volte e ritorna come un vero e proprio boomerang.", + }, + rest: { + name: "Riposo", + effect: "Il Pokémon si addormenta per due turni per curare tutti i PS e qualsiasi problema di stato.", + }, + rockSlide: { + name: "Frana", + effect: "I nemici vengono colpiti da grandi massi che possono anche farli tentennare.", + }, + hyperFang: { + name: "Iperzanna", + effect: "Il Pokémon morde il nemico con zanne taglienti. Può anche farlo tentennare.", + }, + sharpen: { + name: "Affilatore", + effect: "Chi la usa riduce il numero di poligoni sul proprio corpo per accentuarne gli spigoli e aumentare l'Attacco.", + }, + conversion: { + name: "Conversione", + effect: "Il tipo di chi la usa muta in quello di una sua mossa a caso.", + }, + triAttack: { + name: "Tripletta", + effect: "Colpisce il nemico con tre sfere simultanee che possono anche paralizzarlo, scottarlo o congelarlo.", + }, + superFang: { + name: "Superzanna", + effect: "Chi la usa salta sul nemico azzannandolo con i suoi incisivi affilati e facendogli perdere metà dei PS.", + }, + slash: { + name: "Lacerazione", + effect: "Attacca il nemico con artigli, falci o altro. Probabile brutto colpo.", + }, + substitute: { + name: "Sostituto", + effect: "Chi la usa crea una copia di se stesso usando alcuni PS. La copia serve come esca per il nemico.", + }, + struggle: { + name: "Scontro", + effect: "Mossa da usare solo in caso estremo, quando non si hanno più PP. Danneggia anche chi la usa.", + }, + sketch: { + name: "Schizzo", + effect: "Permette a chi la usa di imparare l'ultima mossa usata dal bersaglio. La nuova mossa appresa sostituisce Schizzo.", + }, + tripleKick: { + name: "Triplocalcio", + effect: "Chi la usa esegue fino a tre calci consecutivi la cui potenza aumenta ad ogni colpo.", + }, + thief: { + name: "Furto", + effect: "Il Pokémon attacca e contemporaneamente ruba lo strumento tenuto dal nemico. Non ruberà nulla, se si possiede già uno strumento.", + }, + spiderWeb: { + name: "Ragnatela", + effect: "Copre il nemico con un filo di seta sottile e appiccicoso. Il nemico non può fuggire.", + }, + mindReader: { + name: "Leggimente", + effect: "Il Pokémon percepisce i movimenti del nemico con la mente per garantire il successo della mossa successiva.", + }, + nightmare: { + name: "Incubo", + effect: "Il nemico addormentato ha un incubo e perde PS ad ogni turno.", + }, + flameWheel: { + name: "Ruotafuoco", + effect: "Il Pokémon si avvolge nel fuoco e carica il nemico. Può scottare.", + }, + snore: { + name: "Russare", + effect: "Mossa da usare solo mentre si dorme. Il chiasso assordante può anche far tentennare il nemico.", + }, + curse: { + name: "Maledizione", + effect: "Una mossa che agisce in modo diverso se chi la usa è di tipo Spettro.", + }, + flail: { + name: "Flagello", + effect: "Chi la usa si dimena per attaccare. È più efficace se i suoi PS sono bassi.", + }, + conversion2: { + name: "Conversione2", + effect: "Chi la usa cambia tipo per rendersi resistente al tipo dell'ultima mossa usata dal bersaglio.", + }, + aeroblast: { + name: "Aerocolpo", + effect: "Colpisce il nemico con un vortice d'aria per danneggiarlo. Probabile brutto colpo.", + }, + cottonSpore: { + name: "Cottonspora", + effect: "Rilascia spore simili al cotone che si attaccano ai nemici nei paraggi e ne riducono di molto la Velocità.", + }, + reversal: { + name: "Contropiede", + effect: "Chi la usa attacca con tutte le sue forze. Più i PS sono bassi, maggiore è la potenza di questa mossa.", + }, + spite: { + name: "Dispetto", + effect: "Chi la usa sfoga la propria rabbia sull'ultima mossa usata dal bersaglio e le sottrae quattro PP.", + }, + powderSnow: { + name: "Polneve", + effect: "Attacca il nemico con una raffica di neve farinosa e può anche congelarlo.", + }, + protect: { + name: "Protezione", + effect: "Permette di eludere tutti gli attacchi. Se usata in successione può fallire.", + }, + machPunch: { + name: "Pugnorapido", + effect: "Chi la usa tira un pugno a velocità impressionante e colpisce di sicuro per primo.", + }, + scaryFace: { + name: "Visotruce", + effect: "Chi la usa spaventa il nemico con una faccia terribile e ne riduce di molto la Velocità.", + }, + feintAttack: { + name: "Finta", + effect: "Chi la usa si avvicina al nemico facendo finta di niente, per poi scagliare un pugno infallibile a tradimento.", + }, + sweetKiss: { + name: "Dolcebacio", + effect: "Chi la usa bacia il nemico con una dolcezza angelica, confondendolo.", + }, + bellyDrum: { + name: "Panciamburo", + effect: "Chi la usa massimizza l'Attacco in cambio di metà dei PS massimi.", + }, + sludgeBomb: { + name: "Fangobomba", + effect: "Chi la usa attacca lanciando fango sul bersaglio. Può anche avvelenarlo.", + }, + mudSlap: { + name: "Fangosberla", + effect: "Chi la usa butta fango in faccia al nemico per arrecargli danni e ridurne la precisione.", + }, + octazooka: { + name: "Octazooka", + effect: "Chi la usa spruzza del'inchiostro in faccia al nemico. Può anche ridurne la precisione.", + }, + spikes: { + name: "Punte", + effect: "Chi la usa piazza sul terreno una trappola di punte che danneggia i nemici quando scendono in campo.", + }, + zapCannon: { + name: "Falcecannone", + effect: "Chi la usa provoca un'esplosione elettrica che infligge danni e paralizza il nemico.", + }, + foresight: { + name: "Preveggenza", + effect: "Chi la usa rende i Pokémon di tipo Spettro vulnerabili a qualsiasi tipo di mossa e può, inoltre, colpire i nemici sfuggenti.", + }, + destinyBond: { + name: "Destinobbligato", + effect: "Se chi la usa va KO prima del proprio turno, chi ha sferrato il colpo da KO fa la stessa fine.", + }, + perishSong: { + name: "Ultimocanto", + effect: "Ogni Pokémon che sente questo canto va KO in tre turni, se non lo si sostituisce.", + }, + icyWind: { + name: "Ventogelato", + effect: "Chi la usa attacca i nemici con una folata di aria gelida e ne riduce anche la Velocità.", + }, + detect: { + name: "Individua", + effect: "Consente al Pokémon di evitare tutti gli attacchi. Può fallire se usato in successione.", + }, + boneRush: { + name: "Ossoraffica", + effect: "Chi la usa colpisce il nemico con un osso duro, da 2 a 5 volte di fila.", + }, + lockOn: { + name: "Localizza", + effect: "Chi la usa punta il nemico con precisione. La mossa successiva andrà a segno.", + }, + outrage: { + name: "Oltraggio", + effect: "Chi la usa sfoga la sua ira e attacca il nemico per due o tre turni prima di essere lasciato in preda alla confusione.", + }, + sandstorm: { + name: "Terrempesta", + effect: "Causa una tempesta di sabbia per cinque turni che danneggia tutti i tipi in campo esclusi Terra, Roccia e Acciaio.", + }, + gigaDrain: { + name: "Gigassorbimento", + effect: "Mossa che assorbe PS. Chi la usa recupera un quantità di PS pari alla metà del danno inferto.", + }, + endure: { + name: "Resistenza", + effect: "Chi la usa resta con un PS anche se subisce un colpo da KO in quel turno. Usata in successione può fallire.", + }, + charm: { + name: "Fascino", + effect: "Ammalia il nemico con lo sguardo per renderlo meno cauto. Riduce molto l'Attacco del nemico.", + }, + rollout: { + name: "Rotolamento", + effect: "Chi la usa colpisce il nemico rotolando per cinque turni, con aumento progressivo della potenza ogni volta che va a segno.", + }, + falseSwipe: { + name: "Falsofinale", + effect: "Chi la usa trattiene il colpo per impedire al nemico di andare KO, lasciandolo con almeno un PS.", + }, + swagger: { + name: "Bullo", + effect: "Chi la usa provoca il bersaglio e lo confonde, facendo aumentare però di molto il suo Attacco.", + }, + milkDrink: { + name: "Buonlatte", + effect: "Chi la usa recupera metà dei propri PS massimi. Fuori dalla lotta può anche far trasferire PS ai propri compagni.", + }, + spark: { + name: "Scintilla", + effect: "Colpisce il nemico con una carica elettrica e può anche paralizzarlo.", + }, + furyCutter: { + name: "Tagliofuria", + effect: "Colpisce il nemico con falci o artigli. Se usata in successione aumenta di potenza ogni volta che va a segno.", + }, + steelWing: { + name: "Alacciaio", + effect: "Colpisce il nemico con ali d'acciaio. Può anche aumentare la Difesa di chi la usa.", + }, + meanLook: { + name: "Malosguardo", + effect: "Chi la usa blocca il nemico con uno sguardo oscuro e ammaliante, impedendogli la fuga.", + }, + attract: { + name: "Attrazione", + effect: "Se il nemico è del sesso opposto, s'infatua e attacca con meno probabilità.", + }, + sleepTalk: { + name: "Sonnolalia", + effect: "Chi la usa sfodera a caso una delle proprie mosse mentre sta dormendo.", + }, + healBell: { + name: "Rintoccasana", + effect: "Chi la usa fa suonare le campane per curare completamente tutta la squadra.", + }, + return: { + name: "Ritorno", + effect: "Mossa che diventa tanto più potente quanto maggiore è il grado di affezione del Pokémon per il proprio Allenatore.", + }, + present: { + name: "Regalino", + effect: "Chi la usa dà un regalo bomba al bersaglio. A volte, però, può fargli recuperare PS.", + }, + frustration: { + name: "Frustrazione", + effect: "Mossa che diventa tanto più potente quanto minore è il grado di affezione del Pokémon per il proprio Allenatore.", + }, + safeguard: { + name: "Salvaguardia", + effect: "Chi la usa crea un campo protettivo che difende tutta la squadra dai problemi di stato per cinque turni.", + }, + painSplit: { + name: "Malcomune", + effect: "Chi la usa somma i propri PS a quelli di un altro Pokémon per poi dividerli in parti uguali.", + }, + sacredFire: { + name: "Magifuoco", + effect: "Colpisce il nemico con un fuoco mistico di enorme intensità che può anche causargli una scottatura.", + }, + magnitude: { + name: "Magnitudo", + effect: "Chi la usa scatena un terremoto d'intensità variabile che danneggia gli altri Pokémon in campo.", + }, + dynamicPunch: { + name: "Dinamipugno", + effect: "Colpisce il nemico con un pugno davvero forte. Se va a segno, lo confonde.", + }, + megahorn: { + name: "Megacorno", + effect: "Chi la usa utilizza il suo corno per montare con grande forza il nemico.", + }, + dragonBreath: { + name: "Dragospiro", + effect: "Investe il nemico con una raffica potentissima che arreca danni. Può anche paralizzarlo.", + }, + batonPass: { + name: "Staffetta", + effect: "Chi la usa è sostituito da un Pokémon della squadra, che eredita anche ogni modifica alle statistiche.", + }, + encore: { + name: "Ripeti", + effect: "Chi la usa costringe il nemico a continuare ad utilizzare solo l'ultima mossa utilizzata da 2 a 6 turni.", + }, + pursuit: { + name: "Inseguimento", + effect: "Una mossa d'attacco che infligge un danno doppio se il nemico è in fase di sostituzione.", + }, + rapidSpin: { + name: "Rapigiro", + effect: "Un attacco roteante che elimina gli effetti delle mosse Legatutto, Avvolgibotta, Parassiseme e Punte.", + }, + sweetScent: { + name: "Profumino", + effect: "Un dolce profumo che alletta il nemico per ridurne l'elusione. Attira anche Pokémon selvatici.", + }, + ironTail: { + name: "Codacciaio", + effect: "Il nemico viene colpito da una robusta coda d'acciaio. Può anche ridurne la Difesa.", + }, + metalClaw: { + name: "Ferrartigli", + effect: "Colpisce il nemico con artigli d'acciaio. Può anche aumentare l'Attacco di chi la usa.", + }, + vitalThrow: { + name: "Vitaltiro", + effect: "Chi la usa attacca per ultimo, ma il colpo è sempre infallibile.", + }, + morningSun: { + name: "Mattindoro", + effect: "Chi la usa recupera PS. Il numero di PS recuperati dipende dalle condizioni atmosferiche.", + }, + synthesis: { + name: "Sintesi", + effect: "Chi la usa recupera PS. Il numero di PS recuperati dipende dalle condizioni atmosferiche.", + }, + moonlight: { + name: "Lucelunare", + effect: "Chi la usa recupera PS. Il numero di PS recuperati dipende dalle condizioni atmosferiche.", + }, + hiddenPower: { + name: "Introforza", + effect: "Mossa singolare che cambia tipo e potenza a seconda del Pokémon che la usa.", + }, + crossChop: { + name: "Incrocolpo", + effect: "Investe il nemico con un colpo sferrato con entrambe le braccia incrociate. Probabile brutto colpo.", + }, + twister: { + name: "Tornado", + effect: "Un potente tornado si abbatte sul nemico. Può anche far tentennare.", + }, + rainDance: { + name: "Pioggiadanza", + effect: "Chi la usa provoca una forte pioggia per cinque turni, potenziando le mosse di tipo Acqua.", + }, + sunnyDay: { + name: "Giornodisole", + effect: "Chi la usa intensifica i raggi solari per cinque turni, potenziando le mosse di tipo Fuoco.", + }, + crunch: { + name: "Sgranocchio", + effect: "Il nemico viene morso con denti affilati. Può anche ridurne la Difesa.", + }, + mirrorCoat: { + name: "Specchiovelo", + effect: "Mossa che replica ogni attacco speciale, arrecando il doppio del danno ricevuto.", + }, + psychUp: { + name: "Psicamisù", + effect: "Chi la usa s'ipnotizza per copiare ogni modifica alle statistiche del bersaglio.", + }, + extremeSpeed: { + name: "Extrarapido", + effect: "Chi la usa carica il nemico a velocità impressionante ed attacca sempre per primo.", + }, + ancientPower: { + name: "Forzantica", + effect: "Colpisce il nemico con una forza primordiale. Può aumentare tutte le statistiche.", + }, + shadowBall: { + name: "Palla Ombra", + effect: "Lancia sul nemico una sfera nera. Può anche ridurne la Difesa Speciale.", + }, + futureSight: { + name: "Divinazione", + effect: "Due turni dopo l'utilizzo di questa mossa, il nemico viene attaccato con energia psichica.", + }, + rockSmash: { + name: "Spaccaroccia", + effect: "Il nemico viene colpito da un pugno in grado di frantumare anche la roccia. Può anche ridurne la Difesa.", + }, + whirlpool: { + name: "Mulinello", + effect: "Intrappola il nemico in un turbine d'acqua che dura per quattro o cinque turni infliggendogli dei danni ogni turno.", + }, + beatUp: { + name: "Picchiaduro", + effect: "Chi la usa chiama in aiuto i Pokémon della squadra: più ce ne sono, maggiore è il numero di attacchi.", + }, + fakeOut: { + name: "Bruciapelo", + effect: "Mossa che fa agire per primo e fa tentennare il nemico. Funziona solo appena sceso in campo.", + }, + uproar: { + name: "Baraonda", + effect: "Chi la usa attacca per tre turni con un frastuono che non fa dormire nessuno.", + }, + stockpile: { + name: "Accumulo", + effect: "Chi la usa accumula energia aumentando la Difesa e la Difesa Speciale. Si può utilizzare tre volte.", + }, + spitUp: { + name: "Sfoghenergia", + effect: "Tutta l'energia accumulata in precedenza con Accumulo è rilasciata nell'attacco. Maggiore è l'energia, più danni si arrecano.", + }, + swallow: { + name: "Introenergia", + effect: "Chi la usa assorbe l'energia raccolta con la mossa Accumulo e recupera PS. Maggiore è l'energia, più PS si recuperano.", + }, + heatWave: { + name: "Ondacalda", + effect: "Chi la usa investe i nemici con una folata di vento caldo. Può anche scottare.", + }, + hail: { + name: "Grandine", + effect: "Chi la usa causa una grandinata che dura cinque turni. Danneggia tutti i Pokémon tranne quelli di tipo Ghiaccio.", + }, + torment: { + name: "Attaccalite", + effect: "Chi la usa tormenta e fa infuriare il nemico, impedendogli di usare la stessa mossa due volte di seguito.", + }, + flatter: { + name: "Adulazione", + effect: "Adula il bersaglio e lo confonde, ma ne aumenta l'Attacco Speciale.", + }, + willOWisp: { + name: "Fuocofatuo", + effect: "Fiamme intense di colore viola causano una scottatura al nemico.", + }, + memento: { + name: "Memento", + effect: "Chi la usa va KO. Tuttavia, riduce di molto l'Attacco e l'Attacco Speciale del nemico.", + }, + facade: { + name: "Facciata", + effect: "Mossa d'attacco che raddoppia la potenza se chi la usa è scottato, avvelenato o paralizzato.", + }, + focusPunch: { + name: "Centripugno", + effect: "Chi la usa prende la mira prima di sferrare un pugno. Fallirà se verrà colpito prima di eseguire la mossa.", + }, + smellingSalts: { + name: "Maniereforti", + effect: "Infligge un danno doppio ad un bersaglio paralizzato, ma ne cura anche la paralisi.", + }, + followMe: { + name: "Sonoqui", + effect: "Chi la usa attrae l'attenzione su di sé, costringendo i nemici a sceglierlo sempre come bersaglio.", + }, + naturePower: { + name: "Naturforza", + effect: "Mossa che fa uso della forza della natura. Il suo effetto varia in base all'ambiente.", + }, + charge: { + name: "Sottocarica", + effect: "Potenzia la mossa di tipo Elettro usata subito dopo. Aumenta anche la Difesa Speciale di chi la usa.", + }, + taunt: { + name: "Provocazione", + effect: "Provoca il nemico, inducendolo ad usare solo mosse d'attacco per tre turni.", + }, + helpingHand: { + name: "Altruismo", + effect: "Mossa che aumenta la potenza dell'attacco di un alleato.", + }, + trick: { + name: "Raggiro", + effect: "Chi la usa coglie il bersaglio in contropiede e l'obbliga a cambiare il suo strumento con il proprio.", + }, + rolePlay: { + name: "Giocodiruolo", + effect: "Chi la usa mima in tutto il bersaglio, copiandone l'abilità.", + }, + wish: { + name: "Desiderio", + effect: "Permette di recuperare metà dei PS massimi al turno successivo.", + }, + assist: { + name: "Assistente", + effect: "Chi la usa utilizza in fretta e a caso una delle mosse degli altri Pokémon della squadra.", + }, + ingrain: { + name: "Radicamento", + effect: "Chi la usa mette delle radici che gli fanno recuperare PS a ogni turno. Non può essere sostituito.", + }, + superpower: { + name: "Troppoforte", + effect: "Chi la usa attacca il nemico con grande forza, ma il suo Attacco e la sua Difesa diminuiscono.", + }, + magicCoat: { + name: "Magivelo", + effect: "Una barriera rimanda al mittente l'effetto di mosse come Parassiseme e di mosse che influenzano lo stato.", + }, + recycle: { + name: "Riciclo", + effect: "Chi la usa ricicla uno strumento tenuto, già usato nella lotta, e lo può riutilizzare.", + }, + revenge: { + name: "Vendetta", + effect: "Mossa d'attacco che infligge un danno doppio se si è stati colpiti dal nemico nello stesso turno.", + }, + brickBreak: { + name: "Breccia", + effect: "Colpisce il nemico con una mano e rompe barriere come Riflesso e Schermoluce.", + }, + yawn: { + name: "Sbadiglio", + effect: "Chi la usa fa un grande sbadiglio che addormenta il nemico al turno seguente.", + }, + knockOff: { + name: "Privazione", + effect: "Attacco che blocca anche lo strumento tenuto dal nemico, impedendone l'uso nella lotta.", + }, + endeavor: { + name: "Rimonta", + effect: "Attacco che riduce i PS del nemico a una quantità pari ai PS di chi la usa.", + }, + eruption: { + name: "Eruzione", + effect: "Attacco impetuoso ed esplosivo la cui potenza è proporzionale ai PS di chi lo usa.", + }, + skillSwap: { + name: "Baratto", + effect: "Chi la usa sfrutta le sue facoltà mentali per scambiare l'abilità con il bersaglio.", + }, + imprison: { + name: "Esclusiva", + effect: "Chi la usa impedisce al nemico di usare mosse che conoscono entrambi.", + }, + refresh: { + name: "Rinfrescata", + effect: "Chi la usa riposa per curarsi da avvelenamento, paralisi e scottatura.", + }, + grudge: { + name: "Rancore", + effect: "Se chi la usa va KO, i PP della mossa nemica che lo ha messo fuori gioco si azzerano.", + }, + snatch: { + name: "Scippo", + effect: "Chi la usa ruba e utilizza la mossa curativa o modifica-statistiche che il bersaglio stava per usare.", + }, + secretPower: { + name: "Forzasegreta", + effect: "Attacco che può avere un effetto aggiuntivo a seconda del luogo in cui si trova chi lo usa.", + }, + dive: { + name: "Sub", + effect: "Chi la usa si tuffa in acqua per emergere e attaccare al turno seguente. Fuori dalla lotta permette di immergersi sott'acqua.", + }, + armThrust: { + name: "Sberletese", + effect: "Raffica di ceffoni che colpisce da due a cinque volte di fila.", + }, + camouflage: { + name: "Camuffamento", + effect: "Modifica il tipo di chi la usa a seconda del luogo, ad esempio sull'acqua, nell'erba o in una grotta.", + }, + tailGlow: { + name: "Codadiluce", + effect: "Chi la usa fissa una luce forte per concentrarsi e aumentare moltissimo l'Attacco Speciale.", + }, + lusterPurge: { + name: "Abbagliante", + effect: "Chi la usa scatena un'esplosione abbagliante che può anche ridurre la Difesa Speciale del Pokémon colpito.", + }, + mistBall: { + name: "Foschisfera", + effect: "Una sfera coperta di nebbia danneggia il nemico. Può anche ridurre l'Attacco Speciale.", + }, + featherDance: { + name: "Danzadipiume", + effect: "Chi la usa copre il nemico con un manto di piume che riduce di molto il suo Attacco.", + }, + teeterDance: { + name: "Strampadanza", + effect: "Chi la usa esegue una danza goffa che confonde tutti i Pokémon attorno.", + }, + blazeKick: { + name: "Calciardente", + effect: "Chi la usa tira un calcio. Probabile brutto colpo. Può anche causare una scottatura.", + }, + mudSport: { + name: "Fangata", + effect: "Chi la usa si ricopre di fango indebolendo le mosse di tipo Elettro finché resta in campo.", + }, + iceBall: { + name: "Palla Gelo", + effect: "Chi la usa attacca il nemico rotolando per cinque turni, con aumento progressivo della potenza ogni volta che va a segno.", + }, + needleArm: { + name: "Pugnospine", + effect: "Chi la usa attacca colpendo il bersaglio con i suoi arti pieni di spine. Può far tentennare il Pokémon colpito.", + }, + slackOff: { + name: "Pigro", + effect: "Chi la usa si rilassa recuperando metà dei propri PS massimi.", + }, + hyperVoice: { + name: "Granvoce", + effect: "Chi la usa lancia un urlo straziante che danneggia i nemici.", + }, + poisonFang: { + name: "Velenodenti", + effect: "Chi la usa morde il nemico con denti avvelenati che possono anche iperavvelenarlo.", + }, + crushClaw: { + name: "Tritartigli", + effect: "Colpisce il nemico con artigli robusti e affilati che possono ridurne la Difesa.", + }, + blastBurn: { + name: "Incendio", + effect: "Potente esplosione che danneggia il nemico, ma fa saltare il turno successivo a chi la provoca.", + }, + hydroCannon: { + name: "Idrocannone", + effect: "Colpisce il nemico con un potente getto d'acqua. Chi la usa salta il turno successivo.", + }, + meteorMash: { + name: "Meteorpugno", + effect: "Colpisce il nemico con un pugno veloce come una meteora. Può far pure salire l'Attacco di chi la usa.", + }, + astonish: { + name: "Sgomento", + effect: "Chi la usa attacca il bersaglio emettendo un verso terrificante. Può anche farlo tentennare.", + }, + weatherBall: { + name: "Palla Clima", + effect: "Mossa d'attacco che varia tipo e forza in base alle condizioni atmosferiche.", + }, + aromatherapy: { + name: "Aromaterapia", + effect: "Chi la usa rilascia un dolce profumo che cura tutti problemi di stato propri e degli alleati.", + }, + fakeTears: { + name: "Falselacrime", + effect: "Chi la usa inscena un pianto teatrale per commuovere il nemico. Ne riduce di molto la Difesa Speciale.", + }, + airCutter: { + name: "Aerasoio", + effect: "Chi la usa provoca un vento tagliente che sferza i nemici. Probabile brutto colpo.", + }, + overheat: { + name: "Vampata", + effect: "Chi la usa sferra un potente attacco, ma il contraccolpo riduce di molto il suo Attacco Speciale.", + }, + odorSleuth: { + name: "Segugio", + effect: "Chi la usa rende i Pokémon di tipo Spettro vulnerabili a qualsiasi tipo di mossa e può, inoltre, colpire i nemici sfuggenti.", + }, + rockTomb: { + name: "Rocciotomba", + effect: "Colpisce il nemico con rocce. Inoltre, lo rallenta riducendone la Velocità.", + }, + silverWind: { + name: "Ventargenteo", + effect: "Attacca con un forte vento di polvere di squame. Tutte le statistiche di chi la usa possono salire.", + }, + metalSound: { + name: "Ferrostrido", + effect: "Orribile stridio, simile a quello prodotto dal metallo, che riduce di molto la Difesa Speciale del nemico.", + }, + grassWhistle: { + name: "Meloderba", + effect: "Una dolce melodia culla il bersaglio e lo costringe ad addormentarsi.", + }, + tickle: { + name: "Solletico", + effect: "Chi la usa solletica il nemico e lo fa ridere, riducendo il suo Attacco e la sua Difesa.", + }, + cosmicPower: { + name: "Cosmoforza", + effect: "Chi la usa assorbe una forza mistica dallo spazio che aumenta la Difesa e la Difesa Speciale.", + }, + waterSpout: { + name: "Zampillo", + effect: "Lancia un getto d'acqua contro il nemico che ha davanti e quelli adiacenti. La potenza è proporzionale al numero di PS di chi la usa.", + }, + signalBeam: { + name: "Segnoraggio", + effect: "Chi la usa attacca con uno strano raggio di luce che può anche confondere il Pokémon colpito.", + }, + shadowPunch: { + name: "Pugnodombra", + effect: "Il nemico riceve un pugno proveniente dalle tenebre. Questa mossa è infallibile.", + }, + extrasensory: { + name: "Extrasenso", + effect: "Chi la usa attacca con una misteriosa forza invisibile. Può far tentennare il nemico.", + }, + skyUppercut: { + name: "Stramontante", + effect: "Chi la usa attacca il nemico con un montante che può arrivare fino in cielo.", + }, + sandTomb: { + name: "Sabbiotomba", + effect: "Chi la usa intrappola il nemico in un turbine di sabbia per quattro o cinque turni.", + }, + sheerCold: { + name: "Purogelo", + effect: "Ondata di freddo penetrante che, se va a segno, fa andare KO il nemico.", + }, + muddyWater: { + name: "Fanghiglia", + effect: "Chi la usa attacca con un getto di fango che può anche ridurre la precisione dei nemici.", + }, + bulletSeed: { + name: "Semitraglia", + effect: "Chi la usa spara da due a cinque raffiche di semi contro il bersaglio in successione.", + }, + aerialAce: { + name: "Aeroassalto", + effect: "Chi la usa attacca il nemico a grande velocità. Questa mossa è infallibile.", + }, + icicleSpear: { + name: "Gelolancia", + effect: "Chi la usa spara ghiaccioli affilati contro il nemico da due a cinque volte di fila.", + }, + ironDefense: { + name: "Ferroscudo", + effect: "Il corpo di chi la usa si indurisce come il ferro, facendone salire di molto la Difesa.", + }, + block: { + name: "Blocco", + effect: "Chi la usa sbarra la strada al nemico impedendone la fuga o la sostituzione.", + }, + howl: { + name: "Gridodilotta", + effect: "Chi la usa emette un verso molto forte per darsi coraggio e aumentare l'Attacco.", + }, + dragonClaw: { + name: "Dragartigli", + effect: "Chi la usa attacca con artigli affilati che graffiano il nemico rapidamente e con grande forza.", + }, + frenzyPlant: { + name: "Radicalbero", + effect: "Un groviglio di radici colpisce il nemico. Chi la usa salta il turno successivo.", + }, + bulkUp: { + name: "Granfisico", + effect: "Chi la usa tende i muscoli per gonfiare il corpo, aumentando Difesa e Attacco.", + }, + bounce: { + name: "Rimbalzo", + effect: "Chi la usa balza in alto e ricade sul nemico dopo un turno. Può anche paralizzare.", + }, + mudShot: { + name: "Colpodifango", + effect: "Chi la usa attacca lanciando fango sul nemico. Riduce anche la Velocità.", + }, + poisonTail: { + name: "Velenocoda", + effect: "Chi la usa colpisce con la coda e può avvelenare il nemico. Probabile brutto colpo.", + }, + covet: { + name: "Supplica", + effect: "Chi la usa attacca il bersaglio sorridendo e gli ruba lo strumento che tiene.", + }, + voltTackle: { + name: "Locomovolt", + effect: "Chi la usa si carica di elettricità e poi attacca. Può paralizzare il nemico. Il contraccolpo causa seri danni.", + }, + magicalLeaf: { + name: "Fogliamagica", + effect: "Chi la usa sparpaglia strane foglie che inseguono il bersaglio. Questa mossa è infallibile.", + }, + waterSport: { + name: "Docciascudo", + effect: "Chi la usa s'impregna d'acqua indebolendo le mosse di tipo Fuoco finché resta in campo.", + }, + calmMind: { + name: "Calmamente", + effect: "Chi la usa, meditando, placa il proprio spirito per aumentare l'Attacco Speciale e la Difesa Speciale.", + }, + leafBlade: { + name: "Fendifoglia", + effect: "Colpisce il nemico usando una foglia affilata come una spada. Probabile brutto colpo.", + }, + dragonDance: { + name: "Dragodanza", + effect: "Danza mistica e vigorosa che aumenta l'Attacco e la Velocità di chi la usa.", + }, + rockBlast: { + name: "Cadutamassi", + effect: "Colpisce il nemico con dei massi pesanti lanciati in rapida successione. Il numero di massi varia da due a cinque.", + }, + shockWave: { + name: "Ondashock", + effect: "Chi la usa colpisce il nemico con una scossa di elettricità. È impossibile eludere questa mossa.", + }, + waterPulse: { + name: "Idropulsar", + effect: "Il nemico viene colpito da un getto d'acqua potentissimo che può anche confonderlo.", + }, + doomDesire: { + name: "Desiderio Fatale", + effect: "Intensa luce solare che colpisce il nemico dopo due turni dall'uso della mossa.", + }, + psychoBoost: { + name: "Psicoslancio", + effect: "Chi la usa sferra un potente attacco, ma il contraccolpo riduce di molto il suo Attacco Speciale.", + }, + roost: { + name: "Trespolo", + effect: "Chi la usa sta fermo e riposa, recuperando metà dei propri PS massimi.", + }, + gravity: { + name: "Gravità", + effect: "Intensifica la gravità per cinque turni. Le mosse che fanno volare e Levitazione sono inutilizzabili.", + }, + miracleEye: { + name: "Miracolvista", + effect: "Chi la usa rende i Pokémon di tipo Buio vulnerabili a qualsiasi tipo di mossa e può, inoltre, colpire i nemici sfuggenti.", + }, + wakeUpSlap: { + name: "Svegliopacca", + effect: "Un attacco che infligge doppi danni se il nemico è Addormentato. Inoltre, lo sveglierà dal sonno.", + }, + hammerArm: { + name: "Martelpugno", + effect: "Chi la usa colpisce il nemico con il suo pugno forte e pesante, ma perde Velocità.", + }, + gyroBall: { + name: "Vortexpalla", + effect: "Chi la usa colpisce il nemico con un vortice rapidissimo. Più lento è chi la usa, maggiore è il danno.", + }, + healingWish: { + name: "Curardore", + effect: "Chi la usa va KO, ma il Pokémon che lo sostituisce recupera tutti i PS e risolve i problemi di stato.", + }, + brine: { + name: "Acquadisale", + effect: "Se i PS del nemico sono scesi a metà o meno, questa mossa colpirà con il doppio della potenza.", + }, + naturalGift: { + name: "Dononaturale", + effect: "Chi la usa trae forza dalla Bacca che tiene. Da questa dipendono il tipo e la forza dell'attacco.", + }, + feint: { + name: "Fintoattacco", + effect: "Un attacco che colpisce un nemico che ha usato Protezione od Individua. Ne rimuoverà inoltre gli effetti.", + }, + pluck: { + name: "Spennata", + effect: "Chi la usa becca il bersaglio. Inoltre, se questi tiene una Bacca, gliela ruba e ne sfrutta gli effetti.", + }, + tailwind: { + name: "Ventoincoda", + effect: "Chi la usa crea turbolente raffiche di vento che aumentano la sua Velocità e quella di tutti i Pokémon della squadra.", + }, + acupressure: { + name: "Acupressione", + effect: "Chi la usa esercita pressione su alcuni punti nevralgici e aumenta di molto una statistica a caso.", + }, + metalBurst: { + name: "Metalscoppio", + effect: "Chi la usa si vendica sul nemico che l'ha appena ferito con una mossa anche più potente.", + }, + uTurn: { + name: "Retromarcia", + effect: "Dopo aver selezionato questo attacco, chi la usa colpisce il nemico per poi essere sostituito con un altro Pokémon della squadra.", + }, + closeCombat: { + name: "Zuffa", + effect: "Chi la usa attacca abbassando la guardia. La propria Difesa e la Difesa Speciale si riducono.", + }, + payback: { + name: "Rivincita", + effect: "Chi la usa accumula forza, poi attacca. La potenza raddoppia se agisce dopo il Pokémon nemico.", + }, + assurance: { + name: "Garanzia", + effect: "Se il nemico ha già subito dei danni nello stesso turno, la potenza di questa mossa raddoppia.", + }, + embargo: { + name: "Divieto", + effect: "Impedisce al nemico di usare lo strumento che tiene e al suo Allenatore di usarne altri sul Pokémon.", + }, + fling: { + name: "Lancio", + effect: "Chi la usa lancia sul nemico lo strumento che tiene. La forza e l'effetto dipendono dallo strumento.", + }, + psychoShift: { + name: "Psicotrasfer", + effect: "Con la forza psichica e la suggestione, chi la usa può trasferire i suoi problemi di stato al Pokémon colpito.", + }, + trumpCard: { + name: "Asso", + effect: "Minori PP rimangono a questa mossa, e maggiori danni apporterà al nemico.", + }, + healBlock: { + name: "Anticura", + effect: "Chi la usa impedisce al nemico di utilizzare mosse o abilità recupera-PS per cinque turni.", + }, + wringOut: { + name: "Strizzata", + effect: "Chi la usa stritola con forza il nemico. Più PS ha il nemico, maggiore è la potenza della mossa.", + }, + powerTrick: { + name: "Ingannoforza", + effect: "Mossa psichica che permette a chi la usa di scambiare i valori delle sue statistiche di Attacco e Difesa.", + }, + gastroAcid: { + name: "Gastroacido", + effect: "Chi la usa lancia acidi gastrici sul nemico. Il fluido annulla l'abilità del nemico.", + }, + luckyChant: { + name: "Fortuncanto", + effect: "Chi la usa rivolge un incantesimo al cielo, impedendo al nemico di sferrare brutti colpi alla squadra.", + }, + meFirst: { + name: "Precedenza", + effect: "Se chi la usa è più veloce del nemico, gli ruba la mossa e gliela ritorce contro con potenza persino maggiore.", + }, + copycat: { + name: "Copione", + effect: "Chi la usa imita l'ultima mossa usata dal nemico. La mossa fallisce se questo non ha selezionato alcuna mossa.", + }, + powerSwap: { + name: "Barattoforza", + effect: "Chi la usa sfrutta la sua forza psichica per scambiare le modifiche ad Attacco e Attacco Speciale con il bersaglio.", + }, + guardSwap: { + name: "Barattoscudo", + effect: "Chi la usa sfrutta la sua forza psichica per scambiare le modifiche a Difesa e a Difesa Speciale con il bersaglio.", + }, + punishment: { + name: "Punizione", + effect: "Questa mossa diventa più potente ogni volta che il nemico aumenta le proprie statistiche.", + }, + lastResort: { + name: "Ultimascelta", + effect: "Per usare questa mossa, bisogna prima avvalersi in lotta di tutte le altre mosse conosciute.", + }, + worrySeed: { + name: "Affannoseme", + effect: "Un seme che causa ansia viene piantato sul bersaglio. Ne muta l'abilità in Insonnia e ne previene o rimuove il sonno.", + }, + suckerPunch: { + name: "Sbigoattacco", + effect: "Chi la usa può attaccare per primo. Fallisce se il nemico non sta preparando un attacco.", + }, + toxicSpikes: { + name: "Fielepunte", + effect: "Chi la usa piazza ai piedi del nemico delle punte avvelenate. Avvelena ogni nemico che entra in lotta.", + }, + heartSwap: { + name: "Cuorbaratto", + effect: "Chi la usa sfrutta la sua forza psichica per scambiare le modifiche alle statistiche con il bersaglio.", + }, + aquaRing: { + name: "Acquanello", + effect: "Chi la usa si avvolge in un velo d'acqua. Recupera alcuni PS ad ogni turno.", + }, + magnetRise: { + name: "Magnetascesa", + effect: "Chi la usa si solleva in aria per cinque turni grazie a un campo elettromagnetico.", + }, + flareBlitz: { + name: "Fuococarica", + effect: "Chi la usa si ricopre di fuoco e carica il bersaglio, ma subisce il contraccolpo. Può anche scottare.", + }, + forcePalm: { + name: "Palmoforza", + effect: "Chi la usa attacca con un'onda d'urto che può anche paralizzare il bersaglio.", + }, + auraSphere: { + name: "Sferapulsar", + effect: "Chi la usa rilascia una forza eterea dal profondo del corpo. La mossa è infallibile.", + }, + rockPolish: { + name: "Lucidatura", + effect: "Chi la usa leviga il proprio corpo per ridurne l'attrito. Aumenta di molto la Velocità.", + }, + poisonJab: { + name: "Velenpuntura", + effect: "Il nemico viene colpito con un tentacolo od un braccio intriso di veleno. Può anche avvelenarlo.", + }, + darkPulse: { + name: "Neropulsar", + effect: "Chi la usa emana un'aura impregnata di oscuri pensieri. Può anche far tentennare il Pokémon colpito.", + }, + nightSlash: { + name: "Nottesferza", + effect: "Chi la usa colpisce il nemico appena si presenta l'occasione. Probabile brutto colpo.", + }, + aquaTail: { + name: "Idrondata", + effect: "Chi la usa attacca agitando la coda come se fosse una violenta ondata in una tempesta furiosa.", + }, + seedBomb: { + name: "Semebomba", + effect: "Chi la usa emette una raffica di semi dal guscio duro che colpiscono il bersaglio dall'alto.", + }, + airSlash: { + name: "Eterelama", + effect: "Chi la usa attacca con un vento tagliente che squarcia il cielo. Può anche far tentennare il Pokémon colpito.", + }, + xScissor: { + name: "Forbice X", + effect: "Chi la usa colpisce il nemico usando le sue falci o artigli come se fossero un paio di forbici.", + }, + bugBuzz: { + name: "Ronzio", + effect: "Chi la usa muove le ali per creare un suono che danneggia il nemico. Può anche ridurne la Difesa Speciale.", + }, + dragonPulse: { + name: "Dragopulsar", + effect: "Chi la usa attacca un'onda d'urto generata spalancando la bocca.", + }, + dragonRush: { + name: "Dragofuria", + effect: "Chi la usa attacca con fare minaccioso e in questo modo può anche far tentennare il nemico.", + }, + powerGem: { + name: "Gemmoforza", + effect: "Chi la usa attacca con un raggio di luce che brilla come se fosse fatto di pietre preziose.", + }, + drainPunch: { + name: "Assorbipugno", + effect: "Pugno che assorbe energia. Fa recuperare una quantità di PS pari alla metà del danno inferto.", + }, + vacuumWave: { + name: "Vuotonda", + effect: "Chi la usa rotea i pugni per lanciare un'onda di vuoto assoluto verso il nemico. Attacca per primo.", + }, + focusBlast: { + name: "Focalcolpo", + effect: "Chi la usa incrementa la sua concentrazione mentale per scatenare il suo potere. Può ridurre la Difesa Speciale del nemico.", + }, + energyBall: { + name: "Energipalla", + effect: "Chi la usa attinge energia dalla natura e la scaglia contro il bersaglio. Può anche ridurne la Difesa Speciale.", + }, + braveBird: { + name: "Baldeali", + effect: "Chi la usa si nasconde sotto le ali e carica da bassa quota. Tuttavia, subisce considerevoli danni.", + }, + earthPower: { + name: "Geoforza", + effect: "Dal terreno sotto il nemico si sprigiona una forza devastante. Può anche ridurne la Difesa Speciale.", + }, + switcheroo: { + name: "Rapidscambio", + effect: "Chi la usa scambia in maniera fulminea il proprio oggetto con quello del nemico.", + }, + gigaImpact: { + name: "Gigaimpatto", + effect: "Chi la usa carica il nemico usando tutta la sua forza, ma al turno successivo deve riposare.", + }, + nastyPlot: { + name: "Congiura", + effect: "Chi la usa stimola il cervello pensando a cose cattive. Aumenta di molto l'Attacco Speciale.", + }, + bulletPunch: { + name: "Pugnoscarica", + effect: "Chi la usa attacca con una scarica di pugni veloci come proiettili. Con questa mossa si colpisce per primi.", + }, + avalanche: { + name: "Slavina", + effect: "Un attacco che infligge doppi danni se l'utilizzatore ha subito un attacco nello stesso turno.", + }, + iceShard: { + name: "Geloscheggia", + effect: "Chi la usa crea dei pezzi di ghiaccio e li lancia. Con questa mossa si colpisce per primi.", + }, + shadowClaw: { + name: "Ombrartigli", + effect: "Chi la usa attacca con artigli d'ombra che colpiscono con gran forza. Probabile brutto colpo.", + }, + thunderFang: { + name: "Fulmindenti", + effect: "Chi la usa morde con denti elettrificati che possono anche paralizzare o far tentennare il nemico.", + }, + iceFang: { + name: "Gelodenti", + effect: "Chi la usa morde il nemico con denti di ghiaccio. Può causare congelamento e tentennamento.", + }, + fireFang: { + name: "Rogodenti", + effect: "Chi la usa morde il nemico con denti infuocati. Può causare scottatura e tentennamento.", + }, + shadowSneak: { + name: "Furtivombra", + effect: "Chi la usa estende la sua ombra e attacca il nemico alle spalle. Con questa mossa si colpisce per primi.", + }, + mudBomb: { + name: "Pantanobomba", + effect: "Chi la usa lancia dure palle di fango sul nemico. Può anche ridurne la Precisione.", + }, + psychoCut: { + name: "Psicotaglio", + effect: "Chi la usa colpisce il nemico con lame fatte di forza psichica. Probabile brutto colpo.", + }, + zenHeadbutt: { + name: "Cozzata Zen", + effect: "Chi la usa concentra la forza nella testa e si lancia contro il nemico. Può anche farlo tentennare.", + }, + mirrorShot: { + name: "Cristalcolpo", + effect: "Chi la usa colpisce il nemico lanciando fasci d'energia dal suo corpo. Può ridurne la precisione.", + }, + flashCannon: { + name: "Cannonflash", + effect: "Chi la usa attacca raccogliendo e rilasciando energia luminosa. Può ridurre la Difesa Speciale del nemico.", + }, + rockClimb: { + name: "Scalaroccia", + effect: "Chi la usa carica con impeto incredibile. Il colpo può confondere il nemico.", + }, + defog: { + name: "Scacciabruma", + effect: "Chi la usa spazza via barriere come Riflesso e Schermoluce con un forte vento e riduce la capacità d'elusione del nemico.", + }, + trickRoom: { + name: "Distortozona", + effect: "Chi la usa crea una dimensione in cui i Pokémon più lenti si muovono per primi per cinque turni.", + }, + dracoMeteor: { + name: "Dragobolide", + effect: "Attacca con meteore che cadono dal cielo. Il contraccolpo fa calare di molto l'Attacco Speciale di chi la usa.", + }, + discharge: { + name: "Scarica", + effect: "Chi la usa colpisce i Pokémon che ha intorno con un bagliore elettrico. Può anche causare paralisi.", + }, + lavaPlume: { + name: "Lavasbuffo", + effect: "Chi la usa lancia fiamme scarlatte sugli altri Pokémon in campo. Può anche scottare.", + }, + leafStorm: { + name: "Verdebufera", + effect: "Si forma una tempesta di foglie affilate. Il contraccolpo riduce di molto l'Attacco Speciale di chi la usa.", + }, + powerWhip: { + name: "Vigorcolpo", + effect: "Chi la usa agita violentemente liane o tentacoli per sferzare il bersaglio.", + }, + rockWrecker: { + name: "Devastomasso", + effect: "Chi la usa attacca il nemico con un enorme masso, ma si deve riposare al turno successivo.", + }, + crossPoison: { + name: "Velenocroce", + effect: "Attacco con zanne avvelenate che può anche avvelenare il Pokémon colpito. Probabile brutto colpo.", + }, + gunkShot: { + name: "Sporcolancio", + effect: "Chi la usa attacca il nemico con rifiuti sudici che possono anche avvelenarlo.", + }, + ironHead: { + name: "Metaltestata", + effect: "Chi la usa colpisce il nemico con la sua testa dura come l'acciaio. Può anche farlo tentennare.", + }, + magnetBomb: { + name: "Bombagnete", + effect: "Chi la usa lancia bombe d'acciaio che si attaccano al nemico. Una mossa infallibile.", + }, + stoneEdge: { + name: "Pietrataglio", + effect: "Chi la usa colpisce il nemico dal basso con pietre affilate. Probabile brutto colpo.", + }, + captivate: { + name: "Incanto", + effect: "Se il nemico è del sesso opposto di chi la usa, sarà ammaliato e il suo Attacco Speciale diminuirà di molto.", + }, + stealthRock: { + name: "Levitoroccia", + effect: "Chi la usa piazza una trappola di rocce sospese che danneggia i nemici che entrano in lotta.", + }, + grassKnot: { + name: "Laccioerboso", + effect: "Chi la usa intrappola il bersaglio con l'erba e lo fa cadere. Danneggia maggiormente i Pokémon più pesanti.", + }, + chatter: { + name: "Schiamazzo", + effect: "Chi la usa attacca creando un'onda sonora con le parole imparate. Può anche confondere il nemico.", + }, + judgment: { + name: "Giudizio", + effect: "Chi la usa rilascia numerosi colpi di luce. Il tipo varia a seconda della Lastra tenuta.", + }, + bugBite: { + name: "Coleomorso", + effect: "Chi la usa morde il nemico. Inoltre, se questi tiene una Bacca, gliela ruba e ne sfrutta gli effetti.", + }, + chargeBeam: { + name: "Raggioscossa", + effect: "Chi la usa lancia un fascio di elettricità molto intensa. Può anche aumentare il suo Attacco Speciale.", + }, + woodHammer: { + name: "Mazzuolegno", + effect: "Chi la usa si lancia con tutto il corpo contro il bersaglio, ma subisce anche considerevoli danni.", + }, + aquaJet: { + name: "Acquagetto", + effect: "Chi la usa colpisce sempre per primo e a una tale velocità da rendersi quasi invisibile.", + }, + attackOrder: { + name: "Comandourto", + effect: "Chi la usa raduna i suoi sgherri per colpire il nemico. Probabile brutto colpo.", + }, + defendOrder: { + name: "Comandoscudo", + effect: "Chi la usa raduna i suoi sgherri per creare uno scudo, aumentando Difesa e Difesa Speciale.", + }, + healOrder: { + name: "Comandocura", + effect: "Chi la usa raduna i propri sgherri per farsi curare. Recupera metà dei PS massimi.", + }, + headSmash: { + name: "Zuccata", + effect: "Chi la usa attacca con tutta la potenza di cui dispone, ma subisce danni considerevoli.", + }, + doubleHit: { + name: "Doppiosmash", + effect: "Chi la usa colpisce il nemico con la coda due volte di fila.", + }, + roarOfTime: { + name: "Fragortempo", + effect: "Chi la usa colpisce il nemico con una forza capace di alterare il tempo, ma deve stare fermo il turno dopo.", + }, + spacialRend: { + name: "Fendispazio", + effect: "Chi la usa lacera il nemico e lo spazio che lo circonda. Probabile brutto colpo.", + }, + lunarDance: { + name: "Lunardanza", + effect: "Chi la usa va KO. Il Pokémon che lo sostituisce risolve i propri problemi di stato e recupera PS e PP.", + }, + crushGrip: { + name: "Sbriciolmano", + effect: "Colpisce il nemico con grande forza. Più PS ha il nemico, maggiore è la potenza della mossa.", + }, + magmaStorm: { + name: "Magmaclisma", + effect: "Intrappola il nemico in un turbine di fuoco che dura per quattro o cinque turni.", + }, + darkVoid: { + name: "Vuototetro", + effect: "Trascina i nemici in un mondo di totale oscurità e li fa addormentare.", + }, + seedFlare: { + name: "Infuriaseme", + effect: "Chi la usa genera un'onda d'urto dal suo corpo. Può anche ridurre di molto la Difesa Speciale del bersaglio.", + }, + ominousWind: { + name: "Funestovento", + effect: "Chi la usa crea una raffica di vento ripugnante. Può aumentare tutte le statistiche di chi la usa.", + }, + shadowForce: { + name: "Oscurotuffo", + effect: "Chi la usa sparisce e poi colpisce il nemico al turno successivo. Evita pure Protezione o Individua.", + }, + honeClaws: { + name: "Unghiaguzze", + effect: "Chi la usa affila i propri artigli, aumentando Attacco e precisione.", + }, + wideGuard: { + name: "Bodyguard", + effect: "Chi la usa para tutti i colpi diretti alla intera squadra per un turno. Se usata in successione può fallire.", + }, + guardSplit: { + name: "Paridifesa", + effect: "Chi la usa sfrutta la sua forza psichica per sommare Difesa e Difesa Speciale a quelle del bersaglio e dividerle equamente.", + }, + powerSplit: { + name: "Pariattacco", + effect: "Chi la usa sfrutta la sua forza psichica per sommare Attacco e Attacco Speciale a quelli del bersaglio e dividerli equamente.", + }, + wonderRoom: { + name: "Mirabilzona", + effect: "Chi la usa crea una dimensione in cui Difesa e Difesa Speciale di tutti i Pokémon vengono scambiate per cinque turni.", + }, + psyshock: { + name: "Psicoshock", + effect: "Chi la usa attacca il bersaglio facendo materializzare un misterioso raggio psichico che provoca danni fisici.", + }, + venoshock: { + name: "Velenoshock", + effect: "Lancia uno speciale liquido tossico sul bersaglio. Se questi è avvelenato, il danno provocato raddoppia.", + }, + autotomize: { + name: "Sganciapesi", + effect: "Chi la usa si libera di tutti i pesi in eccesso, alleggerendosi e aumentando di molto la propria Velocità.", + }, + ragePowder: { + name: "Polverabbia", + effect: "Chi la usa attira l'attenzione dei nemici cospargendosi di una polvere irritante e diventando bersaglio di tutti gli attacchi.", + }, + telekinesis: { + name: "Telecinesi", + effect: "Chi la usa fa fluttuare in aria il bersaglio, rendendolo facile da colpire per tre turni.", + }, + magicRoom: { + name: "Magicozona", + effect: "Chi la usa crea una dimensione in cui l'effetto degli strumenti tenuti da tutti i Pokémon è annullato per cinque turni.", + }, + smackDown: { + name: "Abbattimento", + effect: "Chi la usa lancia una pietra o un proiettile. Può colpire anche un bersaglio in volo e farlo cadere.", + }, + stormThrow: { + name: "Tempestretta", + effect: "Chi la usa sferra un colpo micidiale al bersaglio, stritolandolo. Brutto colpo assicurato.", + }, + flameBurst: { + name: "Pirolancio", + effect: "Chi la usa emana una fiammata che colpisce il bersaglio e si propaga fino a raggiungere i Pokémon accanto.", + }, + sludgeWave: { + name: "Fangonda", + effect: "Lancia un'onda di fango che attacca tutti i Pokémon nelle vicinanze. Può anche avvelenare.", + }, + quiverDance: { + name: "Eledanza", + effect: "Danza leggiadra ed elegante che aumenta l'Attacco Speciale, la Difesa Speciale e la Velocità di chi la usa.", + }, + heavySlam: { + name: "Pesobomba", + effect: "Chi la usa si lancia contro il bersaglio con tutto il proprio peso. Più è pesante rispetto ad esso e più danni causa.", + }, + synchronoise: { + name: "Sincrumore", + effect: "Chi la usa infligge danni a tutti i Pokémon del suo stesso tipo che ha vicino usando misteriose onde elettromagnetiche.", + }, + electroBall: { + name: "Energisfera", + effect: "Chi la usa attacca con una sfera d'energia elettrica. Più è rapido rispetto al bersaglio e più danni arreca.", + }, + soak: { + name: "Inondazione", + effect: "Chi la usa proietta un lungo getto d'acqua contro il bersaglio e lo rende un Pokémon di tipo Acqua.", + }, + flameCharge: { + name: "Nitrocarica", + effect: "Chi la usa si copre di fuoco e attacca il bersaglio. Concentrandosi aumenta, inoltre, la propria Velocità.", + }, + coil: { + name: "Arrotola", + effect: "Chi la usa si concentra, aumentando Attacco, Difesa e precisione.", + }, + lowSweep: { + name: "Calciobasso", + effect: "Chi la usa colpisce con un attacco fulmineo la parte inferiore del corpo del bersaglio, riducendone la Velocità.", + }, + acidSpray: { + name: "Acidobomba", + effect: "Chi la usa attacca il bersaglio con un acido altamente corrosivo. Il fluido riduce di molto la Difesa Speciale del bersaglio.", + }, + foulPlay: { + name: "Ripicca", + effect: "Chi la usa sfrutta la forza del bersaglio. Il danno inflitto è proporzionale all'Attacco dell'avversario.", + }, + simpleBeam: { + name: "Ondisinvolta", + effect: "Chi la usa emette un misterioso raggio psichico che trasforma l'abilità del Pokémon colpito in Disinvoltura.", + }, + entrainment: { + name: "Saltamicizia", + effect: "Chi la usa saltella con un buffo ritmo, invitando il bersaglio a imitarlo e rendendo la sua abilità identica alla propria.", + }, + afterYou: { + name: "Cortesia", + effect: "Chi la usa aiuta un bersaglio più lento permettendogli di agire subito dopo.", + }, + round: { + name: "Coro", + effect: "Attacca il bersaglio con una melodia. Se usata ripetutamente da uno o più Pokémon i danni inflitti aumentano.", + }, + echoedVoice: { + name: "Echeggiavoce", + effect: "Attacca il bersaglio con la propria voce echeggiante. Se usata a ripetizione da uno o più Pokémon il danno aumenta.", + }, + chipAway: { + name: "Insidia", + effect: "Chi la usa attacca non appena il bersaglio abbassa la guardia. Il danno inflitto prescinde dalle modifiche alle statistiche.", + }, + clearSmog: { + name: "Pulifumo", + effect: "Attacca il bersaglio lanciandogli contro una nuvola di fumo speciale, che annulla ogni modifica alle statistiche.", + }, + storedPower: { + name: "Veicolaforza", + effect: "Attacca il bersaglio con l'energia accumulata. Più sono state aumentate le statistiche, maggiore è il danno inflitto.", + }, + quickGuard: { + name: "Anticipo", + effect: "Chi la usa protegge tutta la squadra dalle mosse dei nemici che fanno colpire per primi. Se usata in successione può fallire.", + }, + allySwitch: { + name: "Cambiaposto", + effect: "Chi la usa si teletrasporta al posto di un compagno in campo, grazie ad un misterioso potere.", + }, + scald: { + name: "Idrovampata", + effect: "Chi la usa attacca il bersaglio con un getto d'acqua bollente che può anche scottarlo.", + }, + shellSmash: { + name: "Gettaguscio", + effect: "Chi la usa si disfa del guscio. Difesa e Dif. Sp. calano, ma aumentano di molto Attacco, Att. Sp. e Velocità.", + }, + healPulse: { + name: "Curapulsar", + effect: "Chi la usa lancia un'onda rilassante che fa recuperare al bersaglio metà dei suoi PS massimi.", + }, + hex: { + name: "Sciagura", + effect: "Attacco che causa un danno enorme se il bersaglio ha problemi di stato.", + }, + skyDrop: { + name: "Cadutalibera", + effect: "Porta il bersaglio in cielo e lo scaglia a terra al turno successivo. Il bersaglio catturato non può muoversi.", + }, + shiftGear: { + name: "Cambiomarcia", + effect: "Facendo ruotare gli ingranaggi, chi la usa aumenta non solo il proprio Attacco, ma anche di molto la propria Velocità.", + }, + circleThrow: { + name: "Ribaltiro", + effect: "Il bersaglio è scaraventato via ed è costretto a lasciare il posto a un altro. Se è selvatico, la lotta finisce.", + }, + incinerate: { + name: "Bruciatutto", + effect: "Attacca il nemico con una fiammata. Se il nemico ha una Bacca, viene divorata dalle fiamme.", + }, + quash: { + name: "Spintone", + effect: "Chi la usa trattiene il bersaglio, costringendolo ad agire per ultimo.", + }, + acrobatics: { + name: "Acrobazia", + effect: "Attacca rapidamente il bersaglio. Se chi la usa non ha uno strumento, infligge al nemico grossi danni.", + }, + reflectType: { + name: "Riflettipo", + effect: "Chi la usa cambia il proprio tipo in quello del bersaglio.", + }, + retaliate: { + name: "Nemesi", + effect: "Vendica un compagno messo KO. Se ciò è accaduto al turno precedente, il danno è maggiore.", + }, + finalGambit: { + name: "Azzardo", + effect: "Chi la usa attacca con tutta la potenza di cui dispone e va KO, ma infligge al bersaglio un danno pari ai PS che ha perso.", + }, + bestow: { + name: "Cediregalo", + effect: "Chi la usa consegna il proprio strumento al bersaglio se ne è sprovvisto.", + }, + inferno: { + name: "Marchiatura", + effect: "Il bersaglio viene avvolto da intense fiammate che causano scottature.", + }, + waterPledge: { + name: "Acquapatto", + effect: "Attacca il nemico con una colonna d'acqua. Se usata con Fiammapatto, aumentano gli effetti e un arcobaleno appare in cielo.", + }, + firePledge: { + name: "Fiammapatto", + effect: "Attacca il nemico con una colonna di fuoco. Se usata con Erbapatto, aumentano gli effetti e il campo diventa un mare di fuoco.", + }, + grassPledge: { + name: "Erbapatto", + effect: "Attacca il bersaglio con una colonna d'erba. Se usata con Acquapatto, gli effetti aumentano e il campo diventa una palude.", + }, + voltSwitch: { + name: "Invertivolt", + effect: "Chi usa questa mossa fa marcia indietro per farsi sostituire dopo aver sferrato l'attacco.", + }, + struggleBug: { + name: "Entomoblocco", + effect: "Colpisce i nemici opponendo resistenza e riducendo il loro Attacco Speciale.", + }, + bulldoze: { + name: "Battiterra", + effect: "Chi la usa calpesta il terreno e scatena un terremoto che danneggia tutti i Pokémon nei paraggi e ne riduce anche la Velocità.", + }, + frostBreath: { + name: "Alitogelido", + effect: "Chi la usa attacca il bersaglio con un soffio d'aria gelida. Brutto colpo assicurato.", + }, + dragonTail: { + name: "Codadrago", + effect: "Chi la usa fa volar via il bersaglio in modo che venga sostituito. Se il bersaglio è un Pokémon selvatico, la lotta finisce.", + }, + workUp: { + name: "Cuordileone", + effect: "Chi la usa si tira su di morale, aumentando il proprio Attacco e l'Attacco Speciale.", + }, + electroweb: { + name: "Elettrotela", + effect: "Chi la usa attacca i nemici catturandoli con una ragnatela elettrica e riducendone la Velocità.", + }, + wildCharge: { + name: "Sprizzalampo", + effect: "Chi la usa si carica di elettricità per poi scagliarsi sul bersaglio, ma subisce dei danni per il contraccolpo.", + }, + drillRun: { + name: "Giravvita", + effect: "Chi la usa si scaglia sul bersaglio ruotando su se stesso come un trapano perforante. Probabile brutto colpo.", + }, + dualChop: { + name: "Doppiocolpo", + effect: "Chi la usa attacca due volte il bersaglio con dei colpi estremamente forti.", + }, + heartStamp: { + name: "Cuorestampo", + effect: "Chi la usa distrae il nemico con un faccino innocente per poi sferrargli un colpo devastante che può farlo tentennare.", + }, + hornLeech: { + name: "Legnicorno", + effect: "Chi la usa infilza il bersaglio con le corna e assorbe una quantità di PS pari a metà del danno inferto.", + }, + sacredSword: { + name: "Spadasolenne", + effect: "Chi la usa taglia il nemico con una spada magica. Il danno inflitto ignora le modifiche alle statistiche del bersaglio.", + }, + razorShell: { + name: "Conchilama", + effect: "Chi la usa colpisce il bersaglio con il suo guscio affilato. Il colpo può anche ridurre la Difesa del bersaglio.", + }, + heatCrash: { + name: "Marchiafuoco", + effect: "Chi la usa carica con il suo corpo rovente. Più è pesante rispetto al bersaglio e più danni causa.", + }, + leafTornado: { + name: "Vorticerba", + effect: "Chi la usa avvolge e attacca il bersaglio con foglie affilate che possono anche ridurne la precisione.", + }, + steamroller: { + name: "Rulloduro", + effect: "Chi la usa ruota su se stesso ad alta velocità e schiaccia il bersaglio. Può anche farlo tentennare.", + }, + cottonGuard: { + name: "Cotonscudo", + effect: "Chi la usa avvolge il proprio corpo con del cotone molto morbido, proteggendosi e aumentando moltissimo la propria Difesa.", + }, + nightDaze: { + name: "Urtoscuro", + effect: "Chi la usa attacca il bersaglio con un'onda d'urto oscura che può ridurne la precisione.", + }, + psystrike: { + name: "Psicobotta", + effect: "Chi la usa attacca il bersaglio facendo materializzare un misterioso raggio psichico che provoca danni fisici.", + }, + tailSlap: { + name: "Spazzasberla", + effect: "Chi la usa colpisce il bersaglio con la sua coda dura da due a cinque volte di fila.", + }, + hurricane: { + name: "Tifone", + effect: "Chi la usa attacca il bersaglio avvolgendolo con un vento fortissimo. Può anche confonderlo.", + }, + headCharge: { + name: "Ricciolata", + effect: "Chi la usa carica il bersaglio con la sua testa in stile afro, ma subisce un po' di danni per il contraccolpo.", + }, + gearGrind: { + name: "Ingracolpo", + effect: "Chi la usa colpisce il bersaglio due volte di fila lanciandogli contro dei dischi d'acciaio.", + }, + searingShot: { + name: "Sparafuoco", + effect: "Chi la usa lancia fiamme scarlatte sui Pokémon intorno a sé. Può anche scottare.", + }, + technoBlast: { + name: "Tecnobotto", + effect: "Chi la usa rilascia un colpo di luce contro il bersaglio. Il tipo varia a seconda del modulo che ha.", + }, + relicSong: { + name: "Cantoantico", + effect: "Chi la usa attacca i nemici intonando un'antica melodia che colpisce il loro spirito. Può anche farli addormentare.", + }, + secretSword: { + name: "Spadamistica", + effect: "Chi la usa attacca il bersaglio tagliandolo con una spada mistica. La misteriosa energia sprigionata provoca danni fisici.", + }, + glaciate: { + name: "Gelamondo", + effect: "Chi la usa attacca i nemici con una folata d'aria gelida e ne riduce anche la Velocità.", + }, + boltStrike: { + name: "Lucesiluro", + effect: "Colpisce il bersaglio con una possente carica elettrica e può anche paralizzarlo.", + }, + blueFlare: { + name: "Fuocoblu", + effect: "Chi la usa attacca il bersaglio avvolgendolo con magnifiche e intense fiamme blu che possono anche scottarlo.", + }, + fieryDance: { + name: "Voldifuoco", + effect: "Chi la usa avvolge il bersaglio tra le fiamme. Può anche aumentare l'Attacco Speciale.", + }, + freezeShock: { + name: "Elettrogelo", + effect: "Chi la usa lancia contro il nemico al turno successivo una sfera di ghiaccio ricoperta di elettricità. Può anche paralizzarlo.", + }, + iceBurn: { + name: "Vampagelida", + effect: "Chi la usa attacca il bersaglio al turno successivo e lo avvolge in un soffio d'aria congelata. Può anche scottarlo.", + }, + snarl: { + name: "Urlorabbia", + effect: "Chi la usa si mette a urlare per un po', riducendo l'Attacco Speciale dei nemici.", + }, + icicleCrash: { + name: "Scagliagelo", + effect: "Chi la usa attacca violentemente il nemico con grosse stalattiti di ghiaccio che possono anche farlo tentennare.", + }, + vCreate: { + name: "Generatore V", + effect: "Chi la usa carica emettendo fiamme ardenti dalla fronte, a costo di una riduzione di Difesa, Difesa Speciale e Velocità.", + }, + fusionFlare: { + name: "Incrofiamma", + effect: "Chi la usa lancia una fiammata enorme. Se usata in combinazione con Incrotuono, il danno provocato dalla mossa aumenta.", + }, + fusionBolt: { + name: "Incrotuono", + effect: "Chi la usa lancia un fulmine enorme. Se usata in combinazione con Incrofiamma, il danno provocato dalla mossa aumenta.", + }, + flyingPress: { + name: "Schiacciatuffo", + effect: "Chi la usa si tuffa sul bersaglio dall'alto. È una mossa di tipo Lotta e Volante allo stesso tempo.", + }, + matBlock: { + name: "Ribaltappeto", + effect: "Chi la usa protegge se stesso e i propri alleati dai danni di mosse nemiche, adoperando un tappetino come scudo. Non è efficace contro mosse di stato.", + }, + belch: { + name: "Rutto", + effect: "Chi la usa attacca il bersaglio con un rutto potente. Per utilizzare questa mossa, il Pokémon deve mangiare la bacca che possiede.", + }, + rototiller: { + name: "Aracampo", + effect: "Chi la usa dissoda la terra per far crescere meglio l'erba. Questa mossa aumenta l'attacco e l'attacco speciale dei Pokémon di tipo Erba.", + }, + stickyWeb: { + name: "Rete Vischiosa", + effect: "Chi la usa intreccia una rete appiccicosa attorno alla squadra avversaria, diminuendo la Velocità dei Pokémon nemici che entreranno in campo.", + }, + fellStinger: { + name: "Pungiglione", + effect: "L'Attacco di chi la usa aumenta notevolmente se grazie alla mossa il bersaglio va KO.", + }, + phantomForce: { + name: "Spettrotuffo", + effect: "Chi la usa scompare improvvisamente per attaccare poi nel turno seguente. Questa mossa neutralizza le difese del bersaglio.", + }, + trickOrTreat: { + name: "Halloween", + effect: "Il bersaglio viene invitato a festeggiare Halloween e aggiunge così al proprio tipo anche il tipo Spettro.", + }, + nobleRoar: { + name: "Urlo", + effect: "Chi la usa emette un urlo potente che intimidisce il bersaglio, riducendone l'Attacco e l'Attacco Speciale.", + }, + ionDeluge: { + name: "Pioggiaplasma", + effect: "Chi la usa disperde delle particelle elettrizzate che trasformano le mosse di tipo Normale in mosse di tipo Elettro.", + }, + parabolicCharge: { + name: "Caricaparabola", + effect: "Chi la usa attacca tutto ciò che lo circonda e recupera PS pari alla metà del danno inflitto.", + }, + forestsCurse: { + name: "Boscomalocchio", + effect: "Il Pokémon invoca la maledizione del bosco sul bersaglio, che acquisisce così anche il tipo Erba.", + }, + petalBlizzard: { + name: "Fiortempesta", + effect: "Infligge danni ai Pokémon che ha intorno attaccandoli con una tempesta di fiori.", + }, + freezeDry: { + name: "Liofilizzazione", + effect: "Chi la usa raffredda rapidamente il bersaglio. Può anche congelarlo. Questa mossa è superefficace contro i Pokémon Acqua.", + }, + disarmingVoice: { + name: "Incantavoce", + effect: "Chi la usa infligge un danno spirituale ai nemici nei paraggi con una voce suadente. L'attacco andrà immancabilmente a segno.", + }, + partingShot: { + name: "Monito", + effect: "Nessuna descrizione disponibile.", + }, + topsyTurvy: { + name: "Sottosopra", + effect: "Inverte tutte le modifiche alle statistiche del Pokémon bersaglio.", + }, + drainingKiss: { + name: "Assorbibacio", + effect: "Un bacio fatato che assorbe le energie al nemico.", + }, + craftyShield: { + name: "Truccodifesa", + effect: "Chi la usa protegge se stesso e i suoi alleati usando un potere misterioso. Non blocca le mosse che infliggono danno.", + }, + flowerShield: { + name: "Fiordifesa", + effect: "Grazie a un misterioso potere, aumenta la Difesa di tutti i Pokémon di tipo Erba presenti in campo.", + }, + grassyTerrain: { + name: "Campo Erboso", + effect: "Per cinque turni trasforma il terreno di lotta in un campo erboso, facendo recuperare PS ai Pokémon a terra in ogni turno.", + }, + mistyTerrain: { + name: "Campo Nebbioso", + effect: "Per cinque turni trasforma il terreno di lotta in un campo nebbioso, impedendo ai Pokémon a terra di essere colpiti da problemi di stato.", + }, + electrify: { + name: "Elettrocontagio", + effect: "Se si contagia il bersaglio prima che usi la sua mossa, per quel turno le sue mosse saranno di tipo Elettro.", + }, + playRough: { + name: "Carineria", + effect: "Chi la usa attacca il bersaglio con delle carinerie. Può anche ridurne l'attacco.", + }, + fairyWind: { + name: "Vento di Fata", + effect: "Attacca con un forte vento fatato.", + }, + moonblast: { + name: "Forza Lunare", + effect: "Accumula la forza proveniente dalla luna e la libera sul nemico. Può ridurre l'Attacco Speciale.", + }, + boomburst: { + name: "Ondaboato", + effect: "Colpisce i Pokémon che ha intorno con la forza di un boato distruttivo.", + }, + fairyLock: { + name: "Blocco Fatato", + effect: "Bloccando il campo di battaglia, chi la usa impedisce a tutti i Pokémon di fuggire durante il prossimo turno.", + }, + kingsShield: { + name: "Scudo Reale", + effect: "L'utilizzatore assume una posizione difensiva mentre si difende. Riduce inoltre l'Attacco di ogni utilizzatore di mosse da contatto.", + }, + playNice: { + name: "Simpatia", + effect: "Chi la usa diventa amico del bersaglio, rabbonendolo e riducendone così l'Attacco.", + }, + confide: { + name: "Confidenza", + effect: "Chi la usa svela dei segreti al bersaglio, distraendolo e riducendone l'Attacco Speciale.", + }, + diamondStorm: { + name: "Diamantempesta", + effect: "Colpisce i nemici che ha intorno con una tempesta di diamanti. Può anche aumentare la Difesa di chi la usa.", + }, + steamEruption: { + name: "Vaporscoppio", + effect: "Travolge il bersaglio con un'ondata di vapore rovente che può anche scottarlo.", + }, + hyperspaceHole: { + name: "Forodimensionale", + effect: "Chi la usa, sfrutta un passaggio interdimensionale per comparire a fianco del bersaglio e colpirlo, eludendo mosse come Protezione e Individua.", + }, + waterShuriken: { + name: "Acqualame", + effect: "Chi la usa attacca sempre per primo, colpendo il bersaglio con uno shuriken di muco da due a cinque volte di fila.", + }, + mysticalFire: { + name: "Magifiamma", + effect: "Colpisce il bersaglio soffiandogli contro delle fiammate incredibilmente roventi, riducendone l'Attacco Speciale.", + }, + spikyShield: { + name: "Agodifesa", + effect: "Protegge dagli attacchi, riducendo inoltre i PS dei Pokémon che entrano in contatto con chi la usa.", + }, + aromaticMist: { + name: "Nebularoma", + effect: "Aumenta la Difesa Speciale di un alleato tramite un misterioso aroma.", + }, + eerieImpulse: { + name: "Elettromistero", + effect: "Il corpo dell'utilizzatore genera un impulso misterioso. Esponendovi il bersaglio, ne riduce di molto l'Attacco Speciale.", + }, + venomDrench: { + name: "Velenotrappola", + effect: "Emette un liquido particolare che riduce l'Attacco, l'Attacco Speciale e la Velocità dei nemici avvelenati intorno a chi la usa.", + }, + powder: { + name: "Pulviscoppio", + effect: "Il bersaglio viene coperto da un pulviscolo che esplode danneggiandolo se questi utilizza una mossa di tipo Fuoco nello stesso turno.", + }, + geomancy: { + name: "Geocontrollo", + effect: "Un'energia pura forza della natura si sprigiona per tutto il campo.", + }, + magneticFlux: { + name: "Controllo Polare", + effect: "Tramite il controllo dei campi magnetici, aumenta la Difesa e la Difesa Speciale dei Pokémon alleati dotati dell'abilità Più o Meno.", + }, + happyHour: { + name: "Cuccagna", + effect: "Questa mossa raddoppia la ricompensa ricevuta dopo aver vinto una lotta.", + }, + electricTerrain: { + name: "Campo Elettrico", + effect: "Per cinque turni trasforma il terreno di lotta in un campo elettrico, impedendo ai Pokémon a terra di addormentarsi.", + }, + dazzlingGleam: { + name: "Magibrillio", + effect: "Emette una luce potentissima che infligge danni al bersaglio.", + }, + celebrate: { + name: "Auguri", + effect: "Il Pokémon ti fa gli auguri nel tuo giorno speciale", + }, + holdHands: { + name: "Mano nella mano", + effect: "Il Pokémon che la usa e un alleato si prendono per mano e fanno salti di gioia.", + }, + babyDollEyes: { + name: "Occhioni Teneri", + effect: "Chi la usa rivolge i propri occhioni languidi al bersaglio, riducendone l'Attacco. Colpisce sempre per primo.", + }, + nuzzle: { + name: "Elettrococcola", + effect: "Nonostante il tenero nome è una mossa piuttosto pericolosa.", + }, + holdBack: { + name: "Riguardo", + effect: "Chi la usa attacca il bersaglio, modulando il colpo in modo da lasciargli almeno un PS.", + }, + infestation: { + name: "Assillo", + effect: "Chi la usa lancia un attacco che tormenta il bersaglio per quattro o cinque turni, durante i quali gli impedisce di fuggire.", + }, + powerUpPunch: { + name: "Crescipugno", + effect: "Rende i pugni più duri a ogni colpo inferto. Se i pugni vanno a segno, aumenta l'Attacco.", + }, + oblivionWing: { + name: "Ali del Fato", + effect: "Chi la usa assorbe energia dal bersaglio recuperando una quantità di PS pari a più della metà del danno inferto.", + }, + thousandArrows: { + name: "Mille Frecce", + effect: "Colpisce anche i Pokémon che fluttuano in aria. I nemici nei paraggi vengono scaraventati a terra.", + }, + thousandWaves: { + name: "Mille Onde", + effect: "Un’onda strisciante investe i nemici intorno impedendo loro di fuggire.", + }, + landsWrath: { + name: "Forza Tellurica", + effect: "Chi la usa raccoglie energia tellurica e ne concentra il potere sui nemici che ha intorno danneggiandoli.", + }, + lightOfRuin: { + name: "Luce Nefasta", + effect: "Traendo potere dal Fiore Eterno, chi lo utilizza spara un potente raggio di luce. Ciò danneggia parecchio anche chi la usa.", + }, + originPulse: { + name: "Primopulsar", + effect: "Attacca i nemici intorno colpendoli con miriadi di raggi di luce blu.", + }, + precipiceBlades: { + name: "Spade Telluriche", + effect: "Attacca i nemici intorno trasformando la potenza della terra in lame affilate.", + }, + dragonAscent: { + name: "Ascesa del Drago", + effect: "Permette di proiettarsi in aria e fiondarsi sul bersaglio attaccando ad altissima velocità. Riduce la Difesa e la Difesa Speciale di chi la usa.", + }, + hyperspaceFury: { + name: "Urtodimensionale", + effect: "Permette di attaccare ripetutamente grazie ai molti arti, ignorando mosse come Protezione o Individua. Riduce la Difesa di chi la usa.", + }, + breakneckBlitzPhysical: { + name: "Carica Travolgente", + effect: "Grazie al Potere Z, chi la usa accumula energia e si lancia a tutta forza contro il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + breakneckBlitzSpecial: { + name: "Carica Travolgente", + effect: "Dati Mancanti", + }, + allOutPummelingPhysical: { + name: "Iperscarica Furiosa", + effect: "Chi la usa scaglia sul bersaglio una scarica di colpi carichi di Potere Z. La potenza varia a seconda della mossa su cui si basa.", + }, + allOutPummelingSpecial: { + name: "Iperscarica Furiosa", + effect: "Dati Mancanti", + }, + supersonicSkystrikePhysical: { + name: "Picchiata Devastante", + effect: "Chi la usa si serve del Potere Z per alzarsi in volo e attaccare il bersaglio piombandogli addosso. La potenza varia a seconda della mossa su cui si basa.", + }, + supersonicSkystrikeSpecial: { + name: "Picchiata Devastante", + effect: "Dati Mancanti", + }, + acidDownpourPhysical: { + name: "Acidiluvio Corrosivo", + effect: "Chi la usa sfrutta il Potere Z per creare una palude velenosa che sommerge il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + acidDownpourSpecial: { + name: "Acidiluvio Corrosivo", + effect: "Dati Mancanti", + }, + tectonicRagePhysical: { + name: "Furore della Terra", + effect: "Grazie al Potere Z, chi la usa si tuffa nelle viscere della terra e colpisce con violenza il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + tectonicRageSpecial: { + name: "Furore della Terra", + effect: "Dati Mancanti", + }, + continentalCrushPhysical: { + name: "Gigamacigno Polverizzante", + effect: "Grazie al Potere Z, chi la usa crea un masso enorme e lo lancia sul bersaglio schiacciandolo. La potenza varia a seconda della mossa su cui si basa.", + }, + continentalCrushSpecial: { + name: "Gigamacigno Polverizzante", + effect: "Dati Mancanti", + }, + savageSpinOutPhysical: { + name: "Bozzolo Fatale", + effect: "Chi la usa sfrutta il potere Z per creare dei filamenti che intrappolano il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + savageSpinOutSpecial: { + name: "Bozzolo Fatale", + effect: "Dati Mancanti", + }, + neverEndingNightmarePhysical: { + name: "Abbraccio Spettrale", + effect: "Grazie al Potere Z, chi la usa intrappola il bersaglio in una morsa generata dal proprio rancore. La potenza varia a seconda della mossa su cui si basa.", + }, + neverEndingNightmareSpecial: { + name: "Abbraccio Spettrale", + effect: "Dati Mancanti", + }, + corkscrewCrashPhysical: { + name: "Spirale Perforante", + effect: "Grazie al Potere Z, chi la usa vortica su se stesso e si scaglia sul bersaglio con tutte le sue forze. La potenza varia a seconda della mossa su cui si basa", + }, + corkscrewCrashSpecial: { + name: "Spirale Perforante", + effect: "Dati Mancanti", + }, + infernoOverdrivePhysical: { + name: "Fiammobomba Detonante", + effect: "Chi la usa sfrutta il Potere Z per emettere fiamme incandescenti che inceneriscono il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + infernoOverdriveSpecial: { + name: "Fiammobomba Detonante", + effect: "Dati Mancanti", + }, + hydroVortexPhysical: { + name: "Idrovortice Abissale", + effect: "Grazie al Potere Z, chi la usa crea un enorme vortice che inghiotte il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + hydroVortexSpecial: { + name: "Idrovortice Abissale", + effect: "Dati Mancanti", + }, + bloomDoomPhysical: { + name: "Floriscoppio Sfolgorante", + effect: "Grazie al Potere Z, chi la usa concentra l'energia delle piante per scatenare un potente attacco. La potenza varia a seconda della mossa su cui si basa.", + }, + bloomDoomSpecial: { + name: "Floriscoppio Sfolgorante", + effect: "Dati Mancanti", + }, + gigavoltHavocPhysical: { + name: "Gigascarica Folgorante", + effect: "Grazie al Potere Z, chi la usa genera una fortissima scarica elettrica che colpisce il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + gigavoltHavocSpecial: { + name: "Gigascarica Folgorante", + effect: "Dati Mancanti", + }, + shatteredPsychePhysical: { + name: "Impatto Psicocinetico", + effect: "Chi la usa si serve del Potere Z per manipolare la mente del bersaglio causando ingenti danni. La potenza varia a seconda della mossa su cui si basa.", + }, + shatteredPsycheSpecial: { + name: "Impatto Psicocinetico", + effect: "Dati Mancanti", + }, + subzeroSlammerPhysical: { + name: "Criodistruzione Polare", + effect: "Chi la usa sfrutta il Potere Z per far calare di colpo la temperatura e congelare il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + subzeroSlammerSpecial: { + name: "Criodistruzione Polare", + effect: "Dati Mancanti", + }, + devastatingDrakePhysical: { + name: "Dragoschianto Finale", + effect: "Grazie al Potere Z, chi la usa materializza la propria aura per colpire con forza il nemico. La potenza varia a seconda della mossa su cui si basa.", + }, + devastatingDrakeSpecial: { + name: "Dragoschianto Finale", + effect: "Dati Mancanti", + }, + blackHoleEclipsePhysical: { + name: "Buco Nero del Non Ritorno", + effect: "Chi la usa si serve del Potere Z per concentrare energia negativa con cui inghiotte il bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + blackHoleEclipseSpecial: { + name: "Buco Nero del Non Ritorno", + effect: "Dati Mancanti", + }, + twinkleTacklePhysical: { + name: "Astroimpatto Fatato", + effect: "Grazie al Potere Z, chi la usa crea una dimensione fatata in cui fa ciò che vuole del proprio bersaglio. La potenza varia a seconda della mossa su cui si basa.", + }, + twinkleTackleSpecial: { + name: "Astroimpatto Fatato", + effect: "Dati Mancanti", + }, + catastropika: { + name: "Super Pikaboom", + effect: "Grazie al Potere Z, Pikachu accumula un'enorme quantità di energia elettrica e si lancia contro il bersaglio a tutta forza.", + }, + shoreUp: { + name: "Sabbiaccumulo", + effect: "Chi la usa recupera metà dei propri PS massimi. Durante le tempeste di sabbia ne recupera di più.", + }, + firstImpression: { + name: "Schermaglia", + effect: "È una mossa molto potente, ma funziona solo appena scesi in campo.", + }, + banefulBunker: { + name: "Fortino", + effect: "L'utilizzatore si protegge e se l'avversario attacca con una mossa da contatto viene avvelenato.", + }, + spiritShackle: { + name: "Cucitura d'Ombra", + effect: "Chi la usa attacca il bersaglio e fissa la sua ombra a terra impedendogli di fuggire.", + }, + darkestLariat: { + name: "Braccioteso", + effect: "Chi la usa attacca il bersaglio mulinando gli arti. Il danno inflitto ignora le modifiche alle statistiche del bersaglio.", + }, + sparklingAria: { + name: "Canto Effimero", + effect: "Chi la usa si mette a cantare emettendo tanti palloncini d’acqua. I Pokémon che subiscono danni da questa mossa guariscono dalle scottature.", + }, + iceHammer: { + name: "Martelgelo", + effect: "Infligge danni al bersaglio colpendolo con un pugno molto potente. Riduce la velocità di chi la usa.", + }, + floralHealing: { + name: "Cura Floreale", + effect: "Fa recuperare metà dei PS massimi al bersaglio. È più efficace quando il terreno di lotta è nello stato di Campo Erboso.", + }, + highHorsepower: { + name: "Forza Equina", + effect: "Il Pokémon travolge il bersaglio con un attacco possente.", + }, + strengthSap: { + name: "Assorbiforza", + effect: "Fa recuperare una quantità di PS pari all'Attacco del bersaglio, che vedrà diminuire questa statistica.", + }, + solarBlade: { + name: "Lama Solare", + effect: "Il Pokémon assorbe la luce al primo turno per poi condensarla in una lama e attaccare al turno successivo.", + }, + leafage: { + name: "Fogliame", + effect: "Attacca il bersaglio con delle foglie.", + }, + spotlight: { + name: "Riflettore", + effect: "Nessuna descrizione disponibile.", + }, + toxicThread: { + name: "Velenotela", + effect: "Avvelena il bersaglio avvolgendolo con filamenti tossici e ne riduce la Velocità.", + }, + laserFocus: { + name: "Concentrazione", + effect: "Chi la usa si concentra e nel turno successivo metterà sicuramente a segno un brutto colpo.", + }, + gearUp: { + name: "Marciainpiù", + effect: "Dà una marcia in più agli alleati con le abilità Meno o Più aumentandone l’Attacco e l’Attacco Speciale.", + }, + throatChop: { + name: "Colpo Infernale", + effect: "Chi viene colpito da questa mossa prova un dolore lancinante e non può più usare mosse basate sul suono per due turni.", + }, + pollenPuff: { + name: "Sferapolline", + effect: "Chi la usa attacca il nemico con una sfera esplosiva. Se colpisce degli alleati, fa recuperare loro dei PS.", + }, + anchorShot: { + name: "Colpo d'Ancora", + effect: "Chi la usa colpisce il nemico con un'ancora e lo intrappola nella catena impedendogli di fuggire.", + }, + psychicTerrain: { + name: "Campo Psichico", + effect: "Per cinque turni il terreno entra nello stato di Campo Psichico: i Pokémon a terra non subiscono mosse ad alta priorità e la potenza delle mosse di tipo Psico aumenta.", + }, + lunge: { + name: "Assalto", + effect: "Chi la usa si lancia con tutte le sue forze sul bersaglio e ne riduce l'Attacco.", + }, + fireLash: { + name: "Frusta di Fuoco", + effect: "Colpisce il bersaglio con una frusta infuocata e ne riduce la Difesa.", + }, + powerTrip: { + name: "Tracotanza", + effect: "Chi la usa attacca il bersaglio sfoggiando la propria forza. Più le sue statistiche sono state aumentate, più la mossa è potente.", + }, + burnUp: { + name: "Ultima Fiamma", + effect: "Chi la usa attacca sfruttando tutta la sua potenza incendiaria per infliggere gravi danni al bersaglio, ma come conseguenza perde il tipo Fuoco.", + }, + speedSwap: { + name: "Velociscambio", + effect: "Chi la usa scambia la propria Velocità con quella del bersaglio.", + }, + smartStrike: { + name: "Sottilcorno", + effect: "Chi la usa colpisce il bersaglio con un corno appuntito. Questa mossa va sempre a segno.", + }, + purify: { + name: "Purificazione", + effect: "Il bersaglio della mossa viene curato dalle alterazioni di stato inoltre l'utilizzatore ripristina i propri PS se la mossa va a segno.", + }, + revelationDance: { + name: "Mutadanza", + effect: "Chi la usa si lancia in una danza e attacca il nemico con tutte le sue forze. Il tipo della mossa corrisponde al tipo del Pokémon che la usa.", + }, + coreEnforcer: { + name: "Nucleocastigo", + effect: "Il bersaglio subisce dei danni e, se ha già agito nel turno, perde la sua abilità.", + }, + tropKick: { + name: "Tropicalcio", + effect: "Chi la usa colpisce il bersaglio con un potente calcio sfruttando una tecnica originaria dei paesi tropicali e ne riduce l'Attacco.", + }, + instruct: { + name: "Imposizione", + effect: "Nessuna descrizione disponibile.", + }, + beakBlast: { + name: "Cannonbecco", + effect: "Chi la usa arroventa il proprio becco e poi attacca. Se un Pokémon lo colpisce con un attacco diretto mentre sta accumulando calore, resta scottato.", + }, + clangingScales: { + name: "Clamorsquame", + effect: "Chi la usa attacca il bersaglio con un suono fortissimo che genera sfregando le scaglie del corpo. Dopo aver attaccato, la sua Difesa diminuisce.", + }, + dragonHammer: { + name: "Marteldrago", + effect: "Chi la usa infligge danni al bersaglio usando il proprio corpo come se fosse un martello.", + }, + brutalSwing: { + name: "Vorticolpo", + effect: "Chi la usa infligge danni intorno a sé facendo ruotare una parte del suo corpo.", + }, + auroraVeil: { + name: "Velaurora", + effect: "Questa mossa riduce i danni provocati dalle mosse fisiche e speciali per 5 turni. Può essere usata solo mentre grandina.", + }, + sinisterArrowRaid: { + name: "Dardoassalto Spettrale", + effect: "Grazie al Potere Z, Decidueye crea una formazione di frecce che colpisce il bersaglio a gran velocità.", + }, + maliciousMoonsault: { + name: "Iperschianto delle Tenebre", + effect: "Grazie al Potere Z, Incineroar richiama tutta la sua forza e si lancia impetuosamente sul bersaglio.", + }, + oceanicOperetta: { + name: "Sinfonia del Mare", + effect: "Grazie al Potere Z, Primarina concentra un’enorme quantità d’acqua e attacca il bersaglio con una potenza smisurata.", + }, + guardianOfAlola: { + name: "Collera del Guardiano", + effect: "Grazie al Potere Z, il Nume Locale evoca l’energia di Alola e attacca con grande potenza, facendo perdere al bersaglio la maggior parte dei suoi PS.", + }, + soulStealing7StarStrike: { + name: "Colpo Eptastellare Rubanima", + effect: "Grazie al Potere Z, Marshadow fa appello a tutte le sue forze e colpisce il bersaglio con una scarica di calci e pugni potentissimi.", + }, + stokedSparksurfer: { + name: "Elettrosurf Folgorante", + effect: "Grazie al Potere Z, il Raichu di Alola attacca con tutta la sua potenza e paralizza il bersaglio.", + }, + pulverizingPancake: { + name: "Adesso Faccio sul Serio", + effect: "Grazie al Potere Z, Snorlax tira fuori la grinta e, muovendo energicamente il suo enorme corpo, attacca il bersaglio con tutta la sua forza.", + }, + extremeEvoboost: { + name: "Potenziamento Eevolutivo", + effect: "Grazie al Potere Z, Eevee evoca a sé tutta l’energia delle sue possibili evoluzioni e aumenta di molto le sue statistiche", + }, + genesisSupernova: { + name: "Supernova delle Origini", + effect: "Grazie al Potere Z, Mew attacca il bersaglio con tutta la sua forza e genera un Campo Psichico a terra.", + }, + shellTrap: { + name: "Gusciotrappola", + effect: "Il guscio del Pokémon diventa una trappola. Se un nemico lo colpisce con una mossa fisica, innesca un'esplosione e subisce dei danni.", + }, + fleurCannon: { + name: "Cannonfiore", + effect: "Colpisce il bersaglio con un potente raggio, ma riduce di molto l'Attacco Speciale di chi la usa.", + }, + psychicFangs: { + name: "Psicozanna", + effect: "L'utilizzatore morde il bersaglio, rompendo barriere come Schermoluce e Riflesso.", + }, + stompingTantrum: { + name: "Battipiedi", + effect: "Chi la usa attacca battendo i piedi per la rabbia. Se la mossa usata al turno precedente non è andata a segno, la potenza raddoppia.", + }, + shadowBone: { + name: "Ossotetro", + effect: "Chi la usa colpisce il bersaglio con un osso in cui alberga uno spirito. Può anche ridurne la Difesa.", + }, + accelerock: { + name: "Rocciarapida", + effect: "Chi la usa attacca il bersaglio colpendolo a tutta velocità. Questa mossa ha priorità alta.", + }, + liquidation: { + name: "Idrobreccia", + effect: "Chi la usa colpisce il bersaglio con la forza dell'acqua. Può anche ridurne la Difesa.", + }, + prismaticLaser: { + name: "Prismalaser", + effect: "Chi la usa proietta dei potenti raggi di luce grazie alla potenza del suo prisma, ma non può agire nel turno successivo.", + }, + spectralThief: { + name: "Ombrafurto", + effect: "Chi la usa ruba gli aumenti delle statistiche del bersaglio, poi si nasconde nella sua ombra e lo attacca.", + }, + sunsteelStrike: { + name: "Astrocarica", + effect: "Chi la usa travolge il bersaglio con la potenza di una meteora. Questo attacco ignora l'abilità del bersaglio.", + }, + moongeistBeam: { + name: "Raggio d'Ombra", + effect: "Chi la usa proietta sul bersaglio un misterioso raggio di luce. Questo attacco ignora l'abilità del bersaglio.", + }, + tearfulLook: { + name: "Occhionilucidi", + effect: "Chi la usa guarda il bersaglio con gli occhi pieni di lacrime e gli fa perdere lo spirito combattivo, riducendone l'Attacco e l'Attacco Speciale", + }, + zingZap: { + name: "Elettropizzico", + effect: "Chi la usa colpisce il bersaglio investendolo con una potente scarica elettrica che può anche farlo tentennare.", + }, + naturesMadness: { + name: "Ira della Natura", + effect: "Scatena l’ira della natura sul bersaglio e ne dimezza i PS.", + }, + multiAttack: { + name: "Multiattacco", + effect: "Chi la usa si avvolge in un potente campo energetico e colpisce il bersaglio. Il tipo della mossa varia in base alla ROM installata.", + }, + tenMillionVoltThunderbolt: { + name: "Iperfulmine", + effect: "Grazie al Potere Z, Pikachu con il berretto scatena una potentissima scarica elettrica. Probabile brutto colpo.", + }, + mindBlown: { + name: "Sbalorditesta", + effect: "Chi la usa fa esplodere la propria testa per attaccare tutti i Pokémon che ha intorno, ma subisce danni.", + }, + plasmaFists: { + name: "Pugni Plasma", + effect: "Chi la usa attacca con pugni carichi di elettricità. Trasforma le mosse di tipo Normale in mosse di tipo Elettro.", + }, + photonGeyser: { + name: "Geyser Fotonico", + effect: "Infligge danni in base all’Attacco o all’Attacco Speciale scegliendo il più alto tra i due. Questo attacco ignora l’abilità del bersaglio.", + }, + lightThatBurnsTheSky: { + name: "Fotodistruzione Apocalittica", + effect: "Infligge danni in base all’Attacco o all’Attacco Speciale scegliendo il più alto tra i due. Questo attacco ignora l’abilità del bersaglio.", + }, + searingSunrazeSmash: { + name: "Supercollisione Solare", + effect: "Grazie al Potere Z, Solgaleo attacca il bersaglio con tutta la sua forza. Questo attacco ignora l’abilità del bersaglio se questa ha effetto sulle mosse.", + }, + menacingMoonrazeMaelstrom: { + name: "Deflagrazione Lunare", + effect: "Grazie al Potere Z, Lunala attacca il bersaglio con tutta la sua forza. Questo attacco ignora l’abilità del bersaglio se questa ha effetto sulle mosse.", + }, + letsSnuggleForever: { + name: "Dolcesacco di Botte", + effect: "Grazie al Potere Z, Mimikyu fa appello a tutte le sue forze e attacca il bersaglio tempestandolo di colpi.", + }, + splinteredStormshards: { + name: "Litotempesta Radiale", + effect: "Grazie al Potere Z, Lycanroc attacca il bersaglio con tutta la sua forza. Questa mossa annulla anche gli eventuali campi attivi.", + }, + clangorousSoulblaze: { + name: "Dracofonia Divampante", + effect: "Grazie al Potere Z, Kommo-o attacca i nemici con tutta la sua forza. Inoltre, aumenta le proprie statistiche.", + }, + zippyZap: { + name: "Sprintaboom", + effect: "Un attacco elettrico ad altissima velocità. Questa mossa ha priorità alta e infligge sicuramente un brutto colpo.", + }, + splishySplash: { + name: "Surfasplash", + effect: "Colpisce il bersaglio con un'enorme onda caricata di elettricità che può anche paralizzarlo.", + }, + floatyFall: { + name: "Piombaflap", + effect: "Chi la usa si libra in aria per poi piombare addosso al bersaglio. Può anche far tentennare il Pokémon colpito.", + }, + pikaPapow: { + name: "Pikasaetta", + effect: "Questa mossa infallibile diventa più potente con il rafforzarsi del rapporto tra Pikachu e l'Allenatore.", + }, + bouncyBubble: { + name: "Bollaslurp", + effect: "Chi la usa colpisce il bersaglio con una raffica di bolle, per poi assorbirle e recuperare una quantità di PS pari alla metà del danno inferto.", + }, + buzzyBuzz: { + name: "Elettrozap", + effect: "Colpisce il bersaglio con una scarica elettrica che lo paralizza.", + }, + sizzlySlide: { + name: "Fiammabam", + effect: "Chi la usa viene avvolto dalle fiamme e colpisce il bersaglio con forza, scottandolo.", + }, + glitzyGlow: { + name: "Auraswoosh", + effect: "Colpisce il bersaglio ripetutamente con onde di forza psicocinetica e innalza una barriera fantastica che riduce i danni degli attacchi speciali nemici.", + }, + baddyBad: { + name: "Zona Buiabuia", + effect: "Chi la usa scatena l’oscurità che ha dentro, colpendo il bersaglio e innalzando una barriera fantastica che riduce i danni degli attacchi fisici nemici.", + }, + sappySeed: { + name: "Bombafrush", + effect: "Fa crescere un'enorme pianta che colpisce il bersaglio con una pioggia di semi. Questi sottraggono PS a ogni turno permettendo a chi la usa di curarsi.", + }, + freezyFrost: { + name: "Scricchiagelo", + effect: "Chi la usa attacca il bersaglio con un cristallo formato da una nube nera congelata, che annulla ogni modifica alle statistiche di tutti i Pokémon.", + }, + sparklySwirl: { + name: "Sbrilluccibufera", + effect: "Chi la usa attacca il bersaglio avvolgendolo in un turbine di profumi soffocanti e cura i problemi di stato propri e degli alleati.", + }, + veeveeVolley: { + name: "Eeveempatto", + effect: "Questa mossa infallibile diventa più potente con il rafforzarsi del rapporto tra Eevee e l'Allenatore.", + }, + doubleIronBash: { + name: "Pugni Corazzati", + effect: "L'utilizzatore ruota, centrando il dado esagonale nel petto, quindi colpisce con le braccia due volte di seguito. Ciò potrebbe anche far tentennare il bersaglio.", + }, + maxGuard: { + name: "Dynabarriera", + effect: "Questa mossa permette di eludere tutti gli attacchi. Se usata in successione può fallire.", + }, + dynamaxCannon: { + name: "Cannone Dynamax", + effect: "Il Pokémon attacca emettendo dal suo nucleo l'energia concentrata nel corpo.", + }, + snipeShot: { + name: "Tiromirato", + effect: "Permette di attaccare il bersaglio ignorando gli effetti di mosse e abilità che alterano le mosse", + }, + jawLock: { + name: "Morsostretto", + effect: "Impedisce a chi la usa e al bersaglio di essere sostituiti finché non vanno KO. L'effetto svanisce se uno dei due lascia il campo.", + }, + stuffCheeks: { + name: "Riempiguance", + effect: "Se chi la usa ha con sé una bacca, la mangia e la sua Difesa aumenta di molto.", + }, + noRetreat: { + name: "Spalle al Muro", + effect: "Il Pokémon aumenta tutte le sue statistiche ma non può più fuggire o essere sostituito.", + }, + tarShot: { + name: "Colpocatrame", + effect: "Chi la usa getta catrame appiccicoso sul bersaglio abbassandone la Velocità e rendendolo vulnerabile al tipo Fuoco.", + }, + magicPowder: { + name: "Magipolvere", + effect: "Chi la usa getta addosso al bersaglio una polvere magica che lo rende di tipo Psico.", + }, + dragonDarts: { + name: "Dragofrecce", + effect: "L'utilizzatore attacca due volte usando Dreepy. Se ci sono due obiettivi, questa mossa colpisce una volta ogni obiettivo.", + }, + teatime: { + name: "Ora del Tè", + effect: "Chi la usa invita tutti i Pokémon in campo a prendere il tè. Quelli che hanno con sé una bacca la mangiano.", + }, + octolock: { + name: "Tentacolock", + effect: "Chi la usa immobilizza il bersaglio impedendogli di fuggire e ne diminuisce la Difesa e la Difesa Speciale a ogni turno.", + }, + boltBeak: { + name: "Beccoshock", + effect: "Chi la usa attacca il bersaglio con il becco appuntito carico d'elettricità. Se attacca per primo, la potenza della mossa raddoppia.", + }, + fishiousRend: { + name: "Branchiomorso", + effect: "Chi la usa morde il bersaglio con le dure branchie. Se attacca per primo, la potenza della mossa raddoppia.", + }, + courtChange: { + name: "Cambiocampo", + effect: "Una forza misteriosa inverte gli effetti attivi sul campo alleato e sul campo avversario.", + }, + maxFlare: { + name: "Dynafiammata", + effect: "Un attacco di tipo Fuoco che può essere eseguito dai Pokémon dynamaxizzati. Intensifica i raggi solari per cinque turni.", + }, + maxFlutterby: { + name: "Dynainsetto", + effect: "Un attacco di tipo Coleottero che può essere eseguito dai Pokémon dynamaxizzati. Riduce l'Attacco Speciale degli avversari.", + }, + maxLightning: { + name: "Dynasaetta", + effect: "Un attacco di tipo Elettro che può essere eseguito dai Pokémon dynamaxizzati. Per cinque turni il terreno entra nello stato di Campo Elettrico.", + }, + maxStrike: { + name: "Dynattacco", + effect: "Un attacco di tipo Normale che può essere eseguito dai Pokémon dynamaxizzati. Riduce la Velocità degli avversari.", + }, + maxKnuckle: { + name: "Dynapugno", + effect: "Un attacco di tipo Lotta che può essere eseguito dai Pokémon dynamaxizzati. Aumenta l'Attacco degli alleati.", + }, + maxPhantasm: { + name: "Dynavuoto", + effect: "Un attacco di tipo Spettro che può essere eseguito dai Pokémon dynamaxizzati. Riduce la Difesa degli avversari.", + }, + maxHailstorm: { + name: "Dynagelo", + effect: "Un attacco di tipo Ghiaccio che può essere eseguito dai Pokémon dynamaxizzati. Causa una nevicata che dura per cinque turni.", + }, + maxOoze: { + name: "Dynacorrosione", + effect: "Un attacco di tipo Veleno che può essere eseguito dai Pokémon dynamaxizzati. Aumenta l'Attacco Speciale degli alleati.", + }, + maxGeyser: { + name: "Dynaflusso", + effect: "Un attacco di tipo Acqua che può essere eseguito dai Pokémon dynamaxizzati. Provoca una forte pioggia per cinque turni.", + }, + maxAirstream: { + name: "Dynajet", + effect: "Un attacco di tipo Volante che può essere eseguito dai Pokémon dynamaxizzati. Aumenta la Velocità degli alleati.", + }, + maxStarfall: { + name: "Dynafata", + effect: "Un attacco di tipo Folletto che può essere eseguito dai Pokémon dynamaxizzati. Per cinque turni il terreno entra nello stato di Campo Nebbioso.", + }, + maxWyrmwind: { + name: "Dynadragone", + effect: "Un attacco di tipo Drago che può essere eseguito dai Pokémon dynamaxizzati. Riduce l'Attacco degli avversari.", + }, + maxMindstorm: { + name: "Dynapsiche", + effect: "Un attacco di tipo Psico che può essere eseguito dai Pokémon dynamaxizzati. Per cinque turni il terreno entra nello stato di Campo Psichico.", + }, + maxRockfall: { + name: "Dynamacigno", + effect: "Un attacco di tipo Roccia che può essere eseguito dai Pokémon dynamaxizzati. Causa una tempesta di sabbia per cinque turni.", + }, + maxQuake: { + name: "Dynasisma", + effect: "Un attacco di tipo Terra che può essere eseguito dai Pokémon dynamaxizzati. Aumenta la Difesa Speciale degli alleati.", + }, + maxDarkness: { + name: "Dynatenebre", + effect: "Un attacco di tipo Buio che può essere eseguito dai Pokémon dynamaxizzati. Riduce la Difesa Speciale degli avversari.", + }, + maxOvergrowth: { + name: "Dynaflora", + effect: "Un attacco di tipo Erba che può essere eseguito dai Pokémon dynamaxizzati. Per cinque turni il terreno entra nello stato di Campo Erboso.", + }, + maxSteelspike: { + name: "Dynametallo", + effect: "Un attacco di tipo Acciaio che può essere eseguito dai Pokémon dynamaxizzati. Aumenta la Difesa degli alleati.", + }, + clangorousSoul: { + name: "Dracofonia", + effect: "Chi la usa sacrifica un po' dei suoi PS per aumentare tutte le sue statistiche.", + }, + bodyPress: { + name: "Schiacciacorpo", + effect: "Chi la usa schiaccia il bersaglio con il suo corpo. Più la sua Difesa è alta, maggiori sono i danni inflitti.", + }, + decorate: { + name: "Decorazione", + effect: "Chi la usa agghinda il bersaglio con delle decorazioni aumentandone di molto l'Attacco e l'Attacco Speciale.", + }, + drumBeating: { + name: "Tamburattacco", + effect: "Chi la usa percuote il proprio tamburo per controllarne le radici e attaccare il bersaglio, riducendone la Velocità.", + }, + snapTrap: { + name: "Tagliola", + effect: "Chi la usa intrappola il bersaglio in una tagliola e lo attacca per quattro o cinque turni.", + }, + pyroBall: { + name: "Palla Infuocata", + effect: "l Pokémon attacca con una palla creata incendiando una piccola pietra. Può anche scottare il bersaglio.", + }, + behemothBlade: { + name: "Taglio Maestoso", + effect: "Il Pokémon brandisce un'enorme spada e attacca vibrando un poderoso fendente.", + }, + behemothBash: { + name: "Colpo Maestoso", + effect: "Il Pokémon trasforma il suo corpo in un robusto scudo e attacca caricando con forza.", + }, + auraWheel: { + name: "Ruota d'Aura", + effect: "Il Pokémon emette l'energia accumulata nelle guance per attaccare e aumentare la Velocità. Il tipo della mossa cambia in base alla forma assunta da Morpeko.", + }, + breakingSwipe: { + name: "Vastoimpatto", + effect: "Chi la usa attacca i nemici intorno con la sua robusta coda riducendone l'Attacco.", + }, + branchPoke: { + name: "Ramostoccata", + effect: "Chi la usa attacca il bersaglio con un ramo incredibilmente appuntito.", + }, + overdrive: { + name: "Overdrive", + effect: "Chi la usa suona la chitarra o il basso creando un'onda sonora potentissima con cui attacca il bersaglio.", + }, + appleAcid: { + name: "Acido Malico", + effect: "Il Pokémon attacca il bersaglio con un liquido acido ricavato da mele aspre riducendone la Difesa Speciale.", + }, + gravApple: { + name: "Forza G", + effect: "Il Pokémon fa cadere una mela sul bersaglio da una grande altezza, infliggendogli danni e riducendone la Difesa.", + }, + spiritBreak: { + name: "Frantumanima", + effect: "Chi la usa attacca il bersaglio con un tale impeto da fargli perdere la voglia di lottare e ne riduce l'Attacco Speciale", + }, + strangeSteam: { + name: "Vapore Incantato", + effect: "Il Pokémon attacca il bersaglio con getti di vapore che possono anche confonderlo.", + }, + lifeDew: { + name: "Goccia Vitale", + effect: "Il Pokémon sparge tutt'intorno dell'acqua misteriosa che fa recuperare PS a sé e agli alleati in campo.", + }, + obstruct: { + name: "Sbarramento", + effect: "Permette di eludere tutti gli attacchi. Se usata in successione può fallire. Se un Pokémon tocca chi la usa, la sua Difesa diminuisce di molto.", + }, + falseSurrender: { + name: "Supplicolpo", + effect: "Chi la usa finge di abbassare la testa a mo' di supplica e attacca il bersaglio con i suoi capelli scarmigliati. Questa mossa va sempre a segno.", + }, + meteorAssault: { + name: "Sfolgorassalto", + effect: "Chi la usa attacca il bersaglio brandendo un grosso gambo, ma perde l'equilibrio e nel turno successivo non può agire.", + }, + eternabeam: { + name: "Raggio Infinito", + effect: "È l'attacco più potente di Eternatus quando assume la sua forma originale. Nel turno successivo non può agire.", + }, + steelBeam: { + name: "Raggio d'Acciaio", + effect: "Il Pokémon utilizza l'acciaio del proprio corpo per sparare un violento raggio, ma subisce danni.", + }, + expandingForce: { + name: "Vastenergia", + effect: "Chi la usa attacca il bersaglio con energia psichica. Se utilizzata quando è attivo un Campo Psichico, la mossa aumenta di potenza e danneggia tutti i nemici.", + }, + steelRoller: { + name: "Ferrorullo", + effect: "Chi la usa attacca eliminando lo stato del terreno di lotta. La mossa fallisce se nel terreno non è attivo alcuno stato.", + }, + scaleShot: { + name: "Squamacolpo", + effect: "Il Pokémon attacca lanciando delle squame da due a cinque volte di fila. Aumenta la Velocità di chi la usa, ma ne riduce la Difesa.", + }, + meteorBeam: { + name: "Raggiometeora", + effect: "Chi la usa accumula l'energia dello spazio nel primo turno per aumentare l'Attacco Speciale, quindi attacca nel turno successivo.", + }, + shellSideArm: { + name: "Armaguscio", + effect: "Il Pokémon esegue un attacco fisico o speciale, in base a quale causa danni maggiori. Può anche avvelenare il bersaglio.", + }, + mistyExplosion: { + name: "Nebbioscoppio", + effect: "Chi la usa attacca tutti i Pokémon che ha intorno, ma poi va KO. La potenza delle mosse aumenta quando è attivo un Campo Nebbioso.", + }, + grassyGlide: { + name: "Erboscivolata", + effect: "Chi la usa attacca il bersaglio scivolando sul terreno. Se utilizzata quando è attivo un Campo Erboso, ha priorità alta.", + }, + risingVoltage: { + name: "Elettroimpennata", + effect: "Chi la usa attacca con dell'elettricità che si alza dal suolo. La potenza della mossa raddoppia quando l'avversario si trova in un Campo Elettrico.", + }, + terrainPulse: { + name: "Campopulsar", + effect: "Chi la usa attacca sfruttando l'energia del terreno di lotta. Il tipo e la potenza della mossa variano a seconda dello stato del terreno stesso.", + }, + skitterSmack: { + name: "Strisciacolpo", + effect: "Chi la usa attacca il bersaglio strisciandogli alle spalle e riducendo il suo Attacco Speciale.", + }, + burningJealousy: { + name: "Fiamminvidia", + effect: "Chi la usa attacca con la forza dell'invidia, causando una scottatura a tutti i Pokémon le cui statistiche sono aumentate durante quel turno.", + }, + lashOut: { + name: "Sfogarabbia", + effect: "Chi la usa attacca il bersaglio con tutta la propria ira. Se ha subito riduzioni delle statistiche durante quel turno, la potenza della mossa raddoppia.", + }, + poltergeist: { + name: "Poltergeist", + effect: "Chi la usa attacca utilizzando lo strumento del bersaglio. La mossa fallisce se quest'ultimo non ha uno strumento.", + }, + corrosiveGas: { + name: "Gas Corrosivo", + effect: "Chi la usa avvolge gli altri Pokémon attorno in un gas altamente acido, dissolvendo i loro strumenti.", + }, + coaching: { + name: "Coaching", + effect: "Chi la usa aumenta l'Attacco e la Difesa di tutti gli alleati dando loro indicazioni precise.", + }, + flipTurn: { + name: "Virata", + effect: "Chi usa questa mossa fa marcia indietro per farsi sostituire dopo aver sferrato l'attacco.", + }, + tripleAxel: { + name: "Triplo Axel", + effect: "Il Pokémon attacca sferrando fino a tre calci consecutivi. Ogni volta che la mossa va a segno, la sua potenza aumenta.", + }, + dualWingbeat: { + name: "Doppia Ala", + effect: "Il Pokémon attacca il bersaglio urtandolo con le ali e infliggendogli danni due volte di fila.", + }, + scorchingSands: { + name: "Sabbiardente", + effect: "Chi la usa attacca il bersaglio scagliandogli addosso della sabbia incandescente. Può anche scottarlo.", + }, + jungleHealing: { + name: "Giunglacura", + effect: "Il Pokémon diventa tutt'uno con la giungla, ripristinando i PS e curando i problemi di stato per sé e per gli alleati in campo.", + }, + wickedBlow: { + name: "Pugnotenebra", + effect: "Il Pokémon sferra un singolo colpo potentissimo, massima espressione dello stile di tipo Buio. Brutto colpo assicurato.", + }, + surgingStrikes: { + name: "Idroraffica", + effect: "Il Pokémon sferra una fluida serie di tre attacchi, massima espressione dello stile di tipo Acqua. Brutto colpo assicurato.", + }, + thunderCage: { + name: "Elettrogabbia", + effect: "Il Pokémon attacca il bersaglio imprigionandolo in una gabbia di elettricità, che sprigiona corrente per quattro o cinque turni.", + }, + dragonEnergy: { + name: "Dragoenergia", + effect: " Il Pokémon attacca il bersaglio convertendo la propria forza vitale in energia. Più i suoi PS sono bassi, più la potenza della mossa diminuisce.", + }, + freezingGlare: { + name: "Sguardo Gelido", + effect: "Il Pokémon attacca rilasciando energia psichica dagli occhi. Può congelare il bersaglio.", + }, + fieryWrath: { + name: "Furia Ardente", + effect: "ERR Il Pokémon attacca trasformando la sua rabbia in un'aura simile a fiamme. Può anche far tentennare il bersaglio.ORE", + }, + thunderousKick: { + name: "Calcio Tonante", + effect: "Il Pokémon sferra calci al bersaglio dopo averlo distratto con movimenti fulminei, riducendone la Difesa.", + }, + glacialLance: { + name: "Lancia Glaciale", + effect: "Il Pokémon attacca il bersaglio scagliando una lancia di ghiaccio accompagnata da una tormenta di neve.", + }, + astralBarrage: { + name: "Schegge Astrali", + effect: "Il Pokémon attacca il bersaglio scatenandogli contro una miriade di piccoli spettri.", + }, + eerieSpell: { + name: "Inquietantesimo", + effect: "Il Pokémon attacca con i suoi potenti poteri psichici. Sottrae 3 PP all'ultima mossa usata dall'avversario.", + }, + direClaw: { + name: "Artigli Fatali", + effect: "Il Pokémon attacca il bersaglio con artigli distruttori. Può anche causargli avvelenamento, paralisi o sonno.", + }, + psyshieldBash: { + name: "Barrierassalto", + effect: "Il Pokémon si carica di energia psichica per poi schiantarsi sul bersaglio. Inoltre, aumenta la propria Difesa.", + }, + powerShift: { + name: "Scambioforza", + effect: "Il Pokémon scambia il suo Attacco con la Difesa.", + }, + stoneAxe: { + name: "Rocciascure", + effect: "Il Pokémon attacca il bersaglio con delle scuri di roccia. I frammenti rocciosi dispersi dall'attacco restano sospesi intorno al bersaglio.", + }, + springtideStorm: { + name: "Tempesta Zefirea", + effect: "Il Pokémon attacca il bersaglio avvolgendolo con un vento fortissimo di odio e amore. Può anche ridurne l'Attacco.", + }, + mysticalPower: { + name: "Forza Mistica", + effect: "Il Pokémon attacca emettendo un misterioso potere. Inoltre, aumenta il proprio Attacco Speciale.", + }, + ragingFury: { + name: "Ira Furente", + effect: "Il Pokémon s'infuria e sputa fiammate per due o tre turni, ma rimane confuso.", + }, + waveCrash: { + name: "Ondaschianto", + effect: "Il Pokémon si avvolge in uno strato d'acqua e si lancia sul bersaglio, ma subisce seri danni.", + }, + chloroblast: { + name: "Clorofillaser", + effect: "Il Pokémon attacca concentrando la clorofilla nel proprio corpo per poi lanciarla, ma subisce danni.", + }, + mountainGale: { + name: "Soffio d'Iceberg", + effect: " Il Pokémon attacca colpendo il bersaglio con un blocco di ghiaccio grande come un iceberg. Può anche far tentennare il bersaglio.", + }, + victoryDance: { + name: "Danzavittoria", + effect: "Il Pokémon si lancia in una danza sfrenata per invocare la vittoria e aumenta l'Attacco, la Difesa e la Velocità.", + }, + headlongRush: { + name: "Scontro Frontale", + effect: "Il Pokémon si schianta sul bersaglio con tutte le forze. La sua Difesa e la sua Difesa Speciale diminuiscono.", + }, + barbBarrage: { + name: "Mille Fielespine", + effect: "Il bersaglio viene colpito da una miriade di spine tossiche che possono anche avvelenarlo. Se il bersaglio è già avvelenato, la potenza della mossa raddoppia.", + }, + esperWing: { + name: "Ali d'Aura", + effect: "Il Pokémon falcia il bersaglio con ali rafforzate da un'aura. Probabile brutto colpo. Inoltre, la Velocità aumenta.", + }, + bitterMalice: { + name: "Livore", + effect: "Il Pokémon attacca con una furia che fa raggelare il sangue nelle vene del bersaglio, riducendone l'Attacco.", + }, + shelter: { + name: "Barricata", + effect: "Il Pokémon indurisce la propria pelle come uno scudo di ferro, aumentando di molto la Difesa.", + }, + tripleArrows: { + name: "Triplodardo", + effect: "Il Pokémon sferra un calcio per poi scoccare tre dardi insieme. Può ridurre la Difesa del bersaglio o farlo tentennare. Probabile brutto colpo.", + }, + infernalParade: { + name: "Corteo Spettrale", + effect: "Il Pokémon attacca con innumerevoli sfere di fuoco che possono anche scottare il bersaglio. Se questo è affetto da problemi di stato, la potenza della mossa raddoppia.", + }, + ceaselessEdge: { + name: "Lama Milleflutti", + effect: "Il Pokémon attacca il bersaglio con la spada conchiglia. I frammenti di conchiglie formano una trappola di punte ai piedi del bersaglio.", + }, + bleakwindStorm: { + name: "Tempesta Boreale", + effect: "Il Pokémon attacca il bersaglio con venti gelidi e sferzanti che lo fanno tremare anima e corpo. Può anche ridurne la Velocità.", + }, + wildboltStorm: { + name: "Tempesta Tonante", + effect: "Il Pokémon chiama a sé una tempesta di fulmini e raffiche di vento con cui attacca violentemente il bersaglio. Può anche paralizzarlo.", + }, + sandsearStorm: { + name: "Tempesta Ardente", + effect: "Il Pokémon attacca il bersaglio avvolgendolo con sabbia ardente e un vento fortissimo che possono scottarlo.", + }, + lunarBlessing: { + name: "Invocaluna", + effect: " Il Pokémon rivolge una preghiera alla luna crescente, ripristinando i PS e curando i problemi di stato per sé e per gli alleati in campo.", + }, + takeHeart: { + name: "Baldimpulso", + effect: "Il Pokémon prende coraggio e guarisce dai problemi di stato. Inoltre, aumenta l'Attacco Speciale e la Difesa Speciale.", + }, + gMaxWildfire: { + name: "Gigavampa", + effect: "Attacco di tipo Fuoco eseguito da Charizard Gigamax. Infligge danni per quattro turni.", + }, + gMaxBefuddle: { + name: "Gigastupore", + effect: "Attacco di tipo Coleottero eseguito da Butterfree Gigamax. Avvelena, paralizza o addormenta i nemici.", + }, + gMaxVoltCrash: { + name: "Gigapikafolgori", + effect: "Attacco di tipo Elettro eseguito da Pikachu Gigamax. Paralizza i nemici.", + }, + gMaxGoldRush: { + name: "Gigamonete", + effect: "Attacco di tipo Normale eseguito da Meowth Gigamax. Confonde i nemici e permette anche di ricevere una ricompensa maggiore.", + }, + gMaxChiStrike: { + name: "Gigapugnointuito", + effect: "Attacco di tipo Lotta eseguito da Machamp Gigamax. Aumenta la probabilità di sferrare brutti colpi.", + }, + gMaxTerror: { + name: "Gigaillusione", + effect: "Attacco di tipo Spettro eseguito da Gengar Gigamax. Il Pokémon calpesta l'ombra del nemico impedendogli la fuga o la sostituzione.", + }, + gMaxResonance: { + name: "Gigamelodia", + effect: "Attacco di tipo Ghiaccio eseguito da Lapras Gigamax. Riduce i danni subiti per cinque turni.", + }, + gMaxCuddle: { + name: "Gigabbraccio", + effect: "Attacco di tipo Normale eseguito da Eevee Gigamax. Fa infatuare i nemici.", + }, + gMaxReplenish: { + name: "Gigarinnovamento", + effect: "Attacco di tipo Normale eseguito da Snorlax Gigamax. Rigenera le bacche mangiate.", + }, + gMaxMalodor: { + name: "Gigafetore", + effect: "Attacco di tipo Veleno eseguito da Garbodor Gigamax. Avvelena i nemici.", + }, + gMaxStonesurge: { + name: "Gigarocciagetto", + effect: "Attacco di tipo Acqua eseguito da Drednaw Gigamax. Sparge rocce aguzze sul campo di lotta.", + }, + gMaxWindRage: { + name: "Gigaciclone", + effect: "Attacco di tipo Volante eseguito da Corviknight Gigamax. Annulla l'effetto di mosse come Riflesso e Schermoluce.", + }, + gMaxStunShock: { + name: "Gigatoxiscossa", + effect: "Attacco di tipo Elettro eseguito da Toxtricity Gigamax. Avvelena o paralizza i nemici.", + }, + gMaxFinale: { + name: "Gigagranfinale", + effect: "Attacco di tipo Folletto eseguito da Alcremie Gigamax. Fa recuperare PS agli alleati.", + }, + gMaxDepletion: { + name: "Gigalogoramento", + effect: "Attacco di tipo Drago eseguito da Duraludon Gigamax. Toglie PP all'ultima mossa usata dai nemici.", + }, + gMaxGravitas: { + name: "Gigagravitoforza", + effect: "Attacco di tipo Psico eseguito da Orbeetle Gigamax. Cambia la gravità per cinque turni.", + }, + gMaxVolcalith: { + name: "Gigalapilli", + effect: "Attacco di tipo Roccia eseguito da Coalossal Gigamax. Infligge danni per quattro turni.", + }, + gMaxSandblast: { + name: "Gigavortisabbia", + effect: "Attacco di tipo Terra eseguito da Sandaconda Gigamax. Scatena un turbine di sabbia per quattro o cinque turni.", + }, + gMaxSnooze: { + name: "Gigatorpore", + effect: "Attacco di tipo Buio eseguito da Grimmsnarl Gigamax. Chi la usa fa un grande sbadiglio che fa addormentare il nemico al turno successivo.", + }, + gMaxTartness: { + name: "Gigattaccoacido", + effect: "Attacco di tipo Erba eseguito da Flapple Gigamax. Riduce l’elusione dei nemici.", + }, + gMaxSweetness: { + name: "Gigambrosia", + effect: "Attacco di tipo Erba eseguito da Appletun Gigamax. Cura i problemi di stato degli alleati.", + }, + gMaxSmite: { + name: "Gigacastigo", + effect: "Attacco di tipo Folletto eseguito da Hatterene Gigamax. Confonde i nemici.", + }, + gMaxSteelsurge: { + name: "Gigaferroaculei", + effect: "Attacco di tipo Acciaio eseguito da Copperajah Gigamax. Sparge pezzi di metallo acuminati sul campo di lotta.", + }, + gMaxMeltdown: { + name: "Gigaliquefazione", + effect: "ERAttacco di tipo Acciaio eseguito da Melmetal Gigamax. Impedisce ai nemici di usare la stessa mossa due volte di seguito.RORE", + }, + gMaxFoamBurst: { + name: "Gigaschiuma", + effect: "Attacco di tipo Acqua eseguito da Kingler Gigamax. Riduce di molto la Velocità dei nemici.", + }, + gMaxCentiferno: { + name: "Gigamillefiamme", + effect: "Attacco di tipo Fuoco eseguito da Centiskorch Gigamax. Intrappola i nemici nelle fiamme per quattro o cinque turni.", + }, + gMaxVineLash: { + name: "Gigasferzata", + effect: "Attacco di tipo Erba eseguito da Venusaur Gigamax. Infligge danni per quattro turni.", + }, + gMaxCannonade: { + name: "Gigacannonata", + effect: "Attacco di tipo Acqua eseguito da Blastoise Gigamax. Infligge danni per quattro turni.", + }, + gMaxDrumSolo: { + name: "Gigarullio", + effect: "Attacco di tipo Erba eseguito da Rillaboom Gigamax. Ignora le abilità dei nemici.", + }, + gMaxFireball: { + name: "Gigafiammopalla", + effect: "Attacco di tipo Fuoco eseguito da Cinderace Gigamax. Ignora le abilità dei nemici.", + }, + gMaxHydrosnipe: { + name: "Gigasparomirato", + effect: "Attacco di tipo Acqua eseguito da Inteleon Gigamax. Ignora le abilità dei nemici.", + }, + gMaxOneBlow: { + name: "Gigasingolcolpo", + effect: "Attacco di tipo Buio eseguito da Urshifu Gigamax che ignora gli effetti della Dynabarriera.", + }, + gMaxRapidFlow: { + name: "Gigapluricolpo", + effect: " Attacco di tipo Acqua eseguito da Urshifu Gigamax che ignora gli effetti della Dynabarriera.", + }, + teraBlast: { + name: "Terascoppio", + effect: "Se il Pokémon è teracristallizzato, attacca con l'energia del suo teratipo. Infligge danni in base all'Attacco o all'Attacco Speciale scegliendo il più alto tra i due.", + }, + silkTrap: { + name: "Telatrappola", + effect: "Il Pokémon tesse una trappola di tela che lo protegge dagli attacchi e riduce la Velocità di chi entra in contatto con lui.", + }, + axeKick: { + name: "Calcio ad Ascia", + effect: "Il Pokémon attacca sferrando un calcio dall'alto verso il basso che può confondere il bersaglio. Se la mossa fallisce, il Pokémon subisce dei danni.", + }, + lastRespects: { + name: "Omaggio ai KO", + effect: "Il Pokémon attacca per placare il risentimento dei suoi compagni di squadra. Più sono quelli andati KO, più la potenza della mossa aumenta.", + }, + luminaCrash: { + name: "Fotocollisione", + effect: "Il Pokémon attacca sparando una luce bizzarra che agisce anche sulla psiche. Riduce di molto la Difesa Speciale del bersaglio.", + }, + orderUp: { + name: "Alta Cucina", + effect: "Il Pokémon attacca con deliziose movenze. Se ha in bocca un Tatsugiri, una sua statistica aumenta in base alla forma di quest'ultimo.", + }, + jetPunch: { + name: "Pugnojet", + effect: "Il Pokémon avvolge il pugno in una corrente impetuosa e sferra un colpo a una tale velocità da rendersi quasi invisibile. Questo attacco ha priorità alta.", + }, + spicyExtract: { + name: "Essenza Piccante", + effect: "Il Pokémon secerne un'essenza straordinariamente piccante. Aumenta di molto l'Attacco del bersaglio ma ne diminuisce di molto la Difesa.", + }, + spinOut: { + name: "Slittaruote", + effect: "Il Pokémon infligge danni caricando le estremità e ruotandole vorticosamente. La sua Velocità diminuisce di molto.", + }, + populationBomb: { + name: "Infestazione", + effect: "Il Pokémon si riunisce con i suoi simili in un gruppo brulicante che collabora per attaccare e colpisce da una a dieci volte di fila.", + }, + iceSpinner: { + name: "Vortighiaccio", + effect: "Il Pokémon avvolge gli arti inferiori in un sottile strato di ghiaccio e si scontra con il bersaglio piroettando. Il movimento rotatorio distrugge il terreno di lotta.", + }, + glaiveRush: { + name: "Spadoncarica", + effect: "Il Pokémon si lancia in una carica avventata. Fino al suo prossimo turno, il Pokémon riceverà il doppio dei danni dagli attacchi altrui, che andranno sempre a segno.", + }, + revivalBlessing: { + name: "Preghiera Vitale", + effect: "Il Pokémon intona una preghiera compassionevole, rianimando un Pokémon della squadra esausto e restituendogli metà dei suoi PS.", + }, + saltCure: { + name: "Sotto Sale", + effect: "Il Pokémon mette sotto sale il bersaglio, infliggendogli danni a ogni turno. I Pokémon di tipo Acciaio e di tipo Acqua sono particolarmente vulnerabili a questa mossa.", + }, + tripleDive: { + name: "Triplo Tuffo", + effect: "Il Pokémon si lancia in un triplo tuffo perfettamente coordinato, colpendo il bersaglio con degli schizzi d'acqua e infliggendogli danni tre volte di fila.", + }, + mortalSpin: { + name: "Glitturbine", + effect: "Attacco rotante che elimina gli effetti di mosse come Legatutto, Avvolgibotta e Parassiseme. Aumenta anche la Velocità di chi la usa.", + }, + doodle: { + name: "Ricalco", + effect: "Il Pokémon cattura l'essenza del bersaglio con un ricalco, copiandone l'abilità e applicandola a se stesso e ai suoi alleati.", + }, + filletAway: { + name: "Alleggerimento", + effect: "Il Pokémon sacrifica dei PS per far aumentare di molto l'Attacco, l'Attacco Speciale e la Velocità.", + }, + kowtowCleave: { + name: "Genufendente", + effect: "Il Pokémon si genuflette per far abbassare la guardia al bersaglio e poi fenderlo. Questo attacco va sempre a segno.", + }, + flowerTrick: { + name: "Prestigiafiore", + effect: " Il Pokémon attacca il bersaglio lanciandogli addosso un mazzo di fiori truccato. Questo attacco va sempre a segno, infliggendo anche un brutto colpo.", + }, + torchSong: { + name: "Canzone Ardente", + effect: "Il Pokémon abbrustolisce il bersaglio soffiandogli addosso fiamme ardenti come se intonasse una canzone. Inoltre, il suo Attacco Speciale aumenta.", + }, + aquaStep: { + name: "Idroballetto", + effect: "Il Pokémon si prende gioco del bersaglio con passi di danza leggiadri e fluidi come l’acqua, infliggendogli danni. Inoltre, la sua Velocità aumenta.", + }, + ragingBull: { + name: "Scatenatoro", + effect: "Il Pokémon carica il bersaglio con furia cieca, rompendo barriere come Schermoluce e Riflesso. Il tipo di questa mossa dipende dalla forma di chi la usa.", + }, + makeItRain: { + name: "Corsa all'Oro", + effect: "Il Pokémon attacca lanciando una gran quantità di monete recuperabili dopo la lotta, ma riduce il proprio Attacco Speciale.", + }, + psyblade: { + name: "Psicolama", + effect: "Il Pokémon falcia il bersaglio con una lama eterea. La potenza della mossa aumenta del 50% quando è attivo un Campo Elettrico.", + }, + hydroSteam: { + name: "Idrovapore", + effect: "Il Pokémon ricopre con forza il bersaglio di acqua bollente. Con la luce solare intensa, la potenza di questa mossa aumenta del 50% anziché diminuire.", + }, + ruination: { + name: "Catastrofe", + effect: "Il Pokémon invoca una terribile disgrazia, dimezzando i PS del bersaglio.", + }, + collisionCourse: { + name: "Turboschianto", + effect: "Il Pokémon si schianta al suolo mentre si trasforma, causando un'esplosione primordiale. La potenza della mossa aumenta se questa è superefficace sul bersaglio.", + }, + electroDrift: { + name: "Fulmiscatto", + effect: "Il Pokémon saetta mentre si trasforma, trafiggendo il bersaglio con una scossa futuristica. La potenza della mossa aumenta se questa è superefficace sul bersaglio.", + }, + shedTail: { + name: "Tagliacoda", + effect: "Chi la usa crea una copia di se stesso usando parte dei suoi PS e si fa sostituire da un altro Pokémon della squadra.", + }, + chillyReception: { + name: "Freddura", + effect: "Chi la usa dice una freddura che fa raggelare i presenti per poi farsi sostituire da un altro Pokémon della squadra. Causa una nevicata che dura per cinque turni.", + }, + tidyUp: { + name: "Pulizie", + effect: "Il Pokémon fa le pulizie, annullando gli effetti di Punte, Levitoroccia, Rete Vischiosa, Fielepunte e Sostituto. Inoltre, aumenta il suo Attacco e la sua Velocità.", + }, + snowscape: { + name: "Vista Innevata", + effect: "Il Pokémon causa una nevicata che dura per cinque turni e aumenta la Difesa dei Pokémon di tipo Ghiaccio.", + }, + pounce: { + name: "Balzo", + effect: "Il Pokémon fa un balzo e attacca il bersaglio, riducendone inoltre la Velocità.", + }, + trailblaze: { + name: "Apripista", + effect: "Il Pokémon attacca come se saltasse fuori dall'erba alta e si muove con passo leggiadro, aumentando la propria Velocità.", + }, + chillingWater: { + name: "Doccia Fredda", + effect: "Il Pokémon attacca il bersaglio con una doccia d'acqua talmente fredda da farlo demoralizzare, riducendone l'Attacco.", + }, + hyperDrill: { + name: "Ipertrapano", + effect: "Il Pokémon fa roteare rapidamente la parte appuntita del suo corpo, perforando il bersaglio ed eludendo mosse come Protezione e Individua.", + }, + twinBeam: { + name: "Doppioraggio", + effect: "Il Pokémon attacca il bersaglio con misteriosi raggi di luce emessi dagli occhi che infliggono danni due volte di fila.", + }, + rageFist: { + name: "Pugno Furibondo", + effect: "Il Pokémon trasforma la sua furia in energia e la utilizza per attaccare. Più attacchi ha subito il Pokémon, più la potenza della mossa aumenta.", + }, + armorCannon: { + name: "Corazza Cannone", + effect: "Il Pokémon si libera della sua corazza, scagliandola sul bersaglio come una raffica di proiettili incandescenti. La sua Difesa e la sua Difesa Speciale diminuiscono.", + }, + bitterBlade: { + name: "Lama del Rimorso", + effect: "Il Pokémon concentra nelle lame tutti i rimorsi accumulati nel mondo dei vivi e assale il bersaglio, recuperando una quantità di PS pari a metà del danno inflitto.", + }, + doubleShock: { + name: "Doppiolampo", + effect: "Il Pokémon libera tutta la sua potenza elettrica per infliggere gravi danni al bersaglio, ma come conseguenza perde il tipo Elettro.", + }, + gigatonHammer: { + name: "Granmartello", + effect: "Chi la usa attacca il bersaglio brandendo un enorme martello. La mossa non può essere usata per due volte di fila.", + }, + comeuppance: { + name: "Ritorsione", + effect: "Il Pokémon restituisce con gli interessi i danni subiti all'ultimo avversario che l'ha colpito.", + }, + aquaCutter: { + name: "Idrotaglio", + effect: " Il Pokémon espelle acqua ad alta pressione e falcia il bersaglio con un fendente tagliente quanto una lama. Probabile brutto colpo.", + }, + blazingTorque: { + name: "Turboustione", + effect: "L'utilizzatore accende il suo motore ardente verso il bersaglio. Ciò potrebbe anche lasciare il bersaglio con una bruciatura.", + }, + wickedTorque: { + name: "Turbotenebra", + effect: "L'utente accende il proprio motore nel bersaglio con intenti dannosi. Ciò potrebbe addormentare il bersaglio.", + }, + noxiousTorque: { + name: "Turbotossina", + effect: "L'utilizzatore fa girare il suo motore velenoso verso il bersaglio. Ciò potrebbe anche avvelenare il bersaglio.", + }, + combatTorque: { + name: "Turborissa", + effect: "L'utente accelera con forza il proprio motore verso il bersaglio. Ciò potrebbe anche lasciare il bersaglio paralizzato.", + }, + magicalTorque: { + name: "Turboincanto", + effect: "L'utilizzatore fa girare il proprio motore fatato verso il bersaglio. Ciò potrebbe anche confondere l'obiettivo.", + }, + bloodMoon: { + name: "Luna Rossa", + effect: "Il Pokémon attacca rilasciando tutta la sua energia, confluita in una luna piena rossa come il sangue. Questa mossa non può essere usata due volte di fila.", + }, + matchaGotcha: { + name: "Spruzzatè", + effect: "Il Pokémon attacca mescolando del tè e spruzzandolo, recuperando una quantità di PS pari alla metà del danno inflitto. Può anche scottare il bersaglio.", + }, + syrupBomb: { + name: "Bomba Sciroppata", + effect: " Il Pokémon fa esplodere dello sciroppo viscoso sul bersaglio, ricoprendolo e facendogli diminuire la Velocità per tre turni.", + }, + ivyCudgel: { + name: "Clava di Liane", + effect: "Il Pokémon colpisce con una clava avvolta da liane. Il tipo della mossa varia in base alla maschera indossata. Probabile brutto colpo.", + }, + electroShot: { + name: "Elettroraggio", + effect: "Il Pokémon accumula elettricità e aumenta l'Attacco Speciale al primo turno, per poi rilasciare una potente scarica al turno successivo o, se piove, immediatamente.", + }, + teraStarstorm: { + name: "Teracluster", + effect: "Il Pokémon elimina il bersaglio irradiando il potere dei cristalli. Se Terapagos assume la Forma Astrale, la mossa infligge danni a tutti gli avversari.", + }, + fickleBeam: { + name: "Irregolaser", + effect: "Il Pokémon attacca rilasciando raggi di luce. Talvolta i laser vengono emessi da tutte le teste, contribuendo a raddoppiare la potenza della mossa.", + }, + burningBulwark: { + name: "Egida Ignea", + effect: "Il Pokémon blocca gli attacchi avversari con la pelliccia incandescente che scotta chi entra in contatto con lui.", + }, + thunderclap: { + name: "Saetta", + effect: "Il Pokémon abbatte una scarica elettrica sul bersaglio prima che questi possa attaccare. La mossa fallisce se il bersaglio sferra una mossa che non è di attacco.", + }, + mightyCleave: { + name: "Taglio Poderoso", + effect: "Il Pokémon fende il bersaglio con la luce immagazzinata nella testa, ignorando gli effetti delle mosse protettive.", + }, + tachyonCutter: { + name: "Tachiontaglio", + effect: "Il Pokémon emette delle lame particellari in successione, infliggendo danni due volte di fila. Questo attacco va sempre a segno.", + }, + hardPress: { + name: "Pressa d'Acciaio", + effect: "Il Pokémon schiaccia il bersaglio usando i propri arti. Più PS rimangono al bersaglio, maggiore è la potenza della mossa.", + }, + dragonCheer: { + name: "Grido del Drago", + effect: "Il Pokémon incita gli alleati con un inno ai draghi, aumentando la probabilità che sferrino brutti colpi. Particolarmente efficace con alleati di tipo Drago.", + }, + alluringVoice: { + name: "Ammaliavoce", + effect: "Il Pokémon attacca sfruttando il suo canto angelico, confondendo il bersaglio se le sue statistiche sono aumentate nello stesso turno.", + }, + temperFlare: { + name: "Rabbia Bruciante", + effect: "Il Pokémon attacca con l'impeto di chi è pronto a tutto. Se la mossa usata al turno precedente non è andata a segno, la potenza raddoppia.", + }, + supercellSlam: { + name: "Elettrotuffo", + effect: "Il Pokémon si schianta sul bersaglio dopo essersi elettrificato. Se la mossa fallisce, il Pokémon subisce dei danni.", + }, + psychicNoise: { + name: "Psicorumore", + effect: " l Pokémon investe il bersaglio con insopportabili onde sonore che gli impediscono di recuperare PS con mosse, abilità o strumenti che ha con sé per due turni.", + }, + upperHand: { + name: "Colpo di Mano", + effect: "Il Pokémon reagisce al movimento del bersaglio e, colpendo con il palmo, lo fa tentennare. Se il bersaglio non sferra un attacco ad alta priorità, la mossa fallisce.", + }, + malignantChain: { + name: "Intossicatena", + effect: "Il Pokémon logora il bersaglio avvolgendolo con le sue catene fatte di veleno e iniettandogli delle tossine che possono anche iperavvelenarlo.", + }, +} as const; \ No newline at end of file diff --git a/src/locales/it/pokeball.ts b/src/locales/it/pokeball.ts new file mode 100644 index 000000000..4b4c2be4d --- /dev/null +++ b/src/locales/it/pokeball.ts @@ -0,0 +1,10 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const pokeball: SimpleTranslationEntries = { + "pokeBall": "Poké Ball", + "greatBall": "Mega Ball", + "ultraBall": "Ultra Ball", + "rogueBall": "Rogue Ball", + "masterBall": "Master Ball", + "luxuryBall": "Chich Ball", +} as const; \ No newline at end of file diff --git a/src/locales/it/pokemon-stat.ts b/src/locales/it/pokemon-stat.ts index 7a209461b..b2c023aa3 100644 --- a/src/locales/it/pokemon-stat.ts +++ b/src/locales/it/pokemon-stat.ts @@ -1,16 +1,16 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const pokemonStat: SimpleTranslationEntries = { - "HP": "Max. HP", - "HPshortened": "MaxHP", - "ATK": "Attack", - "ATKshortened": "Atk", - "DEF": "Defense", - "DEFshortened": "Def", - "SPATK": "Sp. Atk", - "SPATKshortened": "SpAtk", - "SPDEF": "Sp. Def", - "SPDEFshortened": "SpDef", - "SPD": "Speed", - "SPDshortened": "Spd" -} as const; \ No newline at end of file + "HP": "PS Max", + "HPshortened": "PS", + "ATK": "Attacco", + "ATKshortened": "Att", + "DEF": "Difesa", + "DEFshortened": "Dif", + "SPATK": "Att. Sp.", + "SPATKshortened": "AttSp", + "SPDEF": "Dif. Sp.", + "SPDEFshortened": "DifSp", + "SPD": "Velocità", + "SPDshortened": "Vel" +} as const; diff --git a/src/locales/it/pokemon.ts b/src/locales/it/pokemon.ts new file mode 100644 index 000000000..ddc2b2c91 --- /dev/null +++ b/src/locales/it/pokemon.ts @@ -0,0 +1,1086 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const pokemon: SimpleTranslationEntries = { + "bulbasaur": "Bulbasaur", + "ivysaur": "Ivysaur", + "venusaur": "Venusaur", + "charmander": "Charmander", + "charmeleon": "Charmeleon", + "charizard": "Charizard", + "squirtle": "Squirtle", + "wartortle": "Wartortle", + "blastoise": "Blastoise", + "caterpie": "Caterpie", + "metapod": "Metapod", + "butterfree": "Butterfree", + "weedle": "Weedle", + "kakuna": "Kakuna", + "beedrill": "Beedrill", + "pidgey": "Pidgey", + "pidgeotto": "Pidgeotto", + "pidgeot": "Pidgeot", + "rattata": "Rattata", + "raticate": "Raticate", + "spearow": "Spearow", + "fearow": "Fearow", + "ekans": "Ekans", + "arbok": "Arbok", + "pikachu": "Pikachu", + "raichu": "Raichu", + "sandshrew": "Sandshrew", + "sandslash": "Sandslash", + "nidoran_f": "Nidoran♀", + "nidorina": "Nidorina", + "nidoqueen": "Nidoqueen", + "nidoran_m": "Nidoran♂", + "nidorino": "Nidorino", + "nidoking": "Nidoking", + "clefairy": "Clefairy", + "clefable": "Clefable", + "vulpix": "Vulpix", + "ninetales": "Ninetales", + "jigglypuff": "Jigglypuff", + "wigglytuff": "Wigglytuff", + "zubat": "Zubat", + "golbat": "Golbat", + "oddish": "Oddish", + "gloom": "Gloom", + "vileplume": "Vileplume", + "paras": "Paras", + "parasect": "Parasect", + "venonat": "Venonat", + "venomoth": "Venomoth", + "diglett": "Diglett", + "dugtrio": "Dugtrio", + "meowth": "Meowth", + "persian": "Persian", + "psyduck": "Psyduck", + "golduck": "Golduck", + "mankey": "Mankey", + "primeape": "Primeape", + "growlithe": "Growlithe", + "arcanine": "Arcanine", + "poliwag": "Poliwag", + "poliwhirl": "Poliwhirl", + "poliwrath": "Poliwrath", + "abra": "Abra", + "kadabra": "Kadabra", + "alakazam": "Alakazam", + "machop": "Machop", + "machoke": "Machoke", + "machamp": "Machamp", + "bellsprout": "Bellsprout", + "weepinbell": "Weepinbell", + "victreebel": "Victreebel", + "tentacool": "Tentacool", + "tentacruel": "Tentacruel", + "geodude": "Geodude", + "graveler": "Graveler", + "golem": "Golem", + "ponyta": "Ponyta", + "rapidash": "Rapidash", + "slowpoke": "Slowpoke", + "slowbro": "Slowbro", + "magnemite": "Magnemite", + "magneton": "Magneton", + "farfetchd": "Farfetch'd", + "doduo": "Doduo", + "dodrio": "Dodrio", + "seel": "Seel", + "dewgong": "Dewgong", + "grimer": "Grimer", + "muk": "Muk", + "shellder": "Shellder", + "cloyster": "Cloyster", + "gastly": "Gastly", + "haunter": "Haunter", + "gengar": "Gengar", + "onix": "Onix", + "drowzee": "Drowzee", + "hypno": "Hypno", + "krabby": "Krabby", + "kingler": "Kingler", + "voltorb": "Voltorb", + "electrode": "Electrode", + "exeggcute": "Exeggcute", + "exeggutor": "Exeggutor", + "cubone": "Cubone", + "marowak": "Marowak", + "hitmonlee": "Hitmonlee", + "hitmonchan": "Hitmonchan", + "lickitung": "Lickitung", + "koffing": "Koffing", + "weezing": "Weezing", + "rhyhorn": "Rhyhorn", + "rhydon": "Rhydon", + "chansey": "Chansey", + "tangela": "Tangela", + "kangaskhan": "Kangaskhan", + "horsea": "Horsea", + "seadra": "Seadra", + "goldeen": "Goldeen", + "seaking": "Seaking", + "staryu": "Staryu", + "starmie": "Starmie", + "mr_mime": "Mr. Mime", + "scyther": "Scyther", + "jynx": "Jynx", + "electabuzz": "Electabuzz", + "magmar": "Magmar", + "pinsir": "Pinsir", + "tauros": "Tauros", + "magikarp": "Magikarp", + "gyarados": "Gyarados", + "lapras": "Lapras", + "ditto": "Ditto", + "eevee": "Eevee", + "vaporeon": "Vaporeon", + "jolteon": "Jolteon", + "flareon": "Flareon", + "porygon": "Porygon", + "omanyte": "Omanyte", + "omastar": "Omastar", + "kabuto": "Kabuto", + "kabutops": "Kabutops", + "aerodactyl": "Aerodactyl", + "snorlax": "Snorlax", + "articuno": "Articuno", + "zapdos": "Zapdos", + "moltres": "Moltres", + "dratini": "Dratini", + "dragonair": "Dragonair", + "dragonite": "Dragonite", + "mewtwo": "Mewtwo", + "mew": "Mew", + "chikorita": "Chikorita", + "bayleef": "Bayleef", + "meganium": "Meganium", + "cyndaquil": "Cyndaquil", + "quilava": "Quilava", + "typhlosion": "Typhlosion", + "totodile": "Totodile", + "croconaw": "Croconaw", + "feraligatr": "Feraligatr", + "sentret": "Sentret", + "furret": "Furret", + "hoothoot": "Hoothoot", + "noctowl": "Noctowl", + "ledyba": "Ledyba", + "ledian": "Ledian", + "spinarak": "Spinarak", + "ariados": "Ariados", + "crobat": "Crobat", + "chinchou": "Chinchou", + "lanturn": "Lanturn", + "pichu": "Pichu", + "cleffa": "Cleffa", + "igglybuff": "Igglybuff", + "togepi": "Togepi", + "togetic": "Togetic", + "natu": "Natu", + "xatu": "Xatu", + "mareep": "Mareep", + "flaaffy": "Flaaffy", + "ampharos": "Ampharos", + "bellossom": "Bellossom", + "marill": "Marill", + "azumarill": "Azumarill", + "sudowoodo": "Sudowoodo", + "politoed": "Politoed", + "hoppip": "Hoppip", + "skiploom": "Skiploom", + "jumpluff": "Jumpluff", + "aipom": "Aipom", + "sunkern": "Sunkern", + "sunflora": "Sunflora", + "yanma": "Yanma", + "wooper": "Wooper", + "quagsire": "Quagsire", + "espeon": "Espeon", + "umbreon": "Umbreon", + "murkrow": "Murkrow", + "slowking": "Slowking", + "misdreavus": "Misdreavus", + "unown": "Unown", + "wobbuffet": "Wobbuffet", + "girafarig": "Girafarig", + "pineco": "Pineco", + "forretress": "Forretress", + "dunsparce": "Dunsparce", + "gligar": "Gligar", + "steelix": "Steelix", + "snubbull": "Snubbull", + "granbull": "Granbull", + "qwilfish": "Qwilfish", + "scizor": "Scizor", + "shuckle": "Shuckle", + "heracross": "Heracross", + "sneasel": "Sneasel", + "teddiursa": "Teddiursa", + "ursaring": "Ursaring", + "slugma": "Slugma", + "magcargo": "Magcargo", + "swinub": "Swinub", + "piloswine": "Piloswine", + "corsola": "Corsola", + "remoraid": "Remoraid", + "octillery": "Octillery", + "delibird": "Delibird", + "mantine": "Mantine", + "skarmory": "Skarmory", + "houndour": "Houndour", + "houndoom": "Houndoom", + "kingdra": "Kingdra", + "phanpy": "Phanpy", + "donphan": "Donphan", + "porygon2": "Porygon2", + "stantler": "Stantler", + "smeargle": "Smeargle", + "tyrogue": "Tyrogue", + "hitmontop": "Hitmontop", + "smoochum": "Smoochum", + "elekid": "Elekid", + "magby": "Magby", + "miltank": "Miltank", + "blissey": "Blissey", + "raikou": "Raikou", + "entei": "Entei", + "suicune": "Suicune", + "larvitar": "Larvitar", + "pupitar": "Pupitar", + "tyranitar": "Tyranitar", + "lugia": "Lugia", + "ho_oh": "Ho-Oh", + "celebi": "Celebi", + "treecko": "Treecko", + "grovyle": "Grovyle", + "sceptile": "Sceptile", + "torchic": "Torchic", + "combusken": "Combusken", + "blaziken": "Blaziken", + "mudkip": "Mudkip", + "marshtomp": "Marshtomp", + "swampert": "Swampert", + "poochyena": "Poochyena", + "mightyena": "Mightyena", + "zigzagoon": "Zigzagoon", + "linoone": "Linoone", + "wurmple": "Wurmple", + "silcoon": "Silcoon", + "beautifly": "Beautifly", + "cascoon": "Cascoon", + "dustox": "Dustox", + "lotad": "Lotad", + "lombre": "Lombre", + "ludicolo": "Ludicolo", + "seedot": "Seedot", + "nuzleaf": "Nuzleaf", + "shiftry": "Shiftry", + "taillow": "Taillow", + "swellow": "Swellow", + "wingull": "Wingull", + "pelipper": "Pelipper", + "ralts": "Ralts", + "kirlia": "Kirlia", + "gardevoir": "Gardevoir", + "surskit": "Surskit", + "masquerain": "Masquerain", + "shroomish": "Shroomish", + "breloom": "Breloom", + "slakoth": "Slakoth", + "vigoroth": "Vigoroth", + "slaking": "Slaking", + "nincada": "Nincada", + "ninjask": "Ninjask", + "shedinja": "Shedinja", + "whismur": "Whismur", + "loudred": "Loudred", + "exploud": "Exploud", + "makuhita": "Makuhita", + "hariyama": "Hariyama", + "azurill": "Azurill", + "nosepass": "Nosepass", + "skitty": "Skitty", + "delcatty": "Delcatty", + "sableye": "Sableye", + "mawile": "Mawile", + "aron": "Aron", + "lairon": "Lairon", + "aggron": "Aggron", + "meditite": "Meditite", + "medicham": "Medicham", + "electrike": "Electrike", + "manectric": "Manectric", + "plusle": "Plusle", + "minun": "Minun", + "volbeat": "Volbeat", + "illumise": "Illumise", + "roselia": "Roselia", + "gulpin": "Gulpin", + "swalot": "Swalot", + "carvanha": "Carvanha", + "sharpedo": "Sharpedo", + "wailmer": "Wailmer", + "wailord": "Wailord", + "numel": "Numel", + "camerupt": "Camerupt", + "torkoal": "Torkoal", + "spoink": "Spoink", + "grumpig": "Grumpig", + "spinda": "Spinda", + "trapinch": "Trapinch", + "vibrava": "Vibrava", + "flygon": "Flygon", + "cacnea": "Cacnea", + "cacturne": "Cacturne", + "swablu": "Swablu", + "altaria": "Altaria", + "zangoose": "Zangoose", + "seviper": "Seviper", + "lunatone": "Lunatone", + "solrock": "Solrock", + "barboach": "Barboach", + "whiscash": "Whiscash", + "corphish": "Corphish", + "crawdaunt": "Crawdaunt", + "baltoy": "Baltoy", + "claydol": "Claydol", + "lileep": "Lileep", + "cradily": "Cradily", + "anorith": "Anorith", + "armaldo": "Armaldo", + "feebas": "Feebas", + "milotic": "Milotic", + "castform": "Castform", + "kecleon": "Kecleon", + "shuppet": "Shuppet", + "banette": "Banette", + "duskull": "Duskull", + "dusclops": "Dusclops", + "tropius": "Tropius", + "chimecho": "Chimecho", + "absol": "Absol", + "wynaut": "Wynaut", + "snorunt": "Snorunt", + "glalie": "Glalie", + "spheal": "Spheal", + "sealeo": "Sealeo", + "walrein": "Walrein", + "clamperl": "Clamperl", + "huntail": "Huntail", + "gorebyss": "Gorebyss", + "relicanth": "Relicanth", + "luvdisc": "Luvdisc", + "bagon": "Bagon", + "shelgon": "Shelgon", + "salamence": "Salamence", + "beldum": "Beldum", + "metang": "Metang", + "metagross": "Metagross", + "regirock": "Regirock", + "regice": "Regice", + "registeel": "Registeel", + "latias": "Latias", + "latios": "Latios", + "kyogre": "Kyogre", + "groudon": "Groudon", + "rayquaza": "Rayquaza", + "jirachi": "Jirachi", + "deoxys": "Deoxys", + "turtwig": "Turtwig", + "grotle": "Grotle", + "torterra": "Torterra", + "chimchar": "Chimchar", + "monferno": "Monferno", + "infernape": "Infernape", + "piplup": "Piplup", + "prinplup": "Prinplup", + "empoleon": "Empoleon", + "starly": "Starly", + "staravia": "Staravia", + "staraptor": "Staraptor", + "bidoof": "Bidoof", + "bibarel": "Bibarel", + "kricketot": "Kricketot", + "kricketune": "Kricketune", + "shinx": "Shinx", + "luxio": "Luxio", + "luxray": "Luxray", + "budew": "Budew", + "roserade": "Roserade", + "cranidos": "Cranidos", + "rampardos": "Rampardos", + "shieldon": "Shieldon", + "bastiodon": "Bastiodon", + "burmy": "Burmy", + "wormadam": "Wormadam", + "mothim": "Mothim", + "combee": "Combee", + "vespiquen": "Vespiquen", + "pachirisu": "Pachirisu", + "buizel": "Buizel", + "floatzel": "Floatzel", + "cherubi": "Cherubi", + "cherrim": "Cherrim", + "shellos": "Shellos", + "gastrodon": "Gastrodon", + "ambipom": "Ambipom", + "drifloon": "Drifloon", + "drifblim": "Drifblim", + "buneary": "Buneary", + "lopunny": "Lopunny", + "mismagius": "Mismagius", + "honchkrow": "Honchkrow", + "glameow": "Glameow", + "purugly": "Purugly", + "chingling": "Chingling", + "stunky": "Stunky", + "skuntank": "Skuntank", + "bronzor": "Bronzor", + "bronzong": "Bronzong", + "bonsly": "Bonsly", + "mime_jr": "Mime Jr.", + "happiny": "Happiny", + "chatot": "Chatot", + "spiritomb": "Spiritomb", + "gible": "Gible", + "gabite": "Gabite", + "garchomp": "Garchomp", + "munchlax": "Munchlax", + "riolu": "Riolu", + "lucario": "Lucario", + "hippopotas": "Hippopotas", + "hippowdon": "Hippowdon", + "skorupi": "Skorupi", + "drapion": "Drapion", + "croagunk": "Croagunk", + "toxicroak": "Toxicroak", + "carnivine": "Carnivine", + "finneon": "Finneon", + "lumineon": "Lumineon", + "mantyke": "Mantyke", + "snover": "Snover", + "abomasnow": "Abomasnow", + "weavile": "Weavile", + "magnezone": "Magnezone", + "lickilicky": "Lickilicky", + "rhyperior": "Rhyperior", + "tangrowth": "Tangrowth", + "electivire": "Electivire", + "magmortar": "Magmortar", + "togekiss": "Togekiss", + "yanmega": "Yanmega", + "leafeon": "Leafeon", + "glaceon": "Glaceon", + "gliscor": "Gliscor", + "mamoswine": "Mamoswine", + "porygon_z": "Porygon-Z", + "gallade": "Gallade", + "probopass": "Probopass", + "dusknoir": "Dusknoir", + "froslass": "Froslass", + "rotom": "Rotom", + "uxie": "Uxie", + "mesprit": "Mesprit", + "azelf": "Azelf", + "dialga": "Dialga", + "palkia": "Palkia", + "heatran": "Heatran", + "regigigas": "Regigigas", + "giratina": "Giratina", + "cresselia": "Cresselia", + "phione": "Phione", + "manaphy": "Manaphy", + "darkrai": "Darkrai", + "shaymin": "Shaymin", + "arceus": "Arceus", + "victini": "Victini", + "snivy": "Snivy", + "servine": "Servine", + "serperior": "Serperior", + "tepig": "Tepig", + "pignite": "Pignite", + "emboar": "Emboar", + "oshawott": "Oshawott", + "dewott": "Dewott", + "samurott": "Samurott", + "patrat": "Patrat", + "watchog": "Watchog", + "lillipup": "Lillipup", + "herdier": "Herdier", + "stoutland": "Stoutland", + "purrloin": "Purrloin", + "liepard": "Liepard", + "pansage": "Pansage", + "simisage": "Simisage", + "pansear": "Pansear", + "simisear": "Simisear", + "panpour": "Panpour", + "simipour": "Simipour", + "munna": "Munna", + "musharna": "Musharna", + "pidove": "Pidove", + "tranquill": "Tranquill", + "unfezant": "Unfezant", + "blitzle": "Blitzle", + "zebstrika": "Zebstrika", + "roggenrola": "Roggenrola", + "boldore": "Boldore", + "gigalith": "Gigalith", + "woobat": "Woobat", + "swoobat": "Swoobat", + "drilbur": "Drilbur", + "excadrill": "Excadrill", + "audino": "Audino", + "timburr": "Timburr", + "gurdurr": "Gurdurr", + "conkeldurr": "Conkeldurr", + "tympole": "Tympole", + "palpitoad": "Palpitoad", + "seismitoad": "Seismitoad", + "throh": "Throh", + "sawk": "Sawk", + "sewaddle": "Sewaddle", + "swadloon": "Swadloon", + "leavanny": "Leavanny", + "venipede": "Venipede", + "whirlipede": "Whirlipede", + "scolipede": "Scolipede", + "cottonee": "Cottonee", + "whimsicott": "Whimsicott", + "petilil": "Petilil", + "lilligant": "Lilligant", + "basculin": "Basculin", + "sandile": "Sandile", + "krokorok": "Krokorok", + "krookodile": "Krookodile", + "darumaka": "Darumaka", + "darmanitan": "Darmanitan", + "maractus": "Maractus", + "dwebble": "Dwebble", + "crustle": "Crustle", + "scraggy": "Scraggy", + "scrafty": "Scrafty", + "sigilyph": "Sigilyph", + "yamask": "Yamask", + "cofagrigus": "Cofagrigus", + "tirtouga": "Tirtouga", + "carracosta": "Carracosta", + "archen": "Archen", + "archeops": "Archeops", + "trubbish": "Trubbish", + "garbodor": "Garbodor", + "zorua": "Zorua", + "zoroark": "Zoroark", + "minccino": "Minccino", + "cinccino": "Cinccino", + "gothita": "Gothita", + "gothorita": "Gothorita", + "gothitelle": "Gothitelle", + "solosis": "Solosis", + "duosion": "Duosion", + "reuniclus": "Reuniclus", + "ducklett": "Ducklett", + "swanna": "Swanna", + "vanillite": "Vanillite", + "vanillish": "Vanillish", + "vanilluxe": "Vanilluxe", + "deerling": "Deerling", + "sawsbuck": "Sawsbuck", + "emolga": "Emolga", + "karrablast": "Karrablast", + "escavalier": "Escavalier", + "foongus": "Foongus", + "amoonguss": "Amoonguss", + "frillish": "Frillish", + "jellicent": "Jellicent", + "alomomola": "Alomomola", + "joltik": "Joltik", + "galvantula": "Galvantula", + "ferroseed": "Ferroseed", + "ferrothorn": "Ferrothorn", + "klink": "Klink", + "klang": "Klang", + "klinklang": "Klinklang", + "tynamo": "Tynamo", + "eelektrik": "Eelektrik", + "eelektross": "Eelektross", + "elgyem": "Elgyem", + "beheeyem": "Beheeyem", + "litwick": "Litwick", + "lampent": "Lampent", + "chandelure": "Chandelure", + "axew": "Axew", + "fraxure": "Fraxure", + "haxorus": "Haxorus", + "cubchoo": "Cubchoo", + "beartic": "Beartic", + "cryogonal": "Cryogonal", + "shelmet": "Shelmet", + "accelgor": "Accelgor", + "stunfisk": "Stunfisk", + "mienfoo": "Mienfoo", + "mienshao": "Mienshao", + "druddigon": "Druddigon", + "golett": "Golett", + "golurk": "Golurk", + "pawniard": "Pawniard", + "bisharp": "Bisharp", + "bouffalant": "Bouffalant", + "rufflet": "Rufflet", + "braviary": "Braviary", + "vullaby": "Vullaby", + "mandibuzz": "Mandibuzz", + "heatmor": "Heatmor", + "durant": "Durant", + "deino": "Deino", + "zweilous": "Zweilous", + "hydreigon": "Hydreigon", + "larvesta": "Larvesta", + "volcarona": "Volcarona", + "cobalion": "Cobalion", + "terrakion": "Terrakion", + "virizion": "Virizion", + "tornadus": "Tornadus", + "thundurus": "Thundurus", + "reshiram": "Reshiram", + "zekrom": "Zekrom", + "landorus": "Landorus", + "kyurem": "Kyurem", + "keldeo": "Keldeo", + "meloetta": "Meloetta", + "genesect": "Genesect", + "chespin": "Chespin", + "quilladin": "Quilladin", + "chesnaught": "Chesnaught", + "fennekin": "Fennekin", + "braixen": "Braixen", + "delphox": "Delphox", + "froakie": "Froakie", + "frogadier": "Frogadier", + "greninja": "Greninja", + "bunnelby": "Bunnelby", + "diggersby": "Diggersby", + "fletchling": "Fletchling", + "fletchinder": "Fletchinder", + "talonflame": "Talonflame", + "scatterbug": "Scatterbug", + "spewpa": "Spewpa", + "vivillon": "Vivillon", + "litleo": "Litleo", + "pyroar": "Pyroar", + "flabebe": "Flabébé", + "floette": "Floette", + "florges": "Florges", + "skiddo": "Skiddo", + "gogoat": "Gogoat", + "pancham": "Pancham", + "pangoro": "Pangoro", + "furfrou": "Furfrou", + "espurr": "Espurr", + "meowstic": "Meowstic", + "honedge": "Honedge", + "doublade": "Doublade", + "aegislash": "Aegislash", + "spritzee": "Spritzee", + "aromatisse": "Aromatisse", + "swirlix": "Swirlix", + "slurpuff": "Slurpuff", + "inkay": "Inkay", + "malamar": "Malamar", + "binacle": "Binacle", + "barbaracle": "Barbaracle", + "skrelp": "Skrelp", + "dragalge": "Dragalge", + "clauncher": "Clauncher", + "clawitzer": "Clawitzer", + "helioptile": "Helioptile", + "heliolisk": "Heliolisk", + "tyrunt": "Tyrunt", + "tyrantrum": "Tyrantrum", + "amaura": "Amaura", + "aurorus": "Aurorus", + "sylveon": "Sylveon", + "hawlucha": "Hawlucha", + "dedenne": "Dedenne", + "carbink": "Carbink", + "goomy": "Goomy", + "sliggoo": "Sliggoo", + "goodra": "Goodra", + "klefki": "Klefki", + "phantump": "Phantump", + "trevenant": "Trevenant", + "pumpkaboo": "Pumpkaboo", + "gourgeist": "Gourgeist", + "bergmite": "Bergmite", + "avalugg": "Avalugg", + "noibat": "Noibat", + "noivern": "Noivern", + "xerneas": "Xerneas", + "yveltal": "Yveltal", + "zygarde": "Zygarde", + "diancie": "Diancie", + "hoopa": "Hoopa", + "volcanion": "Volcanion", + "rowlet": "Rowlet", + "dartrix": "Dartrix", + "decidueye": "Decidueye", + "litten": "Litten", + "torracat": "Torracat", + "incineroar": "Incineroar", + "popplio": "Popplio", + "brionne": "Brionne", + "primarina": "Primarina", + "pikipek": "Pikipek", + "trumbeak": "Trumbeak", + "toucannon": "Toucannon", + "yungoos": "Yungoos", + "gumshoos": "Gumshoos", + "grubbin": "Grubbin", + "charjabug": "Charjabug", + "vikavolt": "Vikavolt", + "crabrawler": "Crabrawler", + "crabominable": "Crabominable", + "oricorio": "Oricorio", + "cutiefly": "Cutiefly", + "ribombee": "Ribombee", + "rockruff": "Rockruff", + "lycanroc": "Lycanroc", + "wishiwashi": "Wishiwashi", + "mareanie": "Mareanie", + "toxapex": "Toxapex", + "mudbray": "Mudbray", + "mudsdale": "Mudsdale", + "dewpider": "Dewpider", + "araquanid": "Araquanid", + "fomantis": "Fomantis", + "lurantis": "Lurantis", + "morelull": "Morelull", + "shiinotic": "Shiinotic", + "salandit": "Salandit", + "salazzle": "Salazzle", + "stufful": "Stufful", + "bewear": "Bewear", + "bounsweet": "Bounsweet", + "steenee": "Steenee", + "tsareena": "Tsareena", + "comfey": "Comfey", + "oranguru": "Oranguru", + "passimian": "Passimian", + "wimpod": "Wimpod", + "golisopod": "Golisopod", + "sandygast": "Sandygast", + "palossand": "Palossand", + "pyukumuku": "Pyukumuku", + "type_null": "Tipo Zero", + "silvally": "Silvally", + "minior": "Minior", + "komala": "Komala", + "turtonator": "Turtonator", + "togedemaru": "Togedemaru", + "mimikyu": "Mimikyu", + "bruxish": "Bruxish", + "drampa": "Drampa", + "dhelmise": "Dhelmise", + "jangmo_o": "Jangmo-o", + "hakamo_o": "Hakamo-o", + "kommo_o": "Kommo-o", + "tapu_koko": "Tapu Koko", + "tapu_lele": "Tapu Lele", + "tapu_bulu": "Tapu Bulu", + "tapu_fini": "Tapu Fini", + "cosmog": "Cosmog", + "cosmoem": "Cosmoem", + "solgaleo": "Solgaleo", + "lunala": "Lunala", + "nihilego": "Nihilego", + "buzzwole": "Buzzwole", + "pheromosa": "Pheromosa", + "xurkitree": "Xurkitree", + "celesteela": "Celesteela", + "kartana": "Kartana", + "guzzlord": "Guzzlord", + "necrozma": "Necrozma", + "magearna": "Magearna", + "marshadow": "Marshadow", + "poipole": "Poipole", + "naganadel": "Naganadel", + "stakataka": "Stakataka", + "blacephalon": "Blacephalon", + "zeraora": "Zeraora", + "meltan": "Meltan", + "melmetal": "Melmetal", + "grookey": "Grookey", + "thwackey": "Thwackey", + "rillaboom": "Rillaboom", + "scorbunny": "Scorbunny", + "raboot": "Raboot", + "cinderace": "Cinderace", + "sobble": "Sobble", + "drizzile": "Drizzile", + "inteleon": "Inteleon", + "skwovet": "Skwovet", + "greedent": "Greedent", + "rookidee": "Rookidee", + "corvisquire": "Corvisquire", + "corviknight": "Corviknight", + "blipbug": "Blipbug", + "dottler": "Dottler", + "orbeetle": "Orbeetle", + "nickit": "Nickit", + "thievul": "Thievul", + "gossifleur": "Gossifleur", + "eldegoss": "Eldegoss", + "wooloo": "Wooloo", + "dubwool": "Dubwool", + "chewtle": "Chewtle", + "drednaw": "Drednaw", + "yamper": "Yamper", + "boltund": "Boltund", + "rolycoly": "Rolycoly", + "carkol": "Carkol", + "coalossal": "Coalossal", + "applin": "Applin", + "flapple": "Flapple", + "appletun": "Appletun", + "silicobra": "Silicobra", + "sandaconda": "Sandaconda", + "cramorant": "Cramorant", + "arrokuda": "Arrokuda", + "barraskewda": "Barraskewda", + "toxel": "Toxel", + "toxtricity": "Toxtricity", + "sizzlipede": "Sizzlipede", + "centiskorch": "Centiskorch", + "clobbopus": "Clobbopus", + "grapploct": "Grapploct", + "sinistea": "Sinistea", + "polteageist": "Polteageist", + "hatenna": "Hatenna", + "hattrem": "Hattrem", + "hatterene": "Hatterene", + "impidimp": "Impidimp", + "morgrem": "Morgrem", + "grimmsnarl": "Grimmsnarl", + "obstagoon": "Obstagoon", + "perrserker": "Perrserker", + "cursola": "Cursola", + "sirfetchd": "Sirfetch'd", + "mr_rime": "Mr. Rime", + "runerigus": "Runerigus", + "milcery": "Milcery", + "alcremie": "Alcremie", + "falinks": "Falinks", + "pincurchin": "Pincurchin", + "snom": "Snom", + "frosmoth": "Frosmoth", + "stonjourner": "Stonjourner", + "eiscue": "Eiscue", + "indeedee": "Indeedee", + "morpeko": "Morpeko", + "cufant": "Cufant", + "copperajah": "Copperajah", + "dracozolt": "Dracozolt", + "arctozolt": "Arctozolt", + "dracovish": "Dracovish", + "arctovish": "Arctovish", + "duraludon": "Duraludon", + "dreepy": "Dreepy", + "drakloak": "Drakloak", + "dragapult": "Dragapult", + "zacian": "Zacian", + "zamazenta": "Zamazenta", + "eternatus": "Eternatus", + "kubfu": "Kubfu", + "urshifu": "Urshifu", + "zarude": "Zarude", + "regieleki": "Regieleki", + "regidrago": "Regidrago", + "glastrier": "Glastrier", + "spectrier": "Spectrier", + "calyrex": "Calyrex", + "wyrdeer": "Wyrdeer", + "kleavor": "Kleavor", + "ursaluna": "Ursaluna", + "basculegion": "Basculegion", + "sneasler": "Sneasler", + "overqwil": "Overqwil", + "enamorus": "Enamorus", + "sprigatito": "Sprigatito", + "floragato": "Floragato", + "meowscarada": "Meowscarada", + "fuecoco": "Fuecoco", + "crocalor": "Crocalor", + "skeledirge": "Skeledirge", + "quaxly": "Quaxly", + "quaxwell": "Quaxwell", + "quaquaval": "Quaquaval", + "lechonk": "Lechonk", + "oinkologne": "Oinkologne", + "tarountula": "Tarountula", + "spidops": "Spidops", + "nymble": "Nymble", + "lokix": "Lokix", + "pawmi": "Pawmi", + "pawmo": "Pawmo", + "pawmot": "Pawmot", + "tandemaus": "Tandemaus", + "maushold": "Maushold", + "fidough": "Fidough", + "dachsbun": "Dachsbun", + "smoliv": "Smoliv", + "dolliv": "Dolliv", + "arboliva": "Arboliva", + "squawkabilly": "Squawkabilly", + "nacli": "Nacli", + "naclstack": "Naclstack", + "garganacl": "Garganacl", + "charcadet": "Charcadet", + "armarouge": "Armarouge", + "ceruledge": "Ceruledge", + "tadbulb": "Tadbulb", + "bellibolt": "Bellibolt", + "wattrel": "Wattrel", + "kilowattrel": "Kilowattrel", + "maschiff": "Maschiff", + "mabosstiff": "Mabosstiff", + "shroodle": "Shroodle", + "grafaiai": "Grafaiai", + "bramblin": "Bramblin", + "brambleghast": "Brambleghast", + "toedscool": "Toedscool", + "toedscruel": "Toedscruel", + "klawf": "Klawf", + "capsakid": "Capsakid", + "scovillain": "Scovillain", + "rellor": "Rellor", + "rabsca": "Rabsca", + "flittle": "Flittle", + "espathra": "Espathra", + "tinkatink": "Tinkatink", + "tinkatuff": "Tinkatuff", + "tinkaton": "Tinkaton", + "wiglett": "Wiglett", + "wugtrio": "Wugtrio", + "bombirdier": "Bombirdier", + "finizen": "Finizen", + "palafin": "Palafin", + "varoom": "Varoom", + "revavroom": "Revavroom", + "cyclizar": "Cyclizar", + "orthworm": "Orthworm", + "glimmet": "Glimmet", + "glimmora": "Glimmora", + "greavard": "Greavard", + "houndstone": "Houndstone", + "flamigo": "Flamigo", + "cetoddle": "Cetoddle", + "cetitan": "Cetitan", + "veluza": "Veluza", + "dondozo": "Dondozo", + "tatsugiri": "Tatsugiri", + "annihilape": "Annihilape", + "clodsire": "Clodsire", + "farigiraf": "Farigiraf", + "dudunsparce": "Dudunsparce", + "kingambit": "Kingambit", + "great_tusk": "Grandizanne", + "scream_tail": "Codaurlante", + "brute_bonnet": "Fungofurioso", + "flutter_mane": "Crinealato", + "slither_wing": "Alirasenti", + "sandy_shocks": "Peldisabbia", + "iron_treads": "Solcoferreo", + "iron_bundle": "Saccoferreo", + "iron_hands": "Manoferrea", + "iron_jugulis": "Colloferreo", + "iron_moth": "Falenaferrea", + "iron_thorns": "Spineferree", + "frigibax": "Frigibax", + "arctibax": "Arctibax", + "baxcalibur": "Baxcalibur", + "gimmighoul": "Gimmighoul", + "gholdengo": "Gholdengo", + "wo_chien": "Wo-Chien", + "chien_pao": "Chien-Pao", + "ting_lu": "Ting-Lu", + "chi_yu": "Chi-Yu", + "roaring_moon": "Lunaruggente", + "iron_valiant": "Eroeferreo", + "koraidon": "Koraidon", + "miraidon": "Miraidon", + "walking_wake": "Acquecrespe", + "iron_leaves": "Fogliaferrea", + "dipplin": "Dipplin", + "poltchageist": "Poltchageist", + "sinistcha": "Sinistcha", + "okidogi": "Okidogi", + "munkidori": "Munkidori", + "fezandipiti": "Fezandipiti", + "ogerpon": "Ogerpon", + "archaludon": "Archaludon", + "hydrapple": "Hydrapple", + "gouging_fire": "Vampeaguzze", + "raging_bolt": "Furiatonante", + "iron_boulder": "Massoferreo", + "iron_crown": "Capoferreo", + "terapagos": "Terapagos", + "pecharunt": "Pecharunt", + "alola_rattata": "Rattata", + "alola_raticate": "Raticate", + "alola_raichu": "Raichu", + "alola_sandshrew": "Sandshrew", + "alola_sandslash": "Sandslash", + "alola_vulpix": "Vulpix", + "alola_ninetales": "Ninetales", + "alola_diglett": "Diglett", + "alola_dugtrio": "Dugtrio", + "alola_meowth": "Meowth", + "alola_persian": "Persian", + "alola_geodude": "Geodude", + "alola_graveler": "Graveler", + "alola_golem": "Golem", + "alola_grimer": "Grimer", + "alola_muk": "Muk", + "alola_exeggutor": "Exeggutor", + "alola_marowak": "Marowak", + "eternal_floette": "Floette", + "galar_meowth": "Meowth", + "galar_ponyta": "Ponyta", + "galar_rapidash": "Rapidash", + "galar_slowpoke": "Slowpoke", + "galar_slowbro": "Slowbro", + "galar_farfetchd": "Farfetch'd", + "galar_weezing": "Weezing", + "galar_mr_mime": "Mr. Mime", + "galar_articuno": "Articuno", + "galar_zapdos": "Zapdos", + "galar_moltres": "Moltres", + "galar_slowking": "Slowking", + "galar_corsola": "Corsola", + "galar_zigzagoon": "Zigzagoon", + "galar_linoone": "Linoone", + "galar_darumaka": "Darumaka", + "galar_darmanitan": "Darmanitan", + "galar_yamask": "Yamask", + "galar_stunfisk": "Stunfisk", + "hisui_growlithe": "Growlithe", + "hisui_arcanine": "Arcanine", + "hisui_voltorb": "Voltorb", + "hisui_electrode": "Electrode", + "hisui_typhlosion": "Typhlosion", + "hisui_qwilfish": "Qwilfish", + "hisui_sneasel": "Sneasel", + "hisui_samurott": "Samurott", + "hisui_lilligant": "Lilligant", + "hisui_zorua": "Zorua", + "hisui_zoroark": "Zoroark", + "hisui_braviary": "Braviary", + "hisui_sliggoo": "Sliggoo", + "hisui_goodra": "Goodra", + "hisui_avalugg": "Avalugg", + "hisui_decidueye": "Decidueye", + "paldea_tauros": "Tauros", + "paldea_wooper": "Wooper", + "bloodmoon_ursaluna": "Ursaluna", +} as const; diff --git a/src/locales/it/starter-select-ui-handler.ts b/src/locales/it/starter-select-ui-handler.ts new file mode 100644 index 000000000..1a442ffe9 --- /dev/null +++ b/src/locales/it/starter-select-ui-handler.ts @@ -0,0 +1,32 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +/** + * The menu namespace holds most miscellaneous text that isn't directly part of the game's + * contents or directly related to Pokemon data. This includes menu navigation, settings, + * account interactions, descriptive text, etc. + */ +export const starterSelectUiHandler: SimpleTranslationEntries = { + "confirmStartTeam":'Vuoi iniziare con questi Pokémon?', + "growthRate": "Vel. Crescita:", + "ability": "Abilità:", + "passive": "Passiva:", + "nature": "Natura:", + "eggMoves": 'Mosse delle uova', + "start": "Inizia", + "addToParty": "Aggiungi al Gruppo", + "toggleIVs": 'Vedi/Nascondi IV', + "manageMoves": 'Gestisci Mosse', + "useCandies": 'Usa Caramelle', + "selectMoveSwapOut": "Seleziona una mossa da scambiare.", + "selectMoveSwapWith": "Seleziona una mossa da scambiare con", + "unlockPassive": "Sblocca Passiva", + "reduceCost": "Riduci Costo", + "cycleShiny": "R: Alterna Shiny", + "cycleForm": 'F: Alterna Forma', + "cycleGender": 'G: Alterna Sesso', + "cycleAbility": 'E: Alterna Abilità', + "cycleNature": 'N: Alterna Natura', + "cycleVariant": 'V: Alterna Variante', + "enablePassive": "Attiva Passiva", + "disablePassive": "Disattiva Passiva" +} \ No newline at end of file diff --git a/src/locales/it/tutorial.ts b/src/locales/it/tutorial.ts index 2773b6710..898dcead8 100644 --- a/src/locales/it/tutorial.ts +++ b/src/locales/it/tutorial.ts @@ -1,42 +1,42 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const tutorial: SimpleTranslationEntries = { - "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. - $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. - $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. - $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + "intro": `Benvenuto in PokéRogue! Questo gioco si concentra sulle battaglie, con elementi roguelite. + $Questo gioco non è monetizzato e non siamo proprietari di Pokemon e Assets presenti nel gioco. + $Il gioco è work-in-progress ma giocabile al 100%.\nPer reportare eventuali bugs è possibile discuterne sul nostro Discord. + $Se il game risulta 'lento', assicurati di aver abilitato l'Accelerazione Hardware nelle impostazioni del tuo Browser`, - "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + "accessMenu": `Per accedere al menù, press M o Esc.\nDal menù puoi cambiare impostazioni, controllare la wiki e accedere a varie features.`, - "menu": `From this menu you can access the settings. - $From the settings you can change game speed, window style, and other options. - $There are also various other features here, so be sure to check them all!`, + "menu": `Da questo menù puoi accedere alle impostazioni. + $Dalle impostazioni puoi cambiare velocità di gioco, stile di finestra e altre opzioni. + $Ci sono varie funzionalità, controlla bene e non perderti nulla!`, - "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. - $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. - $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. - $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + "starterSelect": `Da questa schermata puoi selezionare il tuo starter.\nQuesti sono i membri iniziali del tuo parti. + $Ogni starter ha un valore. Puoi avere fino a \n6 Pokèmon, avendo a disposizione un massimo di 10 punti. + $Puoi anche selezionare Sesso, Abilità, e Forma a seconda delle\nvarianti che hai catturato o schiuso. + $Le IVs di una specie sono le migliori rispetto a tutte quelle che hai\ncatturato o schiuso, quindi prova a catturarne il piu possibile!`, - "pokerus": `A daily random 3 selectable starters have a purple border. - $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "pokerus": `Giornalmente 3 Starter casuali disponibili avranno il bordo viola. + $Se possiedi uno di questi starter,\nprova ad aggiungerlo al party. Ricorda di controllare le info!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, + "statChange": `I cambiamenti alle statistiche persistono fintanto che i tuoi pokèmon resteranno in campo. + $I tuoi pokemon verranno richiamati quando incontrerai un allenatore o al cambiamento di bioma. + $Puoi anche vedere i cambiamenti alle statistiche in corso tenendo premuto C o Shift`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. - $These range from consumables, to Pokémon held items, to passive permanent items. - $Most non-consumable item effects will stack in various ways. - $Some items will only show up if they can be used, such as evolution items. - $You can also transfer held items between Pokémon using the transfer option. - $The transfer option will appear in the bottom right once you have obtained a held item. - $You may purchase consumable items with money, and a larger variety will be available the further you get. - $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + "selectItem": `Dopo ogni battaglia avrai disponibili tre item.\nPotrai prenderne solo uno. + $Questi spaziano tra consumabili, item tenuti da Pokèmon o con un effetto passivo permanente. + $La maggior parte degli Item non Consumabili possono stackare in diversi modi. + $Alcuni Item risulteranno disponibili solo se possono essere usati, come Item Evolutivi. + $Puoi anche passare un Item tenuto da un Pokèmon ad un altro attraverso l'opzione 'trasferisci strumento'. + $L'opzione 'trasferisci strumento' sarà disponibile solo dopo aver assegnato uno strumento ad un Pokèmon. + $Puoi acquistare consumabili con le monete, progredendo saranno poi disponibili ulteriori oggetti. + $Assicurati di fare un acquisto prima di selezionare un item casuale, poichè passerai subito alla lotta successiva.`, - "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. - $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. - $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. - $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. - $Some Pokémon can only even be obtained from eggs. - $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, + "eggGacha": `Da questa schermata, puoi riscattare i tuoi vouchers in cambio di\nuova Pokèmon. + $Le uova vanno schiuse e saranno sempre più vicine alla schiusura dopo\nogni battaglia. Le uova più rare impiegheranno più battaglie per la schiusura. + $I Pokémon schiusi non verranno aggiunti alla tua squadra, saranno\naggiunti ai tuoi starters. + $I Pokémon schiusi generalmente hanno IVs migliori rispetto ai\n Pokémon selvatici. + $Alcuni Pokémon possono essere ottenuti solo tramite uova. + $Ci sono 3 diversi macchinari con differenti\nbonus, scegli quello che preferisci!`, } as const; \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 6a00693fc..b3b4d5f3c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,23 @@ import BBCodeText from 'phaser3-rex-plugins/plugins/bbcodetext'; import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js'; import { LoadingScene } from './loading-scene'; + +// Catch global errors and display them in an alert so users can report the issue. +window.onerror = function (message, source, lineno, colno, error) { + console.error(error); + let errorString = `Received unhandled error. Open browser console and click OK to see details.\nError: ${message}\nSource: ${source}\nLine: ${lineno}\nColumn: ${colno}\nStack: ${error.stack}`; + //alert(errorString); + // Avoids logging the error a second time. + return true; +}; + +// Catch global promise rejections and display them in an alert so users can report the issue. +window.addEventListener('unhandledrejection', (event) => { + let errorString = `Received unhandled promise rejection. Open browser console and click OK to see details.\nReason: ${event.reason}`; + console.error(event.reason); + //alert(errorString); +}); + const config: Phaser.Types.Core.GameConfig = { type: Phaser.WEBGL, parent: 'app', diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 6237e8b5a..249ad52dd 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -144,9 +144,16 @@ class AddPokeballModifierType extends ModifierType implements Localizable { } localize(): void { + // TODO: Actually use i18n to localize this description. this.name = `${this.count}x ${getPokeballName(this.pokeballType)}`; - this.description = `Receive ${getPokeballName(this.pokeballType)} x${this.count}\nCatch Rate: ${getPokeballCatchMultiplier(this.pokeballType) > -1 ? `${getPokeballCatchMultiplier(this.pokeballType)}x` : 'Certain'}`; + this.description = `Receive ${getPokeballName(this.pokeballType)} x${this.count} (Inventory: {AMOUNT}) \nCatch Rate: ${getPokeballCatchMultiplier(this.pokeballType) > -1 ? `${getPokeballCatchMultiplier(this.pokeballType)}x` : 'Certain'}`; } + + getDescription(scene: BattleScene): string { + this.localize(); + return this.description.replace('{AMOUNT}', scene.pokeballCounts[this.pokeballType].toString()); + } + } class AddVoucherModifierType extends ModifierType { @@ -299,7 +306,7 @@ export class PokemonNatureChangeModifierType extends PokemonModifierType { protected nature: Nature; constructor(nature: Nature) { - super(`${getNatureName(nature)} Mint`, `Changes a Pokémon\'s nature to ${getNatureName(nature, true, true, true)}`, ((_type, args) => new Modifiers.PokemonNatureChangeModifier(this, (args[0] as PlayerPokemon).id, this.nature)), + super(`${getNatureName(nature)} Mint`, `Changes a Pokémon\'s nature to ${getNatureName(nature, true, true, true)} and permanently unlocks the nature for the starter.`, ((_type, args) => new Modifiers.PokemonNatureChangeModifier(this, (args[0] as PlayerPokemon).id, this.nature)), ((pokemon: PlayerPokemon) => { if (pokemon.getNature() === this.nature) return PartyUiHandler.NoEffectMessage; @@ -997,7 +1004,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.REVIVE, (party: Pokemon[]) => { const faintedPartyMemberCount = Math.min(party.filter(p => p.isFainted()).length, 3); return faintedPartyMemberCount * 9; - }, 3), + }, 27), new WeightedModifierType(modifierTypes.MAX_REVIVE, (party: Pokemon[]) => { const faintedPartyMemberCount = Math.min(party.filter(p => p.isFainted()).length, 3); return faintedPartyMemberCount * 3; @@ -1058,7 +1065,6 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), new WeightedModifierType(modifierTypes.TM_ULTRA, 8), new WeightedModifierType(modifierTypes.RARER_CANDY, 4), - new WeightedModifierType(modifierTypes.SOOTHE_BELL, (party: Pokemon[]) => party.find(p => (pokemonEvolutions.hasOwnProperty(p.species.speciesId) && pokemonEvolutions[p.species.speciesId].find(e => e.condition && e.condition instanceof SpeciesFriendshipEvolutionCondition)) || p.moveset.find(m => m.moveId === Moves.RETURN)) ? 16 : 0, 16), new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2), new WeightedModifierType(modifierTypes.IV_SCANNER, 4), new WeightedModifierType(modifierTypes.EXP_CHARM, 8), @@ -1078,6 +1084,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.BATON, 2), new WeightedModifierType(modifierTypes.SOUL_DEW, 8), //new WeightedModifierType(modifierTypes.OVAL_CHARM, 6), + new WeightedModifierType(modifierTypes.SOOTHE_BELL, 4), new WeightedModifierType(modifierTypes.ABILITY_CHARM, 6), new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), @@ -1151,7 +1158,7 @@ const enemyBuffModifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.ENEMY_ATTACK_FREEZE_CHANCE, 2), new WeightedModifierType(modifierTypes.ENEMY_ATTACK_BURN_CHANCE, 2), new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 10), - new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 10000), + new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 5), new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1) ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), [ModifierTier.GREAT]: [ @@ -1162,12 +1169,12 @@ const enemyBuffModifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1) ].map(m => { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 5), - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 5), - new WeightedModifierType(modifierTypes.ENEMY_HEAL, 5), - new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 5), - new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 5), - new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 300) + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 10), + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 10), + new WeightedModifierType(modifierTypes.ENEMY_HEAL, 10), + new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 10), + new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 10), + new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 5) ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.ROGUE]: [ ].map(m => { m.setTier(ModifierTier.ROGUE); return m; }), [ModifierTier.MASTER]: [ ].map(m => { m.setTier(ModifierTier.MASTER); return m; }) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index d8fad1466..2d76bec34 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -8,15 +8,14 @@ import { Stat } from "../data/pokemon-stat"; import { addTextObject, TextStyle } from "../ui/text"; import { Type } from '../data/type'; import { EvolutionPhase } from '../evolution-phase'; -import { FusionSpeciesFormEvolution, pokemonEvolutions } from '../data/pokemon-evolutions'; +import { FusionSpeciesFormEvolution, pokemonEvolutions, pokemonPrevolutions } from '../data/pokemon-evolutions'; import { getPokemonMessage } from '../messages'; import * as Utils from "../utils"; import { TempBattleStat } from '../data/temp-battle-stat'; import { BerryType, getBerryEffectFunc, getBerryPredicate } from '../data/berry'; import { StatusEffect, getStatusEffectHealText } from '../data/status-effect'; -import { MoneyAchv, achvs } from '../system/achv'; +import { achvs } from '../system/achv'; import { VoucherType } from '../system/voucher'; -import { PreventBerryUseAbAttr, applyAbAttrs } from '../data/ability'; import { FormChangeItem, SpeciesFormChangeItemTrigger } from '../data/pokemon-forms'; import { Nature } from '#app/data/nature'; import { BattlerTagType } from '#app/data/enums/battler-tag-type'; @@ -1090,6 +1089,13 @@ export class PokemonNatureChangeModifier extends ConsumablePokemonModifier { apply(args: any[]): boolean { const pokemon = args[0] as Pokemon; pokemon.natureOverride = this.nature; + let speciesId = pokemon.species.speciesId; + pokemon.scene.gameData.dexData[speciesId].natureAttr |= Math.pow(2, this.nature + 1); + + while (pokemonPrevolutions.hasOwnProperty(speciesId)) { + speciesId = pokemonPrevolutions[speciesId]; + pokemon.scene.gameData.dexData[speciesId].natureAttr |= Math.pow(2, this.nature + 1); + } return true; } @@ -1111,9 +1117,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { pokemon.levelExp = 0; } - const friendshipIncrease = new Utils.IntegerHolder(5); - pokemon.scene.applyModifier(PokemonFriendshipBoosterModifier, true, pokemon, friendshipIncrease); - pokemon.friendship = Math.min(pokemon.friendship + friendshipIncrease.value, 255); + pokemon.addFriendship(5); pokemon.scene.unshiftPhase(new LevelUpPhase(pokemon.scene, pokemon.scene.getParty().indexOf(pokemon), pokemon.level - levelCount.value, pokemon.level)); @@ -1392,13 +1396,14 @@ export class PokemonFriendshipBoosterModifier extends PokemonHeldItemModifier { } apply(args: any[]): boolean { - (args[1] as Utils.IntegerHolder).value *= 1 + 0.5 * this.getStackCount(); + const friendship = args[1] as Utils.IntegerHolder; + friendship.value = Math.floor(friendship.value * (1 + 0.5 * this.getStackCount())); return true; } getMaxHeldItemCount(pokemon: Pokemon): integer { - return 5; + return 3; } } diff --git a/src/overrides.ts b/src/overrides.ts index 732b1a5a4..7608275ea 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -12,12 +12,17 @@ export const STARTING_WAVE_OVERRIDE = 0; export const STARTING_BIOME_OVERRIDE = Biome.TOWN; export const STARTING_MONEY_OVERRIDE = 0; export const WEATHER_OVERRIDE = WeatherType.NONE; +export const DOUBLE_BATTLE_OVERRIDE = false; export const ABILITY_OVERRIDE = Abilities.NONE; +export const PASSIVE_ABILITY_OVERRIDE = Abilities.NONE; export const MOVE_OVERRIDE = Moves.NONE; +export const MOVE_OVERRIDE_2 = Moves.NONE; export const OPP_SPECIES_OVERRIDE = 0; export const OPP_ABILITY_OVERRIDE = Abilities.NONE; +export const OPP_PASSIVE_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_MOVE_OVERRIDE = Moves.NONE; +export const OPP_MOVE_OVERRIDE_2 = Moves.NONE; export const OPP_SHINY_OVERRIDE = false; export const OPP_VARIANT_OVERRIDE = 0; diff --git a/src/phases.ts b/src/phases.ts index ad2a7537d..9ed1161f7 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -1,12 +1,12 @@ -import BattleScene, { bypassLogin, startingWave } from "./battle-scene"; +import BattleScene, { AnySound, bypassLogin, startingWave } from "./battle-scene"; import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult, FieldPosition, HitResult, TurnMove } from "./field/pokemon"; import * as Utils from './utils'; import { Moves } from "./data/enums/moves"; -import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, OneHitKOAttr, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, DelayedAttackAttr, RechargeAttr, PreMoveMessageAttr, HealStatusEffectAttr, IgnoreOpponentStatChangesAttr, NoEffectAttr, FixedDamageAttr, OneHitKOAccuracyAttr, ForceSwitchOutAttr } from "./data/move"; +import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, OneHitKOAttr, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, DelayedAttackAttr, RechargeAttr, PreMoveMessageAttr, HealStatusEffectAttr, IgnoreOpponentStatChangesAttr, NoEffectAttr, FixedDamageAttr, OneHitKOAccuracyAttr, ForceSwitchOutAttr, VariableTargetAttr } from "./data/move"; import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./data/pokemon-stat"; -import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, PokemonFriendshipBoosterModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier } from "./modifier/modifier"; +import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier } from "./modifier/modifier"; import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball"; import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims"; @@ -30,7 +30,7 @@ import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, get import { TempBattleStat } from "./data/temp-battle-stat"; import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag"; import { ArenaTagType } from "./data/enums/arena-tag-type"; -import { CheckTrappedAbAttr, IgnoreOpponentStatChangesAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, applyPostBattleInitAbAttrs, PostBattleInitAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr } from "./data/ability"; +import { CheckTrappedAbAttr, IgnoreOpponentStatChangesAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, applyPostBattleInitAbAttrs, PostBattleInitAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr, StatChangeCopyAbAttr } from "./data/ability"; import { Unlockables, getUnlockableName } from "./system/unlockables"; import { getBiomeKey } from "./field/arena"; import { BattleType, BattlerIndex, TurnCommand } from "./battle"; @@ -55,8 +55,9 @@ import { OptionSelectConfig, OptionSelectItem } from "./ui/abstact-option-select import { SaveSlotUiMode } from "./ui/save-slot-select-ui-handler"; import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run"; import { GameModes, gameModes } from "./game-mode"; -import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; +import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm, speciesStarters } from "./data/pokemon-species"; import i18next from './plugins/i18n'; +import { Abilities } from "./data/enums/abilities"; import { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE } from './overrides'; export class LoginPhase extends Phase { @@ -331,6 +332,8 @@ export class TitlePhase extends Phase { this.scene.sessionPlayTime = 0; this.end(); }); + }).catch(err => { + console.error("Failed to load daily run:\n", err); }); }); } @@ -815,14 +818,14 @@ export class EncounterPhase extends BattlePhase { const enemyField = this.scene.getEnemyField(); if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) - return i18next.t('menu:bossAppeared', {bossName: enemyField[0].name}); + return i18next.t('battle:bossAppeared', {bossName: enemyField[0].name}); if (this.scene.currentBattle.battleType === BattleType.TRAINER) - return i18next.t('menu:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)}); + return i18next.t('battle:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)}); return enemyField.length === 1 - ? i18next.t('menu:singleWildAppeared', {pokemonName: enemyField[0].name}) - : i18next.t('menu:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name}) + ? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name}) + : i18next.t('battle:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name}) } doEncounterCommon(showEncounterMessage: boolean = true) { @@ -1176,18 +1179,30 @@ export class SummonPhase extends PartyMemberPokemonPhase { this.preSummon(); } + /** + * Sends out a Pokemon before the battle begins and shows the appropriate messages + */ preSummon(): void { const partyMember = this.getPokemon(); + // If the Pokemon about to be sent out is fainted, switch to the first non-fainted Pokemon if (partyMember.isFainted()) { + console.warn("The Pokemon about to be sent out is fainted. Attempting to resolve..."); const party = this.getParty(); - const nonFaintedIndex = party.slice(this.partyMemberIndex).findIndex(p => !p.isFainted()) + this.partyMemberIndex; - const nonFaintedPartyMember = party[nonFaintedIndex]; - party[nonFaintedIndex] = partyMember; - party[this.partyMemberIndex] = nonFaintedPartyMember; + + // Find the first non-fainted Pokemon index above the current one + const nonFaintedIndex = party.findIndex((p, i) => i > this.partyMemberIndex && !p.isFainted()); + if (nonFaintedIndex === -1) { + console.error("Party Details:\n", party); + throw new Error("All available Pokemon were fainted!"); + } + + // Swaps the fainted Pokemon and the first non-fainted Pokemon in the party + [party[this.partyMemberIndex], party[nonFaintedIndex]] = [party[nonFaintedIndex], party[this.partyMemberIndex]]; + console.warn("Swapped %s %O with %s %O", partyMember?.name, partyMember, party[0]?.name, party[0]); } if (this.player) { - this.scene.ui.showText(i18next.t('menu:playerGo', { pokemonName: this.getPokemon().name })); + this.scene.ui.showText(i18next.t('battle:playerGo', { pokemonName: this.getPokemon().name })); if (this.player) this.scene.pbTray.hide(); this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'f' : 'm'}_back_pb`); @@ -1355,8 +1370,8 @@ export class SwitchSummonPhase extends SummonPhase { applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, pokemon); this.scene.ui.showText(this.player ? - i18next.t('menu:playerComeBack', { pokemonName: pokemon.name }) : - i18next.t('menu:trainerComeBack', { + i18next.t('battle:playerComeBack', { pokemonName: pokemon.name }) : + i18next.t('battle:trainerComeBack', { trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), pokemonName: pokemon.name }) @@ -1396,8 +1411,8 @@ export class SwitchSummonPhase extends SummonPhase { party[this.fieldIndex] = switchedPokemon; const showTextAndSummon = () => { this.scene.ui.showText(this.player ? - i18next.t('menu:playerGo', { pokemonName: switchedPokemon.name }) : - i18next.t('menu:trainerGo', { + i18next.t('battle:playerGo', { pokemonName: switchedPokemon.name }) : + i18next.t('battle:trainerGo', { trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), pokemonName: this.getPokemon().name }) @@ -1544,7 +1559,7 @@ export class CheckSwitchPhase extends BattlePhase { return; } - this.scene.ui.showText(i18next.t('menu:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('menu:pokemon') }), null, () => { + this.scene.ui.showText(i18next.t('battle:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('battle:pokemon') }), null, () => { this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.setMode(Mode.MESSAGE); this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); @@ -1564,7 +1579,7 @@ export class SummonMissingPhase extends SummonPhase { } preSummon(): void { - this.scene.ui.showText(i18next.t('menu:sendOutPokemon', { pokemonName: this.getPokemon().name})); + this.scene.ui.showText(i18next.t('battle:sendOutPokemon', { pokemonName: this.getPokemon().name})); this.scene.time.delayedCall(250, () => this.summon()); } } @@ -1579,7 +1594,7 @@ export class LevelCapPhase extends FieldPhase { this.scene.ui.setMode(Mode.MESSAGE).then(() => { this.scene.playSound('level_up_fanfare'); - this.scene.ui.showText(i18next.t('menu:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true); + this.scene.ui.showText(i18next.t('battle:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true); this.executeForAll(pokemon => pokemon.updateInfo(true)); }); } @@ -1665,52 +1680,52 @@ export class CommandPhase extends FieldPhase { switch (command) { case Command.FIGHT: let useStruggle = false; - if (cursor === -1 || playerPokemon.trySelectMove(cursor, args[0] as boolean) || (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m.isUsable(playerPokemon)).length)) { + if (cursor === -1 || + playerPokemon.trySelectMove(cursor, args[0] as boolean) || + (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m.isUsable(playerPokemon)).length)) { const moveId = !useStruggle ? cursor > -1 ? playerPokemon.getMoveset()[cursor].moveId : Moves.NONE : Moves.STRUGGLE; const turnCommand: TurnCommand = { command: Command.FIGHT, cursor: cursor, move: { move: moveId, targets: [], ignorePP: args[0] }, args: args }; const moveTargets: MoveTargetSet = args.length < 3 ? getMoveTargets(playerPokemon, moveId) : args[2]; - if (moveId) { - const move = playerPokemon.getMoveset()[cursor]; - if (move.getName().endsWith(' (N)')) { - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:moveNotImplemented', { moveName: move.getName().slice(0, -4) }), null, () => { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); - }, null, true); - return; - } - } else + if (!moveId) turnCommand.targets = [ this.fieldIndex ]; console.log(moveTargets, playerPokemon.name); if (moveTargets.targets.length <= 1 || moveTargets.multiple) turnCommand.move.targets = moveTargets.targets; + else if(playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1) + turnCommand.move.targets = playerPokemon.getMoveQueue()[0].targets; else this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); this.scene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; success = true; - } else if (cursor < playerPokemon.getMoveset().length) { + } + else if (cursor < playerPokemon.getMoveset().length) { const move = playerPokemon.getMoveset()[cursor]; - if (playerPokemon.summonData.disabledMove === move.moveId) { - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:moveDisabled', { moveName: move.getName() }), null, () => { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); - }, null, true); - } + this.scene.ui.setMode(Mode.MESSAGE); + + // Decides between a Disabled, Not Implemented, or No PP translation message + const errorMessage = + playerPokemon.summonData.disabledMove === move.moveId ? 'battle:moveDisabled' : + move.getName().endsWith(' (N)') ? 'battle:moveNotImplemented' : 'battle:moveNoPP'; + const moveName = move.getName().replace(' (N)', ''); // Trims off the indicator + + this.scene.ui.showText(i18next.t(errorMessage, { moveName: moveName }), null, () => { + this.scene.ui.clearText(); + this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); + }, null, true); } break; case Command.BALL: if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballForce'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballForce'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else if (this.scene.currentBattle.battleType === BattleType.TRAINER) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballTrainer'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballTrainer'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1719,16 +1734,16 @@ export class CommandPhase extends FieldPhase { if (targets.length > 1) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballMulti'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballMulti'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else if (cursor < 5) { const targetPokemon = this.scene.getEnemyField().find(p => p.isActive(true)); - if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && cursor < PokeballType.MASTER_BALL) { + if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && !targetPokemon.hasAbility(Abilities.WONDER_GUARD, false, true) && cursor < PokeballType.MASTER_BALL) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballStrong'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballStrong'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1748,14 +1763,14 @@ export class CommandPhase extends FieldPhase { if (!isSwitch && this.scene.arena.biomeType === Biome.END) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noEscapeForce'), null, () => { + this.scene.ui.showText(i18next.t('battle:noEscapeForce'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noEscapeTrainer'), null, () => { + this.scene.ui.showText(i18next.t('battle:noEscapeTrainer'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1778,10 +1793,10 @@ export class CommandPhase extends FieldPhase { this.scene.ui.setMode(Mode.MESSAGE); } this.scene.ui.showText( - i18next.t('menu:noEscapePokemon', { + i18next.t('battle:noEscapePokemon', { pokemonName: this.scene.getPokemonById(trapTag.sourceId).name, moveName: trapTag.getMoveName(), - escapeVerb: isSwitch ? i18next.t('menu:escapeVerbSwitch') : i18next.t('menu:escapeVerbFlee') + escapeVerb: isSwitch ? i18next.t('battle:escapeVerbSwitch') : i18next.t('battle:escapeVerbFlee') }), null, () => { @@ -2031,7 +2046,7 @@ export class TurnEndPhase extends FieldPhase { pokemon.lapseTags(BattlerTagLapseType.TURN_END); if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) { - this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('menu:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name }))); + this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('battle:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name }))); pokemon.summonData.disabledMove = Moves.NONE; } @@ -2261,18 +2276,21 @@ export class MovePhase extends BattlePhase { // Assume conditions affecting targets only apply to moves with a single target let success = this.move.getMove().applyConditions(this.pokemon, targets[0], this.move.getMove()); - let failedText = null; + let cancelled = new Utils.BooleanHolder(false); + let failedText = this.move.getMove().getFailedText(this.pokemon, targets[0], this.move.getMove(), cancelled); if (success && this.scene.arena.isMoveWeatherCancelled(this.move.getMove())) success = false; - else if (success && this.scene.arena.isMoveTerrainCancelled(this.pokemon, this.move.getMove())) { + else if (success && this.scene.arena.isMoveTerrainCancelled(this.pokemon, this.targets, this.move.getMove())) { success = false; - failedText = getTerrainBlockMessage(targets[0], this.scene.arena.terrain.terrainType); + if (failedText == null) + failedText = getTerrainBlockMessage(targets[0], this.scene.arena.terrain.terrainType); } if (success) this.scene.unshiftPhase(this.getEffectPhase()); else { this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual }); - this.showFailedText(failedText); + if (!cancelled.value) + this.showFailedText(failedText); } this.end(); @@ -2325,13 +2343,14 @@ export class MovePhase extends BattlePhase { showMoveText(): void { if (this.move.getMove().getAttrs(ChargeAttr).length) { - this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500); const lastMove = this.pokemon.getLastXMoves() as TurnMove[]; - if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER) + if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER){ + this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500); return; + } } - if (this.pokemon.getTag(BattlerTagType.RECHARGING)) + if (this.pokemon.getTag(BattlerTagType.RECHARGING || BattlerTagType.INTERRUPTED)) return; this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500); @@ -2339,7 +2358,7 @@ export class MovePhase extends BattlePhase { } showFailedText(failedText: string = null): void { - this.scene.queueMessage(failedText || i18next.t('menu:attackFailed')); + this.scene.queueMessage(failedText || i18next.t('battle:attackFailed')); } end() { @@ -2394,7 +2413,7 @@ export class MoveEffectPhase extends PokemonPhase { const targetHitChecks = Object.fromEntries(targets.map(p => [ p.getBattlerIndex(), this.hitCheck(p) ])); const activeTargets = targets.map(t => t.isActive(true)); - if (!activeTargets.length || (!this.move.getMove().isMultiTarget() && !targetHitChecks[this.targets[0]])) { + if (!activeTargets.length || (!this.move.getMove().getAttrs(VariableTargetAttr).length && !this.move.getMove().isMultiTarget() && !targetHitChecks[this.targets[0]])) { user.turnData.hitCount = 1; user.turnData.hitsLeft = 1; if (activeTargets.length) { @@ -2402,7 +2421,7 @@ export class MoveEffectPhase extends PokemonPhase { moveHistoryEntry.result = MoveResult.MISS; applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove()); } else { - this.scene.queueMessage(i18next.t('menu:attackFailed')); + this.scene.queueMessage(i18next.t('battle:attackFailed')); moveHistoryEntry.result = MoveResult.FAIL; } return this.end(); @@ -2473,6 +2492,9 @@ export class MoveEffectPhase extends PokemonPhase { }); })); } + // Trigger effect which should only apply one time after all targeted effects have already applied + applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.POST_TARGET, + user, null, this.move.getMove()) Promise.allSettled(applyAttrs).then(() => this.end()); }); }); @@ -2486,7 +2508,7 @@ export class MoveEffectPhase extends PokemonPhase { else { const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); if (hitsTotal > 1) - this.scene.queueMessage(i18next.t('menu:attackHitsCount', { count: hitsTotal })); + this.scene.queueMessage(i18next.t('battle:attackHitsCount', { count: hitsTotal })); this.scene.applyModifiers(HitHealModifier, this.player, user); } } @@ -2655,8 +2677,9 @@ export class StatChangePhase extends PokemonPhase { private levels: integer; private showMessage: boolean; private ignoreAbilities: boolean; + private canBeCopied: boolean; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, selfTarget: boolean, stats: BattleStat[], levels: integer, showMessage: boolean = true, ignoreAbilities: boolean = false) { + constructor(scene: BattleScene, battlerIndex: BattlerIndex, selfTarget: boolean, stats: BattleStat[], levels: integer, showMessage: boolean = true, ignoreAbilities: boolean = false, canBeCopied: boolean = true) { super(scene, battlerIndex); this.selfTarget = selfTarget; @@ -2664,6 +2687,7 @@ export class StatChangePhase extends PokemonPhase { this.levels = levels; this.showMessage = showMessage; this.ignoreAbilities = ignoreAbilities; + this.canBeCopied = canBeCopied; } start() { @@ -2711,8 +2735,12 @@ export class StatChangePhase extends PokemonPhase { for (let stat of filteredStats) pokemon.summonData.battleStats[stat] = Math.max(Math.min(pokemon.summonData.battleStats[stat] + levels.value, 6), -6); + if (levels.value > 0 && this.canBeCopied) + for (let opponent of pokemon.getOpponents()) + applyAbAttrs(StatChangeCopyAbAttr, opponent, null, this.stats, levels.value); + applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget); - + pokemon.updateInfo(); handleTutorial(this.scene, Tutorial.Stat_Change).then(() => super.end()); @@ -2815,7 +2843,7 @@ export class StatChangePhase extends PokemonPhase { if (relLevelStats.length > 1) { statsFragment = relLevelStats.length >= 5 ? 'stats' - : `${relLevelStats.slice(0, -1).map(s => getBattleStatName(s)).join(', ')}, and ${getBattleStatName(relLevelStats[relLevelStats.length - 1])}`; + : `${relLevelStats.slice(0, -1).map(s => getBattleStatName(s)).join(', ')}${relLevelStats.length > 2 ? ',' : ''} and ${getBattleStatName(relLevelStats[relLevelStats.length - 1])}`; } else statsFragment = getBattleStatName(relLevelStats[0]); messages.push(getPokemonMessage(this.getPokemon(), `'s ${statsFragment} ${getBattleStatLevelChangeDescription(Math.abs(parseInt(rl)), levels >= 1)}!`)); @@ -3152,8 +3180,8 @@ export class FaintPhase extends PokemonPhase { this.scene.getField(true).filter(p => p !== pokemon).forEach(p => p.removeTagsBySourceId(pokemon.id)); pokemon.faintCry(() => { - const friendshipDecrease = new Utils.IntegerHolder(10); - pokemon.friendship = Math.max(pokemon.friendship - friendshipDecrease.value, 0); + if (pokemon instanceof PlayerPokemon) + pokemon.addFriendship(-10); pokemon.hideInfo(); this.scene.playSound('faint'); this.scene.tweens.add({ @@ -3214,24 +3242,22 @@ export class VictoryPhase extends PokemonPhase { const expShareModifier = this.scene.findModifier(m => m instanceof ExpShareModifier) as ExpShareModifier; const expBalanceModifier = this.scene.findModifier(m => m instanceof ExpBalanceModifier) as ExpBalanceModifier; const multipleParticipantExpBonusModifier = this.scene.findModifier(m => m instanceof MultipleParticipantExpBonusModifier) as MultipleParticipantExpBonusModifier; - const expPartyMembers = party.filter(p => p.hp && p.level < this.scene.getMaxExpLevel()); + const nonFaintedPartyMembers = party.filter(p => p.hp); + const expPartyMembers = nonFaintedPartyMembers.filter(p => p.level < this.scene.getMaxExpLevel()); const partyMemberExp = []; if (participantIds.size) { let expValue = this.getPokemon().getExpValue(); if (this.scene.currentBattle.battleType === BattleType.TRAINER) expValue = Math.floor(expValue * 1.5); - for (let partyMember of expPartyMembers) { + for (let partyMember of nonFaintedPartyMembers) { const pId = partyMember.id; const participated = participantIds.has(pId); - if (participated) { - const friendshipIncrease = new Utils.IntegerHolder(2); - this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, partyMember, friendshipIncrease); - partyMember.friendship = Math.min(partyMember.friendship + friendshipIncrease.value, 255); - if (partyMember.friendship === 255) - this.scene.validateAchv(achvs.MAX_FRIENDSHIP); - } - else if (!expShareModifier) { + if (participated) + partyMember.addFriendship(2); + if (!expPartyMembers.includes(partyMember)) + continue; + if (!participated && !expShareModifier) { partyMemberExp.push(0); continue; } @@ -3342,7 +3368,7 @@ export class TrainerVictoryPhase extends BattlePhase { this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); } - this.scene.ui.showText(i18next.t('menu:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => { + this.scene.ui.showText(i18next.t('battle:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => { const victoryMessages = this.scene.currentBattle.trainer.getVictoryMessages(); const showMessage = () => { let message: string; @@ -3446,8 +3472,40 @@ export class GameOverModifierRewardPhase extends ModifierRewardPhase { } } +export class RibbonModifierRewardPhase extends ModifierRewardPhase { + private species: PokemonSpecies; + + constructor(scene: BattleScene, modifierTypeFunc: ModifierTypeFunc, species: PokemonSpecies) { + super(scene, modifierTypeFunc); + + this.species = species; + } + + doReward(): Promise { + return new Promise(resolve => { + const newModifier = this.modifierType.newModifier(); + this.scene.addModifier(newModifier).then(() => { + this.scene.gameData.saveSystem().then(success => { + if (success) { + this.scene.playSound('level_up_fanfare'); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.arenaBg.setVisible(false); + this.scene.ui.fadeIn(250).then(() => { + this.scene.ui.showText(`${this.species.name} beat ${this.scene.gameMode.getName()} Mode for the first time!\nYou received ${newModifier.type.name}!`, null, () => { + resolve(); + }, null, true, 1500); + }); + } else + this.scene.reset(true); + }); + }); + }) + } +} + export class GameOverPhase extends BattlePhase { private victory: boolean; + private firstRibbons: PokemonSpecies[] = []; constructor(scene: BattleScene, victory?: boolean) { super(scene); @@ -3499,6 +3557,13 @@ export class GameOverPhase extends BattlePhase { if (this.scene.gameMode.isClassic) { firstClear = this.scene.validateAchv(achvs.CLASSIC_VICTORY); this.scene.gameData.gameStats.sessionsWon++; + for (let pokemon of this.scene.getParty()) { + this.awardRibbon(pokemon); + + if (pokemon.species.getRootSpeciesId() != pokemon.species.getRootSpeciesId(true)) { + this.awardRibbon(pokemon, true); + } + } } else if (this.scene.gameMode.isDaily && success[1]) this.scene.gameData.gameStats.dailyRunSessionsWon++; } @@ -3510,8 +3575,12 @@ export class GameOverPhase extends BattlePhase { this.scene.clearPhaseQueue(); this.scene.ui.clearText(); this.handleUnlocks(); - if (this.victory && !firstClear && success[1]) - this.scene.unshiftPhase(new GameOverModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PREMIUM)); + if (this.victory && success[1]) { + for (let species of this.firstRibbons) + this.scene.unshiftPhase(new RibbonModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PLUS, species)); + if (!firstClear) + this.scene.unshiftPhase(new GameOverModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PREMIUM)); + } this.scene.reset(); this.scene.unshiftPhase(new TitlePhase(this.scene)); this.end(); @@ -3530,6 +3599,15 @@ export class GameOverPhase extends BattlePhase { this.scene.unshiftPhase(new UnlockPhase(this.scene, Unlockables.MINI_BLACK_HOLE)); } } + + awardRibbon(pokemon: Pokemon, forStarter: boolean = false): void { + const speciesId = getPokemonSpecies(pokemon.species.speciesId) + const speciesRibbonCount = this.scene.gameData.incrementRibbonCount(speciesId, forStarter); + // first time classic win, award voucher + if (speciesRibbonCount === 1) { + this.firstRibbons.push(getPokemonSpecies(pokemon.species.getRootSpeciesId(forStarter))); + } + } } export class UnlockPhase extends Phase { @@ -3609,7 +3687,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { let exp = new Utils.NumberHolder(this.expValue); this.scene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); - this.scene.ui.showText(i18next.t('menu:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => { + this.scene.ui.showText(i18next.t('battle:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => { const lastLevel = pokemon.level; let newLevel: integer; pokemon.addExp(exp.value); @@ -3697,7 +3775,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { pokemon.calculateStats(); pokemon.updateInfo(); this.scene.playSound('level_up_fanfare'); - this.scene.ui.showText(i18next.t('menu:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true); + this.scene.ui.showText(i18next.t('battle:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true); if (this.level <= 100) { const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1); for (let lm of levelMoves) @@ -3746,7 +3824,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { .then(() => { this.scene.ui.setMode(messageMode).then(() => { this.scene.playSound('level_up_fanfare'); - this.scene.ui.showText(i18next.t('menu:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => { this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); this.end(); }, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true); @@ -3755,15 +3833,15 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { }); } else { this.scene.ui.setMode(messageMode).then(() => { - this.scene.ui.showText(i18next.t('menu:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => { - this.scene.ui.showText(i18next.t('menu:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => { - this.scene.ui.showText(i18next.t('menu:learnMoveReplaceQuestion', { moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveReplaceQuestion', { moveName: move.name }), null, () => { const noHandler = () => { this.scene.ui.setMode(messageMode).then(() => { - this.scene.ui.showText(i18next.t('menu:learnMoveStopTeaching', { moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveStopTeaching', { moveName: move.name }), null, () => { this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => { this.scene.ui.setMode(messageMode); - this.scene.ui.showText(i18next.t('menu:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true); + this.scene.ui.showText(i18next.t('battle:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true); }, () => { this.scene.ui.setMode(messageMode); this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId)); @@ -3774,7 +3852,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { }; this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => { this.scene.ui.setMode(messageMode); - this.scene.ui.showText(i18next.t('menu:learnMoveForgetQuestion'), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveForgetQuestion'), null, () => { this.scene.ui.setModeWithoutClear(Mode.SUMMARY, this.getPokemon(), SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => { if (moveIndex === 4) { noHandler(); @@ -3782,7 +3860,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } this.scene.ui.setMode(messageMode).then(() => { this.scene.ui.showText('@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!', null, () => { - this.scene.ui.showText(i18next.t('menu:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => { this.scene.ui.showText('And…', null, () => { pokemon.setMove(moveIndex, Moves.NONE); this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId)); @@ -4087,7 +4165,10 @@ export class AttemptCapturePhase extends PokemonPhase { if (speciesForm.abilityHidden && (pokemon.fusionSpecies ? pokemon.fusionAbilityIndex : pokemon.abilityIndex) === speciesForm.getAbilityCount() - 1) this.scene.validateAchv(achvs.HIDDEN_ABILITY); - if (pokemon.species.pseudoLegendary || pokemon.species.legendary) + if (pokemon.species.subLegendary) + this.scene.validateAchv(achvs.CATCH_SUB_LEGENDARY); + + if (pokemon.species.legendary) this.scene.validateAchv(achvs.CATCH_LEGENDARY); if (pokemon.species.mythical) @@ -4095,9 +4176,9 @@ export class AttemptCapturePhase extends PokemonPhase { this.scene.pokemonInfoContainer.show(pokemon, true); - this.scene.gameData.updateSpeciesDexIvs(pokemon.species.speciesId, pokemon.ivs); + this.scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); - this.scene.ui.showText(i18next.t('menu:pokemonCaught', { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:pokemonCaught', { pokemonName: pokemon.name }), null, () => { const end = () => { this.scene.pokemonInfoContainer.hide(); this.removePb(); @@ -4183,7 +4264,7 @@ export class AttemptRunPhase extends PokemonPhase { if (playerPokemon.randSeedInt(256) < escapeChance.value) { this.scene.playSound('flee'); - this.scene.queueMessage(i18next.t('menu:runAwaySuccess'), null, true, 500); + this.scene.queueMessage(i18next.t('battle:runAwaySuccess'), null, true, 500); this.scene.tweens.add({ targets: [ this.scene.arenaEnemy, enemyField ].flat(), @@ -4204,7 +4285,7 @@ export class AttemptRunPhase extends PokemonPhase { this.scene.pushPhase(new BattleEndPhase(this.scene)); this.scene.pushPhase(new NewBattlePhase(this.scene)); } else - this.scene.queueMessage(i18next.t('menu:runAwayCannotEscape'), null, true, 500); + this.scene.queueMessage(i18next.t('battle:runAwayCannotEscape'), null, true, 500); this.end(); } @@ -4236,7 +4317,7 @@ export class SelectModifierPhase extends BattlePhase { const modifierSelectCallback = (rowCursor: integer, cursor: integer) => { if (rowCursor < 0 || cursor < 0) { - this.scene.ui.showText(i18next.t('menu:skipItemQuestion'), null, () => { + this.scene.ui.showText(i18next.t('battle:skipItemQuestion'), null, () => { this.scene.ui.setOverlayMode(Mode.CONFIRM, () => { this.scene.ui.revertMode(); this.scene.ui.setMode(Mode.MESSAGE); @@ -4340,7 +4421,7 @@ export class SelectModifierPhase extends BattlePhase { const isMoveModifier = modifierType instanceof PokemonMoveModifierType; const isTmModifier = modifierType instanceof TmModifierType; const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType; - const isPpRestoreModifier = modifierType instanceof PokemonPpRestoreModifierType; + const isPpRestoreModifier = (modifierType instanceof PokemonPpRestoreModifierType || modifierType instanceof PokemonPpUpModifierType); const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER : isTmModifier ? PartyUiMode.TM_MODIFIER : isRememberMoveModifier ? PartyUiMode.REMEMBER_MOVE_MODIFIER @@ -4415,7 +4496,7 @@ export class EggLapsePhase extends Phase { }); if (eggsToHatch.length) { - this.scene.queueMessage(i18next.t('menu:eggHatching')); + this.scene.queueMessage(i18next.t('battle:eggHatching')); for (let egg of eggsToHatch) this.scene.unshiftPhase(new EggHatchPhase(this.scene, egg)); @@ -4509,7 +4590,7 @@ export class ScanIvsPhase extends PokemonPhase { const pokemon = this.getPokemon(); - this.scene.ui.showText(i18next.t('menu:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => { this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.clearText(); diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 22a407c3b..6265d35cf 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -1,57 +1,11 @@ import i18next from 'i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; -import { menu as enMenu } from '../locales/en/menu'; -import { menu as esMenu } from '../locales/es/menu'; -import { menu as itMenu } from '../locales/it/menu'; -import { menu as frMenu } from '../locales/fr/menu'; -import { menu as deMenu } from '../locales/de/menu'; - -import { menuUiHandler as enMenuUiHandler } from '../locales/en/menu-ui-handler.js'; -import { menuUiHandler as esMenuUiHandler } from '../locales/es/menu-ui-handler.js'; -import { menuUiHandler as frMenuUiHandler } from '../locales/fr/menu-ui-handler.js'; -import { menuUiHandler as itMenuUiHandler } from '../locales/it/menu-ui-handler.js'; -import { menuUiHandler as deMenuUiHandler } from '../locales/de/menu-ui-handler.js'; - -import { move as enMove } from '../locales/en/move'; -import { move as esMove } from '../locales/es/move'; -import { move as frMove } from '../locales/fr/move'; -import { move as deMove } from '../locales/de/move'; - -import { ability as enAbility } from '../locales/en/ability'; -import { ability as esAbility } from '../locales/es/ability'; -import { ability as frAbility } from '../locales/fr/ability'; -import { ability as deAbility } from '../locales/de/ability'; - -import { pokeball as enPokeball } from '../locales/en/pokeball'; -import { pokeball as esPokeball } from '../locales/es/pokeball'; -import { pokeball as frPokeball } from '../locales/fr/pokeball'; -import { pokeball as dePokeball } from '../locales/de/pokeball'; - -import { pokemon as enPokemon } from '../locales/en/pokemon'; -import { pokemon as esPokemon } from '../locales/es/pokemon'; -import { pokemon as frPokemon } from '../locales/fr/pokemon'; -import { pokemon as dePokemon } from '../locales/de/pokemon'; - -import { pokemonStat as enPokemonStat } from '../locales/en/pokemon-stat'; -import { pokemonStat as esPokemonStat } from '../locales/es/pokemon-stat'; -import { pokemonStat as frPokemonStat } from '../locales/fr/pokemon-stat'; -import { pokemonStat as itPokemonStat } from '../locales/it/pokemon-stat'; -import { pokemonStat as dePokemonStat } from '../locales/de/pokemon-stat'; - -import { commandUiHandler as enCommandUiHandler } from '../locales/en/command-ui-handler'; -import { commandUiHandler as esCommandUiHandler } from '../locales/es/command-ui-handler'; -import { commandUiHandler as frCommandUiHandler } from '../locales/fr/command-ui-handler'; -import { commandUiHandler as deCommandUiHandler } from '../locales/de/command-ui-handler'; - -import { fightUiHandler as enFightUiHandler } from '../locales/en/fight-ui-handler'; -import { fightUiHandler as frFightUiHandler } from '../locales/fr/fight-ui-handler'; - -import { tutorial as enTutorial } from '../locales/en/tutorial'; -import { tutorial as esTutorial } from '../locales/es/tutorial'; -import { tutorial as frTutorial } from '../locales/fr/tutorial'; -import { tutorial as itTutorial} from '../locales/it/tutorial'; -import { tutorial as deTutorial } from '../locales/de/tutorial'; +import { deConfig } from '#app/locales/de/config.js'; +import { enConfig } from '#app/locales/en/config.js'; +import { esConfig } from '#app/locales/es/config.js'; +import { frConfig } from '#app/locales/fr/config.js'; +import { itConfig } from '#app/locales/it/config.js'; export interface SimpleTranslationEntries { [key: string]: string @@ -111,56 +65,19 @@ export function initI18n(): void { }, resources: { en: { - menu: enMenu, - menuUiHandler: enMenuUiHandler, - move: enMove, - ability: enAbility, - pokeball: enPokeball, - pokemon: enPokemon, - pokemonStat: enPokemonStat, - commandUiHandler: enCommandUiHandler, - fightUiHandler: enFightUiHandler, - tutorial: enTutorial, + ...enConfig }, es: { - menu: esMenu, - menuUiHandler: esMenuUiHandler, - move: esMove, - ability: esAbility, - pokeball: esPokeball, - pokemon: esPokemon, - pokemonStat: esPokemonStat, - commandUiHandler: esCommandUiHandler, - tutorial: esTutorial, + ...esConfig }, fr: { - menu: frMenu, - menuUiHandler: frMenuUiHandler, - move: frMove, - ability: frAbility, - pokeball: frPokeball, - pokemon: frPokemon, - pokemonStat: frPokemonStat, - commandUiHandler: frCommandUiHandler, - fightUiHandler: frFightUiHandler, - tutorial: frTutorial, + ...frConfig }, it: { - menu: itMenu, - menuUiHandler: itMenuUiHandler, - pokemonStat: itPokemonStat, - tutorial: itTutorial, + ...itConfig }, de: { - menu: deMenu, - menuUiHandler: deMenuUiHandler, - move: deMove, - ability: deAbility, - pokeball: dePokeball, - pokemon: dePokemon, - pokemonStat: dePokemonStat, - commandUiHandler: deCommandUiHandler, - tutorial: deTutorial, + ...deConfig } }, }); @@ -170,16 +87,18 @@ export function initI18n(): void { declare module 'i18next' { interface CustomTypeOptions { resources: { - menu: typeof enMenu; - menuUiHandler: typeof enMenuUiHandler; - move: typeof enMove; - ability: typeof enAbility; - pokeball: typeof enPokeball; - pokemon: typeof enPokemon; - pokemonStat: typeof enPokemonStat; - commandUiHandler: typeof enCommandUiHandler; - fightUiHandler: typeof enFightUiHandler; - tutorial: typeof enTutorial; + menu: SimpleTranslationEntries; + menuUiHandler: SimpleTranslationEntries; + move: MoveTranslationEntries; + battle: SimpleTranslationEntries, + ability: AbilityTranslationEntries; + pokeball: SimpleTranslationEntries; + pokemon: SimpleTranslationEntries; + pokemonStat: SimpleTranslationEntries; + commandUiHandler: SimpleTranslationEntries; + fightUiHandler: SimpleTranslationEntries; + tutorial: SimpleTranslationEntries; + starterSelectUiHandler: SimpleTranslationEntries; }; } } diff --git a/src/system/achv.ts b/src/system/achv.ts index 2307347db..9a6e43965 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -7,6 +7,7 @@ export enum AchvTier { COMMON, GREAT, ULTRA, + ROGUE, MASTER } @@ -52,6 +53,8 @@ export class Achv { getTier(): AchvTier { if (this.score >= 100) return AchvTier.MASTER; + if (this.score >= 75) + return AchvTier.ROGUE; if (this.score >= 50) return AchvTier.ULTRA; if (this.score >= 25) @@ -70,6 +73,16 @@ export class MoneyAchv extends Achv { } } +export class RibbonAchv extends Achv { + private ribbonAmount: integer; + + constructor(name: string, ribbonAmount: integer, iconImage: string, score: integer) { + super(name, `Accumulate a total of ${ribbonAmount.toLocaleString('en-US')} Ribbons`, iconImage, score, (scene: BattleScene, _args: any[]) => scene.gameData.gameStats.ribbonsOwned >= this.ribbonAmount); + + this.ribbonAmount = ribbonAmount; + } +} + export class DamageAchv extends Achv { private damageAmount: integer; @@ -122,6 +135,11 @@ export const achvs = { LV_100: new LevelAchv('But Wait, There\'s More!', 100, 'rare_candy', 25).setSecret(), LV_250: new LevelAchv('Elite', 250, 'rarer_candy', 50).setSecret(true), LV_1000: new LevelAchv('To Go Even Further Beyond', 1000, 'candy_jar', 100).setSecret(true), + _10_RIBBONS: new RibbonAchv('Pokémon League Champion', 10, 'bronze_ribbon', 10), + _25_RIBBONS: new RibbonAchv('Great League Champion', 25, 'great_ribbon', 25).setSecret(true), + _50_RIBBONS: new RibbonAchv('Ultra League Champion', 50, 'ultra_ribbon', 50).setSecret(true), + _75_RIBBONS: new RibbonAchv('Rogue League Champion', 75, 'rogue_ribbon', 75).setSecret(true), + _100_RIBBONS: new RibbonAchv('Master League Champion', 100, 'master_ribbon', 100).setSecret(true), TRANSFER_MAX_BATTLE_STAT: new Achv('Teamwork', 'Baton pass to another party member with at least one stat maxed out', 'stick', 20), MAX_FRIENDSHIP: new Achv('Friendmaxxing', 'Reach max friendship on a Pokémon', 'soothe_bell', 25), MEGA_EVOLVE: new Achv('Megamorph', 'Mega evolve a Pokémon', 'mega_bracelet', 50), @@ -131,11 +149,13 @@ export const achvs = { SPLICE: new Achv('Infinite Fusion', 'Splice two Pokémon together with DNA Splicers', 'dna_splicers', 10), MINI_BLACK_HOLE: new ModifierAchv('A Hole Lot of Items', 'Acquire a Mini Black Hole', 'mini_black_hole', 25, modifier => modifier instanceof TurnHeldItemTransferModifier).setSecret(), CATCH_MYTHICAL: new Achv('Mythical', 'Catch a mythical Pokémon', 'strange_ball', 50).setSecret(), - CATCH_LEGENDARY: new Achv('Legendary', 'Catch a legendary Pokémon', 'mb', 75).setSecret(), + CATCH_SUB_LEGENDARY: new Achv('(Sub-)Legendary', 'Catch a sub-legendary Pokémon', 'rb', 75).setSecret(), + CATCH_LEGENDARY: new Achv('Legendary', 'Catch a legendary Pokémon', 'mb', 100).setSecret(), SEE_SHINY: new Achv('Shiny', 'Find a shiny Pokémon in the wild', 'pb_gold', 75), SHINY_PARTY: new Achv('That\'s Dedication', 'Have a full party of shiny Pokémon', 'shiny_charm', 100).setSecret(true), HATCH_MYTHICAL: new Achv('Mythical Egg', 'Hatch a mythical Pokémon from an egg', 'pair_of_tickets', 75).setSecret(), - HATCH_LEGENDARY: new Achv('Legendary Egg', 'Hatch a legendary Pokémon from an egg', 'mystic_ticket', 100).setSecret(), + HATCH_SUB_LEGENDARY: new Achv('Sub-Legendary Egg', 'Hatch a sub-legendary Pokémon from an egg', 'mystic_ticket', 100).setSecret(), + HATCH_LEGENDARY: new Achv('Legendary Egg', 'Hatch a legendary Pokémon from an egg', 'mystic_ticket', 125).setSecret(), HATCH_SHINY: new Achv('Shiny Egg', 'Hatch a shiny Pokémon from an egg', 'golden_mystic_ticket', 100).setSecret(), HIDDEN_ABILITY: new Achv('Hidden Potential', 'Catch a Pokémon with a hidden ability', 'ability_charm', 75), PERFECT_IVS: new Achv('Certificate of Authenticity', 'Get perfect IVs on a Pokémon', 'blunder_policy', 100), diff --git a/src/system/game-data.ts b/src/system/game-data.ts index e11c2dcc5..fff09f83f 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -169,9 +169,11 @@ export interface StarterDataEntry { moveset: StarterMoveset | StarterFormMoveData; eggMoves: integer; candyCount: integer; + friendship: integer; abilityAttr: integer; passiveAttr: integer; valueReduction: integer; + classicWinCount: integer; } export interface StarterData { @@ -193,7 +195,8 @@ const systemShortKeys = { eggMoves: '$em', candyCount: '$x', passive: '$p', - valueReduction: '$vr' + valueReduction: '$vr', + classicWinCount: '$wc' }; export class GameData { @@ -357,8 +360,11 @@ export class GameData { this.starterData = systemData.starterData; } - if (systemData.gameStats) + if (systemData.gameStats) { + if (systemData.gameStats.legendaryPokemonCaught !== undefined && systemData.gameStats.subLegendaryPokemonCaught === undefined) + this.fixLegendaryStats(systemData); this.gameStats = systemData.gameStats; + } if (systemData.unlocks) { for (let key of Object.keys(systemData.unlocks)) { @@ -988,9 +994,11 @@ export class GameData { moveset: null, eggMoves: 0, candyCount: 0, + friendship: 0, abilityAttr: defaultStarterSpecies.includes(speciesId) ? AbilityAttr.ABILITY_1 : 0, passiveAttr: 0, - valueReduction: 0 + valueReduction: 0, + classicWinCount: 0 }; } @@ -1003,7 +1011,9 @@ export class GameData { if (incrementCount) { dexEntry.seenCount++; this.gameStats.pokemonSeen++; - if (!trainer && pokemon.species.pseudoLegendary || pokemon.species.legendary) + if (!trainer && pokemon.species.subLegendary) + this.gameStats.subLegendaryPokemonSeen++; + else if (!trainer && pokemon.species.legendary) this.gameStats.legendaryPokemonSeen++; else if (!trainer && pokemon.species.mythical) this.gameStats.mythicalPokemonSeen++; @@ -1035,12 +1045,15 @@ export class GameData { const hasPrevolution = pokemonPrevolutions.hasOwnProperty(species.speciesId); const newCatch = !caughtAttr; + const hasNewAttr = (caughtAttr & dexAttr) !== dexAttr; if (incrementCount) { if (!fromEgg) { dexEntry.caughtCount++; this.gameStats.pokemonCaught++; - if (pokemon.species.pseudoLegendary || pokemon.species.legendary) + if (pokemon.species.subLegendary) + this.gameStats.subLegendaryPokemonCaught++; + else if (pokemon.species.legendary) this.gameStats.legendaryPokemonCaught++; else if (pokemon.species.mythical) this.gameStats.mythicalPokemonCaught++; @@ -1049,7 +1062,9 @@ export class GameData { } else { dexEntry.hatchedCount++; this.gameStats.pokemonHatched++; - if (pokemon.species.pseudoLegendary || pokemon.species.legendary) + if (pokemon.species.subLegendary) + this.gameStats.subLegendaryPokemonHatched++; + else if (pokemon.species.legendary) this.gameStats.legendaryPokemonHatched++; else if (pokemon.species.mythical) this.gameStats.mythicalPokemonHatched++; @@ -1057,7 +1072,7 @@ export class GameData { this.gameStats.shinyPokemonHatched++; } - if (!hasPrevolution) + if (!hasPrevolution && (!pokemon.scene.gameMode.isDaily || hasNewAttr || fromEgg)) this.addStarterCandy(species, (1 * (pokemon.isShiny() ? 5 * Math.pow(2, pokemon.variant || 0) : 1)) * (fromEgg || pokemon.isBoss() ? 2 : 1)); } @@ -1077,6 +1092,32 @@ export class GameData { }); } + incrementRibbonCount(species: PokemonSpecies, forStarter: boolean = false): integer { + const speciesIdToIncrement: Species = species.getRootSpeciesId(forStarter); + + if (!this.starterData[speciesIdToIncrement].classicWinCount) { + this.starterData[speciesIdToIncrement].classicWinCount = 0; + } + + if (!this.starterData[speciesIdToIncrement].classicWinCount) + this.scene.gameData.gameStats.ribbonsOwned++; + + const ribbonsInStats: integer = this.scene.gameData.gameStats.ribbonsOwned; + + if (ribbonsInStats >= 100) + this.scene.validateAchv(achvs._100_RIBBONS); + if (ribbonsInStats >= 75) + this.scene.validateAchv(achvs._75_RIBBONS); + if (ribbonsInStats >= 50) + this.scene.validateAchv(achvs._50_RIBBONS); + if (ribbonsInStats >= 25) + this.scene.validateAchv(achvs._25_RIBBONS); + if (ribbonsInStats >= 10) + this.scene.validateAchv(achvs._10_RIBBONS); + + return ++this.starterData[speciesIdToIncrement].classicWinCount; + } + addStarterCandy(species: PokemonSpecies, count: integer): void { this.scene.candyBar.showStarterSpeciesCandy(species.speciesId, count); this.starterData[species.speciesId].candyCount += count; @@ -1308,4 +1349,22 @@ export class GameData { for (let starterId of defaultStarterSpecies) systemData.starterData[starterId].abilityAttr |= AbilityAttr.ABILITY_1; } + + fixLegendaryStats(systemData: SystemSaveData): void { + systemData.gameStats.subLegendaryPokemonSeen = 0; + systemData.gameStats.subLegendaryPokemonCaught = 0; + systemData.gameStats.subLegendaryPokemonHatched = 0; + allSpecies.filter(s => s.subLegendary).forEach(s => { + const dexEntry = systemData.dexData[s.speciesId]; + systemData.gameStats.subLegendaryPokemonSeen += dexEntry.seenCount; + systemData.gameStats.legendaryPokemonSeen = Math.max(systemData.gameStats.legendaryPokemonSeen - dexEntry.seenCount, 0); + systemData.gameStats.subLegendaryPokemonCaught += dexEntry.caughtCount; + systemData.gameStats.legendaryPokemonCaught = Math.max(systemData.gameStats.legendaryPokemonCaught - dexEntry.caughtCount, 0); + systemData.gameStats.subLegendaryPokemonHatched += dexEntry.hatchedCount; + systemData.gameStats.legendaryPokemonHatched = Math.max(systemData.gameStats.legendaryPokemonHatched - dexEntry.hatchedCount, 0); + }); + systemData.gameStats.subLegendaryPokemonSeen = Math.max(systemData.gameStats.subLegendaryPokemonSeen, systemData.gameStats.subLegendaryPokemonCaught); + systemData.gameStats.legendaryPokemonSeen = Math.max(systemData.gameStats.legendaryPokemonSeen, systemData.gameStats.legendaryPokemonCaught); + systemData.gameStats.mythicalPokemonSeen = Math.max(systemData.gameStats.mythicalPokemonSeen, systemData.gameStats.mythicalPokemonCaught); + } } \ No newline at end of file diff --git a/src/system/game-stats.ts b/src/system/game-stats.ts index 9a564b3c3..c67bd6d23 100644 --- a/src/system/game-stats.ts +++ b/src/system/game-stats.ts @@ -6,6 +6,7 @@ export class GameStats { public battles: integer; public classicSessionsPlayed: integer; public sessionsWon: integer; + public ribbonsOwned: integer; public dailyRunSessionsPlayed: integer; public dailyRunSessionsWon: integer; public endlessSessionsPlayed: integer; @@ -18,6 +19,9 @@ export class GameStats { public pokemonDefeated: integer; public pokemonCaught: integer; public pokemonHatched: integer; + public subLegendaryPokemonSeen: integer; + public subLegendaryPokemonCaught: integer; + public subLegendaryPokemonHatched: integer; public legendaryPokemonSeen: integer; public legendaryPokemonCaught: integer; public legendaryPokemonHatched: integer; @@ -40,6 +44,7 @@ export class GameStats { this.battles = source?.battles || 0; this.classicSessionsPlayed = source?.classicSessionsPlayed || 0; this.sessionsWon = source?.sessionsWon || 0; + this.ribbonsOwned = source?.ribbonsOwned || 0; this.dailyRunSessionsPlayed = source?.dailyRunSessionsPlayed || 0; this.dailyRunSessionsWon = source?.dailyRunSessionsWon || 0; this.endlessSessionsPlayed = source?.endlessSessionsPlayed || 0; @@ -52,6 +57,10 @@ export class GameStats { this.pokemonDefeated = source?.pokemonDefeated || 0; this.pokemonCaught = source?.pokemonCaught || 0; this.pokemonHatched = source?.pokemonHatched || 0; + // Currently handled by migration + this.subLegendaryPokemonSeen = source?.subLegendaryPokemonSeen; + this.subLegendaryPokemonCaught = source?.subLegendaryPokemonCaught; + this.subLegendaryPokemonHatched = source?.subLegendaryPokemonHatched; this.legendaryPokemonSeen = source?.legendaryPokemonSeen || 0; this.legendaryPokemonCaught = source?.legendaryPokemonCaught || 0; this.legendaryPokemonHatched = source?.legendaryPokemonHatched || 0; diff --git a/src/system/settings.ts b/src/system/settings.ts index df4f894c9..3805a35bb 100644 --- a/src/system/settings.ts +++ b/src/system/settings.ts @@ -25,6 +25,7 @@ export enum Setting { Fusion_Palette_Swaps = "FUSION_PALETTE_SWAPS", Player_Gender = "PLAYER_GENDER", Gamepad_Support = "GAMEPAD_SUPPORT", + Swap_A_and_B = "SWAP_A_B", // Swaps which gamepad button handles ACTION and CANCEL Touch_Controls = "TOUCH_CONTROLS", Vibration = "VIBRATION" } @@ -56,6 +57,7 @@ export const settingOptions: SettingOptions = { [Setting.Fusion_Palette_Swaps]: [ 'Off', 'On' ], [Setting.Player_Gender]: [ 'Boy', 'Girl' ], [Setting.Gamepad_Support]: [ 'Auto', 'Disabled' ], + [Setting.Swap_A_and_B]: [ 'Enabled', 'Disabled' ], [Setting.Touch_Controls]: [ 'Auto', 'Disabled' ], [Setting.Vibration]: [ 'Auto', 'Disabled' ] }; @@ -79,6 +81,7 @@ export const settingDefaults: SettingDefaults = { [Setting.Fusion_Palette_Swaps]: 1, [Setting.Player_Gender]: 0, [Setting.Gamepad_Support]: 0, + [Setting.Swap_A_and_B]: 1, // Set to 'Disabled' by default [Setting.Touch_Controls]: 0, [Setting.Vibration]: 0 }; @@ -148,6 +151,9 @@ export function setSetting(scene: BattleScene, setting: Setting, value: integer) case Setting.Gamepad_Support: scene.gamepadSupport = settingOptions[setting][value] !== 'Disabled'; break; + case Setting.Swap_A_and_B: + scene.abSwapped = settingOptions[setting][value] !== 'Disabled'; + break; case Setting.Touch_Controls: scene.enableTouchControls = settingOptions[setting][value] !== 'Disabled' && hasTouchscreen(); const touchControls = document.getElementById('touchControls'); @@ -180,6 +186,10 @@ export function setSetting(scene: BattleScene, setting: Setting, value: integer) label: 'Spanish', handler: () => changeLocaleHandler('es') }, + { + label: 'Italian', + handler: () => changeLocaleHandler('it') + }, { label: 'French', handler: () => changeLocaleHandler('fr') diff --git a/src/system/voucher.ts b/src/system/voucher.ts index c3bae6f08..276e74eeb 100644 --- a/src/system/voucher.ts +++ b/src/system/voucher.ts @@ -44,7 +44,7 @@ export class Voucher { case VoucherType.PREMIUM: return AchvTier.ULTRA; case VoucherType.GOLDEN: - return AchvTier.MASTER; + return AchvTier.ROGUE; } } } diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts new file mode 100644 index 000000000..38d8e7830 --- /dev/null +++ b/src/ui-inputs.ts @@ -0,0 +1,154 @@ +import Phaser from "phaser"; +import {Mode} from "./ui/ui"; +import {InputsController} from "./inputs-controller"; +import MessageUiHandler from "./ui/message-ui-handler"; +import StarterSelectUiHandler from "./ui/starter-select-ui-handler"; +import {Setting, settingOptions} from "./system/settings"; +import SettingsUiHandler from "./ui/settings-ui-handler"; +import {Button} from "./enums/buttons"; + +export interface ActionKeys { + [key in Button]: () => void; +} + +export class UiInputs { + private scene: Phaser.Scene; + private events: Phaser.Events; + private inputsController: InputsController; + + constructor(scene: Phaser.Scene, inputsController: InputsController) { + this.scene = scene; + this.inputsController = inputsController; + this.init(); + } + + init(): void { + this.events = this.inputsController.events; + this.listenInputs(); + } + + listenInputs(): void { + this.events.on('input_down', (event) => { + const actions = this.getActionsKeyDown(); + if (!actions.hasOwnProperty(event.button)) return; + actions[event.button](); + }, this); + + this.events.on('input_up', (event) => { + const actions = this.getActionsKeyUp(); + if (!actions.hasOwnProperty(event.button)) return; + actions[event.button](); + }, this); + } + + doVibration(inputSuccess: boolean, vibrationLength: number): void { + if (inputSuccess && this.scene.enableVibration && typeof navigator.vibrate !== 'undefined') + navigator.vibrate(vibrationLength); + } + + getActionsKeyDown(): ActionKeys { + const actions = {}; + actions[Button.UP] = () => this.buttonDirection(Button.UP); + actions[Button.DOWN] = () => this.buttonDirection(Button.DOWN); + actions[Button.LEFT] = () => this.buttonDirection(Button.LEFT); + actions[Button.RIGHT] = () => this.buttonDirection(Button.RIGHT); + actions[Button.SUBMIT] = () => this.buttonTouch(); + actions[Button.ACTION] = () => this.buttonAb(Button.ACTION); + actions[Button.CANCEL] = () => this.buttonAb(Button.CANCEL); + actions[Button.MENU] = () => this.buttonMenu(); + actions[Button.STATS] = () => this.buttonStats(true); + actions[Button.CYCLE_SHINY] = () => this.buttonCycleOption(Button.CYCLE_SHINY); + actions[Button.CYCLE_FORM] = () => this.buttonCycleOption(Button.CYCLE_FORM); + actions[Button.CYCLE_GENDER] = () => this.buttonCycleOption(Button.CYCLE_GENDER); + actions[Button.CYCLE_ABILITY] = () => this.buttonCycleOption(Button.CYCLE_ABILITY); + actions[Button.CYCLE_NATURE] = () => this.buttonCycleOption(Button.CYCLE_NATURE); + actions[Button.CYCLE_VARIANT] = () => this.buttonCycleOption(Button.CYCLE_VARIANT); + actions[Button.SPEED_UP] = () => this.buttonSpeedChange(); + actions[Button.SLOW_DOWN] = () => this.buttonSpeedChange(false); + return actions; + } + + getActionsKeyUp(): ActionKeys { + const actions = {}; + actions[Button.STATS] = () => this.buttonStats(false); + return actions; + } + + buttonDirection(direction: Button): void { + const inputSuccess = this.scene.ui.processInput(direction); + const vibrationLength = 5; + this.doVibration(inputSuccess, vibrationLength); + } + + buttonAb(button: Button): void { + this.scene.ui.processInput(button); + } + + buttonTouch(): void { + this.scene.ui.processInput(Button.SUBMIT) || this.scene.ui.processInput(Button.ACTION); + } + + buttonStats(pressed: boolean = true): void { + if (pressed) { + for (let p of this.scene.getField().filter(p => p?.isActive(true))) + p.toggleStats(true); + } else { + for (let p of this.scene.getField().filter(p => p?.isActive(true))) + p.toggleStats(false); + } + } + + buttonMenu(): void { + if (this.scene.disableMenu) + return; + switch (this.scene.ui?.getMode()) { + case Mode.MESSAGE: + if (!(this.scene.ui.getHandler() as MessageUiHandler).pendingPrompt) + return; + case Mode.TITLE: + case Mode.COMMAND: + case Mode.FIGHT: + case Mode.BALL: + case Mode.TARGET_SELECT: + case Mode.SAVE_SLOT: + case Mode.PARTY: + case Mode.SUMMARY: + case Mode.STARTER_SELECT: + case Mode.CONFIRM: + case Mode.OPTION_SELECT: + this.scene.ui.setOverlayMode(Mode.MENU); + break; + case Mode.MENU: + case Mode.SETTINGS: + case Mode.ACHIEVEMENTS: + this.scene.ui.revertMode(); + this.scene.playSound('select'); + break; + default: + return + } + } + + buttonCycleOption(button: Button): void { + if (this.scene.ui?.getHandler() instanceof StarterSelectUiHandler) { + this.scene.ui.processInput(button); + } + } + + buttonSpeedChange(up = true): void { + if (up) { + if (this.scene.gameSpeed < 5) { + this.scene.gameData.saveSetting(Setting.Game_Speed, settingOptions[Setting.Game_Speed].indexOf(`${this.scene.gameSpeed}x`) + 1); + if (this.scene.ui?.getMode() === Mode.SETTINGS) + (this.scene.ui.getHandler() as SettingsUiHandler).show([]); + } + return; + } + if (this.scene.gameSpeed > 1) { + this.scene.gameData.saveSetting(Setting.Game_Speed, Math.max(settingOptions[Setting.Game_Speed].indexOf(`${this.scene.gameSpeed}x`) - 1, 0)); + if (this.scene.ui?.getMode() === Mode.SETTINGS) + (this.scene.ui.getHandler() as SettingsUiHandler).show([]); + } + } + +} \ No newline at end of file diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 2f2c4face..ffc0cabc8 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -1,10 +1,11 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { argbFromRgba } from "@material/material-color-utilities"; +import {Button} from "../enums/buttons"; export interface OptionSelectConfig { xOffset?: number; diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index cadda64e0..561b09171 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -1,9 +1,10 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Achv, achvs } from "../system/achv"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; +import {Button} from "../enums/buttons"; export default class AchvsUiHandler extends MessageUiHandler { private achvsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index e8cc979e4..532ca1115 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -1,6 +1,7 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; +import {Button} from "../enums/buttons"; export default abstract class AwaitableUiHandler extends UiHandler { protected awaitingActionInput: boolean; diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index f2ebdc342..06729151d 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -1,11 +1,12 @@ import { CommandPhase } from "../phases"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { getPokeballName } from "../data/pokeball"; import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; +import {Button} from "../enums/buttons"; export default class BallUiHandler extends UiHandler { private pokeballSelectContainer: Phaser.GameObjects.Container; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index ae8f518e7..2ca0457c8 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -498,11 +498,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastLevel = pokemon.level; } - if (pokemon.summonData) { - const battleStats = pokemon.summonData.battleStats.join(''); - - if (this.lastBattleStats !== battleStats) - this.updateBattleStats(pokemon.summonData.battleStats); + const battleStats = pokemon.summonData + ? pokemon.summonData.battleStats + : battleStatOrder.map(() => 0); + const battleStatsStr = battleStats.join(''); + + if (this.lastBattleStats !== battleStatsStr) { + this.updateBattleStats(battleStats); + this.lastBattleStats = battleStatsStr; } this.shinyIcon.setVisible(pokemon.isShiny()); diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 5e2cb5651..d04a98ea8 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; @@ -6,6 +6,7 @@ import MessageUiHandler from "./message-ui-handler"; import { getStatName, Stat } from "../data/pokemon-stat"; import { addWindow } from "./ui-theme"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import {Button} from "../enums/buttons"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index 2219e0747..a4cc12950 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -69,6 +69,8 @@ export default class CandyBar extends Phaser.GameObjects.Container { if (this.tween) this.tween.stop(); + (this.scene as BattleScene).playSound('shing'); + this.tween = this.scene.tweens.add({ targets: this, x: (this.scene.game.canvas.width / 6) - (this.bg.width - 5), diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index b8223694b..a27053015 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -1,10 +1,11 @@ import { CommandPhase } from "../phases"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import PartyUiHandler, { PartyUiMode } from "./party-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import i18next from '../plugins/i18n'; +import {Button} from "../enums/buttons"; export enum Command { FIGHT = 0, diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index d9e7726d8..bac980db9 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,6 +1,8 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; +import i18next from "i18next"; +import {Button} from "../enums/buttons"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { private switchCheck: boolean; @@ -19,14 +21,14 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { const config: OptionSelectConfig = { options: [ { - label: 'Yes', + label: i18next.t("menu:yes"), handler: () => { args[0](); return true; } }, { - label: 'No', + label: i18next.t("menu:no"), handler: () => { args[1](); return true; diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 8f7ca0bf1..8b258b3a7 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -167,7 +167,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { } else this.loadingLabel.setText(i18next.t('menu:noRankings')); }); - }); + }).catch(err => { console.error("Failed to load daily rankings:\n", err) }); } } diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index f0e32dbc2..315dfdbd3 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import { TextStyle, addTextObject, getEggTierTextTint } from "./text"; import MessageUiHandler from "./message-ui-handler"; @@ -9,6 +9,7 @@ import { getPokemonSpecies } from "../data/pokemon-species"; import { addWindow } from "./ui-theme"; import { Tutorial, handleTutorial } from "../tutorial"; import { EggTier } from "../data/enums/egg-type"; +import {Button} from "../enums/buttons"; const defaultText = 'Select a machine.'; diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index f841bafc2..ea8df429c 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -1,7 +1,8 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { EggHatchPhase } from "../egg-hatch-phase"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; +import {Button} from "../enums/buttons"; export default class EggHatchSceneHandler extends UiHandler { public eggHatchContainer: Phaser.GameObjects.Container; diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index 7537b8dee..edeac7d71 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "./text"; @@ -6,6 +6,7 @@ import MessageUiHandler from "./message-ui-handler"; import { EGG_SEED, Egg, GachaType, getEggGachaTypeDescriptor, getEggHatchWavesMessage, getEggDescriptor } from "../data/egg"; import * as Utils from "../utils"; import { addWindow } from "./ui-theme"; +import {Button} from "../enums/buttons"; export default class EggListUiHandler extends MessageUiHandler { private eggListContainer: Phaser.GameObjects.Container; diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index 7e0ef063e..3361e9038 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -1,7 +1,8 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; +import {Button} from "../enums/buttons"; export default class EvolutionSceneHandler extends MessageUiHandler { public evolutionContainer: Phaser.GameObjects.Container; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 1a7a8bef5..ee7e413db 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import { Type } from "../data/type"; import { Command } from "./command-ui-handler"; @@ -8,6 +8,7 @@ import * as Utils from "../utils"; import { CommandPhase } from "../phases"; import { MoveCategory } from "#app/data/move.js"; import i18next from '../plugins/i18n'; +import {Button} from "../enums/buttons"; export default class FightUiHandler extends UiHandler { private movesContainer: Phaser.GameObjects.Container; diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index ec5f4147c..b2c2c1181 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { ModalConfig, ModalUiHandler } from "./modal-ui-handler"; import { Mode } from "./ui"; import { TextStyle, addTextInputObject, addTextObject } from "./text"; @@ -6,6 +6,7 @@ import { WindowVariant, addWindow } from "./ui-theme"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import * as Utils from "../utils"; import i18next from '../plugins/i18n'; +import {Button} from "../enums/buttons"; export interface FormModalConfig extends ModalConfig { errorMessage?: string; diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 00e358ff8..c053d5700 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, addTextObject, getTextColor } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; @@ -6,6 +6,7 @@ import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { DexAttr, GameData } from "../system/game-data"; import { speciesStarters } from "../data/pokemon-species"; +import {Button} from "../enums/buttons"; interface DisplayStat { label?: string; @@ -50,6 +51,7 @@ const displayStats: DisplayStats = { return `${caughtCount} (${Math.floor((caughtCount / Object.keys(gameData.dexData).length) * 1000) / 10}%)`; } }, + ribbonsOwned: 'Ribbons Owned', classicSessionsPlayed: 'Classic Runs', sessionsWon: 'Classic Wins', dailyRunSessionsPlayed: 'Daily Run Attempts', @@ -63,13 +65,16 @@ const displayStats: DisplayStats = { pokemonDefeated: 'Pokémon Defeated', pokemonCaught: 'Pokémon Caught', pokemonHatched: 'Eggs Hatched', - legendaryPokemonSeen: 'Legendary Encounters?', - legendaryPokemonCaught: 'Legendaries Caught?', - legendaryPokemonHatched: 'Legendaries Hatched?', - mythicalPokemonSeen: 'Mythical Encounters?', + subLegendaryPokemonSeen: 'Sub-Legends Seen?', + subLegendaryPokemonCaught: 'Sub-Legends Caught?', + subLegendaryPokemonHatched: 'Sub-Legends Hatched?', + legendaryPokemonSeen: 'Legends Seen?', + legendaryPokemonCaught: 'Legends Caught?', + legendaryPokemonHatched: 'Legends Hatched?', + mythicalPokemonSeen: 'Mythicals Seen?', mythicalPokemonCaught: 'Mythicals Caught?', mythicalPokemonHatched: 'Mythicals Hatched?', - shinyPokemonSeen: 'Shiny Encounters?', + shinyPokemonSeen: 'Shinies Seen?', shinyPokemonCaught: 'Shinies Caught?', shinyPokemonHatched: 'Shinies Hatched?', pokemonFused: 'Pokémon Fused?', diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 03d93699e..bf0326676 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button, bypassLogin } from "../battle-scene"; +import BattleScene, { bypassLogin } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; @@ -9,6 +9,7 @@ import { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui import { Tutorial, handleTutorial } from "../tutorial"; import { updateUserInfo } from "../account"; import i18next from '../plugins/i18n'; +import {Button} from "../enums/buttons"; export enum MenuOptions { GAME_SETTINGS, diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index f193a3db5..77a3c14bd 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -1,8 +1,9 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { WindowVariant, addWindow } from "./ui-theme"; +import {Button} from "../enums/buttons"; export interface ModalConfig { buttonActions: Function[]; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index e5252e02a..8af13d8f6 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { getPlayerShopModifierTypeOptionsForWave, ModifierTypeOption } from "../modifier/modifier-type"; import { getPokeballAtlasKey, PokeballType } from "../data/pokeball"; import { addTextObject, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; @@ -6,6 +6,7 @@ import AwaitableUiHandler from "./awaitable-ui-handler"; import { Mode } from "./ui"; import { LockModifierTiersModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { handleTutorial, Tutorial } from "../tutorial"; +import {Button} from "../enums/buttons"; export const SHOP_OPTIONS_ROW_LIMIT = 6; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 35014fa70..8b497655a 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,5 +1,5 @@ import { CommandPhase } from "../phases"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { PlayerPokemon, PokemonMove } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; @@ -16,6 +16,7 @@ import { pokemonEvolutions } from "../data/pokemon-evolutions"; import { addWindow } from "./ui-theme"; import { SpeciesFormChangeItemTrigger } from "../data/pokemon-forms"; import { getVariantTint } from "#app/data/variant"; +import {Button} from "../enums/buttons"; const defaultMessage = 'Choose a Pokémon.'; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 181b0643c..a30e21c8f 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { gameModes } from "../game-mode"; import { SessionSaveData } from "../system/game-data"; import { TextStyle, addTextObject } from "./text"; @@ -8,6 +8,8 @@ import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import MessageUiHandler from "./message-ui-handler"; +import i18next from "i18next"; +import {Button} from "../enums/buttons"; const sessionSlotCount = 5; @@ -258,7 +260,7 @@ class SessionSlot extends Phaser.GameObjects.Container { async setupWithData(data: SessionSaveData) { this.remove(this.loadingLabel, true); - const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode].getName()} - Wave ${data.waveIndex}`, TextStyle.WINDOW); + const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode]?.getName() || 'Unknown'} - Wave ${data.waveIndex}`, TextStyle.WINDOW); this.add(gameModeLabel); const timestampLabel = addTextObject(this.scene, 8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); @@ -314,7 +316,7 @@ class SessionSlot extends Phaser.GameObjects.Container { this.scene.gameData.getSession(this.slotId).then(async sessionData => { if (!sessionData) { this.hasData = false; - this.loadingLabel.setText('Empty'); + this.loadingLabel.setText(i18next.t("menu:empty")); resolve(false); return; } diff --git a/src/ui/settings-ui-handler.ts b/src/ui/settings-ui-handler.ts index 8f43b377d..3ed83268e 100644 --- a/src/ui/settings-ui-handler.ts +++ b/src/ui/settings-ui-handler.ts @@ -1,10 +1,11 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Setting, reloadSettings, settingDefaults, settingOptions } from "../system/settings"; import { hasTouchscreen, isMobile } from "../touch-controls"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; +import {Button} from "../enums/buttons"; export default class SettingsUiHandler extends UiHandler { private settingsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index f1e058b12..0de2ba9ac 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,5 +1,5 @@ -import BattleScene, { Button, starterColors } from "../battle-scene"; -import PokemonSpecies, { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species"; +import BattleScene, { starterColors } from "../battle-scene"; +import PokemonSpecies, { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters, starterPassiveAbilities, getStarterValueFriendshipCap } from "../data/pokemon-species"; import { Species } from "../data/enums/species"; import { TextStyle, addBBCodeTextObject, addTextObject } from "./text"; import { Mode } from "./ui"; @@ -27,6 +27,8 @@ import { argbFromRgba } from "@material/material-color-utilities"; import { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { pokemonPrevolutions } from "#app/data/pokemon-evolutions"; import { Variant, getVariantTint } from "#app/data/variant"; +import i18next from "i18next"; +import {Button} from "../enums/buttons"; export type StarterSelectCallback = (starters: Starter[]) => void; @@ -117,6 +119,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private pokemonEggMoveBgs: Phaser.GameObjects.NineSlice[]; private pokemonEggMoveLabels: Phaser.GameObjects.Text[]; private pokemonCandyIcon: Phaser.GameObjects.Sprite; + private pokemonCandyDarknessOverlay: Phaser.GameObjects.Sprite; private pokemonCandyOverlayIcon: Phaser.GameObjects.Sprite; private pokemonCandyCountText: Phaser.GameObjects.Text; private pokemonCaughtHatchedContainer: Phaser.GameObjects.Container; @@ -127,6 +130,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private starterSelectMessageBox: Phaser.GameObjects.NineSlice; private starterSelectMessageBoxContainer: Phaser.GameObjects.Container; private statsContainer: StatsContainer; + private pokemonFormText: Phaser.GameObjects.Text; private genMode: boolean; private statsMode: boolean; @@ -170,6 +174,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private starterValueLabels: Phaser.GameObjects.Text[]; private shinyIcons: Phaser.GameObjects.Image[][]; private hiddenAbilityIcons: Phaser.GameObjects.Image[]; + private classicWinIcons: Phaser.GameObjects.Image[]; private iconAnimHandler: PokemonIconAnimHandler; @@ -223,7 +228,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonNameText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNameText); - this.pokemonGrowthRateLabelText = addTextObject(this.scene, 8, 106, 'Growth Rate:', TextStyle.SUMMARY_ALT, { fontSize: '36px' }); + this.pokemonGrowthRateLabelText = addTextObject(this.scene, 8, 106, i18next.t("starterSelectUiHandler:growthRate"), TextStyle.SUMMARY_ALT, { fontSize: '36px' }); this.pokemonGrowthRateLabelText.setOrigin(0, 0); this.pokemonGrowthRateLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonGrowthRateLabelText); @@ -240,7 +245,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonUncaughtText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonUncaughtText); - this.pokemonAbilityLabelText = addTextObject(this.scene, 6, 127, 'Ability:', TextStyle.SUMMARY_ALT, { fontSize: '56px' }); + this.pokemonAbilityLabelText = addTextObject(this.scene, 6, 127, i18next.t("starterSelectUiHandler:ability"), TextStyle.SUMMARY_ALT, { fontSize: '56px' }); this.pokemonAbilityLabelText.setOrigin(0, 0); this.pokemonAbilityLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonAbilityLabelText); @@ -249,7 +254,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonAbilityText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonAbilityText); - this.pokemonPassiveLabelText = addTextObject(this.scene, 6, 136, 'Passive:', TextStyle.SUMMARY_ALT, { fontSize: '56px' }); + this.pokemonPassiveLabelText = addTextObject(this.scene, 6, 136, i18next.t("starterSelectUiHandler:passive"), TextStyle.SUMMARY_ALT, { fontSize: '56px' }); this.pokemonPassiveLabelText.setOrigin(0, 0); this.pokemonPassiveLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonPassiveLabelText); @@ -258,7 +263,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonPassiveText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonPassiveText); - this.pokemonNatureLabelText = addTextObject(this.scene, 6, 145, 'Nature:', TextStyle.SUMMARY_ALT, { fontSize: '56px' }); + this.pokemonNatureLabelText = addTextObject(this.scene, 6, 145, i18next.t("starterSelectUiHandler:nature"), TextStyle.SUMMARY_ALT, { fontSize: '56px' }); this.pokemonNatureLabelText.setOrigin(0, 0); this.pokemonNatureLabelText.setVisible(false); this.starterSelectContainer.add(this.pokemonNatureLabelText); @@ -323,7 +328,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.valueLimitLabel.setOrigin(0.5, 0); this.starterSelectContainer.add(this.valueLimitLabel); - const startLabel = addTextObject(this.scene, 124, 162, 'Start', TextStyle.TOOLTIP_CONTENT); + const startLabel = addTextObject(this.scene, 124, 162, i18next.t("starterSelectUiHandler:start"), TextStyle.TOOLTIP_CONTENT); startLabel.setOrigin(0.5, 0); this.starterSelectContainer.add(startLabel); @@ -406,6 +411,17 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return ret; }); + this.classicWinIcons = new Array(81).fill(null).map((_, i) => { + const x = (i % 9) * 18; + const y = Math.floor(i / 9) * 18; + const ret = this.scene.add.image(x + 152, y + 16, 'champion_ribbon'); + ret.setOrigin(0, 0); + ret.setScale(0.5); + ret.setVisible(false); + this.starterSelectContainer.add(ret); + return ret; + }); + this.pokemonSprite = this.scene.add.sprite(53, 63, `pkmn__sub`); this.pokemonSprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); this.starterSelectContainer.add(this.pokemonSprite); @@ -428,16 +444,28 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonLuckText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonLuckText); - this.pokemonCandyIcon = this.scene.add.sprite(1, 12, 'items', 'candy'); + this.pokemonCandyIcon = this.scene.add.sprite(4.5, 18, 'candy'); this.pokemonCandyIcon.setScale(0.5); this.pokemonCandyIcon.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonCandyIcon); - this.pokemonCandyOverlayIcon = this.scene.add.sprite(1, 12, 'items', 'candy_overlay'); + this.pokemonFormText = addTextObject(this.scene, 6, 42, 'Form', TextStyle.WINDOW_ALT, { fontSize: '42px' }); + this.pokemonFormText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonFormText); + + this.pokemonCandyOverlayIcon = this.scene.add.sprite(4.5, 18, 'candy_overlay'); this.pokemonCandyOverlayIcon.setScale(0.5); this.pokemonCandyOverlayIcon.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonCandyOverlayIcon); + this.pokemonCandyDarknessOverlay = this.scene.add.sprite(4.5, 18, 'candy'); + this.pokemonCandyDarknessOverlay.setScale(0.5); + this.pokemonCandyDarknessOverlay.setOrigin(0, 0); + this.pokemonCandyDarknessOverlay.setTint(0x000000); + this.pokemonCandyDarknessOverlay.setAlpha(0.5); + this.pokemonCandyDarknessOverlay.setInteractive(new Phaser.Geom.Rectangle(0, 0, 16, 16), Phaser.Geom.Rectangle.Contains); + this.starterSelectContainer.add(this.pokemonCandyDarknessOverlay); + this.pokemonCandyCountText = addTextObject(this.scene, 14, 18, 'x0', TextStyle.WINDOW_ALT, { fontSize: '56px' }); this.pokemonCandyCountText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonCandyCountText); @@ -496,7 +524,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonEggMovesContainer = this.scene.add.container(102, 85); this.pokemonEggMovesContainer.setScale(0.375); - const eggMovesLabel = addTextObject(this.scene, -46, 0, 'Egg Moves', TextStyle.WINDOW_ALT); + const eggMovesLabel = addTextObject(this.scene, -46, 0, i18next.t("starterSelectUiHandler:eggMoves"), TextStyle.WINDOW_ALT); eggMovesLabel.setOrigin(0.5, 0); this.pokemonEggMovesContainer.add(eggMovesLabel); @@ -718,7 +746,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { else if (this.starterCursors.length < 6) { const options = [ { - label: 'Add to Party', + label: i18next.t("starterSelectUiHandler:addToParty"), handler: () => { ui.setMode(Mode.STARTER_SELECT); let isDupe = false; @@ -755,7 +783,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { overrideSound: true }, { - label: 'Toggle IVs', + label: i18next.t("starterSelectUiHandler:toggleIVs"), handler: () => { this.toggleStatsMode(); ui.setMode(Mode.STARTER_SELECT); @@ -766,14 +794,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.speciesStarterMoves.length > 1) { const showSwapOptions = (moveset: StarterMoveset) => { ui.setMode(Mode.STARTER_SELECT).then(() => { - ui.showText('Select a move to swap out.', null, () => { + ui.showText(i18next.t("starterSelectUiHandler:selectMoveSwapOut"), null, () => { ui.setModeWithoutClear(Mode.OPTION_SELECT, { options: moveset.map((m: Moves, i: number) => { const option: OptionSelectItem = { label: allMoves[m].name, handler: () => { ui.setMode(Mode.STARTER_SELECT).then(() => { - ui.showText(`Select a move to swap with ${allMoves[m].name}.`, null, () => { + ui.showText(`${i18next.t("starterSelectUiHandler:selectMoveSwapWith")} ${allMoves[m].name}.`, null, () => { ui.setModeWithoutClear(Mode.OPTION_SELECT, { options: this.speciesStarterMoves.filter((sm: Moves) => sm !== m).map(sm => { // make an option for each available starter move @@ -787,7 +815,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }; return option; }).concat({ - label: 'Cancel', + label: i18next.t("menu:cancel"), handler: () => { showSwapOptions(this.starterMoveset); return true; @@ -803,7 +831,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }; return option; }).concat({ - label: 'Cancel', + label: i18next.t("menu:cancel"), handler: () => { this.clearText(); ui.setMode(Mode.STARTER_SELECT); @@ -817,7 +845,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); }; options.push({ - label: 'Manage Moves', + label: i18next.t("starterSelectUiHandler:manageMoves"), handler: () => { showSwapOptions(this.starterMoveset); return true; @@ -830,7 +858,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (passiveAttr & PassiveAttr.UNLOCKED) { if (!(passiveAttr & PassiveAttr.ENABLED)) { options.push({ - label: 'Enable Passive', + label: i18next.t("starterSelectUiHandler:enablePassive"), handler: () => { starterData.passiveAttr |= PassiveAttr.ENABLED; ui.setMode(Mode.STARTER_SELECT); @@ -840,7 +868,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); } else { options.push({ - label: 'Disable Passive', + label: i18next.t("starterSelectUiHandler:disablePassive"), handler: () => { starterData.passiveAttr ^= PassiveAttr.ENABLED; ui.setMode(Mode.STARTER_SELECT); @@ -855,7 +883,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (!(passiveAttr & PassiveAttr.UNLOCKED)) { const passiveCost = getPassiveCandyCount(speciesStarters[this.lastSpecies.speciesId]); options.push({ - label: `x${passiveCost} Unlock Passive (${allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name})`, + label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name})`, handler: () => { if (candyCount >= passiveCost) { starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED; @@ -879,7 +907,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (valueReduction < 2) { const reductionCost = getValueReductionCandyCounts(speciesStarters[this.lastSpecies.speciesId])[valueReduction]; options.push({ - label: `x${reductionCost} Reduce Cost`, + label: `x${reductionCost} ${i18next.t("starterSelectUiHandler:reduceCost")}`, handler: () => { if (candyCount >= reductionCost) { starterData.valueReduction++; @@ -902,7 +930,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); } options.push({ - label: 'Cancel', + label: i18next.t("menu:cancel"), handler: () => { ui.setMode(Mode.STARTER_SELECT); return true; @@ -915,7 +943,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }; if (!pokemonPrevolutions.hasOwnProperty(this.lastSpecies.speciesId)) { options.push({ - label: 'Use Candies', + label: i18next.t("starterSelectUiHandler:useCandies"), handler: () => { ui.setMode(Mode.STARTER_SELECT).then(() => showUseCandies()); return true; @@ -923,7 +951,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); } options.push({ - label: 'Cancel', + label: i18next.t("menu:cancel"), handler: () => { ui.setMode(Mode.STARTER_SELECT); return true; @@ -1092,17 +1120,17 @@ export default class StarterSelectUiHandler extends MessageUiHandler { let cycleInstructionLines = []; if (this.speciesStarterDexEntry?.caughtAttr) { if (this.canCycleShiny) - cycleInstructionLines.push('R: Cycle Shiny'); + cycleInstructionLines.push(i18next.t("starterSelectUiHandler:cycleShiny")); if (this.canCycleForm) - cycleInstructionLines.push('F: Cycle Form'); + cycleInstructionLines.push(i18next.t("starterSelectUiHandler:cycleForm")); if (this.canCycleGender) - cycleInstructionLines.push('G: Cycle Gender'); + cycleInstructionLines.push(i18next.t("starterSelectUiHandler:cycleGender")); if (this.canCycleAbility) - cycleInstructionLines.push('E: Cycle Ability'); + cycleInstructionLines.push(i18next.t("starterSelectUiHandler:cycleAbility")); if (this.canCycleNature) - cycleInstructionLines.push('N: Cycle Nature'); + cycleInstructionLines.push(i18next.t("starterSelectUiHandler:cycleNature")); if (this.canCycleVariant) - cycleInstructionLines.push('V: Cycle Variant'); + cycleInstructionLines.push(i18next.t("starterSelectUiHandler:cycleVariant")); } if (cycleInstructionLines.length > 2) { @@ -1176,6 +1204,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.shinyIcons[s][v].setTint(getVariantTint(speciesVariants[v] === DexAttr.DEFAULT_VARIANT ? 0 : speciesVariants[v] === DexAttr.VARIANT_2 ? 1 : 2)); } this.hiddenAbilityIcons[s].setVisible(slotVisible && !!this.scene.gameData.dexData[speciesId].caughtAttr && !!(this.scene.gameData.starterData[speciesId].abilityAttr & 4)); + this.classicWinIcons[s].setVisible(slotVisible && this.scene.gameData.starterData[speciesId].classicWinCount > 0); } } else { changed = super.setCursor(cursor); @@ -1278,15 +1307,32 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCaughtHatchedContainer.setVisible(true); if (pokemonPrevolutions.hasOwnProperty(species.speciesId)) { this.pokemonCaughtHatchedContainer.setY(16); - [ this.pokemonCandyIcon, this.pokemonCandyOverlayIcon, this.pokemonCandyCountText ].map(c => c.setVisible(false)); + [ this.pokemonCandyIcon, this.pokemonCandyOverlayIcon, this.pokemonCandyDarknessOverlay, this.pokemonCandyCountText ].map(c => c.setVisible(false)); } else { this.pokemonCaughtHatchedContainer.setY(25); this.pokemonCandyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); this.pokemonCandyIcon.setVisible(true); this.pokemonCandyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); this.pokemonCandyOverlayIcon.setVisible(true); + this.pokemonCandyDarknessOverlay.setVisible(true); this.pokemonCandyCountText.setText(`x${this.scene.gameData.starterData[species.speciesId].candyCount}`); this.pokemonCandyCountText.setVisible(true); + this.pokemonFormText.setVisible(true); + + var currentFriendship = this.scene.gameData.starterData[this.lastSpecies.speciesId].friendship; + if (!currentFriendship || currentFriendship === undefined) + currentFriendship = 0; + + const friendshipCap = getStarterValueFriendshipCap(speciesStarters[this.lastSpecies.speciesId]); + const candyCropY = 16 - (16 * (currentFriendship / friendshipCap)); + + if (this.pokemonCandyDarknessOverlay.visible) { + this.pokemonCandyDarknessOverlay.on('pointerover', () => (this.scene as BattleScene).ui.showTooltip(null, `${currentFriendship}/${friendshipCap}`, true)); + this.pokemonCandyDarknessOverlay.on('pointerout', () => (this.scene as BattleScene).ui.hideTooltip()); + } + + this.pokemonCandyDarknessOverlay.setCrop(0,0,16, candyCropY); + this.pokemonCandyDarknessOverlay.setCrop(0,0,16, candyCropY); } this.iconAnimHandler.addOrUpdate(this.starterSelectGenIconContainers[species.generation - 1].getAt(this.genSpecies[species.generation - 1].indexOf(species)) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.PASSIVE); @@ -1335,7 +1381,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCaughtHatchedContainer.setVisible(false); this.pokemonCandyIcon.setVisible(false); this.pokemonCandyOverlayIcon.setVisible(false); + this.pokemonCandyDarknessOverlay.setVisible(false); this.pokemonCandyCountText.setVisible(false); + this.pokemonFormText.setVisible(false); const defaultDexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(species, true, true); const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); @@ -1361,7 +1409,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCaughtHatchedContainer.setVisible(false); this.pokemonCandyIcon.setVisible(false); this.pokemonCandyOverlayIcon.setVisible(false); + this.pokemonCandyDarknessOverlay.setVisible(false); this.pokemonCandyCountText.setVisible(false); + this.pokemonFormText.setVisible(false); this.setSpeciesDetails(species, false, 0, false, 0, 0, 0); this.pokemonSprite.clearTint(); @@ -1521,6 +1571,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterMoveset.push(...availableStarterMoves.filter(sm => this.starterMoveset.indexOf(sm) === -1).slice(0, 4 - this.starterMoveset.length)); const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex); + + const formText = species?.forms[formIndex]?.formKey.split('-'); + for (let i = 0; i < formText?.length; i++) + formText[i] = formText[i].charAt(0).toUpperCase() + formText[i].substring(1); + + this.pokemonFormText.setText(formText?.join(' ')); + this.setTypeIcons(speciesForm.type1, speciesForm.type2); } else { this.pokemonAbilityText.setText(''); @@ -1653,7 +1710,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.clearText(); }; - ui.showText('Begin with these Pokémon?', null, () => { + ui.showText(i18next.t("starterSelectUiHandler:confirmStartTeam"), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { const startRun = (gameMode: GameModes) => { this.scene.gameMode = gameModes[gameMode]; diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index 014465805..b8d9c59a4 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -4,7 +4,8 @@ import { Stat, getStatName } from "../data/pokemon-stat"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; const ivChartSize = 24; -const ivChartStatCoordMultipliers = [ [ 0, 1 ], [ 0.825, 0.5 ], [ 0.825, -0.5 ], [ 0, -1 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ] ]; +const ivChartStatCoordMultipliers = [ [ 0, -1 ], [ 0.825, -0.5 ], [ 0.825, 0.5 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ], [ 0, 1 ] ]; +const ivChartStatIndexes = [0,1,2,5,4,3] // swap special attack and speed const defaultIvChartData = new Array(12).fill(null).map(() => 0); export class StatsContainer extends Phaser.GameObjects.Container { @@ -22,7 +23,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { } setup() { - const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[i][0], ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat(); + const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625); ivChartBg.setOrigin(0, 0); @@ -62,7 +63,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { updateIvs(ivs: integer[], originalIvs?: integer[]): void { if (ivs) { - const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][0], (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat(); + const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); const lastIvChartData = this.statsIvsCache || defaultIvChartData; this.statsIvsCache = ivChartData.slice(0); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index cf5eb3639..ac04d41be 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -1,8 +1,10 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene, { starterColors } from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; import { PlayerPokemon } from "../field/pokemon"; +import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species'; +import { argbFromRgba } from "@material/material-color-utilities"; import { Type, getTypeRgb } from "../data/type"; import { TextStyle, addBBCodeTextObject, addTextObject, getBBCodeFrag, getTextColor } from "./text"; import Move, { MoveCategory } from "../data/move"; @@ -17,6 +19,7 @@ import { Nature, getNatureStatMultiplier } from "../data/nature"; import { loggedInUser } from "../account"; import { PlayerGender } from "../system/game-data"; import { Variant, getVariantTint } from "#app/data/variant"; +import {Button} from "../enums/buttons"; enum Page { PROFILE, @@ -44,6 +47,9 @@ export default class SummaryUiHandler extends UiHandler { private genderText: Phaser.GameObjects.Text; private shinyIcon: Phaser.GameObjects.Image; private fusionShinyIcon: Phaser.GameObjects.Image; + private candyShadow: Phaser.GameObjects.Sprite; + private candyIcon: Phaser.GameObjects.Sprite; + private candyOverlay: Phaser.GameObjects.Sprite; private statusContainer: Phaser.GameObjects.Container; private status: Phaser.GameObjects.Image; private summaryPageContainer: Phaser.GameObjects.Container; @@ -136,6 +142,20 @@ export default class SummaryUiHandler extends UiHandler { this.pokeball.setOrigin(0, 1); this.summaryContainer.add(this.pokeball); + this.candyShadow = this.scene.add.sprite(13, -140, 'candy'); + this.candyShadow.setTint(0x141414) + this.candyShadow.setScale(0.8); + this.candyShadow.setInteractive(new Phaser.Geom.Rectangle(0, 0, 16, 16), Phaser.Geom.Rectangle.Contains); + this.summaryContainer.add(this.candyShadow); + + this.candyIcon = this.scene.add.sprite(13, -140, 'candy'); + this.candyIcon.setScale(0.8); + this.summaryContainer.add(this.candyIcon); + + this.candyOverlay = this.scene.add.sprite(13, -140, 'candy_overlay'); + this.candyOverlay.setScale(0.8); + this.summaryContainer.add(this.candyOverlay); + this.levelText = addTextObject(this.scene, 36, -17, '', TextStyle.SUMMARY_ALT); this.levelText.setOrigin(0, 1); this.summaryContainer.add(this.levelText); @@ -222,6 +242,10 @@ export default class SummaryUiHandler extends UiHandler { this.shinyOverlay.setVisible(this.pokemon.isShiny()); + const colorScheme = starterColors[this.pokemon.species.getRootSpeciesId()]; + this.candyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); + this.candyOverlay.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.numberText.setText(Utils.padInt(this.pokemon.species.speciesId, 4)); this.numberText.setColor(this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); this.numberText.setShadowColor(this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true)); @@ -251,6 +275,21 @@ export default class SummaryUiHandler extends UiHandler { this.splicedIcon.on('pointerout', () => (this.scene as BattleScene).ui.hideTooltip()); } + var currentFriendship = this.scene.gameData.starterData[this.pokemon.species.getRootSpeciesId()].friendship; + if (!currentFriendship || currentFriendship === undefined) + currentFriendship = 0; + + const friendshipCap = getStarterValueFriendshipCap(speciesStarters[this.pokemon.species.getRootSpeciesId()]); + const candyCropY = 16 - (16 * (currentFriendship / friendshipCap)); + + if (this.candyShadow.visible) { + this.candyShadow.on('pointerover', () => (this.scene as BattleScene).ui.showTooltip(null, `${currentFriendship}/${friendshipCap}`, true)); + this.candyShadow.on('pointerout', () => (this.scene as BattleScene).ui.hideTooltip()); + } + + this.candyIcon.setCrop(0,candyCropY,16, 16); + this.candyOverlay.setCrop(0,candyCropY,16, 16); + const doubleShiny = isFusion && this.pokemon.shiny && this.pokemon.fusionShiny; const baseVariant = !doubleShiny ? this.pokemon.getVariant() : this.pokemon.variant; @@ -441,6 +480,7 @@ export default class SummaryUiHandler extends UiHandler { const selectedMove = this.getSelectedMove(); if (selectedMove) { + this.moveDescriptionText.setY(84); this.movePowerText.setText(selectedMove.power >= 0 ? selectedMove.power.toString() : '---'); this.moveAccuracyText.setText(selectedMove.accuracy >= 0 ? selectedMove.accuracy.toString() : '---'); this.moveCategoryIcon.setFrame(MoveCategory[selectedMove.category].toLowerCase()); @@ -457,7 +497,6 @@ export default class SummaryUiHandler extends UiHandler { } if (moveDescriptionLineCount > 3) { - this.moveDescriptionText.setY(84); this.descriptionScrollTween = this.scene.tweens.add({ targets: this.moveDescriptionText, delay: Utils.fixedInt(2000), diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index f8a7c9d28..36588dc47 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,10 +1,11 @@ import { BattlerIndex } from "../battle"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Moves } from "../data/enums/moves"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; import { getMoveTargets } from "../data/move"; +import {Button} from "../enums/buttons"; export type TargetSelectCallback = (cursor: integer) => void; diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index c430764e4..6f873c6b0 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -65,6 +65,9 @@ export default class TitleUiHandler extends OptionSelectUiHandler { this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`); if (this.splashMessage === battleCountSplashMessage) this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US'))); + }) + .catch(err => { + console.error("Failed to fetch title stats:\n", err); }); } diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index e3c94b764..7fdb85d94 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -1,6 +1,7 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, getTextColor } from "./text"; import UI, { Mode } from "./ui"; +import {Button} from "../enums/buttons"; export default abstract class UiHandler { protected scene: BattleScene; diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 6e20b2cb8..09deb2bdd 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -1,4 +1,4 @@ -import { Button, default as BattleScene } from '../battle-scene'; +import { default as BattleScene } from '../battle-scene'; import UiHandler from './ui-handler'; import BattleMessageUiHandler from './battle-message-ui-handler'; import CommandUiHandler from './command-ui-handler'; @@ -35,6 +35,7 @@ import SavingIconHandler from './saving-icon-handler'; import UnavailableModalUiHandler from './unavailable-modal-ui-handler'; import OutdatedModalUiHandler from './outdated-modal-ui-handler'; import SessionReloadModalUiHandler from './session-reload-modal-ui-handler'; +import {Button} from "../enums/buttons"; export enum Mode { MESSAGE, diff --git a/src/ui/vouchers-ui-handler.ts b/src/ui/vouchers-ui-handler.ts index 3f41cf9ae..e28e211ee 100644 --- a/src/ui/vouchers-ui-handler.ts +++ b/src/ui/vouchers-ui-handler.ts @@ -1,9 +1,10 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Voucher, getVoucherTypeIcon, getVoucherTypeName, vouchers } from "../system/voucher"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; +import {Button} from "../enums/buttons"; const itemRows = 4; const itemCols = 17; diff --git a/src/utils.test.ts b/src/utils.test.ts index 8dc46371a..22ccbfc63 100644 --- a/src/utils.test.ts +++ b/src/utils.test.ts @@ -1,5 +1,5 @@ import { expect, describe, it } from "vitest"; -import { randomString } from "./utils"; +import { randomString, padInt } from "./utils"; import Phaser from "phaser"; @@ -19,4 +19,26 @@ describe("utils", () => { expect(str1).toBe(str2); }); }); + + describe("padInt", () => { + it("should return a string", () => { + const result = padInt(1, 10); + expect(typeof result).toBe('string'); + }); + + it("should return a padded result with default padWith", () => { + const result = padInt(1, 3); + expect(result).toBe('001'); + }); + + it("should return a padded result using a custom padWith", () => { + const result = padInt(1, 10, 'yes') + expect(result).toBe('yesyesyes1'); + }); + + it("should return inputted value when zero length is entered", () => { + const result = padInt(1, 0); + expect(result).toBe('1') + }) + }); }); diff --git a/src/utils.ts b/src/utils.ts index 577e35c74..822f02f05 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -62,6 +62,11 @@ export function padInt(value: integer, length: integer, padWith?: string): strin return valueStr; } +/** +* Returns a random integer between min and min + range +* @param range The amount of possible numbers +* @param min The starting number +*/ export function randInt(range: integer, min: integer = 0): integer { if (range === 1) return min; @@ -74,6 +79,11 @@ export function randSeedInt(range: integer, min: integer = 0): integer { return Phaser.Math.RND.integerInRange(min, (range - 1) + min); } +/** +* Returns a random integer between min and max (non-inclusive) +* @param min The lowest number +* @param max The highest number +*/ export function randIntRange(min: integer, max: integer): integer { return randInt(max - min, min); } @@ -216,7 +226,7 @@ export const apiUrl = isLocal ? serverUrl : 'api'; export function setCookie(cName: string, cValue: string): void { const expiration = new Date(); - expiration.setTime(new Date().getTime() + 3600000 * 24 * 7); + expiration.setTime(new Date().getTime() + 3600000 * 24 * 30 * 3/*7*/); document.cookie = `${cName}=${cValue};SameSite=Strict;path=/;expires=${expiration.toUTCString()}`; }