diff --git a/public/images/items.json b/public/images/items.json index 7a6069240ab..33dcf8f5e9a 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,11 +4,746 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 414, - "h": 414 + "w": 415, + "h": 415 }, "scale": 1, "frames": [ + { + "filename": "galarica_cuff", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 29, + "h": 30 + }, + "frame": { + "x": 0, + "y": 0, + "w": 29, + "h": 30 + } + }, + { + "filename": "galarica_wreath", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 32, + "h": 27 + }, + "frame": { + "x": 29, + "y": 0, + "w": 32, + "h": 27 + } + }, + { + "filename": "max_mushrooms", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 3, + "w": 29, + "h": 28 + }, + "frame": { + "x": 0, + "y": 30, + "w": 29, + "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, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 27, + "h": 26 + }, + "frame": { + "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, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 3, + "w": 24, + "h": 26 + }, + "frame": { + "x": 88, + "y": 0, + "w": 24, + "h": 26 + } + }, + { + "filename": "ability_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 23, + "h": 26 + }, + "frame": { + "x": 112, + "y": 0, + "w": 23, + "h": 26 + } + }, + { + "filename": "map", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 5, + "w": 27, + "h": 22 + }, + "frame": { + "x": 135, + "y": 0, + "w": 27, + "h": 22 + } + }, + { + "filename": "mint_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 162, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_def", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 190, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_neutral", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 218, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spatk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 246, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spd", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 274, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spdef", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 302, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 22, + "y": 89, + "w": 17, + "h": 31 + } + }, + { + "filename": "golden_exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 0, + "y": 151, + "w": 17, + "h": 31 + } + }, + { + "filename": "super_exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "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, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 30 + }, + "frame": { + "x": 0, + "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, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 26, + "h": 20 + }, + "frame": { + "x": 330, + "y": 0, + "w": 26, + "h": 20 + } + }, + { + "filename": "cracked_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 26, + "h": 20 + }, + "frame": { + "x": 356, + "y": 0, + "w": 26, + "h": 20 + } + }, + { + "filename": "legend_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 25, + "h": 20 + }, + "frame": { + "x": 382, + "y": 0, + "w": 25, + "h": 20 + } + }, + { + "filename": "blank_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 212, + "w": 24, + "h": 24 + } + }, + { + "filename": "choice_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 236, + "w": 24, + "h": 24 + } + }, + { + "filename": "draco_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 260, + "w": 24, + "h": 24 + } + }, + { + "filename": "dread_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 284, + "w": 24, + "h": 24 + } + }, + { + "filename": "earth_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 308, + "w": 24, + "h": 24 + } + }, + { + "filename": "fist_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 332, + "w": 24, + "h": 24 + } + }, + { + "filename": "flame_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 356, + "w": 24, + "h": 24 + } + }, + { + "filename": "focus_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 0, + "y": 380, + "w": 24, + "h": 24 + } + }, { "filename": "relic_gold", "rotated": false, @@ -25,13 +760,34 @@ }, "frame": { "x": 0, - "y": 0, + "y": 404, "w": 15, "h": 11 } }, { - "filename": "ability_capsule", + "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": "golden_punch", "rotated": false, "trimmed": true, "sourceSize": { @@ -40,19 +796,82 @@ }, "spriteSourceSize": { "x": 4, - "y": 9, + "y": 4, "w": 24, - "h": 14 + "h": 24 }, "frame": { - "x": 15, - "y": 0, + "x": 67, + "y": 26, "w": 24, - "h": 14 + "h": 24 } }, { - "filename": "candy_overlay", + "filename": "gracidea", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 91, + "y": 26, + "w": 24, + "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": 115, + "y": 26, + "w": 21, + "h": 24 + } + }, + { + "filename": "grip_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 136, + "y": 22, + "w": 24, + "h": 24 + } + }, + { + "filename": "carbos", "rotated": false, "trimmed": true, "sourceSize": { @@ -61,19 +880,40 @@ }, "spriteSourceSize": { "x": 8, - "y": 12, + "y": 4, "w": 16, - "h": 15 + "h": 24 + }, + "frame": { + "x": 44, + "y": 58, + "w": 16, + "h": 24 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 }, "frame": { "x": 39, - "y": 0, - "w": 16, - "h": 15 + "y": 89, + "w": 18, + "h": 24 } }, { - "filename": "eviolite", + "filename": "ether", "rotated": false, "trimmed": true, "sourceSize": { @@ -81,20 +921,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 15, - "h": 15 + "x": 7, + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 55, - "y": 0, - "w": 15, - "h": 15 + "x": 39, + "y": 113, + "w": 18, + "h": 24 } }, { - "filename": "prism_scale", + "filename": "full_restore", "rotated": false, "trimmed": true, "sourceSize": { @@ -102,16 +942,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 + "x": 7, + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 70, - "y": 0, - "w": 15, - "h": 15 + "x": 39, + "y": 137, + "w": 18, + "h": 24 } }, { @@ -129,14 +969,224 @@ "h": 15 }, "frame": { - "x": 85, - "y": 0, + "x": 39, + "y": 161, "w": 24, "h": 15 } }, { - "filename": "abomasite", + "filename": "icicle_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 40, + "y": 176, + "w": 24, + "h": 24 + } + }, + { + "filename": "insect_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 200, + "w": 24, + "h": 24 + } + }, + { + "filename": "iron_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 224, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 248, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_great", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 272, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_master", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 296, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_ultra", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 320, + "w": 24, + "h": 24 + } + }, + { + "filename": "lustrous_globe", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 344, + "w": 24, + "h": 24 + } + }, + { + "filename": "meadow_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 368, + "w": 24, + "h": 24 + } + }, + { + "filename": "clefairy_doll", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 24, + "y": 392, + "w": 24, + "h": 23 + } + }, + { + "filename": "hp_up", "rotated": false, "trimmed": true, "sourceSize": { @@ -145,19 +1195,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, + "y": 4, "w": 16, - "h": 16 + "h": 24 }, "frame": { - "x": 109, - "y": 0, + "x": 48, + "y": 200, "w": 16, - "h": 16 + "h": 24 } }, { - "filename": "absolite", + "filename": "iron", "rotated": false, "trimmed": true, "sourceSize": { @@ -166,19 +1216,187 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, + "y": 4, "w": 16, - "h": 16 + "h": 24 }, "frame": { - "x": 125, - "y": 0, + "x": 48, + "y": 224, "w": 16, - "h": 16 + "h": 24 } }, { - "filename": "aerodactylite", + "filename": "kings_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 48, + "y": 248, + "w": 23, + "h": 24 + } + }, + { + "filename": "mind_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 272, + "w": 24, + "h": 24 + } + }, + { + "filename": "muscle_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 296, + "w": 24, + "h": 24 + } + }, + { + "filename": "pixie_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 320, + "w": 24, + "h": 24 + } + }, + { + "filename": "salac_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 344, + "w": 24, + "h": 24 + } + }, + { + "filename": "scanner", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 368, + "w": 24, + "h": 24 + } + }, + { + "filename": "coin_case", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 48, + "y": 392, + "w": 24, + "h": 23 + } + }, + { + "filename": "ability_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 9, + "w": 24, + "h": 14 + }, + "frame": { + "x": 136, + "y": 46, + "w": 24, + "h": 14 + } + }, + { + "filename": "lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -187,19 +1405,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, - "w": 16, - "h": 16 + "y": 4, + "w": 17, + "h": 24 }, "frame": { - "x": 141, - "y": 0, - "w": 16, - "h": 16 + "x": 160, + "y": 22, + "w": 17, + "h": 24 } }, { - "filename": "aggronite", + "filename": "silk_scarf", "rotated": false, "trimmed": true, "sourceSize": { @@ -207,20 +1425,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 157, - "y": 0, - "w": 16, - "h": 16 + "x": 177, + "y": 21, + "w": 24, + "h": 24 } }, { - "filename": "alakazite", + "filename": "sky_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -228,20 +1446,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 173, - "y": 0, - "w": 16, - "h": 16 + "x": 201, + "y": 21, + "w": 24, + "h": 24 } }, { - "filename": "altarianite", + "filename": "splash_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -249,20 +1467,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 189, - "y": 0, - "w": 16, - "h": 16 + "x": 225, + "y": 21, + "w": 24, + "h": 24 } }, { - "filename": "ampharosite", + "filename": "spooky_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -270,20 +1488,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 205, - "y": 0, - "w": 16, - "h": 16 + "x": 249, + "y": 21, + "w": 24, + "h": 24 } }, { - "filename": "audinite", + "filename": "stone_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -291,20 +1509,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 221, - "y": 0, - "w": 16, - "h": 16 + "x": 273, + "y": 21, + "w": 24, + "h": 24 } }, { - "filename": "banettite", + "filename": "sun_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -312,692 +1530,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 237, - "y": 0, - "w": 16, - "h": 16 + "x": 297, + "y": 21, + "w": 24, + "h": 24 } }, { - "filename": "beedrillite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 253, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "blastoisinite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 269, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "blazikenite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 285, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "cameruptite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 301, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "charizardite_x", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 317, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "charizardite_y", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 333, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "diancite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 349, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "galladite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 365, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "garchompite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 381, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "gardevoirite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 397, - "y": 0, - "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": 0, - "y": 11, - "w": 12, - "h": 17 - } - }, - { - "filename": "gengarite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 12, - "y": 14, - "w": 16, - "h": 16 - } - }, - { - "filename": "glalitite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 28, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "gyaradosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 44, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "heracronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 60, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "houndoominite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 76, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "kangaskhanite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 92, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "latiasite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 108, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "latiosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 124, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "lopunnite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 140, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "lucarionite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 156, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "manectite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 172, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mawilite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 188, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "medichamite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 204, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mega_bracelet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 16 - }, - "frame": { - "x": 220, - "y": 16, - "w": 20, - "h": 16 - } - }, - { - "filename": "metagrossite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 240, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mewtwonite_x", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 256, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mewtwonite_y", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 272, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 288, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "pidgeotite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 304, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "pinsirite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 320, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "rayquazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 336, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "relic_band", + "filename": "max_elixir", "rotated": false, "trimmed": true, "sourceSize": { @@ -1006,19 +1552,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 9, - "w": 17, - "h": 16 + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 352, - "y": 16, - "w": 17, - "h": 16 + "x": 321, + "y": 21, + "w": 18, + "h": 24 } }, { - "filename": "sablenite", + "filename": "toxic_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -1026,20 +1572,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 369, - "y": 16, - "w": 16, - "h": 16 + "x": 339, + "y": 20, + "w": 24, + "h": 24 } }, { - "filename": "salamencite", + "filename": "zap_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -1047,20 +1593,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 385, - "y": 16, - "w": 16, - "h": 16 + "x": 363, + "y": 20, + "w": 24, + "h": 24 } }, { - "filename": "sceptilite", + "filename": "max_revive", "rotated": false, "trimmed": true, "sourceSize": { @@ -1068,20 +1614,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 5, + "y": 4, + "w": 22, + "h": 24 }, "frame": { - "x": 0, - "y": 30, - "w": 16, - "h": 16 + "x": 387, + "y": 20, + "w": 22, + "h": 24 } }, { - "filename": "scizorite", + "filename": "adamant_crystal", "rotated": false, "trimmed": true, "sourceSize": { @@ -1089,20 +1635,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 6, + "w": 23, + "h": 21 }, "frame": { - "x": 16, - "y": 31, - "w": 16, - "h": 16 + "x": 160, + "y": 46, + "w": 23, + "h": 21 } }, { - "filename": "sharpedonite", + "filename": "exp_balance", "rotated": false, "trimmed": true, "sourceSize": { @@ -1110,20 +1656,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 5, + "w": 24, + "h": 22 }, "frame": { - "x": 32, - "y": 31, - "w": 16, - "h": 16 + "x": 183, + "y": 45, + "w": 24, + "h": 22 } }, { - "filename": "slowbronite", + "filename": "exp_share", "rotated": false, "trimmed": true, "sourceSize": { @@ -1131,20 +1677,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 5, + "w": 24, + "h": 22 }, "frame": { - "x": 48, - "y": 31, - "w": 16, - "h": 16 + "x": 207, + "y": 45, + "w": 24, + "h": 22 } }, { - "filename": "soul_dew", + "filename": "expert_belt", "rotated": false, "trimmed": true, "sourceSize": { @@ -1152,20 +1698,734 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, + "x": 4, + "y": 4, + "w": 24, + "h": 23 + }, + "frame": { + "x": 231, + "y": 45, + "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": 255, + "y": 45, + "w": 24, + "h": 23 + } + }, + { + "filename": "leppa_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 279, + "y": 45, + "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": 303, + "y": 45, + "w": 24, + "h": 23 + } + }, + { + "filename": "berry_pouch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 327, + "y": 45, + "w": 23, + "h": 23 + } + }, + { + "filename": "reveal_glass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 350, + "y": 44, + "w": 23, + "h": 24 + } + }, + { + "filename": "twisted_spoon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 373, + "y": 44, + "w": 24, + "h": 23 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 397, + "y": 44, + "w": 18, + "h": 24 + } + }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, "y": 8, - "w": 16, - "h": 16 + "w": 24, + "h": 18 + }, + "frame": { + "x": 373, + "y": 67, + "w": 24, + "h": 18 + } + }, + { + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 397, + "y": 68, + "w": 18, + "h": 24 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 67, + "y": 50, + "w": 24, + "h": 18 + } + }, + { + "filename": "icy_reins_of_unity", + "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": "dragon_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 115, + "y": 50, + "w": 21, + "h": 23 + } + }, + { + "filename": "metal_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 136, + "y": 60, + "w": 24, + "h": 20 + } + }, + { + "filename": "peat_block", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 160, + "y": 67, + "w": 24, + "h": 22 + } + }, + { + "filename": "dynamax_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 23 + }, + "frame": { + "x": 184, + "y": 67, + "w": 23, + "h": 23 + } + }, + { + "filename": "griseous_core", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 207, + "y": 67, + "w": 23, + "h": 23 + } + }, + { + "filename": "healing_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 230, + "y": 68, + "w": 23, + "h": 22 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 253, + "y": 68, + "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": 276, + "y": 68, + "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": 299, + "y": 68, + "w": 23, + "h": 23 + } + }, + { + "filename": "black_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 322, + "y": 68, + "w": 22, + "h": 23 + } + }, + { + "filename": "bug_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 344, + "y": 68, + "w": 22, + "h": 23 + } + }, + { + "filename": "quick_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 60, + "y": 68, + "w": 24, + "h": 20 + } + }, + { + "filename": "dark_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 57, + "y": 88, + "w": 22, + "h": 23 + } + }, + { + "filename": "dragon_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 57, + "y": 111, + "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": 57, + "y": 134, + "w": 22, + "h": 23 + } + }, + { + "filename": "rusted_shield", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 84, + "y": 70, + "w": 24, + "h": 20 + } + }, + { + "filename": "fairy_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 79, + "y": 90, + "w": 22, + "h": 23 + } + }, + { + "filename": "fighting_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 79, + "y": 113, + "w": 22, + "h": 23 + } + }, + { + "filename": "amulet_coin", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 79, + "y": 136, + "w": 23, + "h": 21 + } + }, + { + "filename": "coupon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 63, + "y": 157, + "w": 23, + "h": 19 + } + }, + { + "filename": "fire_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 }, "frame": { "x": 64, - "y": 31, - "w": 16, - "h": 16 + "y": 176, + "w": 22, + "h": 23 } }, { - "filename": "steelixite", + "filename": "fire_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 64, + "y": 199, + "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": 64, + "y": 222, + "w": 22, + "h": 23 + } + }, + { + "filename": "max_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -1174,19 +2434,82 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, - "w": 16, - "h": 16 + "y": 4, + "w": 17, + "h": 24 }, "frame": { - "x": 80, - "y": 31, - "w": 16, - "h": 16 + "x": 86, + "y": 157, + "w": 17, + "h": 24 } }, { - "filename": "strawberry_sweet", + "filename": "oval_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 86, + "y": 181, + "w": 21, + "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": 86, + "y": 205, + "w": 21, + "h": 24 + } + }, + { + "filename": "auspicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 86, + "y": 229, + "w": 23, + "h": 21 + } + }, + { + "filename": "full_heal", "rotated": false, "trimmed": true, "sourceSize": { @@ -1195,19 +2518,481 @@ }, "spriteSourceSize": { "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 71, + "y": 245, + "w": 15, + "h": 23 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 86, + "y": 250, + "w": 23, + "h": 20 + } + }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, "y": 7, - "w": 16, - "h": 16 + "w": 24, + "h": 20 }, "frame": { - "x": 96, - "y": 32, - "w": 16, - "h": 16 + "x": 108, + "y": 73, + "w": 24, + "h": 20 } }, { - "filename": "swampertite", + "filename": "focus_sash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 101, + "y": 93, + "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": 101, + "y": 116, + "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": 102, + "y": 136, + "w": 22, + "h": 21 + } + }, + { + "filename": "red_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 103, + "y": 157, + "w": 20, + "h": 24 + } + }, + { + "filename": "max_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 107, + "y": 181, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_max", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 107, + "y": 205, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 109, + "y": 229, + "w": 16, + "h": 24 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 109, + "y": 253, + "w": 19, + "h": 20 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 123, + "y": 93, + "w": 16, + "h": 24 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 139, + "y": 80, + "w": 21, + "h": 23 + } + }, + { + "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": 160, + "y": 89, + "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": 184, + "y": 90, + "w": 24, + "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": 208, + "y": 90, + "w": 23, + "h": 21 + } + }, + { + "filename": "blank_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 231, + "y": 90, + "w": 22, + "h": 22 + } + }, + { + "filename": "n_lunarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 253, + "y": 91, + "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": 276, + "y": 91, + "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": 299, + "y": 91, + "w": 23, + "h": 22 + } + }, + { + "filename": "bug_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 322, + "y": 91, + "w": 22, + "h": 22 + } + }, + { + "filename": "charcoal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 344, + "y": 91, + "w": 22, + "h": 22 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 139, + "y": 103, + "w": 21, + "h": 21 + } + }, + { + "filename": "mystery_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -1218,55 +3003,13 @@ "x": 8, "y": 8, "w": 16, - "h": 16 + "h": 18 }, "frame": { - "x": 112, - "y": 32, + "x": 123, + "y": 117, "w": 16, - "h": 16 - } - }, - { - "filename": "tyranitarite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 128, - "y": 32, - "w": 16, - "h": 16 - } - }, - { - "filename": "venusaurite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 144, - "y": 32, - "w": 16, - "h": 16 + "h": 18 } }, { @@ -1285,7 +3028,7 @@ }, "frame": { "x": 160, - "y": 32, + "y": 109, "w": 23, "h": 17 } @@ -1306,11 +3049,32 @@ }, "frame": { "x": 183, - "y": 32, + "y": 110, "w": 23, "h": 17 } }, + { + "filename": "ghost_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 366, + "y": 85, + "w": 22, + "h": 23 + } + }, { "filename": "chill_drive", "rotated": false, @@ -1327,7 +3091,7 @@ }, "frame": { "x": 206, - "y": 32, + "y": 111, "w": 23, "h": 17 } @@ -1348,935 +3112,11 @@ }, "frame": { "x": 229, - "y": 32, + "y": 112, "w": 23, "h": 17 } }, - { - "filename": "everstone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 17 - }, - "frame": { - "x": 252, - "y": 32, - "w": 20, - "h": 17 - } - }, - { - "filename": "shock_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 272, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 295, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 11, - "w": 18, - "h": 18 - }, - "frame": { - "x": 318, - "y": 32, - "w": 18, - "h": 18 - } - }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 336, - "y": 32, - "w": 24, - "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": 360, - "y": 32, - "w": 18, - "h": 18 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 378, - "y": 32, - "w": 24, - "h": 18 - } - }, - { - "filename": "mystery_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 18 - }, - "frame": { - "x": 0, - "y": 46, - "w": 16, - "h": 18 - } - }, - { - "filename": "flame_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 16, - "y": 47, - "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": 34, - "y": 47, - "w": 18, - "h": 18 - } - }, - { - "filename": "masterpiece_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 52, - "y": 47, - "w": 21, - "h": 18 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 73, - "y": 47, - "w": 23, - "h": 18 - } - }, - { - "filename": "sharp_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 96, - "y": 48, - "w": 21, - "h": 18 - } - }, - { - "filename": "toxic_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 117, - "y": 48, - "w": 18, - "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": 135, - "y": 48, - "w": 21, - "h": 18 - } - }, - { - "filename": "wl_ability_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 156, - "y": 49, - "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": 176, - "y": 49, - "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": 196, - "y": 49, - "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": 216, - "y": 49, - "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": 236, - "y": 49, - "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": 256, - "y": 49, - "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": 276, - "y": 49, - "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": 296, - "y": 49, - "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": 316, - "y": 50, - "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": 336, - "y": 50, - "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": 356, - "y": 50, - "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": 376, - "y": 50, - "w": 20, - "h": 18 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 - }, - "frame": { - "x": 396, - "y": 50, - "w": 18, - "h": 19 - } - }, - { - "filename": "wl_ice_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 0, - "y": 65, - "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": 20, - "y": 65, - "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": 40, - "y": 65, - "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": 60, - "y": 65, - "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": 80, - "y": 66, - "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": 100, - "y": 66, - "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": 120, - "y": 66, - "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": 140, - "y": 67, - "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": 160, - "y": 67, - "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": 180, - "y": 67, - "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": 200, - "y": 67, - "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": 220, - "y": 67, - "w": 20, - "h": 18 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 240, - "y": 67, - "w": 19, - "h": 19 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 259, - "y": 67, - "w": 22, - "h": 19 - } - }, - { - "filename": "coupon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 281, - "y": 67, - "w": 23, - "h": 19 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 304, - "y": 68, - "w": 22, - "h": 19 - } - }, { "filename": "golden_mystic_ticket", "rotated": false, @@ -2292,75 +3132,12 @@ "h": 19 }, "frame": { - "x": 326, - "y": 68, + "x": 252, + "y": 112, "w": 23, "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": 349, - "y": 68, - "w": 20, - "h": 19 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 369, - "y": 68, - "w": 21, - "h": 19 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 390, - "y": 69, - "w": 19, - "h": 19 - } - }, { "filename": "mystic_ticket", "rotated": false, @@ -2376,8 +3153,8 @@ "h": 19 }, "frame": { - "x": 0, - "y": 83, + "x": 275, + "y": 112, "w": 23, "h": 19 } @@ -2397,516 +3174,12 @@ "h": 19 }, "frame": { - "x": 23, - "y": 83, + "x": 298, + "y": 113, "w": 23, "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": 46, - "y": 83, - "w": 20, - "h": 19 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 66, - "y": 84, - "w": 22, - "h": 19 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 88, - "y": 84, - "w": 19, - "h": 20 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 107, - "y": 84, - "w": 20, - "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": 127, - "y": 85, - "w": 23, - "h": 20 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 150, - "y": 85, - "w": 20, - "h": 20 - } - }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 170, - "y": 85, - "w": 19, - "h": 20 - } - }, - { - "filename": "chipped_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 189, - "y": 85, - "w": 26, - "h": 20 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 215, - "y": 85, - "w": 22, - "h": 20 - } - }, - { - "filename": "cracked_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 237, - "y": 86, - "w": 26, - "h": 20 - } - }, - { - "filename": "fairy_feather", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 263, - "y": 86, - "w": 22, - "h": 20 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 285, - "y": 86, - "w": 17, - "h": 20 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 302, - "y": 87, - "w": 20, - "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": 322, - "y": 87, - "w": 19, - "h": 20 - } - }, - { - "filename": "icy_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 341, - "y": 87, - "w": 24, - "h": 20 - } - }, - { - "filename": "legend_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 25, - "h": 20 - }, - "frame": { - "x": 365, - "y": 87, - "w": 25, - "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": 390, - "y": 88, - "w": 17, - "h": 20 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 0, - "y": 102, - "w": 20, - "h": 20 - } - }, - { - "filename": "malicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 20, - "y": 102, - "w": 22, - "h": 20 - } - }, - { - "filename": "mb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 42, - "y": 102, - "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": 62, - "y": 103, - "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": 82, - "y": 104, - "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": 102, - "y": 104, - "w": 18, - "h": 20 - } - }, - { - "filename": "rb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 120, - "y": 105, - "w": 20, - "h": 20 - } - }, { "filename": "reviver_seed", "rotated": false, @@ -2922,852 +3195,12 @@ "h": 20 }, "frame": { - "x": 140, - "y": 105, + "x": 321, + "y": 113, "w": 23, "h": 20 } }, - { - "filename": "rusted_shield", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 163, - "y": 105, - "w": 24, - "h": 20 - } - }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 187, - "y": 105, - "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": 211, - "y": 105, - "w": 24, - "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": 235, - "y": 106, - "w": 23, - "h": 20 - } - }, - { - "filename": "smooth_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 258, - "y": 106, - "w": 20, - "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": 278, - "y": 106, - "w": 24, - "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": 302, - "y": 107, - "w": 20, - "h": 20 - } - }, - { - "filename": "tera_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 322, - "y": 107, - "w": 22, - "h": 20 - } - }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 344, - "y": 107, - "w": 20, - "h": 20 - } - }, - { - "filename": "adamant_crystal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 364, - "y": 107, - "w": 23, - "h": 21 - } - }, - { - "filename": "amulet_coin", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 387, - "y": 108, - "w": 23, - "h": 21 - } - }, - { - "filename": "auspicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 0, - "y": 122, - "w": 23, - "h": 21 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 23, - "y": 122, - "w": 20, - "h": 21 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 43, - "y": 122, - "w": 19, - "h": 21 - } - }, - { - "filename": "spell_tag", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 62, - "y": 123, - "w": 19, - "h": 21 - } - }, - { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 81, - "y": 124, - "w": 22, - "h": 21 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 103, - "y": 125, - "w": 21, - "h": 21 - } - }, - { - "filename": "liechi_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 124, - "y": 125, - "w": 22, - "h": 21 - } - }, - { - "filename": "mint_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 146, - "y": 125, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_def", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 174, - "y": 125, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_neutral", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 202, - "y": 125, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spatk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 230, - "y": 126, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spd", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 258, - "y": 126, - "w": 28, - "h": 21 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 286, - "y": 126, - "w": 15, - "h": 22 - } - }, - { - "filename": "mint_spdef", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 301, - "y": 127, - "w": 28, - "h": 21 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 329, - "y": 127, - "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": 352, - "y": 128, - "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": 375, - "y": 129, - "w": 23, - "h": 21 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 398, - "y": 129, - "w": 15, - "h": 23 - } - }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 0, - "y": 143, - "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": 21, - "y": 143, - "w": 21, - "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": 42, - "y": 143, - "w": 18, - "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": 60, - "y": 144, - "w": 21, - "h": 21 - } - }, - { - "filename": "sweet_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 81, - "y": 145, - "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": 103, - "y": 146, - "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": 125, - "y": 146, - "w": 22, - "h": 21 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 147, - "y": 146, - "w": 23, - "h": 21 - } - }, - { - "filename": "blank_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 170, - "y": 146, - "w": 22, - "h": 22 - } - }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 192, - "y": 146, - "w": 22, - "h": 22 - } - }, - { - "filename": "charcoal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 214, - "y": 147, - "w": 22, - "h": 22 - } - }, { "filename": "dark_memory", "rotated": false, @@ -3783,1923 +3216,12 @@ "h": 22 }, "frame": { - "x": 236, - "y": 147, + "x": 344, + "y": 113, "w": 22, "h": 22 } }, - { - "filename": "dire_hit", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 258, - "y": 147, - "w": 22, - "h": 22 - } - }, - { - "filename": "dna_splicers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 280, - "y": 148, - "w": 22, - "h": 22 - } - }, - { - "filename": "dragon_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 302, - "y": 148, - "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": 324, - "y": 148, - "w": 22, - "h": 22 - } - }, - { - "filename": "electric_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 346, - "y": 149, - "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": 368, - "y": 150, - "w": 22, - "h": 22 - } - }, - { - "filename": "exp_balance", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 390, - "y": 152, - "w": 24, - "h": 22 - } - }, - { - "filename": "exp_share", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 0, - "y": 164, - "w": 24, - "h": 22 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 24, - "y": 164, - "w": 17, - "h": 22 - } - }, - { - "filename": "fairy_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 41, - "y": 165, - "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": 63, - "y": 165, - "w": 17, - "h": 22 - } - }, - { - "filename": "fighting_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 80, - "y": 166, - "w": 22, - "h": 22 - } - }, - { - "filename": "fire_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 102, - "y": 167, - "w": 22, - "h": 22 - } - }, - { - "filename": "flying_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 124, - "y": 167, - "w": 22, - "h": 22 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 146, - "y": 167, - "w": 22, - "h": 22 - } - }, - { - "filename": "ghost_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 168, - "y": 168, - "w": 22, - "h": 22 - } - }, - { - "filename": "grass_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 190, - "y": 168, - "w": 22, - "h": 22 - } - }, - { - "filename": "ground_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 212, - "y": 169, - "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": 234, - "y": 169, - "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": 256, - "y": 169, - "w": 20, - "h": 22 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 276, - "y": 170, - "w": 23, - "h": 22 - } - }, - { - "filename": "ice_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 299, - "y": 170, - "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": 321, - "y": 170, - "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": 343, - "y": 171, - "w": 19, - "h": 22 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 362, - "y": 172, - "w": 22, - "h": 22 - } - }, - { - "filename": "map", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 27, - "h": 22 - }, - "frame": { - "x": 384, - "y": 174, - "w": 27, - "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": 0, - "y": 186, - "w": 19, - "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": 19, - "y": 186, - "w": 22, - "h": 22 - } - }, - { - "filename": "peat_block", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 41, - "y": 187, - "w": 24, - "h": 22 - } - }, - { - "filename": "poison_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 65, - "y": 188, - "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": 87, - "y": 189, - "w": 22, - "h": 22 - } - }, - { - "filename": "psychic_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 109, - "y": 189, - "w": 22, - "h": 22 - } - }, - { - "filename": "rock_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 131, - "y": 189, - "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": 153, - "y": 190, - "w": 23, - "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": 176, - "y": 190, - "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": 198, - "y": 191, - "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": 220, - "y": 191, - "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": 242, - "y": 191, - "w": 20, - "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": 262, - "y": 192, - "w": 22, - "h": 22 - } - }, - { - "filename": "steel_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 284, - "y": 192, - "w": 22, - "h": 22 - } - }, - { - "filename": "thunder_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 306, - "y": 192, - "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": 328, - "y": 193, - "w": 22, - "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": 350, - "y": 194, - "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": 372, - "y": 196, - "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": 394, - "y": 196, - "w": 17, - "h": 23 - } - }, - { - "filename": "tm_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 0, - "y": 208, - "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": 22, - "y": 208, - "w": 17, - "h": 23 - } - }, - { - "filename": "tm_fairy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 39, - "y": 209, - "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": 61, - "y": 210, - "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": 83, - "y": 211, - "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": 105, - "y": 211, - "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": 127, - "y": 211, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 149, - "y": 212, - "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": 171, - "y": 212, - "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": 193, - "y": 213, - "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": 215, - "y": 213, - "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": 237, - "y": 213, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_psychic", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 259, - "y": 214, - "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": 281, - "y": 214, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 303, - "y": 214, - "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": 325, - "y": 215, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 347, - "y": 216, - "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": 369, - "y": 218, - "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": 391, - "y": 219, - "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": 0, - "y": 230, - "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": 22, - "y": 231, - "w": 22, - "h": 22 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 44, - "y": 231, - "w": 17, - "h": 23 - } - }, - { - "filename": "x_sp_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 61, - "y": 232, - "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": 83, - "y": 233, - "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": 105, - "y": 233, - "w": 22, - "h": 22 - } - }, - { - "filename": "black_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 127, - "y": 233, - "w": 22, - "h": 23 - } - }, - { - "filename": "berry_pouch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 149, - "y": 234, - "w": 23, - "h": 23 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 172, - "y": 234, - "w": 21, - "h": 23 - } - }, - { - "filename": "bug_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 193, - "y": 235, - "w": 22, - "h": 23 - } - }, - { - "filename": "clefairy_doll", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 215, - "y": 235, - "w": 24, - "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": 239, - "y": 235, - "w": 20, - "h": 23 - } - }, - { - "filename": "coin_case", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 259, - "y": 236, - "w": 24, - "h": 23 - } - }, - { - "filename": "dark_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 283, - "y": 236, - "w": 22, - "h": 23 - } - }, - { - "filename": "sachet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 305, - "y": 236, - "w": 18, - "h": 23 - } - }, - { - "filename": "dragon_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 323, - "y": 237, - "w": 22, - "h": 23 - } - }, - { - "filename": "dynamax_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 23 - }, - "frame": { - "x": 345, - "y": 238, - "w": 23, - "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": 368, - "y": 240, - "w": 22, - "h": 23 - } - }, - { - "filename": "expert_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 390, - "y": 241, - "w": 24, - "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": 0, - "y": 252, - "w": 22, - "h": 23 - } - }, - { - "filename": "fighting_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 22, - "y": 253, - "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": 44, - "y": 254, - "w": 22, - "h": 23 - } - }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 66, - "y": 254, - "w": 16, - "h": 24 - } - }, - { - "filename": "fire_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 82, - "y": 255, - "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": 104, - "y": 255, - "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": 126, - "y": 256, - "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": 148, - "y": 257, - "w": 22, - "h": 23 - } - }, { "filename": "grass_tera_shard", "rotated": false, @@ -5715,14 +3237,14 @@ "h": 23 }, "frame": { - "x": 170, - "y": 257, + "x": 366, + "y": 108, "w": 22, "h": 23 } }, { - "filename": "griseous_core", + "filename": "berry_pot", "rotated": false, "trimmed": true, "sourceSize": { @@ -5730,16 +3252,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 7, "y": 5, - "w": 23, - "h": 23 + "w": 18, + "h": 22 }, "frame": { - "x": 192, - "y": 258, - "w": 23, - "h": 23 + "x": 124, + "y": 135, + "w": 18, + "h": 22 } }, { @@ -5757,8 +3279,8 @@ "h": 23 }, "frame": { - "x": 215, - "y": 258, + "x": 123, + "y": 157, "w": 22, "h": 23 } @@ -5778,117 +3300,12 @@ "h": 23 }, "frame": { - "x": 237, - "y": 258, + "x": 123, + "y": 180, "w": 22, "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": 259, - "y": 259, - "w": 24, - "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": 283, - "y": 259, - "w": 21, - "h": 23 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 304, - "y": 259, - "w": 16, - "h": 24 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 320, - "y": 260, - "w": 21, - "h": 23 - } - }, - { - "filename": "leppa_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 341, - "y": 261, - "w": 24, - "h": 23 - } - }, { "filename": "never_melt_ice", "rotated": false, @@ -5904,12 +3321,54 @@ "h": 23 }, "frame": { - "x": 365, - "y": 263, + "x": 123, + "y": 203, "w": 22, "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": 125, + "y": 226, + "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": 128, + "y": 249, + "w": 20, + "h": 23 + } + }, { "filename": "normal_tera_shard", "rotated": false, @@ -5925,12 +3384,243 @@ "h": 23 }, "frame": { - "x": 387, - "y": 264, + "x": 388, + "y": 92, "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": 388, + "y": 115, + "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": 142, + "y": 124, + "w": 18, + "h": 23 + } + }, + { + "filename": "wellspring_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 160, + "y": 126, + "w": 23, + "h": 21 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 183, + "y": 127, + "w": 23, + "h": 20 + } + }, + { + "filename": "relic_crown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 18 + }, + "frame": { + "x": 206, + "y": 128, + "w": 23, + "h": 18 + } + }, + { + "filename": "shock_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 229, + "y": 129, + "w": 23, + "h": 17 + } + }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 252, + "y": 131, + "w": 23, + "h": 17 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 275, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "dna_splicers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 297, + "y": 132, + "w": 22, + "h": 22 + } + }, + { + "filename": "dragon_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 319, + "y": 133, + "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": 341, + "y": 135, + "w": 22, + "h": 22 + } + }, { "filename": "petaya_berry", "rotated": false, @@ -5946,8 +3636,8 @@ "h": 23 }, "frame": { - "x": 0, - "y": 275, + "x": 145, + "y": 147, "w": 22, "h": 23 } @@ -5967,8 +3657,8 @@ "h": 23 }, "frame": { - "x": 22, - "y": 276, + "x": 167, + "y": 147, "w": 22, "h": 23 } @@ -5988,54 +3678,12 @@ "h": 23 }, "frame": { - "x": 44, - "y": 277, + "x": 145, + "y": 170, "w": 22, "h": 23 } }, - { - "filename": "rare_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 66, - "y": 278, - "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": 89, - "y": 278, - "w": 23, - "h": 23 - } - }, { "filename": "reaper_cloth", "rotated": false, @@ -6051,8 +3699,8 @@ "h": 23 }, "frame": { - "x": 112, - "y": 279, + "x": 145, + "y": 193, "w": 22, "h": 23 } @@ -6072,54 +3720,12 @@ "h": 23 }, "frame": { - "x": 134, - "y": 280, + "x": 167, + "y": 170, "w": 22, "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": 156, - "y": 280, - "w": 24, - "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": 180, - "y": 281, - "w": 21, - "h": 23 - } - }, { "filename": "steel_tera_shard", "rotated": false, @@ -6135,12 +3741,33 @@ "h": 23 }, "frame": { - "x": 201, - "y": 281, + "x": 167, + "y": 193, "w": 22, "h": 23 } }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 189, + "y": 147, + "w": 17, + "h": 24 + } + }, { "filename": "stellar_tera_shard", "rotated": false, @@ -6156,54 +3783,12 @@ "h": 23 }, "frame": { - "x": 223, - "y": 281, + "x": 206, + "y": 146, "w": 22, "h": 23 } }, - { - "filename": "stick", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 245, - "y": 282, - "w": 23, - "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": 268, - "y": 282, - "w": 24, - "h": 23 - } - }, { "filename": "water_tera_shard", "rotated": false, @@ -6219,14 +3804,14 @@ "h": 23 }, "frame": { - "x": 292, - "y": 283, + "x": 228, + "y": 146, "w": 22, "h": 23 } }, { - "filename": "whipped_dream", + "filename": "electric_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -6235,14 +3820,35 @@ }, "spriteSourceSize": { "x": 5, - "y": 4, - "w": 21, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 148, + "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": 314, - "y": 283, - "w": 21, + "x": 189, + "y": 171, + "w": 17, "h": 23 } }, @@ -6261,56 +3867,14 @@ "h": 23 }, "frame": { - "x": 335, - "y": 284, + "x": 206, + "y": 169, "w": 22, "h": 23 } }, { - "filename": "big_root", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 357, - "y": 286, - "w": 23, - "h": 24 - } - }, - { - "filename": "blank_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 380, - "y": 287, - "w": 24, - "h": 24 - } - }, - { - "filename": "catching_charm", + "filename": "enigma_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -6319,670 +3883,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 0, - "y": 298, - "w": 21, - "h": 24 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 21, - "y": 299, - "w": 18, - "h": 24 - } - }, - { - "filename": "choice_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 39, - "y": 300, - "w": 24, - "h": 24 - } - }, - { - "filename": "draco_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 63, - "y": 301, - "w": 24, - "h": 24 - } - }, - { - "filename": "dread_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 87, - "y": 301, - "w": 24, - "h": 24 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 111, - "y": 302, - "w": 18, - "h": 24 - } - }, - { - "filename": "earth_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 129, - "y": 303, - "w": 24, - "h": 24 - } - }, - { - "filename": "fist_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 153, - "y": 303, - "w": 24, - "h": 24 - } - }, - { - "filename": "flame_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 177, - "y": 304, - "w": 24, - "h": 24 - } - }, - { - "filename": "focus_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 201, - "y": 304, - "w": 24, - "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": 225, - "y": 304, - "w": 18, - "h": 24 - } - }, - { - "filename": "golden_punch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 243, - "y": 305, - "w": 24, - "h": 24 - } - }, - { - "filename": "gracidea", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 267, - "y": 305, - "w": 24, - "h": 24 - } - }, - { - "filename": "grip_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 291, - "y": 306, - "w": 24, - "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": 315, - "y": 306, - "w": 16, - "h": 24 - } - }, - { - "filename": "icicle_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 331, - "y": 307, - "w": 24, - "h": 24 - } - }, - { - "filename": "insect_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 355, - "y": 310, - "w": 24, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 379, - "y": 311, - "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": 395, - "y": 311, - "w": 17, - "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": 0, - "y": 322, - "w": 18, - "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": 18, - "y": 323, - "w": 18, - "h": 24 - } - }, - { - "filename": "iron_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 36, - "y": 324, - "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": 60, - "y": 325, - "w": 23, - "h": 24 - } - }, - { - "filename": "lucky_punch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 83, - "y": 325, - "w": 24, - "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": 107, - "y": 326, - "w": 17, - "h": 24 - } - }, - { - "filename": "lucky_punch_great", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 124, - "y": 327, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_master", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 148, - "y": 327, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_ultra", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 172, - "y": 328, - "w": 24, - "h": 24 - } - }, - { - "filename": "lustrous_globe", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 196, - "y": 328, - "w": 24, - "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": 220, - "y": 328, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 238, - "y": 329, - "w": 16, - "h": 24 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, + "y": 5, "w": 22, - "h": 24 + "h": 22 }, "frame": { - "x": 254, - "y": 329, + "x": 228, + "y": 169, "w": 22, - "h": 24 + "h": 22 } }, { - "filename": "meadow_plate", + "filename": "fairy_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -6990,20 +3903,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 276, - "y": 330, - "w": 24, - "h": 24 + "x": 250, + "y": 170, + "w": 22, + "h": 22 } }, { - "filename": "mind_plate", + "filename": "fighting_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -7011,20 +3924,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 300, - "y": 330, - "w": 24, - "h": 24 + "x": 272, + "y": 153, + "w": 22, + "h": 22 } }, { - "filename": "muscle_band", + "filename": "fire_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -7032,20 +3945,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 324, - "y": 331, - "w": 24, - "h": 24 + "x": 294, + "y": 154, + "w": 22, + "h": 22 } }, { - "filename": "oval_charm", + "filename": "dubious_disc", "rotated": false, "trimmed": true, "sourceSize": { @@ -7053,20 +3966,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 + "x": 5, + "y": 7, + "w": 22, + "h": 19 }, "frame": { - "x": 348, - "y": 334, - "w": 21, - "h": 24 + "x": 272, + "y": 175, + "w": 22, + "h": 19 } }, { - "filename": "pixie_plate", + "filename": "fairy_feather", "rotated": false, "trimmed": true, "sourceSize": { @@ -7074,20 +3987,125 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 5, + "y": 7, + "w": 22, + "h": 20 }, "frame": { - "x": 369, - "y": 335, - "w": 24, - "h": 24 + "x": 294, + "y": 176, + "w": 22, + "h": 20 } }, { - "filename": "pp_max", + "filename": "flying_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 316, + "y": 155, + "w": 22, + "h": 22 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 316, + "y": 177, + "w": 22, + "h": 22 + } + }, + { + "filename": "ghost_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 338, + "y": 157, + "w": 22, + "h": 22 + } + }, + { + "filename": "grass_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 338, + "y": 179, + "w": 22, + "h": 22 + } + }, + { + "filename": "ground_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 189, + "y": 194, + "w": 22, + "h": 22 + } + }, + { + "filename": "potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -7096,19 +4114,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 4, - "w": 16, - "h": 24 + "y": 5, + "w": 17, + "h": 23 }, "frame": { - "x": 393, - "y": 335, - "w": 16, - "h": 24 + "x": 211, + "y": 192, + "w": 17, + "h": 23 } }, { - "filename": "pp_up", + "filename": "guard_spec", "rotated": false, "trimmed": true, "sourceSize": { @@ -7116,20 +4134,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 0, - "y": 346, - "w": 16, - "h": 24 + "x": 228, + "y": 191, + "w": 22, + "h": 22 } }, { - "filename": "protein", + "filename": "ice_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -7137,20 +4155,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 16, - "y": 347, - "w": 16, - "h": 24 + "x": 250, + "y": 192, + "w": 22, + "h": 22 } }, { - "filename": "red_orb", + "filename": "ice_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -7158,16 +4176,142 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 32, - "y": 348, - "w": 20, - "h": 24 + "x": 272, + "y": 194, + "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": 294, + "y": 196, + "w": 22, + "h": 21 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 316, + "y": 199, + "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": 338, + "y": 201, + "w": 22, + "h": 20 + } + }, + { + "filename": "mini_black_hole", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 146, + "y": 216, + "w": 22, + "h": 22 + } + }, + { + "filename": "poison_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 168, + "y": 216, + "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": 190, + "y": 216, + "w": 22, + "h": 22 } }, { @@ -7185,14 +4329,14 @@ "h": 24 }, "frame": { - "x": 52, - "y": 349, + "x": 212, + "y": 215, "w": 16, "h": 24 } }, { - "filename": "reveal_glass", + "filename": "psychic_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -7200,16 +4344,1297 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 68, - "y": 349, - "w": 23, - "h": 24 + "x": 228, + "y": 213, + "w": 22, + "h": 22 + } + }, + { + "filename": "rock_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 214, + "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": 272, + "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": 294, + "y": 217, + "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": 316, + "y": 221, + "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": 338, + "y": 221, + "w": 22, + "h": 22 + } + }, + { + "filename": "sharp_beak", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 148, + "y": 238, + "w": 21, + "h": 23 + } + }, + { + "filename": "steel_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 169, + "y": 238, + "w": 22, + "h": 22 + } + }, + { + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 191, + "y": 238, + "w": 21, + "h": 23 + } + }, + { + "filename": "hard_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 212, + "y": 239, + "w": 20, + "h": 22 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 232, + "y": 235, + "w": 17, + "h": 23 + } + }, + { + "filename": "thick_club", + "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": "sweet_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 271, + "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": 293, + "y": 239, + "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": 315, + "y": 243, + "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": 337, + "y": 243, + "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": 148, + "y": 261, + "w": 21, + "h": 18 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 169, + "y": 260, + "w": 22, + "h": 20 + } + }, + { + "filename": "tm_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 191, + "y": 261, + "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": 213, + "y": 261, + "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": 232, + "y": 258, + "w": 22, + "h": 22 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 254, + "y": 258, + "w": 17, + "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": 271, + "y": 259, + "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": 293, + "y": 260, + "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": 315, + "y": 264, + "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": 337, + "y": 265, + "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": 366, + "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": 388, + "y": 134, + "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": 128, + "y": 272, + "w": 20, + "h": 20 + } + }, + { + "filename": "metal_alloy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 148, + "y": 279, + "w": 21, + "h": 19 + } + }, + { + "filename": "tm_ghost", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 169, + "y": 280, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 191, + "y": 283, + "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": 213, + "y": 283, + "w": 19, + "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": 232, + "y": 280, + "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": 254, + "y": 280, + "w": 17, + "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": 271, + "y": 281, + "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": 293, + "y": 282, + "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": 315, + "y": 286, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 337, + "y": 287, + "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": 72, + "y": 270, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 72, + "y": 292, + "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": 72, + "y": 314, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 72, + "y": 336, + "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": 72, + "y": 358, + "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": 72, + "y": 380, + "w": 22, + "h": 22 + } + }, + { + "filename": "leftovers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 15, + "h": 22 + }, + "frame": { + "x": 94, + "y": 270, + "w": 15, + "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": 109, + "y": 273, + "w": 19, + "h": 19 + } + }, + { + "filename": "x_attack", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 94, + "y": 292, + "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": 116, + "y": 292, + "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": 94, + "y": 314, + "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": 94, + "y": 336, + "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": 116, + "y": 314, + "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": 94, + "y": 358, + "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": 116, + "y": 336, + "w": 21, + "h": 21 + } + }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 94, + "y": 379, + "w": 20, + "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": 138, + "y": 298, + "w": 21, + "h": 21 + } + }, + { + "filename": "sharp_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 138, + "y": 319, + "w": 21, + "h": 18 + } + }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 137, + "y": 337, + "w": 22, + "h": 19 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 159, + "y": 302, + "w": 20, + "h": 21 + } + }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 159, + "y": 323, + "w": 20, + "h": 20 + } + }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 159, + "y": 343, + "w": 20, + "h": 17 + } + }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 179, + "y": 302, + "w": 12, + "h": 17 } }, { @@ -7227,14 +5652,14 @@ "h": 24 }, "frame": { - "x": 91, - "y": 349, + "x": 179, + "y": 319, "w": 16, "h": 24 } }, { - "filename": "super_lure", + "filename": "candy", "rotated": false, "trimmed": true, "sourceSize": { @@ -7242,100 +5667,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 + "x": 7, + "y": 11, + "w": 18, + "h": 18 }, "frame": { - "x": 107, - "y": 350, - "w": 17, - "h": 24 - } - }, - { - "filename": "salac_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 124, - "y": 351, - "w": 24, - "h": 24 - } - }, - { - "filename": "scanner", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 148, - "y": 351, - "w": 24, - "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": 172, - "y": 352, - "w": 21, - "h": 24 - } - }, - { - "filename": "silk_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 193, - "y": 352, - "w": 24, - "h": 24 + "x": 179, + "y": 343, + "w": 18, + "h": 18 } }, { @@ -7353,33 +5694,12 @@ "h": 24 }, "frame": { - "x": 217, - "y": 352, + "x": 360, + "y": 157, "w": 16, "h": 24 } }, - { - "filename": "sky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 233, - "y": 353, - "w": 24, - "h": 24 - } - }, { "filename": "zinc", "rotated": false, @@ -7395,14 +5715,14 @@ "h": 24 }, "frame": { - "x": 257, - "y": 353, + "x": 360, + "y": 181, "w": 16, "h": 24 } }, { - "filename": "splash_plate", + "filename": "quick_claw", "rotated": false, "trimmed": true, "sourceSize": { @@ -7410,20 +5730,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 6, + "y": 6, + "w": 19, + "h": 21 }, "frame": { - "x": 273, - "y": 354, - "w": 24, - "h": 24 + "x": 360, + "y": 205, + "w": 19, + "h": 21 } }, { - "filename": "spooky_plate", + "filename": "candy_jar", "rotated": false, "trimmed": true, "sourceSize": { @@ -7431,20 +5751,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 6, + "y": 6, + "w": 19, + "h": 20 }, "frame": { - "x": 297, - "y": 354, - "w": 24, - "h": 24 + "x": 360, + "y": 226, + "w": 19, + "h": 20 } }, { - "filename": "stone_plate", + "filename": "gb", "rotated": false, "trimmed": true, "sourceSize": { @@ -7452,20 +5772,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 6, + "y": 6, + "w": 20, + "h": 20 }, "frame": { - "x": 321, - "y": 355, - "w": 24, - "h": 24 + "x": 359, + "y": 246, + "w": 20, + "h": 20 } }, { - "filename": "sun_stone", + "filename": "magnet", "rotated": false, "trimmed": true, "sourceSize": { @@ -7473,20 +5793,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 6, + "y": 6, + "w": 20, + "h": 20 }, "frame": { - "x": 345, - "y": 358, - "w": 24, - "h": 24 + "x": 359, + "y": 266, + "w": 20, + "h": 20 } }, { - "filename": "toxic_plate", + "filename": "mb", "rotated": false, "trimmed": true, "sourceSize": { @@ -7494,20 +5814,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 6, + "y": 6, + "w": 20, + "h": 20 }, "frame": { - "x": 369, - "y": 359, - "w": 24, - "h": 24 + "x": 359, + "y": 286, + "w": 20, + "h": 20 } }, { - "filename": "prison_bottle", + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 376, + "y": 156, + "w": 20, + "h": 20 + } + }, + { + "filename": "spell_tag", "rotated": false, "trimmed": true, "sourceSize": { @@ -7516,19 +5857,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 1, - "w": 17, - "h": 30 + "y": 6, + "w": 19, + "h": 21 }, "frame": { - "x": 393, - "y": 359, - "w": 17, - "h": 30 + "x": 396, + "y": 156, + "w": 19, + "h": 21 } }, { - "filename": "zap_plate", + "filename": "pb_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -7536,20 +5877,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 6, + "y": 6, + "w": 20, + "h": 20 }, "frame": { - "x": 0, - "y": 371, - "w": 24, - "h": 24 + "x": 376, + "y": 176, + "w": 20, + "h": 20 } }, { - "filename": "black_augurite", + "filename": "hard_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -7557,167 +5898,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 22, - "h": 25 + "x": 6, + "y": 6, + "w": 19, + "h": 20 }, "frame": { - "x": 24, - "y": 372, - "w": 22, - "h": 25 + "x": 396, + "y": 177, + "w": 19, + "h": 20 } }, { - "filename": "ability_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 23, - "h": 26 - }, - "frame": { - "x": 46, - "y": 373, - "w": 23, - "h": 26 - } - }, - { - "filename": "cornerstone_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 24, - "h": 26 - }, - "frame": { - "x": 69, - "y": 373, - "w": 24, - "h": 26 - } - }, - { - "filename": "linking_cord", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 27, - "h": 26 - }, - "frame": { - "x": 93, - "y": 374, - "w": 27, - "h": 26 - } - }, - { - "filename": "galarica_wreath", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 32, - "h": 27 - }, - "frame": { - "x": 120, - "y": 375, - "w": 32, - "h": 27 - } - }, - { - "filename": "max_mushrooms", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 29, - "h": 28 - }, - "frame": { - "x": 152, - "y": 376, - "w": 29, - "h": 28 - } - }, - { - "filename": "galarica_cuff", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 29, - "h": 30 - }, - "frame": { - "x": 181, - "y": 376, - "w": 29, - "h": 30 - } - }, - { - "filename": "bronze_ribbon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 - }, - "frame": { - "x": 210, - "y": 376, - "w": 22, - "h": 31 - } - }, - { - "filename": "exp_charm", + "filename": "golden_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -7726,19 +5920,523 @@ }, "spriteSourceSize": { "x": 7, - "y": 1, + "y": 6, "w": 17, - "h": 31 + "h": 20 + }, + "frame": { + "x": 379, + "y": 196, + "w": 17, + "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": 396, + "y": 197, + "w": 19, + "h": 19 + } + }, + { + "filename": "rb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 379, + "y": 216, + "w": 20, + "h": 20 + } + }, + { + "filename": "abomasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 399, + "y": 216, + "w": 16, + "h": 16 + } + }, + { + "filename": "smooth_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 379, + "y": 236, + "w": 20, + "h": 20 + } + }, + { + "filename": "absolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 399, + "y": 232, + "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": 399, + "y": 248, + "w": 16, + "h": 16 + } + }, + { + "filename": "strange_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 379, + "y": 256, + "w": 20, + "h": 20 + } + }, + { + "filename": "aggronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 399, + "y": 264, + "w": 16, + "h": 16 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 379, + "y": 276, + "w": 20, + "h": 20 + } + }, + { + "filename": "alakazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 399, + "y": 280, + "w": 16, + "h": 16 + } + }, + { + "filename": "unremarkable_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 379, + "y": 296, + "w": 21, + "h": 18 + } + }, + { + "filename": "eviolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 400, + "y": 296, + "w": 15, + "h": 15 + } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 400, + "y": 311, + "w": 15, + "h": 15 + } + }, + { + "filename": "lum_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 359, + "y": 306, + "w": 20, + "h": 19 + } + }, + { + "filename": "mega_bracelet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 16 + }, + "frame": { + "x": 379, + "y": 314, + "w": 20, + "h": 16 + } + }, + { + "filename": "altarianite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 399, + "y": 326, + "w": 16, + "h": 16 + } + }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 195, + "y": 305, + "w": 20, + "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": 195, + "y": 324, + "w": 18, + "h": 19 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 215, + "y": 305, + "w": 17, + "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": 232, - "y": 377, - "w": 17, - "h": 31 + "y": 302, + "w": 18, + "h": 20 } }, { - "filename": "golden_exp_charm", + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 250, + "y": 302, + "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": 270, + "y": 303, + "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": 213, + "y": 325, + "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": 197, + "y": 343, + "w": 20, + "h": 18 + } + }, + { + "filename": "dark_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -7747,19 +6445,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 1, - "w": 17, - "h": 31 + "y": 7, + "w": 18, + "h": 18 }, "frame": { - "x": 249, - "y": 377, - "w": 17, - "h": 31 + "x": 217, + "y": 343, + "w": 18, + "h": 18 } }, { - "filename": "great_ribbon", + "filename": "wl_custom_spliced", "rotated": false, "trimmed": true, "sourceSize": { @@ -7767,20 +6465,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 + "x": 6, + "y": 8, + "w": 20, + "h": 18 }, "frame": { - "x": 266, - "y": 378, - "w": 22, - "h": 31 + "x": 290, + "y": 304, + "w": 20, + "h": 18 } }, { - "filename": "master_ribbon", + "filename": "flame_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -7788,20 +6486,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 + "x": 7, + "y": 7, + "w": 18, + "h": 18 }, "frame": { - "x": 288, - "y": 378, - "w": 22, - "h": 31 + "x": 233, + "y": 322, + "w": 18, + "h": 18 } }, { - "filename": "rogue_ribbon", + "filename": "light_ball", "rotated": false, "trimmed": true, "sourceSize": { @@ -7809,20 +6507,377 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 251, + "y": 320, + "w": 18, + "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": 269, + "y": 321, + "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": 289, + "y": 322, + "w": 20, + "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": 235, + "y": 340, + "w": 18, + "h": 18 + } + }, + { + "filename": "ampharosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 253, + "y": 338, + "w": 16, + "h": 16 + } + }, + { + "filename": "wl_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 269, + "y": 339, + "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": 289, + "y": 340, + "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": 310, - "y": 379, - "w": 22, - "h": 31 + "y": 308, + "w": 20, + "h": 18 } }, { - "filename": "super_exp_charm", + "filename": "wl_guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 309, + "y": 326, + "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": 309, + "y": 344, + "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": 330, + "y": 309, + "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": 329, + "y": 327, + "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": 329, + "y": 345, + "w": 20, + "h": 18 + } + }, + { + "filename": "audinite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 253, + "y": 354, + "w": 16, + "h": 16 + } + }, + { + "filename": "wl_max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 269, + "y": 357, + "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": 289, + "y": 358, + "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": 309, + "y": 362, + "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": 329, + "y": 363, + "w": 20, + "h": 18 + } + }, + { + "filename": "toxic_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -7831,19 +6886,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 1, - "w": 17, - "h": 31 + "y": 7, + "w": 18, + "h": 18 }, "frame": { - "x": 332, - "y": 382, - "w": 17, - "h": 31 + "x": 235, + "y": 358, + "w": 18, + "h": 18 } }, { - "filename": "ultra_ribbon", + "filename": "banettite", "rotated": false, "trimmed": true, "sourceSize": { @@ -7851,16 +6906,1045 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 253, + "y": 370, + "w": 16, + "h": 16 + } + }, + { + "filename": "wl_paralyze_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 269, + "y": 375, + "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": 289, + "y": 376, + "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": 309, + "y": 380, + "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": 329, + "y": 381, + "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": 116, + "y": 357, + "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": 115, + "y": 375, + "w": 17, + "h": 16 + } + }, + { + "filename": "beedrillite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 114, + "y": 391, + "w": 16, + "h": 16 + } + }, + { + "filename": "blastoisinite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 130, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "blazikenite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 146, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "cameruptite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 162, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "charizardite_x", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 178, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "charizardite_y", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 194, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "diancite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 210, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "galladite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 226, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "garchompite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 242, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "gardevoirite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 258, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "gengarite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 274, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "glalitite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 290, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "gyaradosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 306, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "heracronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 322, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "houndoominite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 338, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "kangaskhanite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 132, + "y": 375, + "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": 136, + "y": 360, + "w": 16, + "h": 15 + } + }, + { + "filename": "latiasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 152, + "y": 360, + "w": 16, + "h": 16 + } + }, + { + "filename": "latiosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 148, + "y": 376, + "w": 16, + "h": 16 + } + }, + { + "filename": "lopunnite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 168, + "y": 361, + "w": 16, + "h": 16 + } + }, + { + "filename": "lucarionite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 184, + "y": 361, + "w": 16, + "h": 16 + } + }, + { + "filename": "manectite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 200, + "y": 361, + "w": 16, + "h": 16 + } + }, + { + "filename": "mawilite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 216, + "y": 361, + "w": 16, + "h": 16 + } + }, + { + "filename": "medichamite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 164, + "y": 377, + "w": 16, + "h": 16 + } + }, + { + "filename": "metagrossite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 180, + "y": 377, + "w": 16, + "h": 16 + } + }, + { + "filename": "mewtwonite_x", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 196, + "y": 377, + "w": 16, + "h": 16 + } + }, + { + "filename": "mewtwonite_y", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 212, + "y": 377, + "w": 16, + "h": 16 + } + }, + { + "filename": "nugget", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 228, + "y": 377, + "w": 16, + "h": 16 + } + }, + { + "filename": "pidgeotite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 }, "frame": { "x": 349, - "y": 383, - "w": 22, - "h": 31 + "y": 327, + "w": 16, + "h": 16 + } + }, + { + "filename": "pinsirite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 349, + "y": 343, + "w": 16, + "h": 16 + } + }, + { + "filename": "rayquazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 349, + "y": 359, + "w": 16, + "h": 16 + } + }, + { + "filename": "sablenite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 349, + "y": 375, + "w": 16, + "h": 16 + } + }, + { + "filename": "salamencite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 354, + "y": 391, + "w": 16, + "h": 16 + } + }, + { + "filename": "sceptilite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 365, + "y": 330, + "w": 16, + "h": 16 + } + }, + { + "filename": "scizorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 381, + "y": 330, + "w": 16, + "h": 16 + } + }, + { + "filename": "sharpedonite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 365, + "y": 346, + "w": 16, + "h": 16 + } + }, + { + "filename": "slowbronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 365, + "y": 362, + "w": 16, + "h": 16 + } + }, + { + "filename": "soul_dew", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 381, + "y": 346, + "w": 16, + "h": 16 + } + }, + { + "filename": "steelixite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 381, + "y": 362, + "w": 16, + "h": 16 + } + }, + { + "filename": "strawberry_sweet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 16, + "h": 16 + }, + "frame": { + "x": 397, + "y": 342, + "w": 16, + "h": 16 + } + }, + { + "filename": "swampertite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 397, + "y": 358, + "w": 16, + "h": 16 + } + }, + { + "filename": "tyranitarite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 397, + "y": 374, + "w": 16, + "h": 16 + } + }, + { + "filename": "venusaurite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 370, + "y": 378, + "w": 16, + "h": 16 } } ] @@ -7869,6 +7953,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:077d4cf8bc7743c80fe2829518c5c3cc:a57a58205d62e190c1abfe922add9b68:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:60db8f4653a650759cd9189e91c38a40:439307cbef9c000f6c45603b2d82d107:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 8b2b0debd3d..6d9434d0454 100644 Binary files a/public/images/items.png and b/public/images/items.png differ diff --git a/public/images/items/light_ball.png b/public/images/items/light_ball.png new file mode 100644 index 00000000000..cd421446608 Binary files /dev/null and b/public/images/items/light_ball.png differ diff --git a/public/images/items/metal_powder.png b/public/images/items/metal_powder.png new file mode 100644 index 00000000000..11c3a39314c Binary files /dev/null and b/public/images/items/metal_powder.png differ diff --git a/public/images/items/quick_powder.png b/public/images/items/quick_powder.png new file mode 100644 index 00000000000..c73ec09eb05 Binary files /dev/null and b/public/images/items/quick_powder.png differ diff --git a/public/images/items/thick_club.png b/public/images/items/thick_club.png new file mode 100644 index 00000000000..a4459aa7701 Binary files /dev/null and b/public/images/items/thick_club.png differ diff --git a/public/images/pokemon_icons_6v.json b/public/images/pokemon_icons_6v.json index ce9ab89be5b..d6c7c38304c 100644 --- a/public/images/pokemon_icons_6v.json +++ b/public/images/pokemon_icons_6v.json @@ -219,48 +219,6 @@ "h": 23 } }, - { - "filename": "354-mega_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 176, - "w": 26, - "h": 30 - } - }, - { - "filename": "354-mega_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 206, - "w": 26, - "h": 30 - } - }, { "filename": "666-archipelago_2", "rotated": false, @@ -1479,27 +1437,6 @@ "h": 24 } }, - { - "filename": "779_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 20 - }, - "frame": { - "x": 107, - "y": 155, - "w": 21, - "h": 20 - } - }, { "filename": "673_2", "rotated": false, @@ -1521,27 +1458,6 @@ "h": 22 } }, - { - "filename": "779_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 20 - }, - "frame": { - "x": 107, - "y": 175, - "w": 21, - "h": 20 - } - }, { "filename": "666-tundra_3", "rotated": false, @@ -1794,48 +1710,6 @@ "h": 22 } }, - { - "filename": "743_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 78, - "y": 358, - "w": 20, - "h": 22 - } - }, - { - "filename": "743_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 78, - "y": 380, - "w": 20, - "h": 22 - } - }, { "filename": "690_3", "rotated": false, @@ -1857,48 +1731,6 @@ "h": 21 } }, - { - "filename": "742_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 19, - "h": 20 - }, - "frame": { - "x": 78, - "y": 423, - "w": 19, - "h": 20 - } - }, - { - "filename": "742_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 19, - "h": 20 - }, - "frame": { - "x": 78, - "y": 443, - "w": 19, - "h": 20 - } - }, { "filename": "720_1", "rotated": false, @@ -2214,48 +2046,6 @@ "h": 17 } }, - { - "filename": "777_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 17, - "h": 19 - }, - "frame": { - "x": 111, - "y": 396, - "w": 17, - "h": 19 - } - }, - { - "filename": "777_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 17, - "h": 19 - }, - "frame": { - "x": 111, - "y": 415, - "w": 17, - "h": 19 - } - }, { "filename": "712_2", "rotated": false, diff --git a/public/images/pokemon_icons_6v.png b/public/images/pokemon_icons_6v.png index 481d23953bf..8b0ecd85af5 100644 Binary files a/public/images/pokemon_icons_6v.png and b/public/images/pokemon_icons_6v.png differ diff --git a/public/images/pokemon_icons_7v.json b/public/images/pokemon_icons_7v.json index 431a8b6dc39..ceb7a0b991f 100644 --- a/public/images/pokemon_icons_7v.json +++ b/public/images/pokemon_icons_7v.json @@ -1,2477 +1,2687 @@ -{ - "textures": [ - { - "image": "pokemon_icons_7v.png", - "format": "RGBA8888", - "size": { - "w": 126, - "h": 614 - }, - "scale": 1, - "frames": [ - { - "filename": "809_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 28 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 28 - } - }, - { - "filename": "809_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 28 - }, - "frame": { - "x": 0, - "y": 28, - "w": 40, - "h": 28 - } - }, - { - "filename": "800-dusk-mane_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 34, - "h": 30 - }, - "frame": { - "x": 40, - "y": 0, - "w": 34, - "h": 30 - } - }, - { - "filename": "800-dusk-mane_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 34, - "h": 30 - }, - "frame": { - "x": 0, - "y": 56, - "w": 34, - "h": 30 - } - }, - { - "filename": "800-ultra_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 35, - "h": 28 - }, - "frame": { - "x": 74, - "y": 0, - "w": 35, - "h": 28 - } - }, - { - "filename": "797_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 32, - "h": 30 - }, - "frame": { - "x": 0, - "y": 86, - "w": 32, - "h": 30 - } - }, - { - "filename": "797_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 32, - "h": 30 - }, - "frame": { - "x": 0, - "y": 116, - "w": 32, - "h": 30 - } - }, - { - "filename": "778_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 109, - "y": 0, - "w": 17, - "h": 22 - } - }, - { - "filename": "800-dawn-wings_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 31, - "h": 30 - }, - "frame": { - "x": 0, - "y": 146, - "w": 31, - "h": 30 - } - }, - { - "filename": "800-dawn-wings_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 31, - "h": 30 - }, - "frame": { - "x": 0, - "y": 176, - "w": 31, - "h": 30 - } - }, - { - "filename": "798_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 31, - "h": 29 - }, - "frame": { - "x": 0, - "y": 206, - "w": 31, - "h": 29 - } - }, - { - "filename": "798_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 31, - "h": 29 - }, - "frame": { - "x": 0, - "y": 235, - "w": 31, - "h": 29 - } - }, - { - "filename": "800-ultra_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 35, - "h": 28 - }, - "frame": { - "x": 40, - "y": 30, - "w": 35, - "h": 28 - } - }, - { - "filename": "800_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 28, - "h": 30 - }, - "frame": { - "x": 0, - "y": 264, - "w": 28, - "h": 30 - } - }, - { - "filename": "800_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 28, - "h": 30 - }, - "frame": { - "x": 0, - "y": 294, - "w": 28, - "h": 30 - } - }, - { - "filename": "773-bug_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 324, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-bug_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 354, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-dark_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 384, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-dark_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 414, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-dragon_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 444, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-dragon_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 474, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-electric_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 504, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-electric_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 534, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-fairy_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 0, - "y": 564, - "w": 26, - "h": 30 - } - }, - { - "filename": "789_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 0, - "y": 594, - "w": 23, - "h": 20 - } - }, - { - "filename": "809-gigantamax_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 30, - "h": 28 - }, - "frame": { - "x": 75, - "y": 28, - "w": 30, - "h": 28 - } - }, - { - "filename": "763_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 105, - "y": 28, - "w": 21, - "h": 24 - } - }, - { - "filename": "809-gigantamax_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 30, - "h": 28 - }, - "frame": { - "x": 34, - "y": 58, - "w": 30, - "h": 28 - } - }, - { - "filename": "791_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 29, - "h": 28 - }, - "frame": { - "x": 32, - "y": 86, - "w": 29, - "h": 28 - } - }, - { - "filename": "791_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 29, - "h": 28 - }, - "frame": { - "x": 32, - "y": 114, - "w": 29, - "h": 28 - } - }, - { - "filename": "763_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 105, - "y": 52, - "w": 21, - "h": 24 - } - }, - { - "filename": "789_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 23, - "y": 594, - "w": 23, - "h": 20 - } - }, - { - "filename": "772_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 25, - "h": 28 - }, - "frame": { - "x": 64, - "y": 58, - "w": 25, - "h": 28 - } - }, - { - "filename": "773-fairy_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 61, - "y": 86, - "w": 26, - "h": 30 - } - }, - { - "filename": "730_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 28, - "h": 27 - }, - "frame": { - "x": 61, - "y": 116, - "w": 28, - "h": 27 - } - }, - { - "filename": "761_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 16, - "h": 19 - }, - "frame": { - "x": 89, - "y": 56, - "w": 16, - "h": 19 - } - }, - { - "filename": "773-fighting_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 87, - "y": 86, - "w": 26, - "h": 30 - } - }, - { - "filename": "730_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 28, - "h": 27 - }, - "frame": { - "x": 89, - "y": 116, - "w": 28, - "h": 27 - } - }, - { - "filename": "755_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 14, - "y": 4, - "w": 13, - "h": 24 - }, - "frame": { - "x": 113, - "y": 76, - "w": 13, - "h": 24 - } - }, - { - "filename": "791_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 29, - "h": 28 - }, - "frame": { - "x": 32, - "y": 142, - "w": 29, - "h": 28 - } - }, - { - "filename": "773-fighting_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 31, - "y": 170, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-fire_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 31, - "y": 200, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-fire_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 31, - "y": 230, - "w": 26, - "h": 30 - } - }, - { - "filename": "792_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 28, - "h": 28 - }, - "frame": { - "x": 61, - "y": 143, - "w": 28, - "h": 28 - } - }, - { - "filename": "792_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 1, - "w": 28, - "h": 28 - }, - "frame": { - "x": 89, - "y": 143, - "w": 28, - "h": 28 - } - }, - { - "filename": "773-flying_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 57, - "y": 171, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-flying_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 57, - "y": 201, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-ghost_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 83, - "y": 171, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-ghost_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 83, - "y": 201, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-grass_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 57, - "y": 231, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-grass_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 83, - "y": 231, - "w": 26, - "h": 30 - } - }, - { - "filename": "778_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 109, - "y": 171, - "w": 17, - "h": 22 - } - }, - { - "filename": "728_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 17, - "h": 20 - }, - "frame": { - "x": 109, - "y": 193, - "w": 17, - "h": 20 - } - }, - { - "filename": "728_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 17, - "h": 20 - }, - "frame": { - "x": 109, - "y": 213, - "w": 17, - "h": 20 - } - }, - { - "filename": "808_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 17, - "h": 17 - }, - "frame": { - "x": 109, - "y": 233, - "w": 17, - "h": 17 - } - }, - { - "filename": "808_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 17, - "h": 17 - }, - "frame": { - "x": 109, - "y": 250, - "w": 17, - "h": 17 - } - }, - { - "filename": "773-ground_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 28, - "y": 264, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-ground_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 28, - "y": 294, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-ice_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 324, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-ice_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 354, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-poison_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 384, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-poison_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 414, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-psychic_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 444, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-psychic_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 474, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-rock_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 504, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-rock_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 534, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-steel_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 26, - "y": 564, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-steel_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 54, - "y": 261, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-water_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 54, - "y": 291, - "w": 26, - "h": 30 - } - }, - { - "filename": "773-water_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 80, - "y": 261, - "w": 26, - "h": 30 - } - }, - { - "filename": "735_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 106, - "y": 267, - "w": 20, - "h": 24 - } - }, - { - "filename": "773_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 80, - "y": 291, - "w": 26, - "h": 30 - } - }, - { - "filename": "735_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 106, - "y": 291, - "w": 20, - "h": 24 - } - }, - { - "filename": "789_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 46, - "y": 594, - "w": 23, - "h": 20 - } - }, - { - "filename": "754_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 22 - }, - "frame": { - "x": 106, - "y": 315, - "w": 20, - "h": 22 - } - }, - { - "filename": "773_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 52, - "y": 324, - "w": 26, - "h": 30 - } - }, - { - "filename": "772_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 25, - "h": 28 - }, - "frame": { - "x": 52, - "y": 354, - "w": 25, - "h": 28 - } - }, - { - "filename": "748_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 26, - "h": 25 - }, - "frame": { - "x": 52, - "y": 382, - "w": 26, - "h": 25 - } - }, - { - "filename": "748_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 26, - "h": 25 - }, - "frame": { - "x": 52, - "y": 407, - "w": 26, - "h": 25 - } - }, - { - "filename": "776_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 23, - "h": 26 - }, - "frame": { - "x": 52, - "y": 432, - "w": 23, - "h": 26 - } - }, - { - "filename": "776_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 23, - "h": 26 - }, - "frame": { - "x": 52, - "y": 458, - "w": 23, - "h": 26 - } - }, - { - "filename": "729_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 23, - "h": 24 - }, - "frame": { - "x": 52, - "y": 484, - "w": 23, - "h": 24 - } - }, - { - "filename": "729_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 23, - "h": 24 - }, - "frame": { - "x": 52, - "y": 508, - "w": 23, - "h": 24 - } - }, - { - "filename": "756_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 24 - }, - "frame": { - "x": 52, - "y": 532, - "w": 22, - "h": 24 - } - }, - { - "filename": "756_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 24 - }, - "frame": { - "x": 52, - "y": 556, - "w": 22, - "h": 24 - } - }, - { - "filename": "767_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 11, - "w": 24, - "h": 14 - }, - "frame": { - "x": 52, - "y": 580, - "w": 24, - "h": 14 - } - }, - { - "filename": "747_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 69, - "y": 594, - "w": 22, - "h": 20 - } - }, - { - "filename": "768_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 78, - "y": 321, - "w": 24, - "h": 23 - } - }, - { - "filename": "768_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 102, - "y": 337, - "w": 24, - "h": 23 - } - }, - { - "filename": "2053_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 24, - "h": 22 - }, - "frame": { - "x": 78, - "y": 344, - "w": 24, - "h": 22 - } - }, - { - "filename": "2053_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 24, - "h": 22 - }, - "frame": { - "x": 102, - "y": 360, - "w": 24, - "h": 22 - } - }, - { - "filename": "734_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 25, - "h": 16 - }, - "frame": { - "x": 77, - "y": 366, - "w": 25, - "h": 16 - } - }, - { - "filename": "802_1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 78, - "y": 382, - "w": 22, - "h": 24 - } - }, - { - "filename": "802_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 78, - "y": 406, - "w": 22, - "h": 24 - } - }, - { - "filename": "802_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 100, - "y": 382, - "w": 22, - "h": 24 - } - }, - { - "filename": "793_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 100, - "y": 406, - "w": 21, - "h": 24 - } - }, - { - "filename": "734_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 25, - "h": 16 - }, - "frame": { - "x": 78, - "y": 430, - "w": 25, - "h": 16 - } - }, - { - "filename": "752_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 23, - "h": 18 - }, - "frame": { - "x": 103, - "y": 430, - "w": 23, - "h": 18 - } - }, - { - "filename": "793_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 75, - "y": 446, - "w": 21, - "h": 24 - } - }, - { - "filename": "754_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 22 - }, - "frame": { - "x": 75, - "y": 470, - "w": 20, - "h": 22 - } - }, - { - "filename": "762_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 75, - "y": 492, - "w": 18, - "h": 23 - } - }, - { - "filename": "747_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 96, - "y": 448, - "w": 22, - "h": 20 - } - }, - { - "filename": "752_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 23, - "h": 18 - }, - "frame": { - "x": 75, - "y": 515, - "w": 23, - "h": 18 - } - }, - { - "filename": "2052_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 7, - "w": 21, - "h": 21 - }, - "frame": { - "x": 74, - "y": 533, - "w": 21, - "h": 21 - } - }, - { - "filename": "2052_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 7, - "w": 21, - "h": 21 - }, - "frame": { - "x": 74, - "y": 554, - "w": 21, - "h": 21 - } - }, - { - "filename": "790_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 76, - "y": 575, - "w": 21, - "h": 19 - } - }, - { - "filename": "751_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 14, - "h": 20 - }, - "frame": { - "x": 91, - "y": 594, - "w": 14, - "h": 20 - } - }, - { - "filename": "790_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 105, - "y": 468, - "w": 21, - "h": 19 - } - }, - { - "filename": "762_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 93, - "y": 492, - "w": 18, - "h": 23 - } - }, - { - "filename": "755_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 14, - "y": 4, - "w": 13, - "h": 24 - }, - "frame": { - "x": 111, - "y": 487, - "w": 13, - "h": 24 - } - }, - { - "filename": "751_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 14, - "h": 20 - }, - "frame": { - "x": 98, - "y": 515, - "w": 14, - "h": 20 - } - }, - { - "filename": "753_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 14, - "y": 8, - "w": 14, - "h": 19 - }, - "frame": { - "x": 112, - "y": 511, - "w": 14, - "h": 19 - } - }, - { - "filename": "753_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 14, - "y": 8, - "w": 14, - "h": 19 - }, - "frame": { - "x": 112, - "y": 530, - "w": 14, - "h": 19 - } - }, - { - "filename": "761_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 16, - "h": 19 - }, - "frame": { - "x": 95, - "y": 535, - "w": 16, - "h": 19 - } - }, - { - "filename": "767_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 11, - "w": 24, - "h": 14 - }, - "frame": { - "x": 95, - "y": 554, - "w": 24, - "h": 14 - } - }, - { - "filename": "771_2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 11, - "w": 18, - "h": 13 - }, - "frame": { - "x": 97, - "y": 568, - "w": 18, - "h": 13 - } - }, - { - "filename": "771_3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 11, - "w": 18, - "h": 13 - }, - "frame": { - "x": 97, - "y": 581, - "w": 18, - "h": 13 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4de745903870d93aebe9c754281ab9a1:4247d298b98d033d5b01c30d46133c87:d5975df27e1e94206a68aa1fd3c2c8d0$" - } -} +{ + "textures": [ + { + "image": "pokemon_icons_7v.png", + "format": "RGBA8888", + "size": { + "w": 126, + "h": 614 + }, + "scale": 1, + "frames": [ + { + "filename": "809_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 40, + "h": 28 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 28 + } + }, + { + "filename": "809_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 40, + "h": 28 + }, + "frame": { + "x": 0, + "y": 28, + "w": 40, + "h": 28 + } + }, + { + "filename": "800-dusk-mane_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 34, + "h": 30 + }, + "frame": { + "x": 40, + "y": 0, + "w": 34, + "h": 30 + } + }, + { + "filename": "800-dusk-mane_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 34, + "h": 30 + }, + "frame": { + "x": 0, + "y": 56, + "w": 34, + "h": 30 + } + }, + { + "filename": "800-ultra_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 35, + "h": 28 + }, + "frame": { + "x": 74, + "y": 0, + "w": 35, + "h": 28 + } + }, + { + "filename": "797_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 32, + "h": 30 + }, + "frame": { + "x": 0, + "y": 86, + "w": 32, + "h": 30 + } + }, + { + "filename": "797_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 32, + "h": 30 + }, + "frame": { + "x": 0, + "y": 116, + "w": 32, + "h": 30 + } + }, + { + "filename": "778-disguised_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 113, + "y": 72, + "w": 17, + "h": 22 + } + }, + { + "filename": "800-dawn-wings_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 31, + "h": 30 + }, + "frame": { + "x": 0, + "y": 146, + "w": 31, + "h": 30 + } + }, + { + "filename": "800-dawn-wings_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 31, + "h": 30 + }, + "frame": { + "x": 0, + "y": 176, + "w": 31, + "h": 30 + } + }, + { + "filename": "798_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 1, + "w": 31, + "h": 29 + }, + "frame": { + "x": 0, + "y": 206, + "w": 31, + "h": 29 + } + }, + { + "filename": "798_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 1, + "w": 31, + "h": 29 + }, + "frame": { + "x": 0, + "y": 235, + "w": 31, + "h": 29 + } + }, + { + "filename": "800-ultra_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 35, + "h": 28 + }, + "frame": { + "x": 40, + "y": 30, + "w": 35, + "h": 28 + } + }, + { + "filename": "800_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 28, + "h": 30 + }, + "frame": { + "x": 0, + "y": 264, + "w": 28, + "h": 30 + } + }, + { + "filename": "800_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 28, + "h": 30 + }, + "frame": { + "x": 0, + "y": 294, + "w": 28, + "h": 30 + } + }, + { + "filename": "773-bug_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 324, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-bug_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 354, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-dark_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 384, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-dark_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 414, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-dragon_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 444, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-dragon_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 474, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-electric_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 504, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-electric_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 534, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-fairy_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 0, + "y": 564, + "w": 26, + "h": 30 + } + }, + { + "filename": "789_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 0, + "y": 594, + "w": 23, + "h": 20 + } + }, + { + "filename": "809-gigantamax_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 30, + "h": 28 + }, + "frame": { + "x": 75, + "y": 28, + "w": 30, + "h": 28 + } + }, + { + "filename": "763_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 109, + "y": 0, + "w": 21, + "h": 24 + } + }, + { + "filename": "809-gigantamax_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 30, + "h": 28 + }, + "frame": { + "x": 34, + "y": 58, + "w": 30, + "h": 28 + } + }, + { + "filename": "791_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 29, + "h": 28 + }, + "frame": { + "x": 32, + "y": 86, + "w": 29, + "h": 28 + } + }, + { + "filename": "791_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 29, + "h": 28 + }, + "frame": { + "x": 32, + "y": 114, + "w": 29, + "h": 28 + } + }, + { + "filename": "763_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 109, + "y": 24, + "w": 21, + "h": 24 + } + }, + { + "filename": "789_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 23, + "y": 594, + "w": 23, + "h": 20 + } + }, + { + "filename": "772_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 25, + "h": 28 + }, + "frame": { + "x": 64, + "y": 58, + "w": 25, + "h": 28 + } + }, + { + "filename": "773-fairy_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 61, + "y": 86, + "w": 26, + "h": 30 + } + }, + { + "filename": "730_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 28, + "h": 27 + }, + "frame": { + "x": 61, + "y": 116, + "w": 28, + "h": 27 + } + }, + { + "filename": "761_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 16, + "h": 19 + }, + "frame": { + "x": 98, + "y": 516, + "w": 16, + "h": 19 + } + }, + { + "filename": "773-fighting_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 87, + "y": 86, + "w": 26, + "h": 30 + } + }, + { + "filename": "730_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 28, + "h": 27 + }, + "frame": { + "x": 89, + "y": 116, + "w": 28, + "h": 27 + } + }, + { + "filename": "755_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 4, + "w": 13, + "h": 24 + }, + "frame": { + "x": 117, + "y": 117, + "w": 13, + "h": 24 + } + }, + { + "filename": "791_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 29, + "h": 28 + }, + "frame": { + "x": 32, + "y": 142, + "w": 29, + "h": 28 + } + }, + { + "filename": "773-fighting_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 31, + "y": 170, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-fire_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 31, + "y": 200, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-fire_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 31, + "y": 230, + "w": 26, + "h": 30 + } + }, + { + "filename": "792_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 1, + "w": 28, + "h": 28 + }, + "frame": { + "x": 61, + "y": 143, + "w": 28, + "h": 28 + } + }, + { + "filename": "792_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 1, + "w": 28, + "h": 28 + }, + "frame": { + "x": 89, + "y": 143, + "w": 28, + "h": 28 + } + }, + { + "filename": "773-flying_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 57, + "y": 171, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-flying_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 57, + "y": 201, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-ghost_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 83, + "y": 171, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-ghost_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 83, + "y": 201, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-grass_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 57, + "y": 231, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-grass_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 83, + "y": 231, + "w": 26, + "h": 30 + } + }, + { + "filename": "778-disguised_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 96, + "y": 445, + "w": 17, + "h": 22 + } + }, + { + "filename": "728_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 17, + "h": 20 + }, + "frame": { + "x": 113, + "y": 448, + "w": 17, + "h": 20 + } + }, + { + "filename": "728_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 17, + "h": 20 + }, + "frame": { + "x": 113, + "y": 94, + "w": 17, + "h": 20 + } + }, + { + "filename": "808_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 17, + "h": 17 + }, + "frame": { + "x": 114, + "y": 468, + "w": 17, + "h": 17 + } + }, + { + "filename": "808_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 17, + "h": 17 + }, + "frame": { + "x": 113, + "y": 235, + "w": 17, + "h": 17 + } + }, + { + "filename": "773-ground_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 28, + "y": 264, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-ground_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 28, + "y": 294, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-ice_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 324, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-ice_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 354, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-poison_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 384, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-poison_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 414, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-psychic_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 444, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-psychic_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 474, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-rock_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 504, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-rock_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 534, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-steel_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 26, + "y": 564, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-steel_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 54, + "y": 261, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-water_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 54, + "y": 291, + "w": 26, + "h": 30 + } + }, + { + "filename": "773-water_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 80, + "y": 261, + "w": 26, + "h": 30 + } + }, + { + "filename": "735_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 109, + "y": 171, + "w": 20, + "h": 24 + } + }, + { + "filename": "773_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 80, + "y": 291, + "w": 26, + "h": 30 + } + }, + { + "filename": "735_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 109, + "y": 195, + "w": 20, + "h": 24 + } + }, + { + "filename": "789_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 46, + "y": 594, + "w": 23, + "h": 20 + } + }, + { + "filename": "754_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 22 + }, + "frame": { + "x": 106, + "y": 318, + "w": 20, + "h": 22 + } + }, + { + "filename": "773_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 52, + "y": 324, + "w": 26, + "h": 30 + } + }, + { + "filename": "772_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 25, + "h": 28 + }, + "frame": { + "x": 52, + "y": 354, + "w": 25, + "h": 28 + } + }, + { + "filename": "748_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 26, + "h": 25 + }, + "frame": { + "x": 52, + "y": 382, + "w": 26, + "h": 25 + } + }, + { + "filename": "748_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 26, + "h": 25 + }, + "frame": { + "x": 52, + "y": 407, + "w": 26, + "h": 25 + } + }, + { + "filename": "776_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 23, + "h": 26 + }, + "frame": { + "x": 52, + "y": 432, + "w": 23, + "h": 26 + } + }, + { + "filename": "776_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 23, + "h": 26 + }, + "frame": { + "x": 101, + "y": 382, + "w": 23, + "h": 26 + } + }, + { + "filename": "729_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 23, + "h": 24 + }, + "frame": { + "x": 52, + "y": 484, + "w": 23, + "h": 24 + } + }, + { + "filename": "729_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 23, + "h": 24 + }, + "frame": { + "x": 52, + "y": 508, + "w": 23, + "h": 24 + } + }, + { + "filename": "756_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 24 + }, + "frame": { + "x": 52, + "y": 532, + "w": 22, + "h": 24 + } + }, + { + "filename": "756_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 24 + }, + "frame": { + "x": 52, + "y": 556, + "w": 22, + "h": 24 + } + }, + { + "filename": "767_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 11, + "w": 24, + "h": 14 + }, + "frame": { + "x": 52, + "y": 580, + "w": 24, + "h": 14 + } + }, + { + "filename": "747_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 69, + "y": 594, + "w": 22, + "h": 20 + } + }, + { + "filename": "768_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 78, + "y": 321, + "w": 24, + "h": 23 + } + }, + { + "filename": "768_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 106, + "y": 295, + "w": 24, + "h": 23 + } + }, + { + "filename": "2053_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 24, + "h": 22 + }, + "frame": { + "x": 78, + "y": 344, + "w": 24, + "h": 22 + } + }, + { + "filename": "2053_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 24, + "h": 22 + }, + "frame": { + "x": 102, + "y": 360, + "w": 24, + "h": 22 + } + }, + { + "filename": "734_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 10, + "w": 25, + "h": 16 + }, + "frame": { + "x": 77, + "y": 366, + "w": 25, + "h": 16 + } + }, + { + "filename": "802_1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 78, + "y": 382, + "w": 22, + "h": 24 + } + }, + { + "filename": "802_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 78, + "y": 406, + "w": 22, + "h": 24 + } + }, + { + "filename": "802_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 52, + "y": 458, + "w": 22, + "h": 24 + } + }, + { + "filename": "793_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 109, + "y": 48, + "w": 21, + "h": 24 + } + }, + { + "filename": "734_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 10, + "w": 25, + "h": 16 + }, + "frame": { + "x": 78, + "y": 430, + "w": 25, + "h": 16 + } + }, + { + "filename": "752_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 23, + "h": 18 + }, + "frame": { + "x": 104, + "y": 408, + "w": 23, + "h": 18 + } + }, + { + "filename": "793_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 75, + "y": 446, + "w": 21, + "h": 24 + } + }, + { + "filename": "754_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 22 + }, + "frame": { + "x": 74, + "y": 470, + "w": 20, + "h": 22 + } + }, + { + "filename": "762_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 75, + "y": 492, + "w": 18, + "h": 23 + } + }, + { + "filename": "747_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 109, + "y": 426, + "w": 22, + "h": 20 + } + }, + { + "filename": "752_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 23, + "h": 18 + }, + "frame": { + "x": 75, + "y": 515, + "w": 23, + "h": 18 + } + }, + { + "filename": "2052_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 7, + "w": 21, + "h": 21 + }, + "frame": { + "x": 74, + "y": 533, + "w": 21, + "h": 21 + } + }, + { + "filename": "2052_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 7, + "w": 21, + "h": 21 + }, + "frame": { + "x": 74, + "y": 554, + "w": 21, + "h": 21 + } + }, + { + "filename": "790_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 76, + "y": 575, + "w": 21, + "h": 19 + } + }, + { + "filename": "751_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 14, + "h": 20 + }, + "frame": { + "x": 102, + "y": 340, + "w": 14, + "h": 20 + } + }, + { + "filename": "790_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 91, + "y": 594, + "w": 21, + "h": 19 + } + }, + { + "filename": "762_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 93, + "y": 492, + "w": 18, + "h": 23 + } + }, + { + "filename": "755_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 4, + "w": 13, + "h": 24 + }, + "frame": { + "x": 117, + "y": 141, + "w": 13, + "h": 24 + } + }, + { + "filename": "751_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 14, + "h": 20 + }, + "frame": { + "x": 116, + "y": 340, + "w": 14, + "h": 20 + } + }, + { + "filename": "753_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 8, + "w": 14, + "h": 19 + }, + "frame": { + "x": 116, + "y": 537, + "w": 14, + "h": 19 + } + }, + { + "filename": "753_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 8, + "w": 14, + "h": 19 + }, + "frame": { + "x": 116, + "y": 556, + "w": 14, + "h": 19 + } + }, + { + "filename": "761_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 16, + "h": 19 + }, + "frame": { + "x": 96, + "y": 575, + "w": 16, + "h": 19 + } + }, + { + "filename": "767_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 11, + "w": 24, + "h": 14 + }, + "frame": { + "x": 106, + "y": 265, + "w": 24, + "h": 14 + } + }, + { + "filename": "742_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 19, + "h": 20 + }, + "frame": { + "x": 112, + "y": 575, + "w": 19, + "h": 20 + } + }, + { + "filename": "742_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 19, + "h": 20 + }, + "frame": { + "x": 112, + "y": 594, + "w": 19, + "h": 20 + } + }, + { + "filename": "743_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 94, + "y": 470, + "w": 20, + "h": 22 + } + }, + { + "filename": "743_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 89, + "y": 56, + "w": 20, + "h": 22 + } + }, + { + "filename": "777_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 17, + "h": 19 + }, + "frame": { + "x": 114, + "y": 518, + "w": 17, + "h": 19 + } + }, + { + "filename": "777_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 8, + "w": 17, + "h": 19 + }, + "frame": { + "x": 114, + "y": 486, + "w": 17, + "h": 19 + } + }, + { + "filename": "778-busted_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 12, + "w": 21, + "h": 16 + }, + "frame": { + "x": 109, + "y": 219, + "w": 21, + "h": 16 + } + }, + { + "filename": "778-busted_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 12, + "w": 21, + "h": 16 + }, + "frame": { + "x": 106, + "y": 279, + "w": 21, + "h": 16 + } + }, + { + "filename": "779_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 21, + "h": 20 + }, + "frame": { + "x": 95, + "y": 535, + "w": 21, + "h": 20 + } + }, + { + "filename": "779_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 21, + "h": 20 + }, + "frame": { + "x": 95, + "y": 555, + "w": 21, + "h": 20 + } + }, + { + "filename": "771_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 11, + "w": 18, + "h": 13 + }, + "frame": { + "x": 112, + "y": 505, + "w": 18, + "h": 13 + } + }, + { + "filename": "771_3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 11, + "w": 18, + "h": 13 + }, + "frame": { + "x": 109, + "y": 252, + "w": 18, + "h": 13 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:4de745903870d93aebe9c754281ab9a1:4247d298b98d033d5b01c30d46133c87:d5975df27e1e94206a68aa1fd3c2c8d0$" + } +} diff --git a/public/images/pokemon_icons_7v.png b/public/images/pokemon_icons_7v.png index 23b318b788a..822f7950f3e 100644 Binary files a/public/images/pokemon_icons_7v.png and b/public/images/pokemon_icons_7v.png differ diff --git a/public/images/types_zh-CN.png b/public/images/types_zh-CN.png index 8b644f1041c..a1a41a663fd 100644 Binary files a/public/images/types_zh-CN.png and b/public/images/types_zh-CN.png differ diff --git a/src/data/ability.ts b/src/data/ability.ts index c3881bd4856..b1f0d2b197c 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -9,7 +9,7 @@ import { Weather, WeatherType } from "./weather"; import { BattlerTag, GroundedTag } from "./battler-tags"; import { StatusEffect, getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect"; import { Gender } from "./gender"; -import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr } from "./move"; +import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, MoveAttr, MultiHitAttr, ChargeAttr, SacrificialAttr, SacrificialAttrOnHit } from "./move"; import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { Stat, getStatName } from "./pokemon-stat"; import { BerryModifier, PokemonHeldItemModifier } from "../modifier/modifier"; @@ -1231,6 +1231,84 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { } } +/** + * Class for abilities that convert single-strike moves to two-strike moves (i.e. Parental Bond). + * @param damageMultiplier the damage multiplier for the second strike, relative to the first. + */ +export class AddSecondStrikeAbAttr extends PreAttackAbAttr { + private damageMultiplier: number; + + constructor(damageMultiplier: number) { + super(false); + + this.damageMultiplier = damageMultiplier; + } + + /** + * Determines whether this attribute can apply to a given move. + * @param {Move} move the move to which this attribute may apply + * @param numTargets the number of {@linkcode Pokemon} targeted by this move + * @returns true if the attribute can apply to the move, false otherwise + */ + canApplyPreAttack(move: Move, numTargets: integer): boolean { + /** + * Parental Bond cannot apply to multi-hit moves, charging moves, or + * moves that cause the user to faint. + */ + const exceptAttrs: Constructor[] = [ + MultiHitAttr, + ChargeAttr, + SacrificialAttr, + SacrificialAttrOnHit + ]; + + /** Parental Bond cannot apply to these specific moves */ + const exceptMoves: Moves[] = [ + Moves.FLING, + Moves.UPROAR, + Moves.ROLLOUT, + Moves.ICE_BALL, + Moves.ENDEAVOR + ]; + + /** Also check if this move is an Attack move and if it's only targeting one Pokemon */ + return numTargets === 1 + && !exceptAttrs.some(attr => move.hasAttr(attr)) + && !exceptMoves.some(id => move.id === id) + && move.category !== MoveCategory.STATUS; + } + + /** + * If conditions are met, this doubles the move's hit count (via args[1]) + * or multiplies the damage of secondary strikes (via args[2]) + * @param {Pokemon} pokemon the Pokemon using the move + * @param passive n/a + * @param defender n/a + * @param {Move} move the move used by the ability source + * @param args\[0\] the number of Pokemon this move is targeting + * @param {Utils.IntegerHolder} args\[1\] the number of strikes with this move + * @param {Utils.NumberHolder} args\[2\] the damage multiplier for the current strike + * @returns + */ + applyPreAttack(pokemon: Pokemon, passive: boolean, defender: Pokemon, move: Move, args: any[]): boolean { + const numTargets = args[0] as integer; + const hitCount = args[1] as Utils.IntegerHolder; + const multiplier = args[2] as Utils.NumberHolder; + + if (this.canApplyPreAttack(move, numTargets)) { + if (!!hitCount?.value) { + hitCount.value *= 2; + } + + if (!!multiplier?.value && pokemon.turnData.hitsLeft % 2 === 1 && pokemon.turnData.hitsLeft !== pokemon.turnData.hitCount) { + multiplier.value *= this.damageMultiplier; + } + return true; + } + return false; + } +} + /** * Class for abilities that boost the damage of moves * For abilities that boost the base power of moves, see VariableMovePowerAbAttr @@ -4632,7 +4710,7 @@ export function initAbilities() { new Ability(Abilities.AERILATE, 6) .attr(MoveTypeChangeAttr, Type.FLYING, 1.2, (user, target, move) => move.type === Type.NORMAL), new Ability(Abilities.PARENTAL_BOND, 6) - .unimplemented(), + .attr(AddSecondStrikeAbAttr, 0.25), new Ability(Abilities.DARK_AURA, 6) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " is radiating a Dark Aura!")) .attr(FieldMoveTypePowerBoostAbAttr, Type.DARK, 4 / 3), diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 1a4a590e2a7..015b8b44984 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -896,6 +896,12 @@ export class ProtectedTag extends BattlerTag { if (lapseType === BattlerTagLapseType.CUSTOM) { new CommonBattleAnim(CommonAnim.PROTECT, pokemon).play(pokemon.scene); pokemon.scene.queueMessage(i18next.t("battle:battlerTagsProtectedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + + // Stop multi-hit moves early + const effectPhase = pokemon.scene.getCurrentPhase(); + if (effectPhase instanceof MoveEffectPhase) { + effectPhase.stopMultiHit(pokemon); + } return true; } diff --git a/src/data/move.ts b/src/data/move.ts index 46a4519d71a..58b5d577384 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -812,11 +812,14 @@ export class MoveEffectAttr extends MoveAttr { public trigger: MoveEffectTrigger; /** Should this effect only apply on the first hit? */ public firstHitOnly: boolean; + /** Should this effect only apply on the last hit? */ + public lastHitOnly: boolean; - constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false) { + constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false, lastHitOnly: boolean = false) { super(selfTarget); this.trigger = trigger !== undefined ? trigger : MoveEffectTrigger.POST_APPLY; this.firstHitOnly = firstHitOnly; + this.lastHitOnly = lastHitOnly; } /** @@ -1065,7 +1068,7 @@ export class RecoilAttr extends MoveEffectAttr { private unblockable: boolean; constructor(useHp: boolean = false, damageRatio: number = 0.25, unblockable: boolean = false) { - super(true); + super(true, MoveEffectTrigger.POST_APPLY, false, true); this.useHp = useHp; this.damageRatio = damageRatio; @@ -1086,8 +1089,8 @@ export class RecoilAttr extends MoveEffectAttr { return false; } - const recoilDamage = Math.max(Math.floor((!this.useHp ? user.turnData.currDamageDealt : user.getMaxHp()) * this.damageRatio), - user.turnData.currDamageDealt ? 1 : 0); + const recoilDamage = Math.max(Math.floor((!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio), + user.turnData.damageDealt ? 1 : 0); if (!recoilDamage) { return false; } @@ -2014,7 +2017,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { * @param ...effects - List of status effects to cure */ constructor(selfTarget: boolean, ...effects: StatusEffect[]) { - super(selfTarget); + super(selfTarget, MoveEffectTrigger.POST_APPLY, false, true); this.effects = effects; } @@ -2919,7 +2922,7 @@ export class DoublePowerChanceAttr extends VariablePowerAttr { export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultiplierAttr { constructor(limit: integer, resetOnFail: boolean, resetOnLimit?: boolean, ...comboMoves: Moves[]) { super((user: Pokemon, target: Pokemon, move: Move): number => { - const moveHistory = user.getMoveHistory().reverse().slice(1); + const moveHistory = user.getLastXMoves(limit + 1).slice(1); let count = 0; let turnMove: TurnMove; @@ -3288,8 +3291,13 @@ export class PunishmentPowerAttr extends VariablePowerAttr { export class PresentPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + /** + * If this move is multi-hit, and this attribute is applied to any hit + * other than the first, this move cannot result in a heal. + */ + const firstHit = (user.turnData.hitCount === user.turnData.hitsLeft); - const powerSeed = Utils.randSeedInt(100); + const powerSeed = Utils.randSeedInt(firstHit ? 100 : 80); if (powerSeed <= 40) { (args[0] as Utils.NumberHolder).value = 40; } else if (40 < powerSeed && powerSeed <= 70) { @@ -3297,6 +3305,8 @@ export class PresentPowerAttr extends VariablePowerAttr { } else if (70 < powerSeed && powerSeed <= 80) { (args[0] as Utils.NumberHolder).value = 120; } else if (80 < powerSeed && powerSeed <= 100) { + // If this move is multi-hit, disable all other hits + user.stopMultiHit(); target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), Math.max(Math.floor(target.getMaxHp() / 4), 1), getPokemonMessage(target, " regained\nhealth!"), true)); } @@ -4054,8 +4064,8 @@ export class AddBattlerTagAttr extends MoveEffectAttr { public turnCountMax: integer; private failOnOverlap: boolean; - constructor(tagType: BattlerTagType, selfTarget: boolean = false, failOnOverlap: boolean = false, turnCountMin: integer = 0, turnCountMax?: integer) { - super(selfTarget); + constructor(tagType: BattlerTagType, selfTarget: boolean = false, failOnOverlap: boolean = false, turnCountMin: integer = 0, turnCountMax?: integer, lastHitOnly: boolean = false) { + super(selfTarget, MoveEffectTrigger.POST_APPLY, false, lastHitOnly); this.tagType = tagType; this.turnCountMin = turnCountMin; @@ -4220,7 +4230,7 @@ export class ConfuseAttr extends AddBattlerTagAttr { export class RechargeAttr extends AddBattlerTagAttr { constructor() { - super(BattlerTagType.RECHARGING, true); + super(BattlerTagType.RECHARGING, true, false, 1, 1, true); } } @@ -4617,7 +4627,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { private batonPass: boolean; constructor(user?: boolean, batonPass?: boolean) { - super(false, MoveEffectTrigger.POST_APPLY, true); + super(false, MoveEffectTrigger.POST_APPLY, false, true); this.user = !!user; this.batonPass = !!batonPass; } @@ -4732,7 +4742,7 @@ export class RemoveTypeAttr extends MoveEffectAttr { private messageCallback: ((user: Pokemon) => void) | undefined; constructor(removedType: Type, messageCallback?: (user: Pokemon) => void) { - super(true, MoveEffectTrigger.POST_APPLY); + super(true, MoveEffectTrigger.POST_TARGET); this.removedType = removedType; this.messageCallback = messageCallback; @@ -5540,7 +5550,7 @@ export class DiscourageFrequentUseAttr extends MoveAttr { export class MoneyAttr extends MoveEffectAttr { constructor() { - super(true, MoveEffectTrigger.HIT); + super(true, MoveEffectTrigger.HIT, true); } apply(user: Pokemon, target: Pokemon, move: Move): boolean { @@ -7096,7 +7106,7 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES) .unimplemented(), new AttackMove(Moves.SMACK_DOWN, Type.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5) - .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false) + .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN]) .attr(HitsTagAttr, BattlerTagType.FLYING, false) @@ -7480,14 +7490,14 @@ export function initMoves() { .triageMove(), new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .attr(NeutralDamageAgainstFlyingTypeMultiplierAttr) - .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false) + .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true) .attr(HitsTagAttr, BattlerTagType.FLYING, false) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN]) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.THOUSAND_WAVES, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1) + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.LANDS_WRATH, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) @@ -7629,7 +7639,7 @@ export function initMoves() { new SelfStatusMove(Moves.BANEFUL_BUNKER, Type.POISON, -1, 10, -1, 4, 7) .attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER), new AttackMove(Moves.SPIRIT_SHACKLE, Type.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1) + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .makesContact(false), new AttackMove(Moves.DARKEST_LARIAT, Type.DARK, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) .attr(IgnoreOpponentStatChangesAttr), @@ -7673,7 +7683,7 @@ export function initMoves() { .attr(HealOnAllyAttr, 0.5, true, false) .ballBombMove(), new AttackMove(Moves.ANCHOR_SHOT, Type.STEEL, MoveCategory.PHYSICAL, 80, 100, 20, 100, 0, 7) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true), new StatusMove(Moves.PSYCHIC_TERRAIN, Type.PSYCHIC, -1, 10, -1, 0, 7) .attr(TerrainChangeAttr, TerrainType.PSYCHIC) .target(MoveTarget.BOTH_SIDES), @@ -8396,7 +8406,7 @@ export function initMoves() { .attr(RemoveScreensAttr), new AttackMove(Moves.MAKE_IT_RAIN, Type.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(MoneyAttr) - .attr(StatChangeAttr, BattleStat.SPATK, -1, true, null, true, true) + .attr(StatChangeAttr, BattleStat.SPATK, -1, true, null, true, false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.PSYBLADE, Type.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && user.isGrounded() ? 1.5 : 1) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index e2a430260f0..b2cdeac6b45 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3327,7 +3327,7 @@ export const starterPassiveAbilities = { [Species.KRABBY]: Abilities.UNBURDEN, [Species.VOLTORB]: Abilities.ELECTRIC_SURGE, [Species.EXEGGCUTE]: Abilities.RIPEN, - [Species.CUBONE]: Abilities.HUGE_POWER, + [Species.CUBONE]: Abilities.PARENTAL_BOND, [Species.LICKITUNG]: Abilities.THICK_FAT, [Species.KOFFING]: Abilities.PARENTAL_BOND, [Species.RHYHORN]: Abilities.FILTER, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0f2a5fa47ae..b1e7f48d3db 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -10,20 +10,20 @@ 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, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, EvolutionStatBoosterModifier, TerastallizeModifier } from "../modifier/modifier"; +import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, StatBoosterModifier, TerastallizeModifier } from "../modifier/modifier"; import { PokeballType } from "../data/pokeball"; import { Gender } from "../data/gender"; import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims"; import { Status, StatusEffect, getRandomStatus } from "../data/status-effect"; import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "../data/pokemon-evolutions"; import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "../data/tms"; -import { DamagePhase, FaintPhase, LearnMovePhase, ObtainStatusEffectPhase, StatChangePhase, SwitchSummonPhase, ToggleDoublePositionPhase } from "../phases"; +import { DamagePhase, FaintPhase, LearnMovePhase, MoveEffectPhase, ObtainStatusEffectPhase, StatChangePhase, SwitchSummonPhase, ToggleDoublePositionPhase } from "../phases"; import { BattleStat } from "../data/battle-stat"; import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HelpingHandTag, HighestStatBoostTag, TypeBoostTag, TypeImmuneTag, getBattlerTag } from "../data/battler-tags"; import { WeatherType } from "../data/weather"; import { TempBattleStat } from "../data/temp-battle-stat"; import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from "../data/arena-tag"; -import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AllyMoveCategoryPowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr } from "../data/ability"; +import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AllyMoveCategoryPowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AddSecondStrikeAbAttr } from "../data/ability"; import PokemonData from "../system/pokemon-data"; import { BattlerIndex } from "../battle"; import { Mode } from "../ui/ui"; @@ -657,7 +657,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.scene.applyModifiers(TempBattleStatBoosterModifier, this.isPlayer(), battleStat as integer as TempBattleStat, statLevel); } const statValue = new Utils.NumberHolder(this.getStat(stat)); - this.scene.applyModifiers(EvolutionStatBoosterModifier, this.isPlayer(), this, stat, statValue); + this.scene.applyModifiers(StatBoosterModifier, this.isPlayer(), this, stat, statValue); const fieldApplied = new Utils.BooleanHolder(false); for (const pokemon of this.scene.getField(true)) { @@ -1800,6 +1800,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (cancelled.value) { + source.stopMultiHit(this); result = HitResult.NO_EFFECT; } else { const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === move.type) as TypeBoostTag; @@ -1885,8 +1886,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(VariableAtkAttr, source, this, move, sourceAtk); applyMoveAttrs(VariableDefAttr, source, this, move, targetDef); + const effectPhase = this.scene.getCurrentPhase(); + let numTargets = 1; + if (effectPhase instanceof MoveEffectPhase) { + numTargets = effectPhase.getTargets().length; + } + const twoStrikeMultiplier = new Utils.NumberHolder(1); + applyPreAttackAbAttrs(AddSecondStrikeAbAttr, source, this, move, numTargets, new Utils.IntegerHolder(0), twoStrikeMultiplier); + if (!isTypeImmune) { - damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier.value * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier.value); + damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier.value * screenMultiplier.value * twoStrikeMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier.value); if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) { if (!move.hasAttr(BypassBurnDamageReductionAttr)) { const burnDamageReductionCancelled = new Utils.BooleanHolder(false); @@ -2251,6 +2260,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.summonData.moveQueue; } + /** + * If this Pokemon is using a multi-hit move, cancels all subsequent strikes + * @param {Pokemon} target If specified, this only cancels subsequent strikes against this Pokemon + */ + stopMultiHit(target?: Pokemon): void { + const effectPhase = this.scene.getCurrentPhase(); + if (effectPhase instanceof MoveEffectPhase) { + effectPhase.stopMultiHit(target); + } + } + changeForm(formChange: SpeciesFormChange): Promise { return new Promise(resolve => { this.formIndex = Math.max(this.species.forms.findIndex(f => f.formKey === formChange.formKey), 0); @@ -3385,7 +3405,7 @@ export class EnemyPokemon extends Pokemon { this.trainerSlot = trainerSlot; if (boss) { - this.setBoss(); + this.setBoss(boss, dataSource?.bossSegments); } if (Overrides.OPP_STATUS_OVERRIDE) { diff --git a/src/interfaces/locales.ts b/src/interfaces/locales.ts index d9b3d71474d..76dc76058aa 100644 --- a/src/interfaces/locales.ts +++ b/src/interfaces/locales.ts @@ -35,6 +35,7 @@ export interface ModifierTypeTranslationEntry { export interface ModifierTypeTranslationEntries { ModifierType: { [key: string]: ModifierTypeTranslationEntry }, + SpeciesBoosterItem: { [key: string]: ModifierTypeTranslationEntry }, AttackTypeBoosterItem: SimpleTranslationEntries, TempBattleStatBoosterItem: SimpleTranslationEntries, TempBattleStatBoosterStatName: SimpleTranslationEntries, diff --git a/src/locales/de/modifier-type.ts b/src/locales/de/modifier-type.ts index 171587d6ead..8b2950f44c3 100644 --- a/src/locales/de/modifier-type.ts +++ b/src/locales/de/modifier-type.ts @@ -242,6 +242,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_FUSED_CHANCE": { "name": "Fusionsmarke", "description": "Fügt eine 1%ige Chance hinzu, dass ein wildes Pokémon eine Fusion ist." }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "Kugelblitz", description: "Ein Item, das von Pikachu getragen werden kann. Es erhöht den Angriff und den Spezial-Angriff." }, + "THICK_CLUB": { name: "Kampfknochen", description: "Ein Item, das von Tragosso oder Knogga getragen werden kann. Dieser harte Knochen erhöht den Angriff." }, + "METAL_POWDER": { name: "Metallstaub", description: "Ein Item, das von Ditto getragen werden kann. Fein und doch hart, erhöht dieses sonderbare Pulver die Verteidigung." }, + "QUICK_POWDER": { name: "Flottstaub", description: "Ein Item, das Ditto zum Tragen gegeben werden kann. Fein und doch hart, erhöht dieses sonderbare Pulver die Initiative." } + }, TempBattleStatBoosterItem: { "x_attack": "X-Angriff", "x_defense": "X-Verteidigung", diff --git a/src/locales/en/modifier-type.ts b/src/locales/en/modifier-type.ts index 001d50c4e21..09d9baea6fb 100644 --- a/src/locales/en/modifier-type.ts +++ b/src/locales/en/modifier-type.ts @@ -241,6 +241,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_ENDURE_CHANCE": { name: "Endure Token" }, "ENEMY_FUSED_CHANCE": { name: "Fusion Token", description: "Adds a 1% chance that a wild Pokémon will be a fusion." }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "Light Ball", description: "It's a mysterious orb that boosts Pikachu's Attack and Sp. Atk stats." }, + "THICK_CLUB": { name: "Thick Club", description: "This hard bone of unknown origin boosts Cubone or Marowak's Attack stat." }, + "METAL_POWDER": { name: "Metal Powder", description: "Extremely fine yet hard, this odd powder boosts Ditto's Defense stat." }, + "QUICK_POWDER": { name: "Quick Powder", description: "Extremely fine yet hard, this odd powder boosts Ditto's Speed stat." } + }, TempBattleStatBoosterItem: { "x_attack": "X Attack", "x_defense": "X Defense", diff --git a/src/locales/es/modifier-type.ts b/src/locales/es/modifier-type.ts index 6998e616488..e7d6e8889fe 100644 --- a/src/locales/es/modifier-type.ts +++ b/src/locales/es/modifier-type.ts @@ -241,6 +241,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_ENDURE_CHANCE": { name: "Ficha Aguante" }, "ENEMY_FUSED_CHANCE": { name: "Ficha Fusión", description: "Agrega un 1% de probabilidad de que un Pokémon salvaje sea una fusión." }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "Bola Luminosa", description: "Asombrosa esfera que aumenta el Ataque y el Ataque Especial. Debe llevarla Pikachu." }, + "THICK_CLUB": { name: "Hueso Grueso", description: "Extraño tipo de hueso que potencia los ataques físicos. Debe llevarlo Cubone o Marowak." }, + "METAL_POWDER": { name: "Polvo Metálico", description: "Polvo muy fino, pero a la vez poderoso, que aumenta la Defensa. Debe llevarlo Ditto." }, + "QUICK_POWDER": { name: "Polvo Veloz", description: "Polvo muy fino, pero a la vez poderoso, que aumenta la Velocidad. Debe llevarlo Ditto." } + }, TempBattleStatBoosterItem: { "x_attack": "Ataque X", "x_defense": "Defensa X", diff --git a/src/locales/fr/modifier-type.ts b/src/locales/fr/modifier-type.ts index 43e7c5ad757..0423751e937 100644 --- a/src/locales/fr/modifier-type.ts +++ b/src/locales/fr/modifier-type.ts @@ -241,6 +241,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_ENDURE_CHANCE": { name: "Jeton Ténacité" }, "ENEMY_FUSED_CHANCE": { name: "Jeton Fusion", description: "Ajoute 1% de chances qu’un Pokémon sauvage soit une fusion." }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "Balle Lumière", description: "Objet à faire tenir à Pikachu. Un orbe énigmatique qui augmente son Attaque et son Attaque Spéciale." }, + "THICK_CLUB": { name: "Masse Os", description: "Objet à faire tenir à Osselait ou Ossatueur. Un os dur qui augmente leur Attaque." }, + "METAL_POWDER": { name: "Poudre Métal", description: "Objet à faire tenir à Métamorph. Cette poudre étrange, très fine mais résistante, augmente sa Défense." }, + "QUICK_POWDER": { name: "Poudre Vite", description: "Objet à faire tenir à Métamorph. Cette poudre étrange, très fine mais résistante, augmente sa Vitesse." } + }, TempBattleStatBoosterItem: { "x_attack": "Attaque +", "x_defense": "Défense +", diff --git a/src/locales/it/modifier-type.ts b/src/locales/it/modifier-type.ts index 963a06a4e5d..2b7147133e1 100644 --- a/src/locales/it/modifier-type.ts +++ b/src/locales/it/modifier-type.ts @@ -241,6 +241,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_ENDURE_CHANCE": { name: "Gettone di Resistenza" }, "ENEMY_FUSED_CHANCE": { name: "Gettone della fusione", description: "Aggiunge l'1% di possibilità che un Pokémon selvatico sia una fusione." }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "Elettropalla", description: "Strumento da dare a Pikachu. Sfera insolita che aumenta l’Attacco e l’Attacco Speciale." }, + "THICK_CLUB": { name: "Osso spesso", description: "Strumento da dare a Cubone o Marowak. Osso duro che aumenta l’Attacco." }, + "METAL_POWDER": { name: "Metalpolvere", description: "Strumento da dare a Ditto. Strana polvere finissima e al tempo stesso dura che migliora la Difesa." }, + "QUICK_POWDER": { name: "Velopolvere", description: "Strumento da dare a Ditto. Questa strana polvere, fine e al contempo dura, aumenta la Velocità." } + }, TempBattleStatBoosterItem: { "x_attack": "Attacco X", "x_defense": "Difesa X", diff --git a/src/locales/ko/modifier-type.ts b/src/locales/ko/modifier-type.ts index 1201a1a436a..7a8f1bef8e9 100644 --- a/src/locales/ko/modifier-type.ts +++ b/src/locales/ko/modifier-type.ts @@ -241,6 +241,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_ENDURE_CHANCE": { name: "버티기 토큰" }, "ENEMY_FUSED_CHANCE": { name: "합체 토큰", description: "야생 포켓몬이 합체되어 등장할 확률이 1% 추가된다." }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "전기구슬", description: "피카츄에게 지니게 하면 공격과 특수공격이 올라가는 이상한 구슬." }, + "THICK_CLUB": { name: "굵은뼈", description: "무언가의 단단한 뼈. 탕구리 혹은 텅구리에게 지니게 하면 공격이 올라간다." }, + "METAL_POWDER": { name: "금속파우더", description: "메타몽에게 지니게 하면 방어가 올라가는 이상한 가루. 매우 잘고 단단하다." }, + "QUICK_POWDER": { name: "스피드파우더", description: "메타몽에게 지니게 하면 스피드가 올라가는 이상한 가루. 매우 잘고 단단하다." } + }, TempBattleStatBoosterItem: { "x_attack": "플러스파워", "x_defense": "디펜드업", diff --git a/src/locales/pt_BR/modifier-type.ts b/src/locales/pt_BR/modifier-type.ts index bffad22c913..a6504b931f0 100644 --- a/src/locales/pt_BR/modifier-type.ts +++ b/src/locales/pt_BR/modifier-type.ts @@ -241,6 +241,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_ENDURE_CHANCE": { name: "Token de Persistência" }, "ENEMY_FUSED_CHANCE": { name: "Token de Fusão", description: "Adiciona uma chance de 1% de que um Pokémon selvagem seja uma fusão." }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "Bola de Luz", description: "Orbe intrigante que aumenta os atributos de Ataque e Ataque Esp. de Pikachu." }, + "THICK_CLUB": { name: "Osso Grosso", description: "Este duro osso de origem desconhecida aumenta o atributo de Ataque de Cubone ou Marowak." }, + "METAL_POWDER": { name: "Pó Metálico", description: "Extremamente fino, porém duro, este pó estranho aumenta o atributo de Defesa de Ditto." }, + "QUICK_POWDER": { name: "Pó Veloz", description: "Extremamente fino, porém duro, este pó estranho aumenta o atributo de Velocidade de Ditto." } + }, TempBattleStatBoosterItem: { "x_attack": "Ataque X", "x_defense": "Defesa X", diff --git a/src/locales/zh_CN/modifier-type.ts b/src/locales/zh_CN/modifier-type.ts index c3b11722e72..594a85cbdfe 100644 --- a/src/locales/zh_CN/modifier-type.ts +++ b/src/locales/zh_CN/modifier-type.ts @@ -241,6 +241,12 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_ENDURE_CHANCE": { name: "忍受硬币" }, "ENEMY_FUSED_CHANCE": { name: "融合硬币", description: "增加1%野生融合宝可梦出现概率。" }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "电气球", description: "让皮卡丘携带后,攻击和特攻就会 提高的神奇之球。" }, + "THICK_CLUB": { name: "粗骨头", description: "某种坚硬的骨头。让卡拉卡拉或嘎啦嘎啦携带后,攻击就会提高。" }, + "METAL_POWDER": { name: "金属粉", description: "让百变怪携带后,防御就会提高的神奇粉末。非常细腻坚硬。" }, + "QUICK_POWDER": { name: "速度粉", description: "让百变怪携带后,速度就会提高的神奇粉末。非常细腻坚硬。" } + }, TempBattleStatBoosterItem: { "x_attack": "力量强化", "x_defense": "防御强化", diff --git a/src/locales/zh_TW/modifier-type.ts b/src/locales/zh_TW/modifier-type.ts index 8d7695bb735..d31d9b8a53d 100644 --- a/src/locales/zh_TW/modifier-type.ts +++ b/src/locales/zh_TW/modifier-type.ts @@ -301,6 +301,12 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "增加1%野生融合寶可夢出現概率。", }, }, + SpeciesBoosterItem: { + "LIGHT_BALL": { name: "電氣球", description: "讓皮卡丘攜帶後,攻擊和特攻就會 提高的神奇之球。" }, + "THICK_CLUB": { name: "粗骨頭", description: "某種堅硬的骨頭。讓卡拉卡拉或嘎啦嘎啦攜帶後,攻擊就會提高。" }, + "METAL_POWDER": { name: "金屬粉", description: "讓百變怪攜帶後,防禦就會提高的神奇粉末。非常細緻堅硬。" }, + "QUICK_POWDER": { name: "速度粉", description: "讓百變怪攜帶後,速度就會提高的神奇粉末。非常細緻堅硬。" } + }, TempBattleStatBoosterItem: { x_attack: "力量強化", x_defense: "防禦強化", diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 895ee4b46c2..d8deee2b797 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -26,6 +26,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; const outputModifierData = false; const useMaxWeightForOutput = false; @@ -539,6 +540,28 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i } } +export type SpeciesStatBoosterItem = keyof typeof SpeciesStatBoosterModifierTypeGenerator.items; + +/** + * Modifier type for {@linkcode Modifiers.SpeciesStatBoosterModifier} + * @extends PokemonHeldItemModifierType + * @implements GeneratedPersistentModifierType + */ +export class SpeciesStatBoosterModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { + private key: SpeciesStatBoosterItem; + + constructor(key: SpeciesStatBoosterItem) { + const item = SpeciesStatBoosterModifierTypeGenerator.items[key]; + super(`modifierType:SpeciesBoosterItem.${key}`, key.toLowerCase(), (type, args) => new Modifiers.SpeciesStatBoosterModifier(type, (args[0] as Pokemon).id, item.stats, item.multiplier, item.species)); + + this.id = this.key = key; + } + + getPregenArgs(): any[] { + return [ this.key ]; + } +} + export class PokemonLevelIncrementModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string) { super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonLevelIncrementModifier(this, (args[0] as PlayerPokemon).id), (_pokemon: PlayerPokemon) => null); @@ -870,6 +893,81 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { } } +/** + * Modifier type generator for {@linkcode SpeciesStatBoosterModifierType}, which + * encapsulates the logic for weighting the most useful held item from + * the current list of {@linkcode items}. + * @extends ModifierTypeGenerator + */ +class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { + /** Object comprised of the currently available species-based stat boosting held items */ + public static items = { + LIGHT_BALL: { stats: [Stat.ATK, Stat.SPATK], multiplier: 2, species: [Species.PIKACHU] }, + THICK_CLUB: { stats: [Stat.ATK], multiplier: 2, species: [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK] }, + METAL_POWDER: { stats: [Stat.DEF], multiplier: 2, species: [Species.DITTO] }, + QUICK_POWDER: { stats: [Stat.SPD], multiplier: 2, species: [Species.DITTO] }, + }; + + constructor() { + super((party: Pokemon[], pregenArgs?: any[]) => { + if (pregenArgs) { + return new SpeciesStatBoosterModifierType(pregenArgs[0] as SpeciesStatBoosterItem); + } + + const values = Object.values(SpeciesStatBoosterModifierTypeGenerator.items); + const keys = Object.keys(SpeciesStatBoosterModifierTypeGenerator.items); + const weights = keys.map(() => 0); + + for (const p of party) { + const speciesId = p.getSpeciesForm(true).speciesId; + const fusionSpeciesId = p.isFusion() ? p.getFusionSpeciesForm(true).speciesId : null; + const hasFling = p.getMoveset(true).some(m => m.moveId === Moves.FLING); + + for (const i in values) { + const checkedSpecies = values[i].species; + const checkedStats = values[i].stats; + + // If party member already has the item being weighted currently, skip to the next item + const hasItem = p.getHeldItems().some(m => m instanceof Modifiers.SpeciesStatBoosterModifier + && (m as Modifiers.SpeciesStatBoosterModifier).contains(checkedSpecies[0], checkedStats[0])); + + if (!hasItem) { + if (checkedSpecies.includes(speciesId) || (!!fusionSpeciesId && checkedSpecies.includes(fusionSpeciesId))) { + // Add weight if party member has a matching species or, if applicable, a matching fusion species + weights[i]++; + } else if (checkedSpecies.includes(Species.PIKACHU) && hasFling) { + // Add weight to Light Ball if party member has Fling + weights[i]++; + } + } + } + } + + let totalWeight = 0; + for (const weight of weights) { + totalWeight += weight; + } + + if (totalWeight !== 0) { + const randInt = Utils.randSeedInt(totalWeight, 1); + let weight = 0; + + for (const i in weights) { + if (weights[i] !== 0) { + const curWeight = weight + weights[i]; + if (randInt <= weight + weights[i]) { + return new SpeciesStatBoosterModifierType(keys[i] as SpeciesStatBoosterItem); + } + weight = curWeight; + } + } + } + + return null; + }); + } +} + class TmModifierTypeGenerator extends ModifierTypeGenerator { constructor(tier: ModifierTier) { super((party: Pokemon[]) => { @@ -1110,6 +1208,8 @@ export const modifierTypes = { SUPER_LURE: () => new DoubleBattleChanceBoosterModifierType("modifierType:ModifierType.SUPER_LURE", "super_lure", 10), MAX_LURE: () => new DoubleBattleChanceBoosterModifierType("modifierType:ModifierType.MAX_LURE", "max_lure", 25), + SPECIES_STAT_BOOSTER: () => new SpeciesStatBoosterModifierTypeGenerator(), + TEMP_STAT_BOOSTER: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { return new TempBattleStatBoosterModifierType(pregenArgs[0] as TempBattleStat); @@ -1285,12 +1385,13 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.LURE, 2), new WeightedModifierType(modifierTypes.TEMP_STAT_BOOSTER, 4), new WeightedModifierType(modifierTypes.BERRY, 2), - new WeightedModifierType(modifierTypes.TM_COMMON, 1), + new WeightedModifierType(modifierTypes.TM_COMMON, 2), ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), [ModifierTier.GREAT]: [ new WeightedModifierType(modifierTypes.GREAT_BALL, 6), + new WeightedModifierType(modifierTypes.PP_UP, 2), new WeightedModifierType(modifierTypes.FULL_HEAL, (party: Pokemon[]) => { const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status && !p.getHeldItems().some(i => { if (i instanceof Modifiers.TurnStatusEffectModifier) { @@ -1344,7 +1445,7 @@ const modifierPool: ModifierPool = { return Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15), 8); }, 8), new WeightedModifierType(modifierTypes.MAP, (party: Pokemon[]) => party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex < 180 ? 1 : 0, 1), - new WeightedModifierType(modifierTypes.TM_GREAT, 2), + new WeightedModifierType(modifierTypes.TM_GREAT, 3), new WeightedModifierType(modifierTypes.MEMORY_MUSHROOM, (party: Pokemon[]) => { if (!party.find(p => p.getLearnableLevelMoves().length)) { return 0; @@ -1360,15 +1461,15 @@ const modifierPool: ModifierPool = { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ULTRA_BALL, 24), + new WeightedModifierType(modifierTypes.ULTRA_BALL, 15), new WeightedModifierType(modifierTypes.MAX_LURE, 4), new WeightedModifierType(modifierTypes.BIG_NUGGET, skipInLastClassicWaveOrDefault(12)), - new WeightedModifierType(modifierTypes.PP_UP, 9), new WeightedModifierType(modifierTypes.PP_MAX, 3), new WeightedModifierType(modifierTypes.MINT, 4), new WeightedModifierType(modifierTypes.RARE_EVOLUTION_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * 4, 32), 32), new WeightedModifierType(modifierTypes.AMULET_COIN, 3), //new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => party.some(p => ((p.getSpeciesForm(true).speciesId in pokemonEvolutions) || (p.isFusion() && (p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions))) && !p.getHeldItems().some(i => i instanceof Modifiers.EvolutionStatBoosterModifier)) ? 10 : 0), + new WeightedModifierType(modifierTypes.SPECIES_STAT_BOOSTER, 12), new WeightedModifierType(modifierTypes.TOXIC_ORB, (party: Pokemon[]) => { const checkedAbilities = [Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.TOXIC_BOOST, Abilities.POISON_HEAL, Abilities.MAGIC_GUARD]; const checkedMoves = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; @@ -1383,40 +1484,40 @@ const modifierPool: ModifierPool = { }, 10), new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), new WeightedModifierType(modifierTypes.CANDY_JAR, 5), - new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), - new WeightedModifierType(modifierTypes.TM_ULTRA, 8), + new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), + new WeightedModifierType(modifierTypes.TM_ULTRA, 11), new WeightedModifierType(modifierTypes.RARER_CANDY, 4), new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2), new WeightedModifierType(modifierTypes.IV_SCANNER, 4), new WeightedModifierType(modifierTypes.EXP_CHARM, 8), - new WeightedModifierType(modifierTypes.EXP_SHARE, 12), - new WeightedModifierType(modifierTypes.EXP_BALANCE, 4), + new WeightedModifierType(modifierTypes.EXP_SHARE, 10), + new WeightedModifierType(modifierTypes.EXP_BALANCE, 3), new WeightedModifierType(modifierTypes.TERA_ORB, (party: Pokemon[]) => Math.min(Math.max(Math.floor(party[0].scene.currentBattle.waveIndex / 50) * 2, 1), 4), 4), + new WeightedModifierType(modifierTypes.QUICK_CLAW, 3), new WeightedModifierType(modifierTypes.WIDE_LENS, 4), ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.ROGUE]: [ - new WeightedModifierType(modifierTypes.ROGUE_BALL, 24), + new WeightedModifierType(modifierTypes.ROGUE_BALL, 16), new WeightedModifierType(modifierTypes.RELIC_GOLD, skipInLastClassicWaveOrDefault(2)), new WeightedModifierType(modifierTypes.LEFTOVERS, 3), new WeightedModifierType(modifierTypes.SHELL_BELL, 3), new WeightedModifierType(modifierTypes.BERRY_POUCH, 4), new WeightedModifierType(modifierTypes.GRIP_CLAW, 5), new WeightedModifierType(modifierTypes.BATON, 2), - new WeightedModifierType(modifierTypes.SOUL_DEW, 8), + new WeightedModifierType(modifierTypes.SOUL_DEW, 7), //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.QUICK_CLAW, 3), new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), new WeightedModifierType(modifierTypes.LOCK_CAPSULE, 3), - new WeightedModifierType(modifierTypes.SUPER_EXP_CHARM, 10), - new WeightedModifierType(modifierTypes.FORM_CHANGE_ITEM, 18), - new WeightedModifierType(modifierTypes.MEGA_BRACELET, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 8, 32), - new WeightedModifierType(modifierTypes.DYNAMAX_BAND, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 8, 32), - new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(5 - rerollCount * 2, 0) : 0, 5), + new WeightedModifierType(modifierTypes.SUPER_EXP_CHARM, 8), + new WeightedModifierType(modifierTypes.FORM_CHANGE_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 6, 24), + new WeightedModifierType(modifierTypes.MEGA_BRACELET, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 9, 36), + new WeightedModifierType(modifierTypes.DYNAMAX_BAND, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 9, 36), + new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(3 - rerollCount * 1, 0) : 0, 3), ].map(m => { m.setTier(ModifierTier.ROGUE); return m; }), @@ -1425,7 +1526,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.SHINY_CHARM, 14), new WeightedModifierType(modifierTypes.HEALING_CHARM, 18), new WeightedModifierType(modifierTypes.MULTI_LENS, 18), - new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(6 - rerollCount * 2, 0) : 0, 6), + new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(5 - rerollCount * 2, 0) : 0, 5), new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24), new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 1 : 0, 1), ].map(m => { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index efd67104215..946b381b7f8 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -23,6 +23,7 @@ import { Nature } from "#app/data/nature"; import * as Overrides from "../overrides"; import { ModifierType, modifierTypes } from "./modifier-type"; import { Command } from "#app/ui/command-ui-handler.js"; +import { Species } from "#enums/species"; import { allMoves } from "#app/data/move.js"; import { Abilities } from "#app/enums/abilities.js"; @@ -707,16 +708,16 @@ export class PokemonBaseStatModifier extends PokemonHeldItemModifier { } /** - * Modifier used for held items, specifically Eviolite, that apply - * {@linkcode Stat} boost(s) using a multiplier if the holder can evolve. + * Modifier used for held items that apply {@linkcode Stat} boost(s) + * using a multiplier. * @extends PokemonHeldItemModifier * @see {@linkcode apply} */ -export class EvolutionStatBoosterModifier extends PokemonHeldItemModifier { +export class StatBoosterModifier extends PokemonHeldItemModifier { /** The stats that the held item boosts */ - private stats: Stat[]; + protected stats: Stat[]; /** The multiplier used to increase the relevant stat(s) */ - private multiplier: number; + protected multiplier: number; constructor(type: ModifierType, pokemonId: integer, stats: Stat[], multiplier: number, stackCount?: integer) { super(type, pokemonId, stackCount); @@ -726,7 +727,7 @@ export class EvolutionStatBoosterModifier extends PokemonHeldItemModifier { } clone() { - return new EvolutionStatBoosterModifier(this.type, this.pokemonId, this.stats, this.multiplier, this.stackCount); + return new StatBoosterModifier(this.type, this.pokemonId, this.stats, this.multiplier, this.stackCount); } getArgs(): any[] { @@ -734,7 +735,14 @@ export class EvolutionStatBoosterModifier extends PokemonHeldItemModifier { } matchType(modifier: Modifier): boolean { - return modifier instanceof EvolutionStatBoosterModifier; + if (modifier instanceof StatBoosterModifier) { + const modifierInstance = modifier as StatBoosterModifier; + if ((modifierInstance.multiplier === this.multiplier) && (modifierInstance.stats.length === this.stats.length)) { + return modifierInstance.stats.every((e, i) => e === this.stats[i]); + } + } + + return false; } /** @@ -745,7 +753,43 @@ export class EvolutionStatBoosterModifier extends PokemonHeldItemModifier { * @returns true if the stat could be boosted, false otherwise */ shouldApply(args: any[]): boolean { - return this.stats.includes(args[1] as Stat); + return super.shouldApply(args) && this.stats.includes(args[1] as Stat); + } + + /** + * Boosts the incoming stat by a {@linkcode multiplier} if the stat is listed + * in {@linkcode stats}. + * @param args [0] {@linkcode Pokemon} N/A + * [1] {@linkcode Stat} N/A + * [2] {@linkcode Utils.NumberHolder} that holds the resulting value of the stat + * @returns true if the stat boost applies successfully, false otherwise + * @see shouldApply + */ + apply(args: any[]): boolean { + const statValue = args[2] as Utils.NumberHolder; + + statValue.value *= this.multiplier; + return true; + } + + getMaxHeldItemCount(_pokemon: Pokemon): number { + return 1; + } +} + +/** + * Modifier used for held items, specifically Eviolite, that apply + * {@linkcode Stat} boost(s) using a multiplier if the holder can evolve. + * @extends StatBoosterModifier + * @see {@linkcode apply} + */ +export class EvolutionStatBoosterModifier extends StatBoosterModifier { + clone() { + return super.clone() as EvolutionStatBoosterModifier; + } + + matchType(modifier: Modifier): boolean { + return modifier instanceof EvolutionStatBoosterModifier; } /** @@ -771,15 +815,69 @@ export class EvolutionStatBoosterModifier extends PokemonHeldItemModifier { return true; } else if (isUnevolved) { // Full boost applied if holder is unfused and unevolved or, if fused, both parts of fusion are unevolved - statValue.value *= this.multiplier; - return true; + return super.apply(args); + } + + return false; + } +} + +/** + * Modifier used for held items that apply {@linkcode Stat} boost(s) using a + * multiplier if the holder is of a specific {@linkcode Species}. + * @extends StatBoosterModifier + * @see {@linkcode apply} + */ +export class SpeciesStatBoosterModifier extends StatBoosterModifier { + /** The species that the held item's stat boost(s) apply to */ + private species: Species[]; + + constructor(type: ModifierType, pokemonId: integer, stats: Stat[], multiplier: number, species: Species[], stackCount?: integer) { + super(type, pokemonId, stats, multiplier, stackCount); + + this.species = species; + } + + clone() { + return new SpeciesStatBoosterModifier(this.type, this.pokemonId, this.stats, this.multiplier, this.species, this.stackCount); + } + + getArgs(): any[] { + return [ ...super.getArgs(), this.species ]; + } + + matchType(modifier: Modifier): boolean { + if (modifier instanceof SpeciesStatBoosterModifier) { + const modifierInstance = modifier as SpeciesStatBoosterModifier; + if (modifierInstance.species.length === this.species.length) { + return super.matchType(modifier) && modifierInstance.species.every((e, i) => e === this.species[i]); + } } return false; } - getMaxHeldItemCount(_pokemon: Pokemon): integer { - return 1; + /** + * Checks if the incoming stat is listed in {@linkcode stats} and if the holder's {@linkcode Species} + * (or its fused species) is listed in {@linkcode species}. + * @param args [0] {@linkcode Pokemon} that holds the held item + * [1] {@linkcode Stat} being checked at the time + * [2] {@linkcode Utils.NumberHolder} N/A + * @returns true if the stat could be boosted, false otherwise + */ + shouldApply(args: any[]): boolean { + const holder = args[0] as Pokemon; + return super.shouldApply(args) && (this.species.includes(holder.getSpeciesForm(true).speciesId) || (holder.isFusion() && this.species.includes(holder.getFusionSpeciesForm(true).speciesId))); + } + + /** + * Checks if either parameter is included in the corresponding lists + * @param speciesId {@linkcode Species} being checked + * @param stat {@linkcode Stat} being checked + * @returns true if both parameters are in {@linkcode species} and {@linkcode stats} respectively, false otherwise + */ + contains(speciesId: Species, stat: Stat): boolean { + return this.species.includes(speciesId) && this.stats.includes(stat); } } diff --git a/src/overrides.ts b/src/overrides.ts index 837d9bf520d..3e894967893 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -8,7 +8,7 @@ import { PokeballCounts } from "./battle-scene"; import { PokeballType } from "./data/pokeball"; import { Gender } from "./data/gender"; import { StatusEffect } from "./data/status-effect"; -import { modifierTypes } from "./modifier/modifier-type"; +import { SpeciesStatBoosterItem, modifierTypes } from "./modifier/modifier-type"; import { VariantTier } from "./enums/variant-tiers"; import { EggTier } from "#enums/egg-type"; import { allSpecies } from "./data/pokemon-species"; // eslint-disable-line @typescript-eslint/no-unused-vars @@ -125,11 +125,12 @@ export const EGG_GACHA_PULL_COUNT_OVERRIDE: number = 0; * - Nature is for MINT * - Type is for TERA_SHARD or ATTACK_TYPE_BOOSTER (type boosting items i.e Silk Scarf) * - BerryType is for BERRY + * - SpeciesStatBoosterItem is for SPECIES_STAT_BOOSTER */ interface ModifierOverride { name: keyof typeof modifierTypes & string, count?: integer - type?: TempBattleStat|Stat|Nature|Type|BerryType + type?: TempBattleStat|Stat|Nature|Type|BerryType|SpeciesStatBoosterItem } export const STARTING_MODIFIER_OVERRIDE: Array = []; export const OPP_MODIFIER_OVERRIDE: Array = []; diff --git a/src/phases.ts b/src/phases.ts index 110d87d527b..fcaf3ca4160 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -26,7 +26,7 @@ import { Gender } from "./data/gender"; import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather"; import { TempBattleStat } from "./data/temp-battle-stat"; import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag"; -import { CheckTrappedAbAttr, IgnoreOpponentStatChangesAbAttr, IgnoreOpponentEvasionAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, BlockRedirectAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr, StatChangeCopyAbAttr, PokemonTypeChangeAbAttr, applyPreAttackAbAttrs, applyPostMoveUsedAbAttrs, PostMoveUsedAbAttr, MaxMultiHitAbAttr, HealFromBerryUseAbAttr, WonderSkinAbAttr, applyPreDefendAbAttrs, IgnoreMoveEffectsAbAttr, BlockStatusDamageAbAttr, BypassSpeedChanceAbAttr } from "./data/ability"; +import { CheckTrappedAbAttr, IgnoreOpponentStatChangesAbAttr, IgnoreOpponentEvasionAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, BlockRedirectAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr, StatChangeCopyAbAttr, PokemonTypeChangeAbAttr, applyPreAttackAbAttrs, applyPostMoveUsedAbAttrs, PostMoveUsedAbAttr, MaxMultiHitAbAttr, HealFromBerryUseAbAttr, WonderSkinAbAttr, applyPreDefendAbAttrs, IgnoreMoveEffectsAbAttr, BlockStatusDamageAbAttr, BypassSpeedChanceAbAttr, AddSecondStrikeAbAttr } from "./data/ability"; import { Unlockables, getUnlockableName } from "./system/unlockables"; import { getBiomeKey } from "./field/arena"; import { BattleType, BattlerIndex, TurnCommand } from "./battle"; @@ -2878,6 +2878,7 @@ export class MoveEffectPhase extends PokemonPhase { const hitCount = new Utils.IntegerHolder(1); // Assume single target for multi hit applyMoveAttrs(MultiHitAttr, user, this.getTarget(), move, hitCount); + applyPreAttackAbAttrs(AddSecondStrikeAbAttr, user, null, move, targets.length, hitCount, new Utils.IntegerHolder(0)); if (move instanceof AttackMove && !move.hasAttr(FixedDamageAttr)) { this.scene.applyModifiers(PokemonMultiHitModifier, user.isPlayer(), user, hitCount, new Utils.IntegerHolder(0)); } @@ -2885,13 +2886,11 @@ export class MoveEffectPhase extends PokemonPhase { } const moveHistoryEntry = { move: this.move.moveId, targets: this.targets, result: MoveResult.PENDING, virtual: this.move.virtual }; - user.pushMoveHistory(moveHistoryEntry); const targetHitChecks = Object.fromEntries(targets.map(p => [p.getBattlerIndex(), this.hitCheck(p)])); const activeTargets = targets.map(t => t.isActive(true)); if (!activeTargets.length || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]])) { - user.turnData.hitCount = 1; - user.turnData.hitsLeft = 1; + this.stopMultiHit(); if (activeTargets.length) { this.scene.queueMessage(getPokemonMessage(user, "'s\nattack missed!")); moveHistoryEntry.result = MoveResult.MISS; @@ -2900,6 +2899,7 @@ export class MoveEffectPhase extends PokemonPhase { this.scene.queueMessage(i18next.t("battle:attackFailed")); moveHistoryEntry.result = MoveResult.FAIL; } + user.pushMoveHistory(moveHistoryEntry); return this.end(); } @@ -2909,8 +2909,7 @@ export class MoveEffectPhase extends PokemonPhase { new MoveAnim(move.id as Moves, user, this.getTarget()?.getBattlerIndex()).play(this.scene, () => { for (const target of targets) { if (!targetHitChecks[target.getBattlerIndex()]) { - user.turnData.hitCount = 1; - user.turnData.hitsLeft = 1; + this.stopMultiHit(target); this.scene.queueMessage(getPokemonMessage(user, "'s\nattack missed!")); if (moveHistoryEntry.result === MoveResult.PENDING) { moveHistoryEntry.result = MoveResult.MISS; @@ -2921,25 +2920,33 @@ export class MoveEffectPhase extends PokemonPhase { const isProtected = !this.move.getMove().checkFlag(MoveFlags.IGNORE_PROTECT, user, target) && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType)); - const firstHit = moveHistoryEntry.result !== MoveResult.SUCCESS; + const firstHit = (user.turnData.hitsLeft === user.turnData.hitCount); + + if (firstHit) { + user.pushMoveHistory(moveHistoryEntry); + } moveHistoryEntry.result = MoveResult.SUCCESS; const hitResult = !isProtected ? target.apply(user, move) : HitResult.NO_EFFECT; - this.scene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); + const lastHit = (user.turnData.hitsLeft === 1 || !this.getTarget()?.isActive()); + + if (lastHit) { + this.scene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); + } applyAttrs.push(new Promise(resolve => { - applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.PRE_APPLY && (!attr.firstHitOnly || firstHit), + applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.PRE_APPLY && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), user, target, move).then(() => { if (hitResult !== HitResult.FAIL) { const chargeEffect = !!move.getAttrs(ChargeAttr).find(ca => ca.usedChargeEffect(user, this.getTarget(), move)); // Charge attribute with charge effect takes all effect attributes and applies them to charge stage, so ignore them if this is present Utils.executeIf(!chargeEffect, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_APPLY - && attr.selfTarget && (!attr.firstHitOnly || firstHit), user, target, move)).then(() => { + && attr.selfTarget && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), user, target, move)).then(() => { if (hitResult !== HitResult.NO_EFFECT) { applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.POST_APPLY - && !(attr as MoveEffectAttr).selfTarget && (!attr.firstHitOnly || firstHit), user, target, this.move.getMove()).then(() => { + && !(attr as MoveEffectAttr).selfTarget && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), user, target, this.move.getMove()).then(() => { if (hitResult < HitResult.NO_EFFECT && !target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr)) { const flinched = new Utils.BooleanHolder(false); user.scene.applyModifiers(FlinchChanceModifier, user.isPlayer(), user, flinched); @@ -2947,7 +2954,7 @@ export class MoveEffectPhase extends PokemonPhase { target.addTag(BattlerTagType.FLINCHED, undefined, this.move.moveId, user.id); } } - Utils.executeIf(!isProtected && !chargeEffect, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.HIT && (!attr.firstHitOnly || firstHit), + Utils.executeIf(!isProtected && !chargeEffect, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.HIT && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), user, target, this.move.getMove()).then(() => { return Utils.executeIf(!target.isFainted() || target.canApplyAbility(), () => applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move.getMove(), hitResult).then(() => { if (!user.isPlayer() && this.move.getMove() instanceof AttackMove) { @@ -2974,14 +2981,17 @@ export class MoveEffectPhase extends PokemonPhase { }); })); } - // Trigger effect which should only apply one time after all targeted effects have already applied - const postTarget = applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, - user, null, move); + // Trigger effect which should only apply one time on the last hit after all targeted effects have already applied + const postTarget = (user.turnData.hitsLeft === 1 || !this.getTarget()?.isActive()) ? + applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, user, null, move) : + null; - if (applyAttrs.length) { // If there is a pending asynchronous move effect, do this after - applyAttrs[applyAttrs.length - 1]?.then(() => postTarget); - } else { // Otherwise, push a new asynchronous move effect - applyAttrs.push(postTarget); + if (!!postTarget) { + if (applyAttrs.length) { // If there is a pending asynchronous move effect, do this after + applyAttrs[applyAttrs.length - 1]?.then(() => postTarget); + } else { // Otherwise, push a new asynchronous move effect + applyAttrs.push(postTarget); + } } Promise.allSettled(applyAttrs).then(() => this.end()); @@ -3104,6 +3114,28 @@ export class MoveEffectPhase extends PokemonPhase { return this.getTargets().find(() => true); } + removeTarget(target: Pokemon): void { + const targetIndex = this.targets.findIndex(ind => ind === target.getBattlerIndex()); + if (targetIndex !== -1) { + this.targets.splice(this.targets.findIndex(ind => ind === target.getBattlerIndex()), 1); + } + } + + stopMultiHit(target?: Pokemon): void { + /** If given a specific target, remove the target from subsequent strikes */ + if (target) { + this.removeTarget(target); + } + /** + * If no target specified, or the specified target was the last of this move's + * targets, completely cancel all subsequent strikes. + */ + if (!target || this.targets.length === 0 ) { + this.getUserPokemon().turnData.hitCount = 1; + this.getUserPokemon().turnData.hitsLeft = 1; + } + } + getNewHitPhase() { return new MoveEffectPhase(this.scene, this.battlerIndex, this.targets, this.move); } diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index e30cfd7e24e..57f4c0aea93 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -50,6 +50,7 @@ export default class PokemonData { public fusionLuck: integer; public boss: boolean; + public bossSegments?: integer; public summonData: PokemonSummonData; @@ -96,6 +97,7 @@ export default class PokemonData { if (!forHistory) { this.boss = (source instanceof EnemyPokemon && !!source.bossSegments) || (!this.player && !!source.boss); + this.bossSegments = source.bossSegments; } if (sourcePokemon) { diff --git a/src/test/abilities/dry_skin.test.ts b/src/test/abilities/dry_skin.test.ts index 1caa7da0b3b..e74155b8bdf 100644 --- a/src/test/abilities/dry_skin.test.ts +++ b/src/test/abilities/dry_skin.test.ts @@ -6,6 +6,7 @@ import { TurnEndPhase } from "#app/phases"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; import { Abilities } from "#enums/abilities"; +import { Species } from "#app/enums/species.js"; describe("Abilities - Dry Skin", () => { let phaserGame: Phaser.Game; @@ -26,6 +27,9 @@ describe("Abilities - Dry Skin", () => { vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.DRY_SKIN); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.CHARMANDER); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.CHANDELURE); }); it("during sunlight, lose 1/8 of maximum health at the end of each turn", async () => { @@ -84,6 +88,7 @@ describe("Abilities - Dry Skin", () => { expect(enemy).not.toBe(undefined); // first turn + vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(0); // this makes moves always deal 85% damage game.doAttack(getMovePosition(game.scene, 0, Moves.EMBER)); await game.phaseInterceptor.to(TurnEndPhase); const fireDamageTakenWithDrySkin = enemy.getMaxHp() - enemy.hp; diff --git a/src/test/abilities/parental_bond.test.ts b/src/test/abilities/parental_bond.test.ts new file mode 100644 index 00000000000..4e9a0573505 --- /dev/null +++ b/src/test/abilities/parental_bond.test.ts @@ -0,0 +1,650 @@ +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import GameManager from "../utils/gameManager"; +import * as Overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "../utils/gameManagerUtils"; +import { CommandPhase, DamagePhase, MoveEffectPhase, MoveEndPhase, TurnEndPhase } from "#app/phases.js"; +import { BattleStat } from "#app/data/battle-stat.js"; +import { Type } from "#app/data/type.js"; +import { BattlerTagType } from "#app/enums/battler-tag-type.js"; +import { StatusEffect } from "#app/data/status-effect.js"; + +const TIMEOUT = 20 * 1000; + +describe("Abilities - Parental Bond", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(Overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(Overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.PARENTAL_BOND); + vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); + vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.INSOMNIA); + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(Overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100); + vi.spyOn(Overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100); + }); + + test( + "ability should add second strike to attack move", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + let enemyStartingHp = enemyPokemon.hp; + + game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(15); + + await game.phaseInterceptor.to(DamagePhase); + const firstStrikeDamage = enemyStartingHp - enemyPokemon.hp; + enemyStartingHp = enemyPokemon.hp; + + await game.phaseInterceptor.to(TurnEndPhase, false); + + const secondStrikeDamage = enemyStartingHp - enemyPokemon.hp; + + expect(leadPokemon.turnData.hitCount).toBe(2); + expect(secondStrikeDamage).toBe(Math.ceil(0.25 * firstStrikeDamage)); + }, TIMEOUT + ); + + test( + "ability should apply secondary effects to both strikes", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.POWER_UP_PUNCH]); + vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.AMOONGUSS); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.POWER_UP_PUNCH)); + + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(leadPokemon.turnData.hitCount).toBe(2); + expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(2); + }, TIMEOUT + ); + + test( + "ability should not apply to Status moves", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.BABY_DOLL_EYES]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.BABY_DOLL_EYES)); + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(enemyPokemon.summonData.battleStats[BattleStat.ATK]).toBe(-1); + }, TIMEOUT + ); + + test( + "ability should not apply to multi-hit moves", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.DOUBLE_HIT]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DOUBLE_HIT)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(leadPokemon.turnData.hitCount).toBe(2); + }, TIMEOUT + ); + + test( + "ability should not apply to self-sacrifice moves", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SELF_DESTRUCT]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.SELF_DESTRUCT)); + + await game.phaseInterceptor.to(DamagePhase, false); + + expect(leadPokemon.turnData.hitCount).toBe(1); + }, TIMEOUT + ); + + test( + "ability should not apply to Rollout", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.ROLLOUT]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.ROLLOUT)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(DamagePhase, false); + + expect(leadPokemon.turnData.hitCount).toBe(1); + }, TIMEOUT + ); + + test( + "ability should not apply multiplier to fixed-damage moves", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.DRAGON_RAGE]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + const enemyStartingHp = enemyPokemon.hp; + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(enemyPokemon.hp).toBe(enemyStartingHp - 80); + }, TIMEOUT + ); + + test( + "ability should not apply multiplier to counter moves", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.COUNTER]); + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE,Moves.TACKLE,Moves.TACKLE,Moves.TACKLE]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + const playerStartingHp = leadPokemon.hp; + const enemyStartingHp = enemyPokemon.hp; + + game.doAttack(getMovePosition(game.scene, 0, Moves.COUNTER)); + await game.phaseInterceptor.to(DamagePhase); + + const playerDamage = playerStartingHp - leadPokemon.hp; + + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(enemyPokemon.hp).toBe(enemyStartingHp - 4*playerDamage); + }, TIMEOUT + ); + + test( + "ability should not apply to multi-target moves", + async () => { + vi.spyOn(Overrides, "DOUBLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(Overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(false); + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.EARTHQUAKE]); + + await game.startBattle([Species.CHARIZARD, Species.PIDGEOT]); + + const playerPokemon = game.scene.getPlayerField(); + expect(playerPokemon.length).toBe(2); + playerPokemon.forEach(p => expect(p).not.toBe(undefined)); + + const enemyPokemon = game.scene.getEnemyField(); + expect(enemyPokemon.length).toBe(2); + enemyPokemon.forEach(p => expect(p).not.toBe(undefined)); + + game.doAttack(getMovePosition(game.scene, 0, Moves.EARTHQUAKE)); + await game.phaseInterceptor.to(CommandPhase); + + game.doAttack(getMovePosition(game.scene, 1, Moves.EARTHQUAKE)); + await game.phaseInterceptor.to(TurnEndPhase, false); + + playerPokemon.forEach(p => expect(p.turnData.hitCount).toBe(1)); + }, TIMEOUT + ); + + test( + "ability should apply to multi-target moves when hitting only one target", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.EARTHQUAKE]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.EARTHQUAKE)); + await game.phaseInterceptor.to(DamagePhase, false); + + expect(leadPokemon.turnData.hitCount).toBe(2); + }, TIMEOUT + ); + + test( + "ability should only trigger post-target move effects once", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.MIND_BLOWN]); + + await game.startBattle([Species.PIDGEOT]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.MIND_BLOWN)); + + await game.phaseInterceptor.to(DamagePhase, false); + + expect(leadPokemon.turnData.hitCount).toBe(2); + + // This test will time out if the user faints + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(leadPokemon.hp).toBe(Math.floor(leadPokemon.getMaxHp()/2)); + }, TIMEOUT + ); + + test( + "Burn Up only removes type after second strike with this ability", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.BURN_UP]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.BURN_UP)); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(2); + expect(enemyPokemon.hp).toBeGreaterThan(0); + expect(leadPokemon.isOfType(Type.FIRE)).toBe(true); + + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(leadPokemon.isOfType(Type.FIRE)).toBe(false); + }, TIMEOUT + ); + + test( + "Moves boosted by this ability and Multi-Lens should strike 4 times", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE]); + vi.spyOn(Overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{name: "MULTI_LENS", count: 1}]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(4); + }, TIMEOUT + ); + + test( + "Super Fang boosted by this ability and Multi-Lens should strike twice", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SUPER_FANG]); + vi.spyOn(Overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{name: "MULTI_LENS", count: 1}]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + const enemyStartingHp = enemyPokemon.hp; + + game.doAttack(getMovePosition(game.scene, 0, Moves.SUPER_FANG)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(2); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(enemyPokemon.hp).toBe(Math.ceil(enemyStartingHp * 0.25)); + }, TIMEOUT + ); + + test( + "Seismic Toss boosted by this ability and Multi-Lens should strike twice", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SEISMIC_TOSS]); + vi.spyOn(Overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{name: "MULTI_LENS", count: 1}]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + const enemyStartingHp = enemyPokemon.hp; + + game.doAttack(getMovePosition(game.scene, 0, Moves.SEISMIC_TOSS)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(2); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(enemyPokemon.hp).toBe(enemyStartingHp - 200); + }, TIMEOUT + ); + + test( + "Hyper Beam boosted by this ability should strike twice, then recharge", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.HYPER_BEAM]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.HYPER_BEAM)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(2); + expect(leadPokemon.getTag(BattlerTagType.RECHARGING)).toBeUndefined(); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(leadPokemon.getTag(BattlerTagType.RECHARGING)).toBeDefined(); + }, TIMEOUT + ); + + /** TODO: Fix TRAPPED tag lapsing incorrectly, then run this test */ + test.skip( + "Anchor Shot boosted by this ability should only trap the target after the second hit", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.ANCHOR_SHOT]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.ANCHOR_SHOT)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(2); + expect(enemyPokemon.getTag(BattlerTagType.TRAPPED)).toBeUndefined(); // Passes + + await game.phaseInterceptor.to(MoveEndPhase); + expect(enemyPokemon.getTag(BattlerTagType.TRAPPED)).toBeDefined(); // Passes + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(enemyPokemon.getTag(BattlerTagType.TRAPPED)).toBeDefined(); // Fails :( + }, TIMEOUT + ); + + test( + "Smack Down boosted by this ability should only ground the target after the second hit", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SMACK_DOWN]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.SMACK_DOWN)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(2); + expect(enemyPokemon.getTag(BattlerTagType.IGNORE_FLYING)).toBeUndefined(); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(enemyPokemon.getTag(BattlerTagType.IGNORE_FLYING)).toBeDefined(); + }, TIMEOUT + ); + + test( + "U-turn boosted by this ability should strike twice before forcing a switch", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.U_TURN]); + + await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.U_TURN)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(MoveEffectPhase); + expect(leadPokemon.turnData.hitCount).toBe(2); + + // This will cause this test to time out if the switch was forced on the first hit. + await game.phaseInterceptor.to(MoveEffectPhase, false); + }, TIMEOUT + ); + + test( + "Wake-Up Slap boosted by this ability should only wake up the target after the second hit", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.WAKE_UP_SLAP]); + vi.spyOn(Overrides, "OPP_STATUS_OVERRIDE", "get").mockReturnValue(StatusEffect.SLEEP); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.WAKE_UP_SLAP)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + + await game.phaseInterceptor.to(DamagePhase); + + expect(leadPokemon.turnData.hitCount).toBe(2); + expect(enemyPokemon.status?.effect).toBe(StatusEffect.SLEEP); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(enemyPokemon.status?.effect).toBeUndefined(); + }, TIMEOUT + ); + + test( + "ability should not cause user to hit into King's Shield more than once", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE]); + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.KINGS_SHIELD,Moves.KINGS_SHIELD,Moves.KINGS_SHIELD,Moves.KINGS_SHIELD]); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(-1); + }, TIMEOUT + ); + + test( + "ability should not cause user to hit into Storm Drain more than once", + async () => { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.WATER_GUN]); + vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.STORM_DRAIN); + + await game.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).not.toBe(undefined); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).not.toBe(undefined); + + game.doAttack(getMovePosition(game.scene, 0, Moves.WATER_GUN)); + + await game.phaseInterceptor.to(TurnEndPhase, false); + + expect(enemyPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(1); + }, TIMEOUT + ); + + test( + "ability should not apply to multi-target moves with Multi-Lens", + async () => { + vi.spyOn(Overrides, "DOUBLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(Overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(false); + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.EARTHQUAKE, Moves.SPLASH]); + vi.spyOn(Overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{name: "MULTI_LENS", count: 1}]); + + await game.startBattle([Species.CHARIZARD, Species.PIDGEOT]); + + const playerPokemon = game.scene.getPlayerField(); + expect(playerPokemon.length).toBe(2); + playerPokemon.forEach(p => expect(p).not.toBe(undefined)); + + const enemyPokemon = game.scene.getEnemyField(); + expect(enemyPokemon.length).toBe(2); + enemyPokemon.forEach(p => expect(p).not.toBe(undefined)); + + const enemyStartingHp = enemyPokemon.map(p => p.hp); + + game.doAttack(getMovePosition(game.scene, 0, Moves.EARTHQUAKE)); + await game.phaseInterceptor.to(CommandPhase); + + game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(15); + + await game.phaseInterceptor.to(DamagePhase); + const enemyFirstHitDamage = enemyStartingHp.map((hp, i) => hp - enemyPokemon[i].hp); + + await game.phaseInterceptor.to(TurnEndPhase, false); + + enemyPokemon.forEach((p, i) => expect(enemyStartingHp[i] - p.hp).toBe(2*enemyFirstHitDamage[i])); + + }, TIMEOUT + ); +}); diff --git a/src/test/abilities/quick_draw.test.ts b/src/test/abilities/quick_draw.test.ts index 6b72b83bd18..884b108381d 100644 --- a/src/test/abilities/quick_draw.test.ts +++ b/src/test/abilities/quick_draw.test.ts @@ -1,16 +1,13 @@ -import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; -import {Abilities} from "#enums/abilities"; -import {Species} from "#enums/species"; -import {EnemyCommandPhase, TitlePhase, TurnEndPhase, TurnStartPhase, -} from "#app/phases"; +import * as Overrides from "#app/overrides"; +import { Abilities } from "#enums/abilities"; +import { Species } from "#enums/species"; +import { FaintPhase } from "#app/phases"; import { Moves } from "#enums/moves"; -import { Stat } from "#app/data/pokemon-stat"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; import { allAbilities, BypassSpeedChanceAbAttr } from "#app/data/ability"; - +import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; describe("Abilities - Quick Draw", () => { let phaserGame: Phaser.Game; @@ -28,90 +25,66 @@ describe("Abilities - Quick Draw", () => { beforeEach(() => { game = new GameManager(phaserGame); - vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); - vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue( - Abilities.QUICK_DRAW - ); - vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue( - Species.RATTATA - ); - vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([ - Moves.TACKLE, - Moves.TACKLE, - Moves.TACKLE, - Moves.TACKLE, - ]); + vi.spyOn(Overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(Overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.QUICK_DRAW); + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.TAIL_WHIP]); + vi.spyOn(Overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100); + vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.RATTATA); + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - vi.spyOn( - allAbilities[Abilities.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], - "chance","get" - ).mockReturnValue(100); + vi.spyOn(allAbilities[Abilities.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue(100); }); - it("makes pokemon going first in its priority bracket", async() => { + test("makes pokemon going first in its priority bracket", async () => { await game.startBattle([Species.SLOWBRO]); - const pokemon = game.scene.getParty()[0]; - const enemy = game.scene.getEnemyParty()[0]; + const pokemon = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); - pokemon.stats[Stat.SPD] = 50; - enemy.stats[Stat.SPD] = 150; pokemon.hp = 1; enemy.hp = 1; game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + await game.phaseInterceptor.to(FaintPhase, false); - await game.phaseInterceptor.run(EnemyCommandPhase); - await game.phaseInterceptor.run(TurnStartPhase); - await game.phaseInterceptor.to(TurnEndPhase); - - expect(pokemon.battleData.abilityRevealed).toBe(true); + expect(pokemon.isFainted()).toBe(false); + expect(enemy.isFainted()).toBe(true); + expect(pokemon.battleData.abilitiesApplied).contain(Abilities.QUICK_DRAW); }, 20000); - it("does not triggered by non damage moves", async () => { + test("does not triggered by non damage moves", async () => { await game.startBattle([Species.SLOWBRO]); - const pokemon = game.scene.getParty()[0]; - const enemy = game.scene.getEnemyParty()[0]; + const pokemon = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); - pokemon.stats[Stat.SPD] = 50; - enemy.stats[Stat.SPD] = 150; pokemon.hp = 1; enemy.hp = 1; - game.doAttack(getMovePosition(game.scene, 0, Moves.TOXIC)); + game.doAttack(getMovePosition(game.scene, 0, Moves.TAIL_WHIP)); + await game.phaseInterceptor.to(FaintPhase, false); - await game.phaseInterceptor.run(EnemyCommandPhase); - await game.phaseInterceptor.run(TurnStartPhase); - await game.phaseInterceptor.to(TitlePhase); - - expect(pokemon.battleData.abilityRevealed).not.toBe(true); + expect(pokemon.isFainted()).toBe(true); + expect(enemy.isFainted()).toBe(false); + expect(pokemon.battleData.abilitiesApplied).not.contain(Abilities.QUICK_DRAW); }, 20000); - it("does not increase priority", async () => { - vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([ - Moves.EXTREME_SPEED, - Moves.EXTREME_SPEED, - Moves.EXTREME_SPEED, - Moves.EXTREME_SPEED, - ]); + test("does not increase priority", async () => { + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(Array(4).fill(Moves.EXTREME_SPEED)); await game.startBattle([Species.SLOWBRO]); - const pokemon = game.scene.getParty()[0]; - const enemy = game.scene.getEnemyParty()[0]; + const pokemon = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); - pokemon.stats[Stat.SPD] = 50; - enemy.stats[Stat.SPD] = 150; pokemon.hp = 1; enemy.hp = 1; game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + await game.phaseInterceptor.to(FaintPhase, false); - await game.phaseInterceptor.run(EnemyCommandPhase); - await game.phaseInterceptor.run(TurnStartPhase); - await game.phaseInterceptor.to(TitlePhase); - - expect(pokemon.battleData.abilityRevealed).toBe(true); + expect(pokemon.isFainted()).toBe(true); + expect(enemy.isFainted()).toBe(false); + expect(pokemon.battleData.abilitiesApplied).contain(Abilities.QUICK_DRAW); }, 20000); }); diff --git a/src/test/items/light_ball.test.ts b/src/test/items/light_ball.test.ts new file mode 100644 index 00000000000..52fab7b044a --- /dev/null +++ b/src/test/items/light_ball.test.ts @@ -0,0 +1,200 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phase from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Stat } from "#app/data/pokemon-stat"; +import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import * as Utils from "#app/utils"; +import i18next from "#app/plugins/i18n"; + +describe("Items - Light Ball", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + }); + + it("LIGHT_BALL activates in battle correctly", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "SPECIES_STAT_BOOSTER", type: "LIGHT_BALL" }]); + const consoleSpy = vi.spyOn(console, "log"); + await game.startBattle([ + Species.PIKACHU + ]); + + const partyMember = game.scene.getParty()[0]; + + // Checking consoe log to make sure Light Ball is applied when getBattleStat (with the appropriate stat) is called + partyMember.getBattleStat(Stat.DEF); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.LIGHT_BALL.name"), ""); + + // Printing dummy console messages along the way so subsequent checks don't pass because of the first + console.log(""); + + partyMember.getBattleStat(Stat.SPDEF); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.LIGHT_BALL.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.ATK); + expect(consoleSpy).toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.LIGHT_BALL.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPATK); + expect(consoleSpy).toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.LIGHT_BALL.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPD); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.LIGHT_BALL.name"), ""); + }); + + it("LIGHT_BALL held by PIKACHU", async() => { + await game.startBattle([ + Species.PIKACHU + ]); + + const partyMember = game.scene.getParty()[0]; + + const atkStat = partyMember.getStat(Stat.ATK); + const spAtkStat = partyMember.getStat(Stat.SPATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + const spAtkValue = new Utils.NumberHolder(spAtkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + + expect(atkValue.value / atkStat).toBe(1); + expect(spAtkValue.value / spAtkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["LIGHT_BALL"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + + expect(atkValue.value / atkStat).toBe(2); + expect(spAtkValue.value / spAtkStat).toBe(2); + }, 20000); + + it("LIGHT_BALL held by fused PIKACHU (base)", async() => { + await game.startBattle([ + Species.PIKACHU, + Species.MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const atkStat = partyMember.getStat(Stat.ATK); + const spAtkStat = partyMember.getStat(Stat.SPATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + const spAtkValue = new Utils.NumberHolder(spAtkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + + expect(atkValue.value / atkStat).toBe(1); + expect(spAtkValue.value / spAtkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["LIGHT_BALL"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + + expect(atkValue.value / atkStat).toBe(2); + expect(spAtkValue.value / spAtkStat).toBe(2); + }, 20000); + + it("LIGHT_BALL held by fused PIKACHU (part)", async() => { + await game.startBattle([ + Species.MAROWAK, + Species.PIKACHU + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const atkStat = partyMember.getStat(Stat.ATK); + const spAtkStat = partyMember.getStat(Stat.SPATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + const spAtkValue = new Utils.NumberHolder(spAtkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + + expect(atkValue.value / atkStat).toBe(1); + expect(spAtkValue.value / spAtkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["LIGHT_BALL"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + + expect(atkValue.value / atkStat).toBe(2); + expect(spAtkValue.value / spAtkStat).toBe(2); + }, 20000); + + it("LIGHT_BALL not held by PIKACHU", async() => { + await game.startBattle([ + Species.MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + + const atkStat = partyMember.getStat(Stat.ATK); + const spAtkStat = partyMember.getStat(Stat.SPATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); + const spAtkValue = new Utils.NumberHolder(spAtkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); + + expect(atkValue.value / atkStat).toBe(1); + expect(spAtkValue.value / spAtkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["LIGHT_BALL"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); + + expect(atkValue.value / atkStat).toBe(1); + expect(spAtkValue.value / spAtkStat).toBe(1); + }, 20000); +}); diff --git a/src/test/items/metal_powder.test.ts b/src/test/items/metal_powder.test.ts new file mode 100644 index 00000000000..5aa2c517ac9 --- /dev/null +++ b/src/test/items/metal_powder.test.ts @@ -0,0 +1,176 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phase from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Stat } from "#app/data/pokemon-stat"; +import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import * as Utils from "#app/utils"; +import i18next from "#app/plugins/i18n"; + +describe("Items - Metal Powder", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + }); + + it("METAL_POWDER activates in battle correctly", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "SPECIES_STAT_BOOSTER", type: "METAL_POWDER" }]); + const consoleSpy = vi.spyOn(console, "log"); + await game.startBattle([ + Species.DITTO + ]); + + const partyMember = game.scene.getParty()[0]; + + // Checking consoe log to make sure Metal Powder is applied when getBattleStat (with the appropriate stat) is called + partyMember.getBattleStat(Stat.DEF); + expect(consoleSpy).toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.METAL_POWDER.name"), ""); + + // Printing dummy console messages along the way so subsequent checks don't pass because of the first + console.log(""); + + partyMember.getBattleStat(Stat.SPDEF); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.METAL_POWDER.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.ATK); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.METAL_POWDER.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPATK); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.METAL_POWDER.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPD); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.METAL_POWDER.name"), ""); + }); + + it("METAL_POWDER held by DITTO", async() => { + await game.startBattle([ + Species.DITTO + ]); + + const partyMember = game.scene.getParty()[0]; + + const defStat = partyMember.getStat(Stat.DEF); + + // Making sure modifier is not applied without holding item + const defValue = new Utils.NumberHolder(defStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["METAL_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(2); + }, 20000); + + it("METAL_POWDER held by fused DITTO (base)", async() => { + await game.startBattle([ + Species.DITTO, + Species.MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const defStat = partyMember.getStat(Stat.DEF); + + // Making sure modifier is not applied without holding item + const defValue = new Utils.NumberHolder(defStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["METAL_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(2); + }, 20000); + + it("METAL_POWDER held by fused DITTO (part)", async() => { + await game.startBattle([ + Species.MAROWAK, + Species.DITTO + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const defStat = partyMember.getStat(Stat.DEF); + + // Making sure modifier is not applied without holding item + const defValue = new Utils.NumberHolder(defStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["METAL_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(2); + }, 20000); + + it("METAL_POWDER not held by DITTO", async() => { + await game.startBattle([ + Species.MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + + const defStat = partyMember.getStat(Stat.DEF); + + // Making sure modifier is not applied without holding item + const defValue = new Utils.NumberHolder(defStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["METAL_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); + + expect(defValue.value / defStat).toBe(1); + }, 20000); +}); diff --git a/src/test/items/quick_powder.test.ts b/src/test/items/quick_powder.test.ts new file mode 100644 index 00000000000..753f62e36eb --- /dev/null +++ b/src/test/items/quick_powder.test.ts @@ -0,0 +1,176 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phase from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Stat } from "#app/data/pokemon-stat"; +import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import * as Utils from "#app/utils"; +import i18next from "#app/plugins/i18n"; + +describe("Items - Quick Powder", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + }); + + it("QUICK_POWDER activates in battle correctly", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "SPECIES_STAT_BOOSTER", type: "QUICK_POWDER" }]); + const consoleSpy = vi.spyOn(console, "log"); + await game.startBattle([ + Species.DITTO + ]); + + const partyMember = game.scene.getParty()[0]; + + // Checking consoe log to make sure Quick Powder is applied when getBattleStat (with the appropriate stat) is called + partyMember.getBattleStat(Stat.DEF); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.QUICK_POWDER.name"), ""); + + // Printing dummy console messages along the way so subsequent checks don't pass because of the first + console.log(""); + + partyMember.getBattleStat(Stat.SPDEF); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.QUICK_POWDER.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.ATK); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.QUICK_POWDER.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPATK); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.QUICK_POWDER.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPD); + expect(consoleSpy).toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.QUICK_POWDER.name"), ""); + }); + + it("QUICK_POWDER held by DITTO", async() => { + await game.startBattle([ + Species.DITTO + ]); + + const partyMember = game.scene.getParty()[0]; + + const spdStat = partyMember.getStat(Stat.SPD); + + // Making sure modifier is not applied without holding item + const spdValue = new Utils.NumberHolder(spdStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["QUICK_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(2); + }, 20000); + + it("QUICK_POWDER held by fused DITTO (base)", async() => { + await game.startBattle([ + Species.DITTO, + Species.MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const spdStat = partyMember.getStat(Stat.SPD); + + // Making sure modifier is not applied without holding item + const spdValue = new Utils.NumberHolder(spdStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["QUICK_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(2); + }, 20000); + + it("QUICK_POWDER held by fused DITTO (part)", async() => { + await game.startBattle([ + Species.MAROWAK, + Species.DITTO + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const spdStat = partyMember.getStat(Stat.SPD); + + // Making sure modifier is not applied without holding item + const spdValue = new Utils.NumberHolder(spdStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["QUICK_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(2); + }, 20000); + + it("QUICK_POWDER not held by DITTO", async() => { + await game.startBattle([ + Species.MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + + const spdStat = partyMember.getStat(Stat.SPD); + + // Making sure modifier is not applied without holding item + const spdValue = new Utils.NumberHolder(spdStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["QUICK_POWDER"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); + + expect(spdValue.value / spdStat).toBe(1); + }, 20000); +}); diff --git a/src/test/items/thick_club.test.ts b/src/test/items/thick_club.test.ts new file mode 100644 index 00000000000..3356196e8c5 --- /dev/null +++ b/src/test/items/thick_club.test.ts @@ -0,0 +1,228 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phase from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Stat } from "#app/data/pokemon-stat"; +import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import * as Utils from "#app/utils"; +import i18next from "#app/plugins/i18n"; + +describe("Items - Thick Club", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + }); + + it("THICK_CLUB activates in battle correctly", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]); + const consoleSpy = vi.spyOn(console, "log"); + await game.startBattle([ + Species.CUBONE + ]); + + const partyMember = game.scene.getParty()[0]; + + // Checking consoe log to make sure Thick Club is applied when getBattleStat (with the appropriate stat) is called + partyMember.getBattleStat(Stat.DEF); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.THICK_CLUB.name"), ""); + + // Printing dummy console messages along the way so subsequent checks don't pass because of the first + console.log(""); + + partyMember.getBattleStat(Stat.SPDEF); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.THICK_CLUB.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.ATK); + expect(consoleSpy).toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.THICK_CLUB.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPATK); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.THICK_CLUB.name"), ""); + + console.log(""); + + partyMember.getBattleStat(Stat.SPD); + expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:SpeciesBoosterItem.THICK_CLUB.name"), ""); + }); + + it("THICK_CLUB held by CUBONE", async() => { + await game.startBattle([ + Species.CUBONE + ]); + + const partyMember = game.scene.getParty()[0]; + + const atkStat = partyMember.getStat(Stat.ATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["THICK_CLUB"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(2); + }, 20000); + + it("THICK_CLUB held by MAROWAK", async() => { + await game.startBattle([ + Species.MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + + const atkStat = partyMember.getStat(Stat.ATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["THICK_CLUB"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(2); + }, 20000); + + it("THICK_CLUB held by ALOLA_MAROWAK", async() => { + await game.startBattle([ + Species.ALOLA_MAROWAK + ]); + + const partyMember = game.scene.getParty()[0]; + + const atkStat = partyMember.getStat(Stat.ATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["THICK_CLUB"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(2); + }, 20000); + + it("THICK_CLUB held by fused CUBONE line (base)", async() => { + // Randomly choose from the Cubone line + const species = [ Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK ]; + const randSpecies = Utils.randInt(species.length); + + await game.startBattle([ + species[randSpecies], + Species.PIKACHU + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const atkStat = partyMember.getStat(Stat.ATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["THICK_CLUB"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(2); + }, 20000); + + it("THICK_CLUB held by fused CUBONE line (part)", async() => { + // Randomly choose from the Cubone line + const species = [ Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK ]; + const randSpecies = Utils.randInt(species.length); + + await game.startBattle([ + Species.PIKACHU, + species[randSpecies] + ]); + + const partyMember = game.scene.getParty()[0]; + const ally = game.scene.getParty()[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + const atkStat = partyMember.getStat(Stat.ATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["THICK_CLUB"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(2); + }, 20000); + + it("THICK_CLUB not held by CUBONE", async() => { + await game.startBattle([ + Species.PIKACHU + ]); + + const partyMember = game.scene.getParty()[0]; + + const atkStat = partyMember.getStat(Stat.ATK); + + // Making sure modifier is not applied without holding item + const atkValue = new Utils.NumberHolder(atkStat); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(1); + + // Giving Eviolite to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType(null, ["THICK_CLUB"]).newModifier(partyMember), true); + partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); + + expect(atkValue.value / atkStat).toBe(1); + }, 20000); +});