From 4a560d7185665775954c7bfffab959feaa92b3c1 Mon Sep 17 00:00:00 2001 From: Unicorn_Power <189861924+Unicornpowerstar@users.noreply.github.com> Date: Sat, 29 Mar 2025 00:02:47 +0100 Subject: [PATCH 1/7] [Sprite] Reduce Mystical Rock sprite's size (#5570) * Updating the size to be smaller * Update item atlas * Fix Malicious Armor missing outline Noticed when exporting atlas that the item sprite broke --------- Co-authored-by: Madmadness65 Co-authored-by: damocleas --- public/images/items.json | 15378 +++++++++++----------- public/images/items.png | Bin 57986 -> 55816 bytes public/images/items/malicious_armor.png | Bin 686 -> 894 bytes public/images/items/mystical_rock.png | Bin 697 -> 915 bytes 4 files changed, 7689 insertions(+), 7689 deletions(-) diff --git a/public/images/items.json b/public/images/items.json index 64265382dea..5848b02dd6a 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,13 +4,13 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 431, - "h": 431 + "w": 435, + "h": 435 }, "scale": 1, "frames": [ { - "filename": "mystical_rock", + "filename": "relic_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -18,356 +18,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 29 + "x": 9, + "y": 11, + "w": 15, + "h": 11 }, "frame": { "x": 0, "y": 0, - "w": 32, - "h": 29 + "w": 15, + "h": 11 } }, { - "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": 29, - "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": 32, - "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": 59, - "w": 29, - "h": 28 - } - }, - { - "filename": "ribbon_gen4", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 30, - "h": 28 - }, - "frame": { - "x": 64, - "y": 0, - "w": 30, - "h": 28 - } - }, - { - "filename": "leaders_crest", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 29, - "h": 27 - }, - "frame": { - "x": 0, - "y": 87, - "w": 29, - "h": 27 - } - }, - { - "filename": "ribbon_gen2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 28, - "h": 28 - }, - "frame": { - "x": 94, - "y": 0, - "w": 28, - "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": 0, - "y": 114, - "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": 145, - "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": 122, - "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": 176, - "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": 0, - "y": 207, - "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": 238, - "w": 22, - "h": 31 - } - }, - { - "filename": "inverse", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 30 - }, - "frame": { - "x": 0, - "y": 269, - "w": 22, - "h": 30 - } - }, - { - "filename": "ribbon_gen3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 0, - "y": 299, - "w": 22, - "h": 29 - } - }, - { - "filename": "ribbon_gen7", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 0, - "y": 328, - "w": 22, - "h": 29 - } - }, - { - "filename": "ribbon_gen9", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 0, - "y": 357, - "w": 22, - "h": 29 - } - }, - { - "filename": "cornerstone_mask", + "filename": "ability_capsule", "rotated": false, "trimmed": true, "sourceSize": { @@ -376,19 +40,19 @@ }, "spriteSourceSize": { "x": 4, - "y": 3, + "y": 9, "w": 24, - "h": 26 + "h": 14 }, "frame": { - "x": 149, + "x": 15, "y": 0, "w": 24, - "h": 26 + "h": 14 } }, { - "filename": "ribbon_gen1", + "filename": "candy_overlay", "rotated": false, "trimmed": true, "sourceSize": { @@ -396,16 +60,1234 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 + "x": 8, + "y": 12, + "w": 16, + "h": 15 + }, + "frame": { + "x": 39, + "y": 0, + "w": 16, + "h": 15 + } + }, + { + "filename": "eviolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 55, + "y": 0, + "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": 70, + "y": 0, + "w": 15, + "h": 15 + } + }, + { + "filename": "silver_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 11, + "w": 24, + "h": 15 + }, + "frame": { + "x": 85, + "y": 0, + "w": 24, + "h": 15 + } + }, + { + "filename": "ultranecrozium_z", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 9, + "w": 30, + "h": 15 + }, + "frame": { + "x": 109, + "y": 0, + "w": 30, + "h": 15 + } + }, + { + "filename": "abomasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 139, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "absolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 155, + "y": 0, + "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": 171, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "aggronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 187, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "alakazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 203, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "altarianite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 219, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "ampharosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 235, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "audinite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 251, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "banettite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 267, + "y": 0, + "w": 16, + "h": 16 + } + }, + { + "filename": "beedrillite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 283, + "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": 299, + "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": 315, + "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": 331, + "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": 347, + "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": 363, + "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": 379, + "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": 395, + "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": 411, + "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": 386, - "w": 22, - "h": 28 + "y": 11, + "w": 12, + "h": 17 + } + }, + { + "filename": "gardevoirite", + "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": "gengarite", + "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": "glalitite", + "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": "gyaradosite", + "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": "heracronite", + "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": "houndoominite", + "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": "kangaskhanite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 108, + "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": 124, + "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": 140, + "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": 156, + "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": 172, + "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": 188, + "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": 204, + "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": 220, + "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": 236, + "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": 256, + "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": 272, + "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": 288, + "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": 304, + "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": 320, + "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": 336, + "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": 352, + "y": 16, + "w": 16, + "h": 16 + } + }, + { + "filename": "relic_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 16 + }, + "frame": { + "x": 368, + "y": 16, + "w": 17, + "h": 16 + } + }, + { + "filename": "sablenite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 385, + "y": 16, + "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": 401, + "y": 16, + "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": 417, + "y": 16, + "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": 0, + "y": 30, + "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": 16, + "y": 31, + "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": 32, + "y": 31, + "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": 48, + "y": 31, + "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": 64, + "y": 31, + "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": 80, + "y": 31, + "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": 96, + "y": 31, + "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": 112, + "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": 128, + "y": 32, + "w": 16, + "h": 16 } }, { @@ -423,432 +1305,12 @@ "h": 17 }, "frame": { - "x": 0, - "y": 414, + "x": 144, + "y": 32, "w": 23, "h": 17 } }, - { - "filename": "ability_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 23, - "h": 26 - }, - "frame": { - "x": 173, - "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": 196, - "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": 223, - "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": 251, - "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": 279, - "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": 307, - "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": 335, - "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": 363, - "y": 0, - "w": 28, - "h": 21 - } - }, - { - "filename": "chipped_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 391, - "y": 0, - "w": 26, - "h": 20 - } - }, - { - "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": 114, - "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": 22, - "y": 145, - "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": 176, - "w": 17, - "h": 31 - } - }, - { - "filename": "prison_bottle", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 30 - }, - "frame": { - "x": 22, - "y": 207, - "w": 17, - "h": 30 - } - }, - { - "filename": "ribbon_gen5", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 22, - "y": 237, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen6", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 22, - "y": 265, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen8", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 22, - "y": 293, - "w": 22, - "h": 28 - } - }, - { - "filename": "black_augurite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 22, - "h": 25 - }, - "frame": { - "x": 22, - "y": 321, - "w": 22, - "h": 25 - } - }, - { - "filename": "big_root", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 22, - "y": 346, - "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": 22, - "y": 370, - "w": 24, - "h": 24 - } - }, - { - "filename": "cracked_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 22, - "y": 394, - "w": 26, - "h": 20 - } - }, { "filename": "burn_drive", "rotated": false, @@ -864,8 +1326,8 @@ "h": 17 }, "frame": { - "x": 23, - "y": 414, + "x": 167, + "y": 32, "w": 23, "h": 17 } @@ -885,2301 +1347,12 @@ "h": 17 }, "frame": { - "x": 46, - "y": 414, + "x": 190, + "y": 32, "w": 23, "h": 17 } }, - { - "filename": "ultranecrozium_z", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 9, - "w": 30, - "h": 15 - }, - "frame": { - "x": 122, - "y": 26, - "w": 30, - "h": 15 - } - }, - { - "filename": "legend_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 25, - "h": 20 - }, - "frame": { - "x": 152, - "y": 26, - "w": 25, - "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": 177, - "y": 26, - "w": 23, - "h": 21 - } - }, - { - "filename": "choice_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 200, - "y": 22, - "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": 224, - "y": 21, - "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": 248, - "y": 21, - "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": 272, - "y": 21, - "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": 296, - "y": 21, - "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": 320, - "y": 21, - "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": 344, - "y": 21, - "w": 24, - "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": 368, - "y": 21, - "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": 392, - "y": 20, - "w": 24, - "h": 24 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 416, - "y": 20, - "w": 15, - "h": 23 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 416, - "y": 43, - "w": 15, - "h": 22 - } - }, - { - "filename": "clefairy_doll", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 392, - "y": 44, - "w": 24, - "h": 23 - } - }, - { - "filename": "eviolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 416, - "y": 65, - "w": 15, - "h": 15 - } - }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 417, - "y": 0, - "w": 12, - "h": 17 - } - }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 29, - "y": 29, - "w": 16, - "h": 24 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 29, - "y": 53, - "w": 16, - "h": 24 - } - }, - { - "filename": "catching_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 29, - "y": 77, - "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": 45, - "y": 27, - "w": 18, - "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": 63, - "y": 28, - "w": 24, - "h": 23 - } - }, - { - "filename": "grip_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 45, - "y": 51, - "w": 24, - "h": 24 - } - }, - { - "filename": "expert_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 87, - "y": 28, - "w": 24, - "h": 23 - } - }, - { - "filename": "icicle_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 69, - "y": 51, - "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": 50, - "y": 75, - "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": 74, - "y": 75, - "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": 93, - "y": 51, - "w": 18, - "h": 24 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 98, - "y": 75, - "w": 18, - "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": 111, - "y": 41, - "w": 24, - "h": 24 - } - }, - { - "filename": "lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 135, - "y": 41, - "w": 17, - "h": 24 - } - }, - { - "filename": "exp_balance", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 152, - "y": 46, - "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": 176, - "y": 47, - "w": 24, - "h": 22 - } - }, - { - "filename": "hearthflame_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 200, - "y": 46, - "w": 24, - "h": 23 - } - }, - { - "filename": "lucky_punch_great", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 224, - "y": 45, - "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": 248, - "y": 45, - "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": 272, - "y": 45, - "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": 296, - "y": 45, - "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": 320, - "y": 45, - "w": 24, - "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": 344, - "y": 45, - "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": 368, - "y": 45, - "w": 24, - "h": 24 - } - }, - { - "filename": "ability_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 24, - "h": 14 - }, - "frame": { - "x": 392, - "y": 67, - "w": 24, - "h": 14 - } - }, - { - "filename": "pixie_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 116, - "y": 65, - "w": 24, - "h": 24 - } - }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 116, - "y": 89, - "w": 24, - "h": 18 - } - }, - { - "filename": "salac_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 140, - "y": 68, - "w": 24, - "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": 140, - "y": 92, - "w": 24, - "h": 18 - } - }, - { - "filename": "scanner", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 164, - "y": 69, - "w": 24, - "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": 188, - "y": 69, - "w": 24, - "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": 212, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "splash_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 236, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "spooky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 260, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "stone_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 284, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "sun_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 308, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "toxic_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 332, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "zap_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 356, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "golden_net", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 21 - }, - "frame": { - "x": 164, - "y": 93, - "w": 24, - "h": 21 - } - }, - { - "filename": "leppa_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 188, - "y": 93, - "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": 212, - "y": 93, - "w": 24, - "h": 23 - } - }, - { - "filename": "twisted_spoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 236, - "y": 93, - "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": 260, - "y": 93, - "w": 23, - "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": 283, - "y": 93, - "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": 306, - "y": 93, - "w": 23, - "h": 23 - } - }, - { - "filename": "kings_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 329, - "y": 93, - "w": 23, - "h": 24 - } - }, - { - "filename": "reveal_glass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 352, - "y": 93, - "w": 23, - "h": 24 - } - }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 416, - "y": 80, - "w": 15, - "h": 15 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 375, - "y": 93, - "w": 16, - "h": 24 - } - }, - { - "filename": "leek", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 391, - "y": 81, - "w": 23, - "h": 23 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 414, - "y": 95, - "w": 17, - "h": 24 - } - }, - { - "filename": "amulet_coin", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 391, - "y": 104, - "w": 23, - "h": 21 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 414, - "y": 119, - "w": 17, - "h": 24 - } - }, - { - "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": 50, - "y": 99, - "w": 24, - "h": 20 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 74, - "y": 99, - "w": 24, - "h": 20 - } - }, - { - "filename": "berry_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 18, - "h": 22 - }, - "frame": { - "x": 98, - "y": 99, - "w": 18, - "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": 116, - "y": 107, - "w": 24, - "h": 22 - } - }, - { - "filename": "quick_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 140, - "y": 110, - "w": 24, - "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": 164, - "y": 114, - "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": 188, - "y": 116, - "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": 212, - "y": 116, - "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": 236, - "y": 116, - "w": 24, - "h": 20 - } - }, - { - "filename": "auspicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 260, - "y": 116, - "w": 23, - "h": 21 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 283, - "y": 116, - "w": 23, - "h": 22 - } - }, - { - "filename": "macho_brace", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 306, - "y": 116, - "w": 23, - "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": 329, - "y": 117, - "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": 352, - "y": 117, - "w": 23, - "h": 23 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 375, - "y": 117, - "w": 16, - "h": 24 - } - }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 391, - "y": 125, - "w": 23, - "h": 20 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 414, - "y": 143, - "w": 17, - "h": 23 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 39, - "y": 119, - "w": 22, - "h": 24 - } - }, - { - "filename": "black_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 61, - "y": 119, - "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": 39, - "y": 143, - "w": 22, - "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": 39, - "y": 166, - "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": 61, - "y": 142, - "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": 39, - "y": 189, - "w": 22, - "h": 23 - } - }, - { - "filename": "fairy_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 61, - "y": 165, - "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": 39, - "y": 212, - "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": 61, - "y": 188, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 61, - "y": 211, - "w": 22, - "h": 23 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 44, - "y": 235, - "w": 18, - "h": 24 - } - }, - { - "filename": "oval_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 62, - "y": 234, - "w": 21, - "h": 24 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 44, - "y": 259, - "w": 18, - "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": 62, - "y": 258, - "w": 21, - "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": 44, - "y": 283, - "w": 18, - "h": 24 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 62, - "y": 282, - "w": 21, - "h": 23 - } - }, - { - "filename": "red_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 44, - "y": 307, - "w": 20, - "h": 24 - } - }, - { - "filename": "focus_sash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 64, - "y": 305, - "w": 22, - "h": 23 - } - }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 44, - "y": 331, - "w": 24, - "h": 15 - } - }, - { - "filename": "ghost_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 45, - "y": 346, - "w": 22, - "h": 23 - } - }, - { - "filename": "grass_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 46, - "y": 369, - "w": 22, - "h": 23 - } - }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 48, - "y": 392, - "w": 22, - "h": 22 - } - }, { "filename": "douse_drive", "rotated": false, @@ -3195,1020 +1368,12 @@ "h": 17 }, "frame": { - "x": 69, - "y": 414, + "x": 213, + "y": 32, "w": 23, "h": 17 } }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 68, - "y": 328, - "w": 19, - "h": 20 - } - }, - { - "filename": "berry_juice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 21 - }, - "frame": { - "x": 67, - "y": 348, - "w": 22, - "h": 21 - } - }, - { - "filename": "ground_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 68, - "y": 369, - "w": 22, - "h": 23 - } - }, - { - "filename": "charcoal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 70, - "y": 392, - "w": 22, - "h": 22 - } - }, - { - "filename": "ice_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 121, - "w": 22, - "h": 23 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 144, - "w": 22, - "h": 23 - } - }, - { - "filename": "normal_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 167, - "w": 22, - "h": 23 - } - }, - { - "filename": "petaya_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 190, - "w": 22, - "h": 23 - } - }, - { - "filename": "poison_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 213, - "w": 22, - "h": 23 - } - }, - { - "filename": "psychic_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 236, - "w": 22, - "h": 23 - } - }, - { - "filename": "reaper_cloth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 259, - "w": 22, - "h": 23 - } - }, - { - "filename": "rock_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 83, - "y": 282, - "w": 22, - "h": 23 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 86, - "y": 305, - "w": 21, - "h": 23 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 87, - "y": 328, - "w": 20, - "h": 20 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 89, - "y": 348, - "w": 20, - "h": 21 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 90, - "y": 369, - "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": 92, - "y": 392, - "w": 20, - "h": 23 - } - }, - { - "filename": "mega_bracelet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 16 - }, - "frame": { - "x": 92, - "y": 415, - "w": 20, - "h": 16 - } - }, - { - "filename": "rusted_sword", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 105, - "y": 129, - "w": 23, - "h": 22 - } - }, - { - "filename": "steel_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 105, - "y": 151, - "w": 22, - "h": 23 - } - }, - { - "filename": "stellar_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 105, - "y": 174, - "w": 22, - "h": 23 - } - }, - { - "filename": "water_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 105, - "y": 197, - "w": 22, - "h": 23 - } - }, - { - "filename": "wide_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 105, - "y": 220, - "w": 22, - "h": 23 - } - }, - { - "filename": "dark_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 105, - "y": 243, - "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": 105, - "y": 265, - "w": 22, - "h": 22 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 105, - "y": 287, - "w": 23, - "h": 18 - } - }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 107, - "y": 305, - "w": 21, - "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": 107, - "y": 328, - "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": 109, - "y": 348, - "w": 22, - "h": 21 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 111, - "y": 369, - "w": 21, - "h": 23 - } - }, - { - "filename": "dna_splicers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 112, - "y": 392, - "w": 22, - "h": 22 - } - }, - { - "filename": "shock_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 112, - "y": 414, - "w": 23, - "h": 17 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 128, - "y": 130, - "w": 23, - "h": 21 - } - }, - { - "filename": "dragon_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 127, - "y": 151, - "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": 127, - "y": 173, - "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": 127, - "y": 195, - "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": 127, - "y": 217, - "w": 22, - "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": 127, - "y": 239, - "w": 22, - "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": 127, - "y": 261, - "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": 128, - "y": 283, - "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": 128, - "y": 305, - "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": 129, - "y": 327, - "w": 21, - "h": 21 - } - }, - { - "filename": "flying_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 21 - }, - "frame": { - "x": 131, - "y": 348, - "w": 20, - "h": 21 - } - }, - { - "filename": "sachet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 132, - "y": 369, - "w": 18, - "h": 23 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 134, - "y": 392, - "w": 22, - "h": 22 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 135, - "y": 414, - "w": 23, - "h": 17 - } - }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 150, - "y": 369, - "w": 17, - "h": 23 - } - }, - { - "filename": "ghost_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 156, - "y": 392, - "w": 22, - "h": 22 - } - }, { "filename": "everstone", "rotated": false, @@ -4224,14 +1389,14 @@ "h": 17 }, "frame": { - "x": 158, - "y": 414, + "x": 236, + "y": 32, "w": 20, "h": 17 } }, { - "filename": "coupon", + "filename": "shock_drive", "rotated": false, "trimmed": true, "sourceSize": { @@ -4240,208 +1405,19 @@ }, "spriteSourceSize": { "x": 4, - "y": 7, + "y": 8, "w": 23, - "h": 19 + "h": 17 }, "frame": { - "x": 151, - "y": 134, + "x": 256, + "y": 32, "w": 23, - "h": 19 + "h": 17 } }, { - "filename": "grass_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 149, - "y": 153, - "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": 149, - "y": 175, - "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": 149, - "y": 197, - "w": 22, - "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": 149, - "y": 219, - "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": 149, - "y": 241, - "w": 22, - "h": 22 - } - }, - { - "filename": "fairy_feather", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 149, - "y": 263, - "w": 22, - "h": 20 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 150, - "y": 283, - "w": 22, - "h": 22 - } - }, - { - "filename": "mini_black_hole", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 150, - "y": 305, - "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": 150, - "y": 327, - "w": 22, - "h": 21 - } - }, - { - "filename": "n_lunarizer", + "filename": "wise_glasses", "rotated": false, "trimmed": true, "sourceSize": { @@ -4450,19 +1426,19 @@ }, "spriteSourceSize": { "x": 4, - "y": 6, + "y": 8, "w": 23, - "h": 21 + "h": 17 }, "frame": { - "x": 151, - "y": 348, + "x": 279, + "y": 32, "w": 23, - "h": 21 + "h": 17 } }, { - "filename": "super_potion", + "filename": "baton", "rotated": false, "trimmed": true, "sourceSize": { @@ -4470,20 +1446,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 + "x": 7, + "y": 7, + "w": 18, + "h": 18 }, "frame": { - "x": 167, - "y": 369, - "w": 17, - "h": 23 + "x": 302, + "y": 32, + "w": 18, + "h": 18 } }, { - "filename": "max_repel", + "filename": "candy", "rotated": false, "trimmed": true, "sourceSize": { @@ -4491,20 +1467,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 7, + "y": 11, + "w": 18, + "h": 18 }, "frame": { - "x": 178, - "y": 392, - "w": 16, - "h": 24 + "x": 320, + "y": 32, + "w": 18, + "h": 18 } }, { - "filename": "candy_overlay", + "filename": "choice_specs", "rotated": false, "trimmed": true, "sourceSize": { @@ -4512,20 +1488,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 16, - "h": 15 + "x": 4, + "y": 8, + "w": 24, + "h": 18 }, "frame": { - "x": 178, - "y": 416, - "w": 16, - "h": 15 + "x": 338, + "y": 32, + "w": 24, + "h": 18 } }, { - "filename": "pp_max", + "filename": "dark_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -4533,20 +1509,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 7, + "y": 7, + "w": 18, + "h": 18 }, "frame": { - "x": 171, - "y": 153, - "w": 16, - "h": 24 + "x": 362, + "y": 32, + "w": 18, + "h": 18 } }, { - "filename": "pp_up", + "filename": "dragon_scale", "rotated": false, "trimmed": true, "sourceSize": { @@ -4554,20 +1530,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 4, + "y": 8, + "w": 24, + "h": 18 }, "frame": { - "x": 171, - "y": 177, - "w": 16, - "h": 24 + "x": 380, + "y": 32, + "w": 24, + "h": 18 } }, { - "filename": "protein", + "filename": "flame_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -4575,62 +1551,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 7, + "y": 7, + "w": 18, + "h": 18 }, "frame": { - "x": 171, - "y": 201, - "w": 16, - "h": 24 + "x": 404, + "y": 32, + "w": 18, + "h": 18 } }, { - "filename": "repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 171, - "y": 225, - "w": 16, - "h": 24 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 171, - "y": 249, - "w": 16, - "h": 24 - } - }, - { - "filename": "abomasite", + "filename": "mystery_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -4641,395 +1575,17 @@ "x": 8, "y": 8, "w": 16, - "h": 16 + "h": 18 }, "frame": { - "x": 174, - "y": 137, + "x": 0, + "y": 46, "w": 16, - "h": 16 + "h": 18 } }, { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 190, - "y": 136, - "w": 23, - "h": 19 - } - }, - { - "filename": "mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 213, - "y": 136, - "w": 23, - "h": 19 - } - }, - { - "filename": "n_solarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 236, - "y": 136, - "w": 23, - "h": 21 - } - }, - { - "filename": "reviver_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 8, - "w": 23, - "h": 20 - }, - "frame": { - "x": 259, - "y": 137, - "w": 23, - "h": 20 - } - }, - { - "filename": "moon_flute", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 187, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "normal_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 187, - "y": 177, - "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": 209, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 187, - "y": 199, - "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": 209, - "y": 177, - "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": 187, - "y": 221, - "w": 22, - "h": 22 - } - }, - { - "filename": "scroll_of_darkness", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 209, - "y": 199, - "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": 187, - "y": 243, - "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": 209, - "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": 209, - "y": 243, - "w": 22, - "h": 22 - } - }, - { - "filename": "pair_of_tickets", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 282, - "y": 138, - "w": 23, - "h": 19 - } - }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 305, - "y": 139, - "w": 23, - "h": 20 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 328, - "y": 140, - "w": 23, - "h": 21 - } - }, - { - "filename": "steel_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 351, - "y": 140, - "w": 22, - "h": 22 - } - }, - { - "filename": "razor_fang", + "filename": "light_ball", "rotated": false, "trimmed": true, "sourceSize": { @@ -5038,712 +1594,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 6, + "y": 7, "w": 18, - "h": 20 + "h": 18 }, "frame": { - "x": 373, - "y": 141, + "x": 16, + "y": 47, "w": 18, - "h": 20 + "h": 18 } }, { - "filename": "sun_flute", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 231, - "y": 157, - "w": 22, - "h": 22 - } - }, - { - "filename": "thick_club", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 231, - "y": 179, - "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": 253, - "y": 157, - "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": 231, - "y": 201, - "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": 253, - "y": 179, - "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": 275, - "y": 157, - "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": 231, - "y": 223, - "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": 253, - "y": 201, - "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": 275, - "y": 179, - "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": 253, - "y": 223, - "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": 275, - "y": 201, - "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": 275, - "y": 223, - "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": 231, - "y": 245, - "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": 253, - "y": 245, - "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": 275, - "y": 245, - "w": 22, - "h": 21 - } - }, - { - "filename": "black_sludge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 391, - "y": 145, - "w": 22, - "h": 19 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 297, - "y": 159, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 297, - "y": 181, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 297, - "y": 203, - "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": 297, - "y": 225, - "w": 22, - "h": 22 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 297, - "y": 247, - "w": 22, - "h": 19 - } - }, - { - "filename": "tm_poison", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 319, - "y": 161, - "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": 319, - "y": 183, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 319, - "y": 205, - "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": 319, - "y": 227, - "w": 22, - "h": 22 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 319, - "y": 249, - "w": 22, - "h": 19 - } - }, - { - "filename": "tm_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 341, - "y": 162, - "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": 341, - "y": 184, - "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": 341, - "y": 206, - "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": 341, - "y": 228, - "w": 22, - "h": 22 - } - }, - { - "filename": "tera_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 341, - "y": 250, - "w": 22, - "h": 20 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 363, - "y": 162, - "w": 16, - "h": 24 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 363, - "y": 186, - "w": 16, - "h": 24 - } - }, - { - "filename": "hard_meteorite", + "filename": "light_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -5752,309 +1615,15 @@ }, "spriteSourceSize": { "x": 7, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 363, - "y": 210, - "w": 20, - "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": 363, - "y": 232, - "w": 20, - "h": 22 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 363, - "y": 254, - "w": 20, - "h": 20 - } - }, - { - "filename": "x_attack", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 379, - "y": 164, - "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": 379, - "y": 186, - "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": 383, - "y": 208, - "w": 19, - "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": 383, - "y": 230, - "w": 19, - "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": 383, - "y": 252, - "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": 401, - "y": 166, - "w": 22, - "h": 22 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 401, - "y": 188, - "w": 20, - "h": 20 - } - }, - { - "filename": "x_speed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 402, - "y": 208, - "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": 402, - "y": 230, - "w": 17, - "h": 22 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 405, - "y": 252, - "w": 17, - "h": 22 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, "y": 7, - "w": 22, - "h": 19 + "w": 18, + "h": 18 }, "frame": { - "x": 187, - "y": 265, - "w": 22, - "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": 209, - "y": 265, - "w": 21, - "h": 19 + "x": 34, + "y": 47, + "w": 18, + "h": 18 } }, { @@ -6072,8 +1641,8 @@ "h": 18 }, "frame": { - "x": 230, - "y": 266, + "x": 52, + "y": 47, "w": 21, "h": 18 } @@ -6093,14 +1662,14 @@ "h": 18 }, "frame": { - "x": 251, - "y": 266, + "x": 73, + "y": 47, "w": 21, "h": 18 } }, { - "filename": "poison_barb", + "filename": "toxic_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6108,79 +1677,37 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 272, - "y": 266, - "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": 293, - "y": 266, - "w": 21, - "h": 21 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 314, - "y": 268, - "w": 21, - "h": 21 - } - }, - { - "filename": "lum_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, + "x": 7, "y": 7, - "w": 20, - "h": 19 + "w": 18, + "h": 18 }, "frame": { - "x": 335, - "y": 270, - "w": 20, - "h": 19 + "x": 94, + "y": 47, + "w": 18, + "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": 112, + "y": 48, + "w": 23, + "h": 18 } }, { @@ -6198,8 +1725,8 @@ "h": 18 }, "frame": { - "x": 355, - "y": 274, + "x": 135, + "y": 49, "w": 21, "h": 18 } @@ -6219,14 +1746,14 @@ "h": 18 }, "frame": { - "x": 376, - "y": 274, + "x": 156, + "y": 49, "w": 21, "h": 18 } }, { - "filename": "magnet", + "filename": "wl_ability_urge", "rotated": false, "trimmed": true, "sourceSize": { @@ -6235,166 +1762,250 @@ }, "spriteSourceSize": { "x": 6, - "y": 6, + "y": 8, "w": 20, - "h": 20 + "h": 18 + }, + "frame": { + "x": 177, + "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": 197, + "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": 217, + "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": 237, + "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": 257, + "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": 277, + "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": 297, + "y": 50, + "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": 317, + "y": 50, + "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": 337, + "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": 357, + "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": 377, + "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": 397, - "y": 274, + "y": 50, "w": 20, - "h": 20 + "h": 18 } }, { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 172, - "y": 273, - "w": 15, - "h": 11 - } - }, - { - "filename": "mb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 172, - "y": 284, - "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": 192, - "y": 284, - "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": 172, - "y": 304, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb_silver", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 212, - "y": 284, - "w": 20, - "h": 20 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 172, - "y": 324, - "w": 19, - "h": 21 - } - }, - { - "filename": "rb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 192, - "y": 304, - "w": 20, - "h": 20 - } - }, - { - "filename": "smooth_meteorite", + "filename": "oval_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -6403,19 +2014,607 @@ }, "spriteSourceSize": { "x": 7, - "y": 6, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 417, + "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": 65, + "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": 67, + "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": "black_sludge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 259, + "y": 67, + "w": 22, + "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": 281, + "y": 68, + "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": 303, + "y": 68, + "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": 326, + "y": 68, + "w": 22, + "h": 19 + } + }, + { + "filename": "golden_mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 348, + "y": 68, + "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": 371, + "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": 391, + "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": 412, + "y": 69, + "w": 19, + "h": 19 + } + }, + { + "filename": "mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 0, + "y": 83, + "w": 23, + "h": 19 + } + }, + { + "filename": "pair_of_tickets", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 23, + "y": 83, + "w": 23, + "h": 19 + } + }, + { + "filename": "power_herb", + "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": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 66, + "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": 86, + "y": 84, + "w": 22, + "h": 19 + } + }, + { + "filename": "white_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 108, + "y": 85, + "w": 20, + "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": 232, - "y": 284, - "w": 20, + "x": 128, + "y": 85, + "w": 19, "h": 20 } }, { - "filename": "strange_ball", + "filename": "big_nugget", "rotated": false, "trimmed": true, "sourceSize": { @@ -6429,14 +2628,14 @@ "h": 20 }, "frame": { - "x": 252, - "y": 284, + "x": 147, + "y": 85, "w": 20, "h": 20 } }, { - "filename": "spell_tag", + "filename": "binding_band", "rotated": false, "trimmed": true, "sourceSize": { @@ -6444,20 +2643,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, + "x": 5, "y": 6, - "w": 19, - "h": 21 + "w": 23, + "h": 20 }, "frame": { - "x": 191, - "y": 324, - "w": 19, - "h": 21 + "x": 167, + "y": 85, + "w": 23, + "h": 20 } }, { - "filename": "ub", + "filename": "blue_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6471,8 +2670,8 @@ "h": 20 }, "frame": { - "x": 212, - "y": 304, + "x": 190, + "y": 85, "w": 20, "h": 20 } @@ -6493,11 +2692,137 @@ }, "frame": { "x": 210, - "y": 324, + "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": 229, + "y": 86, + "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": 255, + "y": 86, + "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": 281, + "y": 87, + "w": 22, + "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": 303, + "y": 87, + "w": 22, + "h": 20 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 325, + "y": 87, + "w": 20, + "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": 345, + "y": 87, + "w": 17, + "h": 20 + } + }, { "filename": "hard_stone", "rotated": false, @@ -6513,14 +2838,14 @@ "h": 20 }, "frame": { - "x": 232, - "y": 304, + "x": 362, + "y": 87, "w": 19, "h": 20 } }, { - "filename": "power_herb", + "filename": "icy_reins_of_unity", "rotated": false, "trimmed": true, "sourceSize": { @@ -6528,20 +2853,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 4, "y": 7, - "w": 20, - "h": 19 + "w": 24, + "h": 20 }, "frame": { - "x": 229, - "y": 324, - "w": 20, - "h": 19 + "x": 381, + "y": 87, + "w": 24, + "h": 20 } }, { - "filename": "razor_claw", + "filename": "legend_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -6549,522 +2874,18 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 251, - "y": 304, - "w": 20, - "h": 19 - } - }, - { - "filename": "malicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 18 - }, - "frame": { - "x": 272, - "y": 287, - "w": 20, - "h": 18 - } - }, - { - "filename": "white_herb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 292, - "y": 287, - "w": 20, - "h": 19 - } - }, - { - "filename": "wl_ability_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 271, - "y": 305, - "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": 291, - "y": 306, - "w": 20, - "h": 18 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, + "x": 3, "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 174, - "y": 345, - "w": 19, - "h": 19 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, + "w": 25, "h": 20 }, "frame": { - "x": 193, - "y": 345, - "w": 17, + "x": 405, + "y": 88, + "w": 25, "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": 210, - "y": 344, - "w": 19, - "h": 19 - } - }, - { - "filename": "wl_awakening", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 229, - "y": 343, - "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": 312, - "y": 289, - "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": 332, - "y": 289, - "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": 311, - "y": 307, - "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": 331, - "y": 307, - "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": 352, - "y": 292, - "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": 372, - "y": 292, - "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": 351, - "y": 310, - "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": 371, - "y": 310, - "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": 392, - "y": 294, - "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": 391, - "y": 312, - "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": 411, - "y": 312, - "w": 20, - "h": 18 - } - }, - { - "filename": "baton", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 412, - "y": 294, - "w": 18, - "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": 184, - "y": 365, - "w": 20, - "h": 18 - } - }, - { - "filename": "candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 11, - "w": 18, - "h": 18 - }, - "frame": { - "x": 204, - "y": 365, - "w": 18, - "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": 194, - "y": 383, - "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": 194, - "y": 401, - "w": 20, - "h": 18 - } - }, { "filename": "lucky_egg", "rotated": false, @@ -7080,14 +2901,14 @@ "h": 20 }, "frame": { - "x": 214, - "y": 383, + "x": 0, + "y": 102, "w": 17, "h": 20 } }, { - "filename": "dark_stone", + "filename": "magnet", "rotated": false, "trimmed": true, "sourceSize": { @@ -7095,20 +2916,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 + "x": 6, + "y": 6, + "w": 20, + "h": 20 }, "frame": { - "x": 214, - "y": 403, - "w": 18, - "h": 18 + "x": 17, + "y": 102, + "w": 20, + "h": 20 } }, { - "filename": "oval_stone", + "filename": "malicious_armor", "rotated": false, "trimmed": true, "sourceSize": { @@ -7116,20 +2937,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 + "x": 5, + "y": 6, + "w": 22, + "h": 20 }, "frame": { - "x": 222, - "y": 363, - "w": 18, - "h": 19 + "x": 37, + "y": 102, + "w": 22, + "h": 20 } }, { - "filename": "flame_orb", + "filename": "mb", "rotated": false, "trimmed": true, "sourceSize": { @@ -7137,20 +2958,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 + "x": 6, + "y": 6, + "w": 20, + "h": 20 }, "frame": { - "x": 231, - "y": 382, - "w": 18, - "h": 18 + "x": 59, + "y": 102, + "w": 20, + "h": 20 } }, { - "filename": "light_ball", + "filename": "metal_powder", "rotated": false, "trimmed": true, "sourceSize": { @@ -7158,20 +2979,104 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 + "x": 4, + "y": 6, + "w": 24, + "h": 20 }, "frame": { - "x": 232, - "y": 400, - "w": 18, - "h": 18 + "x": 79, + "y": 103, + "w": 24, + "h": 20 } }, { - "filename": "light_stone", + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 103, + "y": 104, + "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": 123, + "y": 105, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb_silver", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 143, + "y": 105, + "w": 20, + "h": 20 + } + }, + { + "filename": "quick_powder", + "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": "razor_fang", "rotated": false, "trimmed": true, "sourceSize": { @@ -7180,19 +3085,481 @@ }, "spriteSourceSize": { "x": 7, - "y": 7, + "y": 6, "w": 18, - "h": 18 + "h": 20 + }, + "frame": { + "x": 187, + "y": 105, + "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": 205, + "y": 105, + "w": 20, + "h": 20 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 225, + "y": 106, + "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": 248, + "y": 106, + "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": 272, + "y": 107, + "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": 296, + "y": 107, + "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": 320, + "y": 107, + "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": 343, + "y": 107, + "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": 363, + "y": 107, + "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": 387, + "y": 108, + "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": 407, + "y": 108, + "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": 0, + "y": 122, + "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": 20, + "y": 122, + "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": 43, + "y": 122, + "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": 66, + "y": 123, + "w": 23, + "h": 21 + } + }, + { + "filename": "berry_juice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 21 + }, + "frame": { + "x": 89, + "y": 124, + "w": 22, + "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": 111, + "y": 125, + "w": 20, + "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": 131, + "y": 125, + "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": 153, + "y": 125, + "w": 21, + "h": 21 + } + }, + { + "filename": "flying_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 21 + }, + "frame": { + "x": 174, + "y": 125, + "w": 20, + "h": 21 + } + }, + { + "filename": "golden_net", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 21 + }, + "frame": { + "x": 194, + "y": 125, + "w": 24, + "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": 218, + "y": 126, + "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": 240, - "y": 361, - "w": 18, - "h": 18 + "y": 126, + "w": 28, + "h": 21 } }, { - "filename": "mystery_egg", + "filename": "mint_def", "rotated": false, "trimmed": true, "sourceSize": { @@ -7200,419 +3567,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 18 - }, - "frame": { - "x": 249, - "y": 379, - "w": 16, - "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": 250, - "y": 397, - "w": 18, - "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": 250, - "y": 415, - "w": 17, - "h": 16 - } - }, - { - "filename": "absolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 267, - "y": 415, - "w": 16, - "h": 16 - } - }, - { - "filename": "wl_max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 251, - "y": 323, - "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": 271, - "y": 323, - "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": 291, - "y": 324, - "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": 311, - "y": 325, - "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": 331, - "y": 325, - "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": 249, - "y": 341, - "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": 269, - "y": 341, - "w": 20, - "h": 18 - } - }, - { - "filename": "aerodactylite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 351, - "y": 328, - "w": 16, - "h": 16 - } - }, - { - "filename": "aggronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 367, - "y": 328, - "w": 16, - "h": 16 - } - }, - { - "filename": "alakazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 258, - "y": 359, - "w": 16, - "h": 16 - } - }, - { - "filename": "altarianite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 274, - "y": 359, - "w": 16, - "h": 16 - } - }, - { - "filename": "ampharosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 289, - "y": 342, - "w": 16, - "h": 16 - } - }, - { - "filename": "audinite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 290, - "y": 358, - "w": 16, - "h": 16 - } - }, - { - "filename": "banettite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 265, - "y": 375, - "w": 16, - "h": 16 - } - }, - { - "filename": "beedrillite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 281, - "y": 375, - "w": 16, - "h": 16 - } - }, - { - "filename": "blastoisinite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 2, + "y": 5, + "w": 28, + "h": 21 }, "frame": { "x": 268, - "y": 391, - "w": 16, - "h": 16 + "y": 127, + "w": 28, + "h": 21 } }, { - "filename": "blazikenite", + "filename": "mint_neutral", "rotated": false, "trimmed": true, "sourceSize": { @@ -7620,20 +3588,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 2, + "y": 5, + "w": 28, + "h": 21 }, "frame": { - "x": 284, - "y": 391, - "w": 16, - "h": 16 + "x": 296, + "y": 127, + "w": 28, + "h": 21 } }, { - "filename": "cameruptite", + "filename": "mint_spatk", "rotated": false, "trimmed": true, "sourceSize": { @@ -7641,20 +3609,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 2, + "y": 5, + "w": 28, + "h": 21 }, "frame": { - "x": 283, - "y": 407, - "w": 16, - "h": 16 + "x": 324, + "y": 127, + "w": 28, + "h": 21 } }, { - "filename": "charizardite_x", + "filename": "mint_spd", "rotated": false, "trimmed": true, "sourceSize": { @@ -7662,20 +3630,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 2, + "y": 5, + "w": 28, + "h": 21 }, "frame": { - "x": 297, - "y": 374, - "w": 16, - "h": 16 + "x": 352, + "y": 127, + "w": 28, + "h": 21 } }, { - "filename": "charizardite_y", + "filename": "mint_spdef", "rotated": false, "trimmed": true, "sourceSize": { @@ -7683,629 +3651,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 300, - "y": 390, - "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": 383, - "y": 330, - "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": 399, - "y": 330, - "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": 415, - "y": 330, - "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": 299, - "y": 407, - "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": 313, - "y": 343, - "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": 329, - "y": 343, - "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": 345, - "y": 344, - "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": 361, - "y": 344, - "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": 377, - "y": 346, - "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": 393, - "y": 346, - "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": 409, - "y": 346, - "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": 313, - "y": 359, - "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": 329, - "y": 359, - "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": 345, - "y": 360, - "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": 361, - "y": 360, - "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": 377, - "y": 362, - "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": 393, - "y": 362, - "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": 409, - "y": 362, - "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": 316, - "y": 375, - "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": 316, - "y": 391, - "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": 315, - "y": 407, - "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": 332, - "y": 376, - "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": 348, - "y": 376, - "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": 332, - "y": 392, - "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": 348, - "y": 392, - "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": 331, - "y": 408, - "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": 347, - "y": 408, - "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": 364, - "y": 378, - "w": 16, - "h": 16 - } - }, - { - "filename": "sharpedonite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 2, + "y": 5, + "w": 28, + "h": 21 }, "frame": { "x": 380, - "y": 378, - "w": 16, - "h": 16 + "y": 128, + "w": 28, + "h": 21 } }, { - "filename": "slowbronite", + "filename": "moon_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -8313,20 +3672,377 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 6, + "w": 23, + "h": 21 }, "frame": { - "x": 396, - "y": 378, - "w": 16, - "h": 16 + "x": 408, + "y": 128, + "w": 23, + "h": 21 } }, { - "filename": "soul_dew", + "filename": "quick_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 0, + "y": 142, + "w": 19, + "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": 19, + "y": 143, + "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": 42, + "y": 143, + "w": 23, + "h": 21 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 65, + "y": 144, + "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": 86, + "y": 145, + "w": 21, + "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": 107, + "y": 146, + "w": 19, + "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": 126, + "y": 146, + "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": 148, + "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": 170, + "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": 192, + "y": 146, + "w": 23, + "h": 21 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 215, + "y": 147, + "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": 236, + "y": 147, + "w": 18, + "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": 254, + "y": 148, + "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": 276, + "y": 148, + "w": 22, + "h": 22 + } + }, + { + "filename": "dark_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 298, + "y": 148, + "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": 320, + "y": 148, + "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": 342, + "y": 148, + "w": 22, + "h": 22 + } + }, + { + "filename": "leftovers", "rotated": false, "trimmed": true, "sourceSize": { @@ -8335,19 +4051,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, - "w": 16, - "h": 16 + "y": 5, + "w": 15, + "h": 22 }, "frame": { "x": 364, - "y": 394, - "w": 16, - "h": 16 + "y": 148, + "w": 15, + "h": 22 } }, { - "filename": "steelixite", + "filename": "dragon_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -8355,20 +4071,230 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 380, - "y": 394, - "w": 16, - "h": 16 + "x": 379, + "y": 149, + "w": 22, + "h": 22 } }, { - "filename": "strawberry_sweet", + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 401, + "y": 149, + "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": 0, + "y": 163, + "w": 19, + "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": 19, + "y": 164, + "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": 41, + "y": 164, + "w": 22, + "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": 63, + "y": 165, + "w": 22, + "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": 85, + "y": 166, + "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": 107, + "y": 167, + "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": 131, + "y": 167, + "w": 24, + "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": 155, + "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": 177, + "y": 167, + "w": 22, + "h": 22 + } + }, + { + "filename": "full_heal", "rotated": false, "trimmed": true, "sourceSize": { @@ -8377,19 +4303,166 @@ }, "spriteSourceSize": { "x": 9, - "y": 7, - "w": 16, - "h": 16 + "y": 4, + "w": 15, + "h": 23 }, "frame": { - "x": 396, - "y": 394, - "w": 16, - "h": 16 + "x": 199, + "y": 167, + "w": 15, + "h": 23 } }, { - "filename": "swampertite", + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 214, + "y": 168, + "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": 236, + "y": 169, + "w": 17, + "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": 253, + "y": 170, + "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": 275, + "y": 170, + "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": 297, + "y": 170, + "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": 319, + "y": 170, + "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": 341, + "y": 170, + "w": 20, + "h": 22 + } + }, + { + "filename": "soothe_bell", "rotated": false, "trimmed": true, "sourceSize": { @@ -8398,19 +4471,3694 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, - "w": 16, - "h": 16 + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 361, + "y": 170, + "w": 17, + "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": 378, + "y": 171, + "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": 401, + "y": 171, + "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": 0, + "y": 185, + "w": 19, + "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": 19, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 41, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "mini_black_hole", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 63, + "y": 187, + "w": 22, + "h": 22 + } + }, + { + "filename": "moon_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 85, + "y": 188, + "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": 107, + "y": 189, + "w": 27, + "h": 22 + } + }, + { + "filename": "normal_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 134, + "y": 189, + "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": 156, + "y": 189, + "w": 24, + "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": 180, + "y": 189, + "w": 17, + "h": 23 + } + }, + { + "filename": "poison_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 197, + "y": 190, + "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": 219, + "y": 190, + "w": 17, + "h": 23 + } + }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 236, + "y": 192, + "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": 258, + "y": 192, + "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": 280, + "y": 192, + "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": 302, + "y": 192, + "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": 325, + "y": 192, + "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": 347, + "y": 192, + "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": 369, + "y": 193, + "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": 391, + "y": 193, + "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": 411, + "y": 193, + "w": 22, + "h": 22 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 0, + "y": 207, + "w": 18, + "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": 18, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "sun_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 40, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "thick_club", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 62, + "y": 209, + "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": 84, + "y": 210, + "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": 106, + "y": 211, + "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": 128, + "y": 211, + "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": 150, + "y": 211, + "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": 172, + "y": 212, + "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": 194, + "y": 212, + "w": 22, + "h": 22 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 216, + "y": 213, + "w": 20, + "h": 23 + } + }, + { + "filename": "tm_fighting", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 236, + "y": 214, + "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": 258, + "y": 214, + "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": 280, + "y": 214, + "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": 302, + "y": 214, + "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": 324, + "y": 214, + "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": 346, + "y": 214, + "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": 368, + "y": 215, + "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": 390, + "y": 215, + "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": 412, + "y": 215, + "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": 0, + "y": 230, + "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": 22, + "y": 230, + "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": 230, + "w": 17, + "h": 23 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 61, + "y": 231, + "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": 83, + "y": 232, + "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": 105, + "y": 233, + "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": 127, + "y": 233, + "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": 149, + "y": 233, + "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": 171, + "y": 234, + "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": 193, + "y": 234, + "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": 215, + "y": 236, + "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": 237, + "y": 236, + "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": 259, + "y": 236, + "w": 22, + "h": 22 + } + }, + { + "filename": "berry_pouch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 281, + "y": 236, + "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": 304, + "y": 236, + "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": 326, + "y": 236, + "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": 348, + "y": 236, + "w": 16, + "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": 364, + "y": 237, + "w": 24, + "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": 388, + "y": 237, + "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": 412, + "y": 237, + "w": 22, + "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": 0, + "y": 252, + "w": 21, + "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": 21, + "y": 252, + "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": 43, + "y": 253, + "w": 23, + "h": 23 + } + }, + { + "filename": "carbos", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 66, + "y": 253, + "w": 16, + "h": 24 + } + }, + { + "filename": "electric_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 82, + "y": 254, + "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": 104, + "y": 255, + "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": 128, + "y": 255, + "w": 22, + "h": 23 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 150, + "y": 255, + "w": 21, + "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": 171, + "y": 256, + "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": 193, + "y": 256, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 215, + "y": 258, + "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": 237, + "y": 258, + "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": 259, + "y": 258, + "w": 22, + "h": 23 + } + }, + { + "filename": "grass_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 281, + "y": 259, + "w": 22, + "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": 303, + "y": 259, + "w": 23, + "h": 23 + } + }, + { + "filename": "ground_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 326, + "y": 259, + "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": 348, + "y": 260, + "w": 24, + "h": 23 + } + }, + { + "filename": "ice_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 372, + "y": 260, + "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": 394, + "y": 260, + "w": 21, + "h": 23 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 415, + "y": 260, + "w": 18, + "h": 24 + } + }, + { + "filename": "leek", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 0, + "y": 275, + "w": 23, + "h": 23 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 23, + "y": 275, + "w": 18, + "h": 24 + } + }, + { + "filename": "leppa_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 41, + "y": 276, + "w": 24, + "h": 23 + } + }, + { + "filename": "macho_brace", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 65, + "y": 277, + "w": 23, + "h": 23 + } + }, + { + "filename": "hp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 88, + "y": 277, + "w": 16, + "h": 24 + } + }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 104, + "y": 278, + "w": 22, + "h": 23 + } + }, + { + "filename": "normal_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 126, + "y": 278, + "w": 22, + "h": 23 + } + }, + { + "filename": "petaya_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 148, + "y": 278, + "w": 22, + "h": 23 + } + }, + { + "filename": "poison_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 170, + "y": 279, + "w": 22, + "h": 23 + } + }, + { + "filename": "psychic_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 192, + "y": 279, + "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": 214, + "y": 281, + "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": 237, + "y": 281, + "w": 23, + "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": 260, + "y": 281, + "w": 21, + "h": 23 + } + }, + { + "filename": "reaper_cloth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 281, + "y": 282, + "w": 22, + "h": 23 + } + }, + { + "filename": "rock_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 303, + "y": 282, + "w": 22, + "h": 23 + } + }, + { + "filename": "steel_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 325, + "y": 282, + "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": 347, + "y": 283, + "w": 24, + "h": 23 + } + }, + { + "filename": "stellar_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 371, + "y": 283, + "w": 22, + "h": 23 + } + }, + { + "filename": "water_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 393, + "y": 283, + "w": 22, + "h": 23 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 415, + "y": 284, + "w": 18, + "h": 24 + } + }, + { + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 0, + "y": 298, + "w": 21, + "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": 21, + "y": 299, + "w": 24, + "h": 23 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 45, + "y": 299, + "w": 16, + "h": 24 + } + }, + { + "filename": "wide_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 61, + "y": 300, + "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": 83, + "y": 301, + "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": 106, + "y": 301, + "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": 130, + "y": 301, + "w": 21, + "h": 24 + } + }, + { + "filename": "lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 151, + "y": 301, + "w": 17, + "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": 168, + "y": 302, + "w": 24, + "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": 192, + "y": 302, + "w": 18, + "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": 210, + "y": 304, + "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": 234, + "y": 304, + "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": 258, + "y": 304, + "w": 23, + "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": 281, + "y": 305, + "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": 305, + "y": 305, + "w": 24, + "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": 329, + "y": 305, + "w": 18, + "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": 347, + "y": 306, + "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": 371, + "y": 306, + "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": 395, + "y": 306, + "w": 17, + "h": 24 + } + }, + { + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 412, + "y": 308, + "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": 0, + "y": 321, + "w": 16, + "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": 16, + "y": 322, + "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": 40, + "y": 323, + "w": 24, + "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": 64, + "y": 323, + "w": 16, + "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": 80, + "y": 325, + "w": 24, + "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": 104, + "y": 325, + "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": 128, + "y": 325, + "w": 24, + "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": 152, + "y": 325, + "w": 16, + "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": 168, + "y": 326, + "w": 24, + "h": 24 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 192, + "y": 326, + "w": 16, + "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": 208, + "y": 328, + "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": 232, + "y": 328, + "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": 256, + "y": 328, + "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": 280, + "y": 329, + "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": 304, + "y": 329, + "w": 24, + "h": 24 + } + }, + { + "filename": "repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 328, + "y": 329, + "w": 16, + "h": 24 + } + }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 344, + "y": 330, + "w": 22, + "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": 366, + "y": 330, + "w": 24, + "h": 24 + } + }, + { + "filename": "oval_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 390, + "y": 330, + "w": 21, + "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": 411, + "y": 332, + "w": 24, + "h": 24 + } + }, + { + "filename": "super_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 0, + "y": 345, + "w": 16, + "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": 16, + "y": 346, + "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": 40, + "y": 347, + "w": 24, + "h": 24 + } + }, + { + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 64, + "y": 347, + "w": 16, + "h": 24 + } + }, + { + "filename": "red_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 80, + "y": 349, + "w": 20, + "h": 24 + } + }, + { + "filename": "reveal_glass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 100, + "y": 349, + "w": 23, + "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": 123, + "y": 349, + "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": 147, + "y": 349, + "w": 21, + "h": 24 + } + }, + { + "filename": "scanner", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 168, + "y": 350, + "w": 24, + "h": 24 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 192, + "y": 350, + "w": 16, + "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": 208, + "y": 352, + "w": 24, + "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": 232, + "y": 352, + "w": 24, + "h": 24 + } + }, + { + "filename": "splash_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 256, + "y": 352, + "w": 24, + "h": 24 + } + }, + { + "filename": "spooky_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 280, + "y": 353, + "w": 24, + "h": 24 + } + }, + { + "filename": "stone_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 304, + "y": 353, + "w": 24, + "h": 24 + } + }, + { + "filename": "sun_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 328, + "y": 354, + "w": 24, + "h": 24 + } + }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 352, + "y": 354, + "w": 17, + "h": 24 + } + }, + { + "filename": "toxic_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 369, + "y": 354, + "w": 24, + "h": 24 + } + }, + { + "filename": "zap_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 393, + "y": 356, + "w": 24, + "h": 24 + } + }, + { + "filename": "prison_bottle", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 30 + }, + "frame": { + "x": 417, + "y": 356, + "w": 17, + "h": 30 + } + }, + { + "filename": "black_augurite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 22, + "h": 25 + }, + "frame": { + "x": 0, + "y": 370, + "w": 22, + "h": 25 + } + }, + { + "filename": "ability_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 23, + "h": 26 + }, + "frame": { + "x": 22, + "y": 371, + "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": 45, + "y": 371, + "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": 69, + "y": 373, + "w": 27, + "h": 26 + } + }, + { + "filename": "mystical_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 28, + "h": 26 + }, + "frame": { + "x": 96, + "y": 373, + "w": 28, + "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": 124, + "y": 373, + "w": 32, + "h": 27 + } + }, + { + "filename": "leaders_crest", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 29, + "h": 27 + }, + "frame": { + "x": 156, + "y": 374, + "w": 29, + "h": 27 + } + }, + { + "filename": "ribbon_gen1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 185, + "y": 374, + "w": 22, + "h": 28 + } + }, + { + "filename": "max_mushrooms", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 3, + "w": 29, + "h": 28 + }, + "frame": { + "x": 207, + "y": 376, + "w": 29, + "h": 28 + } + }, + { + "filename": "ribbon_gen2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 28, + "h": 28 + }, + "frame": { + "x": 236, + "y": 376, + "w": 28, + "h": 28 + } + }, + { + "filename": "ribbon_gen4", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 30, + "h": 28 + }, + "frame": { + "x": 264, + "y": 377, + "w": 30, + "h": 28 + } + }, + { + "filename": "ribbon_gen5", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 294, + "y": 377, + "w": 22, + "h": 28 + } + }, + { + "filename": "ribbon_gen6", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 316, "y": 378, - "w": 16, - "h": 16 + "w": 22, + "h": 28 } }, { - "filename": "tyranitarite", + "filename": "ribbon_gen8", "rotated": false, "trimmed": true, "sourceSize": { @@ -8418,20 +8166,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 5, + "y": 2, + "w": 22, + "h": 28 }, "frame": { - "x": 412, - "y": 394, - "w": 16, - "h": 16 + "x": 338, + "y": 378, + "w": 22, + "h": 28 } }, { - "filename": "venusaurite", + "filename": "ribbon_gen3", "rotated": false, "trimmed": true, "sourceSize": { @@ -8439,16 +8187,268 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 5, + "y": 1, + "w": 22, + "h": 29 }, "frame": { - "x": 363, - "y": 410, - "w": 16, - "h": 16 + "x": 360, + "y": 378, + "w": 22, + "h": 29 + } + }, + { + "filename": "ribbon_gen7", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 29 + }, + "frame": { + "x": 382, + "y": 380, + "w": 22, + "h": 29 + } + }, + { + "filename": "ribbon_gen9", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 29 + }, + "frame": { + "x": 404, + "y": 386, + "w": 22, + "h": 29 + } + }, + { + "filename": "inverse", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 30 + }, + "frame": { + "x": 0, + "y": 395, + "w": 22, + "h": 30 + } + }, + { + "filename": "galarica_cuff", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 29, + "h": 30 + }, + "frame": { + "x": 22, + "y": 397, + "w": 29, + "h": 30 + } + }, + { + "filename": "exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 51, + "y": 397, + "w": 17, + "h": 31 + } + }, + { + "filename": "bronze_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 68, + "y": 399, + "w": 22, + "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": 90, + "y": 399, + "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": 107, + "y": 399, + "w": 17, + "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": 124, + "y": 400, + "w": 22, + "h": 31 + } + }, + { + "filename": "master_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 146, + "y": 401, + "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": 168, + "y": 402, + "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": 190, + "y": 404, + "w": 22, + "h": 31 } } ] @@ -8457,6 +8457,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:22a2cc3d3e531d383cfd9c9c6d0ae90e:cf2116762e9ba52acbac985ed04a7bd6:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:7b927dc715c6335dfca9e369b61374b2:fb24603dd37bbe0cbdf1d74fcbcbd223:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index c510ecebd147b619feefdd0d58cd80fbde7d4170..4433ce43a40296587c71ae16307f1411b4188244 100644 GIT binary patch literal 55816 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 z zBrfVDBxCUcasV5fO5B>OMZ2J`+ta^o%ZYX`hA7C$$W1rpx*pEQ8dfd)Z*4jXgFLFn z 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
    N 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 UHuyZ|N&o-=07*qoM6N<$f_MKR6951J literal 57986 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%0A-{e@_E3&wHsrlYqLj2-T6$*Tj(55 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 diff --git a/public/images/items/malicious_armor.png b/public/images/items/malicious_armor.png index a37e21db2f10b2057f9c3877ff424d4312e43491..b7bfb55195bbc871e9d817441e94639d5f57051e 100644 GIT binary patch literal 894 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 delta 613 zcmV-r0-F7k2e}21F@K^^OjJbx000mW5F#WjH!xBQ#ifC(^<(hNM-UhGK`AQ=6=Hi?3&exp1AcQ=+V2rZucsxWGuV-sX{_|F^LJ z`HR8(u8)$!^S1ny*Tjg>@c7Ws!1(y+`1rtH&vyU-05)_|PE!Dp@hp-734aiYt1bWl z0fR|IK~y-6wUXO*f-n$8O`!Cm0t%H7QIu+E6fYq8|6l7#6h!UvsXcFD?-_ zgWm{L5i%SO&)nDLv(f04bbq)iJT&KL!PdAdfR|-q@NS1$ecRTYbJ_|e1kH;AgJ4>2 zzlHituYwpC#Q_{oeP6>c&;o4)A-pk^v6+JJLle#!Z5s%W^W?}cLJ*)n2ty<25rq($ z*9!Z9G27-^p=|>p>`RLyc(qt8v=WfBptO)>oTusWm;_8!Frw&#F@Gb-Qf0td=A~(p zpvMYA6-Co`$6OVaN-51Vo2QzyRjr^z(-(62NGTg5VVtp*sOuU%*3EJ#naBFF@uq|! zj=M3&x;12;mtP39#6c`~voS{Vx2Tjcj5vaGlt{k|k*>9(6~wj%S!kU->aQ*VqX?0@qEdY3#cS51Ha00000NkvXXu0mjfHQ6JJ From fac20ca97a214acbdd83d0f1795bf73d499f5186 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 28 Mar 2025 22:24:19 -0500 Subject: [PATCH 2/7] [Ability] Fully implement Flower Gift and Victory Star (#5222) * Fully implement Flower Gift and Victory Star * Fully implement Flower Gift and Victory Star * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Accept suggested change Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Accept suggested change Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fix check for ignore_abilities move flag * Fix missing argument to getBaseDamage in getAttackDamage * Fix merge conflict due to same changed import line * Fix call to getAttackDamage that was reset after merge * Update calls to getEffectiveStat --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/ability.ts | 88 ++++++++++++++++++++++++- src/data/battler-tags.ts | 10 ++- src/data/moves/move.ts | 4 +- src/field/pokemon.ts | 34 +++++++++- test/abilities/flower_gift.test.ts | 95 ++++++++++++++++++++++++--- test/abilities/protosynthesis.test.ts | 48 ++++++++++++-- test/abilities/victory_star.test.ts | 60 +++++++++++++++++ 7 files changed, 317 insertions(+), 22 deletions(-) create mode 100644 test/abilities/victory_star.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 5bf02cabf6c..6ffdc1f5403 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1712,6 +1712,62 @@ export class PostAttackAbAttr extends AbAttr { args: any[]): void {} } +/** + * Multiplies a Stat from an ally pokemon's ability. + * @see {@link applyAllyStatMultiplierAbAttrs} + * @see {@link applyAllyStat} + */ +export class AllyStatMultiplierAbAttr extends AbAttr { + private stat: BattleStat; + private multiplier: number; + private ignorable: boolean; + + /** + * @param stat - The stat being modified + * @param multipler - The multiplier to apply to the stat + * @param ignorable - Whether the multiplier can be ignored by mold breaker-like moves and abilities + */ + constructor(stat: BattleStat, multiplier: number, ignorable: boolean = true) { + super(false); + + this.stat = stat; + this.multiplier = multiplier; + this.ignorable = ignorable; + } + + /** + * Multiply a Pokemon's Stat due to an Ally's ability. + * @param _pokemon - The ally {@linkcode Pokemon} with the ability (unused) + * @param passive - unused + * @param _simulated - Whether the ability is being simulated (unused) + * @param _stat - The type of the checked {@linkcode Stat} (unused) + * @param statValue - {@linkcode Utils.NumberHolder} containing the value of the checked stat + * @param _checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) + * @param _ignoreAbility - Whether the ability should be ignored if possible + * @param _args - unused + * @returns `true` if this changed the checked stat, `false` otherwise. + */ + applyAllyStat(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, statValue: Utils.NumberHolder, _checkedPokemon: Pokemon, _ignoreAbility: boolean, _args: any[]) { + statValue.value *= this.multiplier; + } + + /** + * Check if this ability can apply to the checked stat. + * @param pokemon - The ally {@linkcode Pokemon} with the ability (unused) + * @param passive - unused + * @param simulated - Whether the ability is being simulated (unused) + * @param stat - The type of the checked {@linkcode Stat} + * @param statValue - {@linkcode Utils.NumberHolder} containing the value of the checked stat + * @param checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) + * @param ignoreAbility - Whether the ability should be ignored if possible + * @param args - unused + * @returns `true` if this can apply to the checked stat, `false` otherwise. + */ + canApplyAllyStat(pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, statValue: Utils.NumberHolder, checkedPokemon: Pokemon, ignoreAbility: boolean, args: any[]): boolean { + return stat === this.stat && !(ignoreAbility && this.ignorable); + } +} + /** * Ability attribute for Gorilla Tactics * @extends PostAttackAbAttr @@ -5594,6 +5650,30 @@ export function applyStatMultiplierAbAttrs( args, ); } + +/** + * Applies an ally's Stat multiplier attribute + * @param attrType - {@linkcode AllyStatMultiplierAbAttr} should always be AllyStatMultiplierAbAttr for the time being + * @param pokemon - The {@linkcode Pokemon} with the ability + * @param stat - The type of the checked {@linkcode Stat} + * @param statValue - {@linkcode Utils.NumberHolder} containing the value of the checked stat + * @param checkedPokemon - The {@linkcode Pokemon} with the checked stat + * @param ignoreAbility - Whether or not the ability should be ignored by the pokemon or its move. + * @param args - unused + */ +export function applyAllyStatMultiplierAbAttrs(attrType: Constructor, + pokemon: Pokemon, stat: BattleStat, statValue: Utils.NumberHolder, simulated: boolean = false, checkedPokemon: Pokemon, ignoreAbility: boolean, ...args: any[] +): void { + return applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), + (attr, passive) => attr.canApplyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), + args, + simulated, + ); +} + export function applyPostSetStatusAbAttrs( attrType: Constructor, pokemon: Pokemon, @@ -5606,7 +5686,8 @@ export function applyPostSetStatusAbAttrs( attrType, pokemon, (attr, passive) => attr.applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), - (attr, passive) => attr.canApplyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), args, + (attr, passive) => attr.canApplyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), + args, simulated, ); } @@ -6437,11 +6518,12 @@ export function initAbilities() { new Ability(Abilities.FLOWER_GIFT, 4) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.ATK, 1.5) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.SPDEF, 1.5) + .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), AllyStatMultiplierAbAttr, Stat.ATK, 1.5) + .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), AllyStatMultiplierAbAttr, Stat.SPDEF, 1.5) .attr(UncopiableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) .attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FLOWER_GIFT) .attr(PostWeatherChangeFormChangeAbAttr, Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]) - .partial() // Should also boosts stats of ally .ignorable(), new Ability(Abilities.BAD_DREAMS, 4) .attr(PostTurnHurtIfSleepingAbAttr), @@ -6577,7 +6659,7 @@ export function initAbilities() { .bypassFaint(), new Ability(Abilities.VICTORY_STAR, 5) .attr(StatMultiplierAbAttr, Stat.ACC, 1.1) - .partial(), // Does not boost ally's accuracy + .attr(AllyStatMultiplierAbAttr, Stat.ACC, 1.1, false), new Ability(Abilities.TURBOBLAZE, 5) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTurboblaze", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index c4004e9c582..8981644d885 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1644,7 +1644,9 @@ export class ContactDamageProtectedTag extends ProtectedTag { if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { - attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { + result: HitResult.INDIRECT, + }); } } } @@ -1970,7 +1972,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { let highestStat: EffectiveStat; EFFECTIVE_STATS.map(s => - pokemon.getEffectiveStat(s, undefined, undefined, undefined, undefined, undefined, undefined, true), + pokemon.getEffectiveStat(s, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true), ).reduce((highestValue: number, value: number, i: number) => { if (value > highestValue) { highestStat = EFFECTIVE_STATS[i]; @@ -2240,7 +2242,9 @@ export class SaltCuredTag extends BattlerTag { if (!cancelled.value) { const pokemonSteelOrWater = pokemon.isOfType(PokemonType.STEEL) || pokemon.isOfType(PokemonType.WATER); - pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); + pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), { + result: HitResult.INDIRECT, + }); globalScene.queueMessage( i18next.t("battlerTags:saltCuredLapse", { diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index c85ec7db295..e18e898bc68 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -4798,8 +4798,8 @@ export class ShellSideArmCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const category = (args[0] as Utils.NumberHolder); - const predictedPhysDmg = target.getBaseDamage(user, move, MoveCategory.PHYSICAL, true, true); - const predictedSpecDmg = target.getBaseDamage(user, move, MoveCategory.SPECIAL, true, true); + const predictedPhysDmg = target.getBaseDamage(user, move, MoveCategory.PHYSICAL, true, true, true, true); + const predictedSpecDmg = target.getBaseDamage(user, move, MoveCategory.SPECIAL, true, true, true, true); if (predictedPhysDmg > predictedSpecDmg) { category.value = MoveCategory.PHYSICAL; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index a7532685bea..51a5a10b010 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -192,6 +192,9 @@ import { applyPreLeaveFieldAbAttrs, applyOnLoseAbAttrs, PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, + applyAllyStatMultiplierAbAttrs, + AllyStatMultiplierAbAttr, + MoveAbilityBypassAbAttr, } from "#app/data/ability"; import type PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; @@ -260,6 +263,7 @@ import { import { Nature } from "#enums/nature"; import { StatusEffect } from "#enums/status-effect"; import { doShinySparkleAnim } from "#app/field/anims"; +import { MoveFlags } from "#enums/MoveFlags"; export enum LearnMoveSituation { MISC, @@ -1389,6 +1393,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param move the {@linkcode Move} being used * @param ignoreAbility determines whether this Pokemon's abilities should be ignored during the stat calculation * @param ignoreOppAbility during an attack, determines whether the opposing Pokemon's abilities should be ignored during the stat calculation. + * @param ignoreAllyAbility during an attack, determines whether the ally Pokemon's abilities should be ignored during the stat calculation. * @param isCritical determines whether a critical hit has occurred or not (`false` by default) * @param simulated if `true`, nullifies any effects that produce any changes to game state from triggering * @param ignoreHeldItems determines whether this Pokemon's held items should be ignored during the stat calculation, default `false` @@ -1400,6 +1405,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { move?: Move, ignoreAbility = false, ignoreOppAbility = false, + ignoreAllyAbility = false, isCritical = false, simulated = true, ignoreHeldItems = false, @@ -1441,6 +1447,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } + const ally = this.getAlly(); + if (ally) { + applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, stat, statValue, simulated, this, move?.hasFlag(MoveFlags.IGNORE_ABILITIES) || ignoreAllyAbility); + } + let ret = statValue.value * this.getStatStageMultiplier( @@ -3889,6 +3900,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { evasionMultiplier, ); + const ally = this.getAlly(); + if (ally) { + const ignore = this.hasAbilityWithAttr(MoveAbilityBypassAbAttr) || sourceMove.hasFlag(MoveFlags.IGNORE_ABILITIES); + applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, Stat.ACC, accuracyMultiplier, false, this, ignore); + applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, Stat.EVA, evasionMultiplier, false, this, ignore); + } + return accuracyMultiplier.value / evasionMultiplier.value; } @@ -3900,6 +3918,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param moveCategory the move's {@linkcode MoveCategory} after variable-category effects are applied. * @param ignoreAbility if `true`, ignores this Pokemon's defensive ability effects (defaults to `false`). * @param ignoreSourceAbility if `true`, ignore's the attacking Pokemon's ability effects (defaults to `false`). + * @param ignoreAllyAbility if `true`, ignores the ally Pokemon's ability effects (defaults to `false`). + * @param ignoreSourceAllyAbility if `true`, ignores the attacking Pokemon's ally's ability effects (defaults to `false`). * @param isCritical if `true`, calculates effective stats as if the hit were critical (defaults to `false`). * @param simulated if `true`, suppresses changes to game state during calculation (defaults to `true`). * @returns The move's base damage against this Pokemon when used by the source Pokemon. @@ -3910,6 +3930,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { moveCategory: MoveCategory, ignoreAbility = false, ignoreSourceAbility = false, + ignoreAllyAbility = false, + ignoreSourceAllyAbility = false, isCritical = false, simulated = true, ): number { @@ -3932,6 +3954,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { undefined, ignoreSourceAbility, ignoreAbility, + ignoreAllyAbility, isCritical, simulated, ), @@ -3949,6 +3972,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { move, ignoreAbility, ignoreSourceAbility, + ignoreSourceAllyAbility, isCritical, simulated, ), @@ -3983,6 +4007,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param move {@linkcode Pokemon} the move used in the attack * @param ignoreAbility If `true`, ignores this Pokemon's defensive ability effects * @param ignoreSourceAbility If `true`, ignores the attacking Pokemon's ability effects + * @param ignoreAllyAbility If `true`, ignores the ally Pokemon's ability effects + * @param ignoreSourceAllyAbility If `true`, ignores the ability effects of the attacking pokemon's ally * @param isCritical If `true`, calculates damage for a critical hit. * @param simulated If `true`, suppresses changes to game state during the calculation. * @returns a {@linkcode DamageCalculationResult} object with three fields: @@ -3995,6 +4021,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { move: Move, ignoreAbility = false, ignoreSourceAbility = false, + ignoreAllyAbility = false, + ignoreSourceAllyAbility = false, isCritical = false, simulated = true, ): DamageCalculationResult { @@ -4104,6 +4132,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { moveCategory, ignoreAbility, ignoreSourceAbility, + ignoreAllyAbility, + ignoreSourceAllyAbility, isCritical, simulated, ); @@ -4429,7 +4459,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { cancelled, result, damage: dmg, - } = this.getAttackDamage(source, move, false, false, isCritical, false); + } = this.getAttackDamage(source, move, false, false, false, false, isCritical, false); const typeBoost = source.findTag( t => @@ -7114,6 +7144,8 @@ export class EnemyPokemon extends Pokemon { move, !p.battleData.abilityRevealed, false, + !p.getAlly()?.battleData.abilityRevealed, + false, isCritical, ).damage >= p.hp ); diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index fff509a1f00..1104a3c111f 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -1,12 +1,14 @@ import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { WeatherType } from "#app/enums/weather-type"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Abilities - Flower Gift", () => { let phaserGame: Phaser.Game; @@ -28,6 +30,59 @@ describe("Abilities - Flower Gift", () => { expect(game.scene.getPlayerPokemon()?.formIndex).toBe(OVERCAST_FORM); }; + /** + * Tests damage dealt by a move used against a target before and after Flower Gift is activated. + * @param game The game manager instance + * @param move The move that should be used + * @param allyAttacker True if the ally is attacking the enemy, false if the enemy is attacking the ally + * @param ability The ability that the ally pokemon should have + * @param enemyAbility The ability that the enemy pokemon should have + * + * @returns Two numbers, the first being the damage done to the target without flower gift active, the second being the damage done with flower gift active + */ + const testDamageDealt = async (game: GameManager, move: Moves, allyAttacker: boolean, allyAbility = Abilities.BALL_FETCH, enemyAbility = Abilities.BALL_FETCH): Promise<[number, number]> => { + game.override.battleType("double"); + game.override.moveset([ Moves.SPLASH, Moves.SUNNY_DAY, move, Moves.HEAL_PULSE ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.HEAL_PULSE ]); + const target_index = allyAttacker ? BattlerIndex.ENEMY : BattlerIndex.PLAYER_2; + const attacker_index = allyAttacker ? BattlerIndex.PLAYER_2 : BattlerIndex.ENEMY; + const ally_move = allyAttacker ? move : Moves.SPLASH; + const enemy_move = allyAttacker ? Moves.SPLASH : move; + const ally_target = allyAttacker ? BattlerIndex.ENEMY : null; + + await game.classicMode.startBattle([ Species.CHERRIM, Species.MAGIKARP ]); + const target = allyAttacker ? game.scene.getEnemyField()[0] : game.scene.getPlayerField()[1]; + const initialHp = target.getMaxHp(); + + // Override the ability for the target and attacker only + vi.spyOn(game.scene.getPlayerField()[1], "getAbility").mockReturnValue(allAbilities[allyAbility]); + vi.spyOn(game.scene.getEnemyField()[0], "getAbility").mockReturnValue(allAbilities[enemyAbility]); + + // turn 1 + game.move.select(Moves.SUNNY_DAY, 0); + game.move.select(ally_move, 1, ally_target); + await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + // Ensure sunny day is used last. + await game.setTurnOrder([ attacker_index, target_index, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to(TurnEndPhase); + const damageWithoutGift = initialHp - target.hp; + + target.hp = initialHp; + + // turn 2. Make target use recover to reset hp calculation. + game.move.select(Moves.SPLASH, 0, target_index); + game.move.select(ally_move, 1, ally_target); + await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, target_index, attacker_index ]); + await game.phaseInterceptor.to(TurnEndPhase); + const damageWithGift = initialHp - target.hp; + + return [ damageWithoutGift, damageWithGift ]; + }; + + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -41,23 +96,24 @@ describe("Abilities - Flower Gift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SKILL_SWAP]) + .moveset([Moves.SPLASH, Moves.SUNSTEEL_STRIKE, Moves.SUNNY_DAY, Moves.MUD_SLAP]) .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH); + .enemyAbility(Abilities.BALL_FETCH) + .enemyLevel(100) + .startingLevel(100); }); - // TODO: Uncomment expect statements when the ability is implemented - currently does not increase stats of allies it("increases the ATK and SPDEF stat stages of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => { game.override.battleType("double"); await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); - const [cherrim] = game.scene.getPlayerField(); + const [cherrim, magikarp] = game.scene.getPlayerField(); const cherrimAtkStat = cherrim.getEffectiveStat(Stat.ATK); const cherrimSpDefStat = cherrim.getEffectiveStat(Stat.SPDEF); - // const magikarpAtkStat = magikarp.getEffectiveStat(Stat.ATK);; - // const magikarpSpDefStat = magikarp.getEffectiveStat(Stat.SPDEF); + const magikarpAtkStat = magikarp.getEffectiveStat(Stat.ATK); + const magikarpSpDefStat = magikarp.getEffectiveStat(Stat.SPDEF); game.move.select(Moves.SUNNY_DAY, 0); game.move.select(Moves.SPLASH, 1); @@ -68,8 +124,28 @@ describe("Abilities - Flower Gift", () => { expect(cherrim.formIndex).toBe(SUNSHINE_FORM); expect(cherrim.getEffectiveStat(Stat.ATK)).toBe(Math.floor(cherrimAtkStat * 1.5)); expect(cherrim.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(cherrimSpDefStat * 1.5)); - // expect(magikarp.getEffectiveStat(Stat.ATK)).toBe(Math.floor(magikarpAtkStat * 1.5)); - // expect(magikarp.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(magikarpSpDefStat * 1.5)); + expect(magikarp.getEffectiveStat(Stat.ATK)).toBe(Math.floor(magikarpAtkStat * 1.5)); + expect(magikarp.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(magikarpSpDefStat * 1.5)); + }); + + it("should not increase the damage of an ally using an ability ignoring move", async () => { + const [ damageWithGift, damageWithoutGift ] = await testDamageDealt(game, Moves.SUNSTEEL_STRIKE, true); + expect(damageWithGift).toBe(damageWithoutGift); + }); + + it("should not increase the damage of a mold breaker ally", async () => { + const [ damageWithGift, damageWithoutGift ] = await testDamageDealt(game, Moves.TACKLE, true, Abilities.MOLD_BREAKER); + expect(damageWithGift).toBe(damageWithoutGift); + }); + + it("should decrease the damage an ally takes from a special attack", async () => { + const [ damageWithoutGift, damageWithGift ] = await testDamageDealt(game, Moves.MUD_SLAP, false); + expect(damageWithGift).toBeLessThan(damageWithoutGift); + }); + + it("should not decrease the damage an ally takes from a mold breaker enemy using a special attack", async () => { + const [ damageWithoutGift, damageWithGift ] = await testDamageDealt(game, Moves.MUD_SLAP, false, Abilities.BALL_FETCH, Abilities.MOLD_BREAKER); + expect(damageWithGift).toBe(damageWithoutGift); }); it("changes the Pokemon's form during Harsh Sunlight", async () => { @@ -92,6 +168,7 @@ describe("Abilities - Flower Gift", () => { it("reverts to Overcast Form when the Pokémon loses Flower Gift, changes form under Harsh Sunlight/Sunny when it regains it", async () => { game.override.enemyMoveset([Moves.SKILL_SWAP]).weather(WeatherType.HARSH_SUN); + game.override.moveset([ Moves.SKILL_SWAP ]); await game.classicMode.startBattle([Species.CHERRIM]); diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index d0ae46cd951..882474b7cef 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -46,16 +46,56 @@ describe("Abilities - Protosynthesis", () => { // Nature of starting mon is randomized. We need to fix it to a neutral nature for the automated test. mew.setNature(Nature.HARDY); const enemy = game.scene.getEnemyPokemon()!; - const def_before_boost = mew.getEffectiveStat(Stat.DEF, undefined, undefined, false, undefined, false, false, true); - const atk_before_boost = mew.getEffectiveStat(Stat.ATK, undefined, undefined, false, undefined, false, false, true); + const def_before_boost = mew.getEffectiveStat( + Stat.DEF, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); + const atk_before_boost = mew.getEffectiveStat( + Stat.ATK, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); const initialHp = enemy.hp; game.move.select(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const unboosted_dmg = initialHp - enemy.hp; enemy.hp = initialHp; - const def_after_boost = mew.getEffectiveStat(Stat.DEF, undefined, undefined, false, undefined, false, false, true); - const atk_after_boost = mew.getEffectiveStat(Stat.ATK, undefined, undefined, false, undefined, false, false, true); + const def_after_boost = mew.getEffectiveStat( + Stat.DEF, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); + const atk_after_boost = mew.getEffectiveStat( + Stat.ATK, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); game.move.select(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts new file mode 100644 index 00000000000..456f8cd7ddd --- /dev/null +++ b/test/abilities/victory_star.test.ts @@ -0,0 +1,60 @@ +import { BattlerIndex } from "#app/battle"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Victory Star", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.TACKLE, Moves.SPLASH ]) + .battleType("double") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should increase the accuracy of its user", async () => { + await game.classicMode.startBattle([ Species.VICTINI, Species.MAGIKARP ]); + + const user = game.scene.getPlayerField()[0]; + + vi.spyOn(user, "getAccuracyMultiplier"); + game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(user.getAccuracyMultiplier).toHaveReturnedWith(1.1); + }); + + it("should increase the accuracy of its user's ally", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP, Species.VICTINI ]); + + const ally = game.scene.getPlayerField()[0]; + vi.spyOn(ally, "getAccuracyMultiplier"); + + game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(ally.getAccuracyMultiplier).toHaveReturnedWith(1.1); + }); +}); From 5f01caffae90556e879219108d6c6d80273bc2a9 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 28 Mar 2025 23:19:35 -0500 Subject: [PATCH 3/7] [Refactor] Minor refactor of trainer-config files (#5573) * Move trainer-config.ts * move TeraAIMode enum to its own file * Move TrainerPoolTier enum to its own file * Move TrainerSlot enum to its own file * Reorder and group imports * Move TrainerPartyTemplate to its own file * Remove speciesPoolPerEvilTeamAdmin method * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fix typo in zinzolin's name --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 4 +- src/battle.ts | 2 +- src/data/dialogue.ts | 2 +- .../encounters/a-trainers-test-encounter.ts | 2 +- .../encounters/absolute-avarice-encounter.ts | 2 +- .../encounters/bug-type-superfan-encounter.ts | 11 +- .../encounters/clowning-around-encounter.ts | 4 +- .../encounters/dancing-lessons-encounter.ts | 2 +- .../encounters/fun-and-games-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 2 +- .../mysterious-challengers-encounter.ts | 10 +- .../encounters/safari-zone-encounter.ts | 2 +- .../teleporting-hijinks-encounter.ts | 2 +- .../the-expert-pokemon-breeder-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 3 +- .../utils/encounter-phase-utils.ts | 5 +- src/data/trainers/TrainerPartyTemplate.ts | 255 ++++++ src/data/trainers/evil-admin-trainer-pools.ts | 436 ++++++++++ src/data/{ => trainers}/trainer-config.ts | 789 +----------------- src/data/trainers/typedefs.ts | 22 + src/enums/tera-ai-mode.ts | 5 + src/enums/trainer-pool-tier.ts | 7 + src/enums/trainer-slot.ts | 5 + src/field/pokemon.ts | 2 +- src/field/trainer.ts | 17 +- src/phases/battle-phase.ts | 2 +- src/phases/encounter-phase.ts | 2 +- src/phases/game-over-phase.ts | 2 +- src/phases/mystery-encounter-phases.ts | 2 +- src/phases/summon-phase.ts | 2 +- src/phases/switch-summon-phase.ts | 2 +- src/phases/trainer-message-test-phase.ts | 2 +- src/phases/trainer-victory-phase.ts | 2 +- src/system/game-data.ts | 2 +- src/system/pokemon-data.ts | 2 +- src/system/voucher.ts | 2 +- test/moves/effectiveness.test.ts | 2 +- .../mysterious-challengers-encounter.test.ts | 4 +- 38 files changed, 828 insertions(+), 795 deletions(-) create mode 100644 src/data/trainers/TrainerPartyTemplate.ts create mode 100644 src/data/trainers/evil-admin-trainer-pools.ts rename src/data/{ => trainers}/trainer-config.ts (88%) create mode 100644 src/data/trainers/typedefs.ts create mode 100644 src/enums/tera-ai-mode.ts create mode 100644 src/enums/trainer-pool-tier.ts create mode 100644 src/enums/trainer-slot.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 443113daef6..5797fda5611 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -72,8 +72,8 @@ import { GameModes, getGameMode } from "#app/game-mode"; import FieldSpritePipeline from "#app/pipelines/field-sprite"; import SpritePipeline from "#app/pipelines/sprite"; import PartyExpBar from "#app/ui/party-exp-bar"; -import type { TrainerSlot } from "#app/data/trainer-config"; -import { trainerConfigs } from "#app/data/trainer-config"; +import type { TrainerSlot } from "./enums/trainer-slot"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import Trainer, { TrainerVariant } from "#app/field/trainer"; import type TrainerData from "#app/system/trainer-data"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; diff --git a/src/battle.ts b/src/battle.ts index 5ada921bf5a..367c52568dc 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -5,7 +5,7 @@ import Trainer, { TrainerVariant } from "./field/trainer"; import type { GameMode } from "./game-mode"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; import type { PokeballType } from "#enums/pokeball"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { SpeciesFormKey } from "#enums/species-form-key"; import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 0e755d54e15..fa640e92b00 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -1,6 +1,6 @@ import { BattleSpec } from "#enums/battle-spec"; import { TrainerType } from "#enums/trainer-type"; -import { trainerConfigs } from "./trainer-config"; +import { trainerConfigs } from "./trainers/trainer-config"; export interface TrainerTypeMessages { encounter?: string | string[]; diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 6cea85346b3..a49157f8e88 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -6,7 +6,7 @@ import { setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index ca44782691d..85f40a41e51 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -31,7 +31,7 @@ import { catchPokemon, getHighestLevelPlayerPokemon, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { PokeballType } from "#enums/pokeball"; import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import type { BerryType } from "#enums/berry-type"; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 15cba1fa103..1e4c9a3b957 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -9,13 +9,10 @@ import { setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { - getRandomPartyMemberFunc, - trainerConfigs, - TrainerPartyCompoundTemplate, - TrainerPartyTemplate, - TrainerSlot, -} from "#app/data/trainer-config"; +import { getRandomPartyMemberFunc, trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerSlot } from "#enums/trainer-slot"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 2b499d938cd..eca99fc0c13 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -8,7 +8,9 @@ import { setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { trainerConfigs, TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { ModifierTier } from "#app/modifier/modifier-tier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { ModifierPoolType, modifierTypes } from "#app/modifier/modifier-type"; diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 91f168371cf..75527e1f8c1 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -20,7 +20,7 @@ import { STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index c95810b94d0..282c6c149ff 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -10,7 +10,7 @@ import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { FieldPosition } from "#app/field/pokemon"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index 4f10a657e4e..c13501c4511 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -3,7 +3,7 @@ import { selectPokemonForOption, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { MusicPreference } from "#app/system/settings/settings"; import type { ModifierTypeOption } from "#app/modifier/modifier-type"; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index bf60e982b15..11924f93df4 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -3,12 +3,10 @@ import { initBattleWithEnemyConfig, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { - trainerConfigs, - TrainerPartyCompoundTemplate, - TrainerPartyTemplate, - trainerPartyTemplates, -} from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index f231e4abdb8..8c45fde3079 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -10,7 +10,7 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { HiddenAbilityRateBoosterModifier, IvScannerModifier } from "#app/modifier/modifier"; import type { EnemyPokemon } from "#app/field/pokemon"; import { PokeballType } from "#enums/pokeball"; diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index c7220192caa..806a89a7131 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -24,7 +24,7 @@ import { Biome } from "#enums/biome"; import { getBiomeKey } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; import { getPartyLuckValue, modifierTypes } from "#app/modifier/modifier-type"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { BattlerTagType } from "#enums/battler-tag-type"; import { getPokemonNameWithAffix } from "#app/messages"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 2b29046f738..84dd5002e83 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -4,7 +4,7 @@ import { initBattleWithEnemyConfig, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import { randSeedShuffle } from "#app/utils"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 5d3f834ed75..22ec52e976c 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -41,7 +41,8 @@ import { TrainerType } from "#enums/trainer-type"; import PokemonData from "#app/system/pokemon-data"; import { Nature } from "#enums/nature"; import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; -import { trainerConfigs, TrainerPartyTemplate } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { PartyMemberStrength } from "#enums/party-member-strength"; /** i18n namespace for encounter */ diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index d37ac340a7c..5c6acf43e26 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -43,8 +43,9 @@ import type { Moves } from "#enums/moves"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { Status } from "#app/data/status-effect"; -import type { TrainerConfig } from "#app/data/trainer-config"; -import { trainerConfigs, TrainerSlot } from "#app/data/trainer-config"; +import type { TrainerConfig } from "#app/data/trainers/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type PokemonSpecies from "#app/data/pokemon-species"; import type { IEggOptions } from "#app/data/egg"; import { Egg } from "#app/data/egg"; diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts new file mode 100644 index 00000000000..adbaacc6b55 --- /dev/null +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -0,0 +1,255 @@ +import { startingWave } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import { PartyMemberStrength } from "#enums/party-member-strength"; + +export class TrainerPartyTemplate { + public size: number; + public strength: PartyMemberStrength; + public sameSpecies: boolean; + public balanced: boolean; + + constructor(size: number, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { + this.size = size; + this.strength = strength; + this.sameSpecies = !!sameSpecies; + this.balanced = !!balanced; + } + + getStrength(_index: number): PartyMemberStrength { + return this.strength; + } + + isSameSpecies(_index: number): boolean { + return this.sameSpecies; + } + + isBalanced(_index: number): boolean { + return this.balanced; + } +} + +export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { + public templates: TrainerPartyTemplate[]; + + constructor(...templates: TrainerPartyTemplate[]) { + super( + templates.reduce((total: number, template: TrainerPartyTemplate) => { + total += template.size; + return total; + }, 0), + PartyMemberStrength.AVERAGE, + ); + this.templates = templates; + } + + getStrength(index: number): PartyMemberStrength { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.getStrength(index - t); + } + t += template.size; + } + + return super.getStrength(index); + } + + isSameSpecies(index: number): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isSameSpecies(index - t); + } + t += template.size; + } + + return super.isSameSpecies(index); + } + + isBalanced(index: number): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isBalanced(index - t); + } + t += template.size; + } + + return super.isBalanced(index); + } +} + +export const trainerPartyTemplates = { + ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), + TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), + ), + TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + ), + TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), + THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), + THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), + THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), + THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), + FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), + FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), + FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), + FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), + FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), + FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), + FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), + FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), + SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), + SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), + SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), + SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), + + GYM_LEADER_1: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + GYM_LEADER_2: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + GYM_LEADER_3: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + GYM_LEADER_4: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + GYM_LEADER_5: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + + ELITE_FOUR: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + + CHAMPION: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(4, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(2, PartyMemberStrength.STRONGER, false, true), + ), + + RIVAL: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + RIVAL_2: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), + ), + RIVAL_3: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), + ), + RIVAL_4: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), + ), + RIVAL_5: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + RIVAL_6: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), +}; + +/** + * The function to get variable strength grunts + * @returns the correct TrainerPartyTemplate + */ +export function getEvilGruntPartyTemplate(): TrainerPartyTemplate { + const waveIndex = globalScene.currentBattle?.waveIndex; + if (waveIndex < 40) { + return trainerPartyTemplates.TWO_AVG; + } + if (waveIndex < 63) { + return trainerPartyTemplates.THREE_AVG; + } + if (waveIndex < 65) { + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + } + if (waveIndex < 112) { + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + } + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger +} + +export function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { + const { currentBattle, gameMode } = globalScene; + const wave = gameMode.getWaveForDifficulty(currentBattle?.waveIndex || startingWave, true); + const templateIndex = Math.ceil((wave - 20) / 30); + return templates[Phaser.Math.Clamp(templateIndex, 0, templates.length - 1)]; +} + +export function getGymLeaderPartyTemplate() { + return getWavePartyTemplate( + trainerPartyTemplates.GYM_LEADER_1, + trainerPartyTemplates.GYM_LEADER_2, + trainerPartyTemplates.GYM_LEADER_3, + trainerPartyTemplates.GYM_LEADER_4, + trainerPartyTemplates.GYM_LEADER_5, + ); +} diff --git a/src/data/trainers/evil-admin-trainer-pools.ts b/src/data/trainers/evil-admin-trainer-pools.ts new file mode 100644 index 00000000000..ecbd5952143 --- /dev/null +++ b/src/data/trainers/evil-admin-trainer-pools.ts @@ -0,0 +1,436 @@ +import type { TrainerTierPools } from "#app/data/trainers/typedefs"; +import { TrainerPoolTier } from "#enums/trainer-pool-tier"; +import { Species } from "#enums/species"; + +/** Team Rocket's admin trainer pool. */ +const ROCKET: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.RATICATE, + Species.ARBOK, + Species.VILEPLUME, + Species.ARCANINE, + Species.GENGAR, + Species.HYPNO, + Species.ELECTRODE, + Species.EXEGGUTOR, + Species.CUBONE, + Species.KOFFING, + Species.GYARADOS, + Species.CROBAT, + Species.STEELIX, + Species.HOUNDOOM, + Species.HONCHKROW, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.OMASTAR, + Species.KABUTOPS, + Species.MAGNEZONE, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.PORYGON_Z, + Species.ANNIHILAPE, + Species.ALOLA_SANDSLASH, + Species.ALOLA_PERSIAN, + Species.ALOLA_GOLEM, + Species.ALOLA_MUK, + Species.PALDEA_TAUROS, + ], + [TrainerPoolTier.RARE]: [Species.DRAGONITE, Species.TYRANITAR], +}; + +/** Team Magma's admin trainer pool */ +const MAGMA: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.ARCANINE, + Species.MAGCARGO, + Species.HOUNDOOM, + Species.TORKOAL, + Species.SOLROCK, + Species.CLAYDOL, + Species.HIPPOWDON, + Species.MAGMORTAR, + Species.GLISCOR, + Species.COALOSSAL, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.AGGRON, + Species.FLYGON, + Species.CRADILY, + Species.ARMALDO, + Species.RHYPERIOR, + Species.TURTONATOR, + Species.SANDACONDA, + Species.TOEDSCRUEL, + Species.HISUI_ARCANINE, + ], + [TrainerPoolTier.RARE]: [Species.CHARCADET, Species.SCOVILLAIN], +}; + +const AQUA: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.TENTACRUEL, + Species.LANTURN, + Species.AZUMARILL, + Species.QUAGSIRE, + Species.OCTILLERY, + Species.LUDICOLO, + Species.PELIPPER, + Species.WAILORD, + Species.WHISCASH, + Species.CRAWDAUNT, + Species.WALREIN, + Species.CLAMPERL, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.QUAGSIRE, + Species.MANTINE, + Species.KINGDRA, + Species.MILOTIC, + Species.DRAGALGE, + Species.DHELMISE, + Species.BARRASKEWDA, + Species.GRAPPLOCT, + Species.OVERQWIL, + ], + [TrainerPoolTier.RARE]: [Species.BASCULEGION, Species.DONDOZO], +}; + +const GALACTIC: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.ELECTRODE, + Species.GYARADOS, + Species.CROBAT, + Species.HONCHKROW, + Species.BRONZONG, + Species.DRAPION, + Species.LICKILICKY, + Species.TANGROWTH, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.YANMEGA, + Species.MAMOSWINE, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.ALAKAZAM, + Species.WEAVILE, + Species.GLISCOR, + Species.DUSKNOIR, + Species.ROTOM, + Species.OVERQWIL, + Species.HISUI_ARCANINE, + Species.HISUI_ELECTRODE, + ], + [TrainerPoolTier.RARE]: [Species.SPIRITOMB, Species.URSALUNA, Species.SNEASLER, Species.HISUI_LILLIGANT], +}; + +const PLASMA_ZINZOLIN: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.GIGALITH, + Species.CONKELDURR, + Species.SEISMITOAD, + Species.KROOKODILE, + Species.DARMANITAN, + Species.COFAGRIGUS, + Species.VANILLUXE, + Species.AMOONGUSS, + Species.JELLICENT, + Species.GALVANTULA, + Species.FERROTHORN, + Species.BEARTIC, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.EXCADRILL, + Species.SIGILYPH, + Species.ZOROARK, + Species.KLINKLANG, + Species.EELEKTROSS, + Species.MIENSHAO, + Species.GOLURK, + Species.BISHARP, + Species.MANDIBUZZ, + Species.DURANT, + Species.GALAR_DARMANITAN, + ], + [TrainerPoolTier.RARE]: [Species.HAXORUS, Species.HYDREIGON, Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY], +}; + +const PLASMA_COLRESS: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.MUK, + Species.ELECTRODE, + Species.BRONZONG, + Species.MAGNEZONE, + Species.PORYGON_Z, + Species.MUSHARNA, + Species.REUNICLUS, + Species.GALVANTULA, + Species.FERROTHORN, + Species.EELEKTROSS, + Species.BEHEEYEM, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.METAGROSS, + Species.ROTOM, + Species.CARRACOSTA, + Species.ARCHEOPS, + Species.GOLURK, + Species.DURANT, + Species.VIKAVOLT, + Species.ORBEETLE, + Species.REVAVROOM, + Species.ALOLA_MUK, + Species.HISUI_ELECTRODE, + ], + [TrainerPoolTier.RARE]: [Species.ELECTIVIRE, Species.MAGMORTAR, Species.BISHARP, Species.ARCHALUDON], +}; + +const FLARE: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.MANECTRIC, + Species.DRAPION, + Species.LIEPARD, + Species.AMOONGUSS, + Species.DIGGERSBY, + Species.TALONFLAME, + Species.PYROAR, + Species.PANGORO, + Species.MEOWSTIC, + Species.MALAMAR, + Species.CLAWITZER, + Species.HELIOLISK, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.HOUNDOOM, + Species.WEAVILE, + Species.CHANDELURE, + Species.AEGISLASH, + Species.BARBARACLE, + Species.DRAGALGE, + Species.GOODRA, + Species.TREVENANT, + Species.GOURGEIST, + ], + [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.HISUI_GOODRA, Species.HISUI_AVALUGG], +}; + +const AETHER: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.ALAKAZAM, + Species.SLOWBRO, + Species.EXEGGUTOR, + Species.XATU, + Species.CLAYDOL, + Species.BEHEEYEM, + Species.ORANGURU, + Species.BRUXISH, + Species.ORBEETLE, + Species.FARIGIRAF, + Species.ALOLA_RAICHU, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.KIRLIA, + Species.MEDICHAM, + Species.METAGROSS, + Species.MALAMAR, + Species.HATTERENE, + Species.MR_RIME, + Species.GALAR_SLOWKING, + ], + [TrainerPoolTier.RARE]: [Species.PORYGON_Z, Species.ARMAROUGE, Species.HISUI_BRAVIARY], +}; + +const SKULL: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.NIDOQUEEN, + Species.GENGAR, + Species.KOFFING, + Species.CROBAT, + Species.ROSERADE, + Species.SKUNTANK, + Species.TOXICROAK, + Species.SCOLIPEDE, + Species.TOXAPEX, + Species.LURANTIS, + Species.ALOLA_MUK, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.DRAPION, + Species.MANDIBUZZ, + Species.OVERQWIL, + Species.GLIMMORA, + Species.CLODSIRE, + Species.GALAR_SLOWBRO, + ], + [TrainerPoolTier.RARE]: [Species.DRAGALGE, Species.SNEASLER], +}; + +const MACRO_COSMOS: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.NINETALES, + Species.BELLOSSOM, + Species.MILOTIC, + Species.FROSLASS, + Species.GOTHITELLE, + Species.JELLICENT, + Species.SALAZZLE, + Species.TSAREENA, + Species.POLTEAGEIST, + Species.HATTERENE, + Species.GALAR_RAPIDASH, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.TOGEKISS, + Species.MANDIBUZZ, + Species.TOXAPEX, + Species.APPLETUN, + Species.CURSOLA, + Species.ALOLA_NINETALES, + ], + [TrainerPoolTier.RARE]: [Species.TINKATON, Species.HISUI_LILLIGANT], +}; + +const STAR_DARK: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.SHIFTRY, + Species.CACTURNE, + Species.HONCHKROW, + Species.SKUNTANK, + Species.KROOKODILE, + Species.OBSTAGOON, + Species.LOKIX, + Species.MABOSSTIFF, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.UMBREON, + Species.CRAWDAUNT, + Species.WEAVILE, + Species.ZOROARK, + Species.MALAMAR, + Species.BOMBIRDIER, + ], + [TrainerPoolTier.RARE]: [Species.HYDREIGON, Species.MEOWSCARADA], +}; + +const STAR_FIRE: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.ARCANINE, + Species.HOUNDOOM, + Species.CAMERUPT, + Species.CHANDELURE, + Species.TALONFLAME, + Species.PYROAR, + Species.COALOSSAL, + Species.SCOVILLAIN, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.RAPIDASH, + Species.FLAREON, + Species.TORKOAL, + Species.MAGMORTAR, + Species.SALAZZLE, + Species.TURTONATOR, + ], + [TrainerPoolTier.RARE]: [Species.VOLCARONA, Species.SKELEDIRGE], +}; + +const STAR_POISON: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.MUK, + Species.CROBAT, + Species.SKUNTANK, + Species.AMOONGUSS, + Species.TOXAPEX, + Species.TOXTRICITY, + Species.GRAFAIAI, + Species.CLODSIRE, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.GENGAR, + Species.SEVIPER, + Species.DRAGALGE, + Species.OVERQWIL, + Species.ALOLA_MUK, + Species.GALAR_SLOWBRO, + ], + [TrainerPoolTier.RARE]: [Species.GLIMMORA, Species.VENUSAUR], +}; + +const STAR_FAIRY: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.CLEFABLE, + Species.WIGGLYTUFF, + Species.AZUMARILL, + Species.WHIMSICOTT, + Species.FLORGES, + Species.HATTERENE, + Species.GRIMMSNARL, + Species.TINKATON, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.TOGEKISS, + Species.GARDEVOIR, + Species.SYLVEON, + Species.KLEFKI, + Species.MIMIKYU, + Species.ALOLA_NINETALES, + ], + [TrainerPoolTier.RARE]: [Species.GALAR_RAPIDASH, Species.PRIMARINA], +}; + +const STAR_FIGHTING: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.BRELOOM, + Species.HARIYAMA, + Species.MEDICHAM, + Species.TOXICROAK, + Species.SCRAFTY, + Species.MIENSHAO, + Species.PAWMOT, + Species.PALDEA_TAUROS, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.LUCARIO, + Species.CONKELDURR, + Species.HAWLUCHA, + Species.PASSIMIAN, + Species.FALINKS, + Species.FLAMIGO, + ], + [TrainerPoolTier.RARE]: [Species.KOMMO_O, Species.QUAQUAVAL], +}; + +export type EvilTeam = + | "rocket" + | "magma" + | "aqua" + | "galactic" + | "plasma_zinzolin" + | "plasma_colress" + | "flare" + | "aether" + | "skull" + | "macro_cosmos" + | "star_dark" + | "star_fire" + | "star_poison" + | "star_fairy" + | "star_fighting"; + +/** Trainer pools for each evil admin team */ +export const evilAdminTrainerPools: Record = { + rocket: ROCKET, + magma: MAGMA, + aqua: AQUA, + galactic: GALACTIC, + plasma_zinzolin: PLASMA_ZINZOLIN, + plasma_colress: PLASMA_COLRESS, + flare: FLARE, + aether: AETHER, + macro_cosmos: MACRO_COSMOS, + skull: SKULL, + star_dark: STAR_DARK, + star_fire: STAR_FIRE, + star_poison: STAR_POISON, + star_fairy: STAR_FAIRY, + star_fighting: STAR_FIGHTING, +}; diff --git a/src/data/trainer-config.ts b/src/data/trainers/trainer-config.ts similarity index 88% rename from src/data/trainer-config.ts rename to src/data/trainers/trainer-config.ts index 0417e7abc32..f23027ffee8 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,29 +1,53 @@ -import { startingWave } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; -import type { EnemyPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import * as Utils from "#app/utils"; -import { PokeballType } from "#enums/pokeball"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; -import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; -import { PokemonType } from "#enums/pokemon-type"; import { doubleBattleDialogue } from "#app/data/dialogue"; -import type { PersistentModifier } from "#app/modifier/modifier"; import { TrainerVariant } from "#app/field/trainer"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; -import { Moves } from "#enums/moves"; +import { Gender } from "#app/data/gender"; +import { signatureSpecies } from "../balance/signature-species"; +import { + getEvilGruntPartyTemplate, + getGymLeaderPartyTemplate, + getWavePartyTemplate, + TrainerPartyCompoundTemplate, + TrainerPartyTemplate, + trainerPartyTemplates, +} from "./TrainerPartyTemplate"; +import { evilAdminTrainerPools } from "./evil-admin-trainer-pools"; + +// Enum imports import { PartyMemberStrength } from "#enums/party-member-strength"; import { Species } from "#enums/species"; -import { TrainerType } from "#enums/trainer-type"; -import { Gender } from "#app/data/gender"; -import { signatureSpecies } from "./balance/signature-species"; +import { PokeballType } from "#enums/pokeball"; +import { PokemonType } from "#enums/pokemon-type"; +import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; +import { TeraAIMode } from "#enums/tera-ai-mode"; +import { TrainerPoolTier } from "#enums/trainer-pool-tier"; +import { TrainerSlot } from "#enums/trainer-slot"; +import { TrainerType } from "#enums/trainer-type"; + +// Type imports +import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import type { EvilTeam } from "./evil-admin-trainer-pools"; +import type { + PartyMemberFunc, + GenModifiersFunc, + GenAIFunc, + PartyTemplateFunc, + TrainerTierPools, + TrainerConfigs, + PartyMemberFuncs, +} from "./typedefs"; /** Minimum BST for Pokemon generated onto the Elite Four's teams */ const ELITE_FOUR_MINIMUM_BST = 460; @@ -31,253 +55,6 @@ const ELITE_FOUR_MINIMUM_BST = 460; /** The wave at which (non-Paldean) Gym Leaders start having Tera mons*/ const GYM_LEADER_TERA_WAVE = 100; -export enum TrainerPoolTier { - COMMON, - UNCOMMON, - RARE, - SUPER_RARE, - ULTRA_RARE, -} - -export interface TrainerTierPools { - [key: number]: Species[]; -} - -export enum TrainerSlot { - NONE, - TRAINER, - TRAINER_PARTNER, -} - -export class TrainerPartyTemplate { - public size: number; - public strength: PartyMemberStrength; - public sameSpecies: boolean; - public balanced: boolean; - - constructor(size: number, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { - this.size = size; - this.strength = strength; - this.sameSpecies = !!sameSpecies; - this.balanced = !!balanced; - } - - getStrength(_index: number): PartyMemberStrength { - return this.strength; - } - - isSameSpecies(_index: number): boolean { - return this.sameSpecies; - } - - isBalanced(_index: number): boolean { - return this.balanced; - } -} - -export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { - public templates: TrainerPartyTemplate[]; - - constructor(...templates: TrainerPartyTemplate[]) { - super( - templates.reduce((total: number, template: TrainerPartyTemplate) => { - total += template.size; - return total; - }, 0), - PartyMemberStrength.AVERAGE, - ); - this.templates = templates; - } - - getStrength(index: number): PartyMemberStrength { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.getStrength(index - t); - } - t += template.size; - } - - return super.getStrength(index); - } - - isSameSpecies(index: number): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isSameSpecies(index - t); - } - t += template.size; - } - - return super.isSameSpecies(index); - } - - isBalanced(index: number): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isBalanced(index - t); - } - t += template.size; - } - - return super.isBalanced(index); - } -} - -export const trainerPartyTemplates = { - ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), - TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), - ), - TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - ), - TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), - THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), - THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), - THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), - THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), - FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), - FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), - FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), - FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), - FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), - FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), - FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), - FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), - SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), - SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), - SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), - SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), - - GYM_LEADER_1: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - GYM_LEADER_2: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - GYM_LEADER_3: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - GYM_LEADER_4: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - GYM_LEADER_5: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - - ELITE_FOUR: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - - CHAMPION: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(4, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(2, PartyMemberStrength.STRONGER, false, true), - ), - - RIVAL: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - RIVAL_2: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), - ), - RIVAL_3: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), - ), - RIVAL_4: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), - ), - RIVAL_5: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - RIVAL_6: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), -}; - -type PartyTemplateFunc = () => TrainerPartyTemplate; -type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon; -type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; -type GenAIFunc = (party: EnemyPokemon[]) => void; - -export interface PartyMemberFuncs { - [key: number]: PartyMemberFunc; -} - -export enum TeraAIMode { - NO_TERA, - INSTANT_TERA, - SMART_TERA, -} - /** * Stores data and helper functions about a trainers AI options. */ @@ -759,430 +536,6 @@ export class TrainerConfig { return this; } - /** - * Returns the pool of species for an evil team admin - * @param team - The evil team the admin belongs to. - * @returns {TrainerTierPools} - */ - speciesPoolPerEvilTeamAdmin(team): TrainerTierPools { - team = team.toLowerCase(); - switch (team) { - case "rocket": { - return { - [TrainerPoolTier.COMMON]: [ - Species.RATICATE, - Species.ARBOK, - Species.VILEPLUME, - Species.ARCANINE, - Species.GENGAR, - Species.HYPNO, - Species.ELECTRODE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.KOFFING, - Species.GYARADOS, - Species.CROBAT, - Species.STEELIX, - Species.HOUNDOOM, - Species.HONCHKROW, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.OMASTAR, - Species.KABUTOPS, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.PORYGON_Z, - Species.ANNIHILAPE, - Species.ALOLA_SANDSLASH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GOLEM, - Species.ALOLA_MUK, - Species.PALDEA_TAUROS, - ], - [TrainerPoolTier.RARE]: [Species.DRAGONITE, Species.TYRANITAR], - }; - } - case "magma": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ARCANINE, - Species.MAGCARGO, - Species.HOUNDOOM, - Species.TORKOAL, - Species.SOLROCK, - Species.CLAYDOL, - Species.HIPPOWDON, - Species.MAGMORTAR, - Species.GLISCOR, - Species.COALOSSAL, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.AGGRON, - Species.FLYGON, - Species.CRADILY, - Species.ARMALDO, - Species.RHYPERIOR, - Species.TURTONATOR, - Species.SANDACONDA, - Species.TOEDSCRUEL, - Species.HISUI_ARCANINE, - ], - [TrainerPoolTier.RARE]: [Species.CHARCADET, Species.SCOVILLAIN], - }; - } - case "aqua": { - return { - [TrainerPoolTier.COMMON]: [ - Species.TENTACRUEL, - Species.LANTURN, - Species.AZUMARILL, - Species.QUAGSIRE, - Species.OCTILLERY, - Species.LUDICOLO, - Species.PELIPPER, - Species.WAILORD, - Species.WHISCASH, - Species.CRAWDAUNT, - Species.WALREIN, - Species.CLAMPERL, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.QUAGSIRE, - Species.MANTINE, - Species.KINGDRA, - Species.MILOTIC, - Species.DRAGALGE, - Species.DHELMISE, - Species.BARRASKEWDA, - Species.GRAPPLOCT, - Species.OVERQWIL, - ], - [TrainerPoolTier.RARE]: [Species.BASCULEGION, Species.DONDOZO], - }; - } - case "galactic": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ELECTRODE, - Species.GYARADOS, - Species.CROBAT, - Species.HONCHKROW, - Species.BRONZONG, - Species.DRAPION, - Species.LICKILICKY, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.YANMEGA, - Species.MAMOSWINE, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.ALAKAZAM, - Species.WEAVILE, - Species.GLISCOR, - Species.DUSKNOIR, - Species.ROTOM, - Species.OVERQWIL, - Species.HISUI_ARCANINE, - Species.HISUI_ELECTRODE, - ], - [TrainerPoolTier.RARE]: [Species.SPIRITOMB, Species.URSALUNA, Species.SNEASLER, Species.HISUI_LILLIGANT], - }; - } - case "plasma": { - return { - [TrainerPoolTier.COMMON]: [ - Species.GIGALITH, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.KROOKODILE, - Species.DARMANITAN, - Species.COFAGRIGUS, - Species.VANILLUXE, - Species.AMOONGUSS, - Species.JELLICENT, - Species.GALVANTULA, - Species.FERROTHORN, - Species.BEARTIC, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.EXCADRILL, - Species.SIGILYPH, - Species.ZOROARK, - Species.KLINKLANG, - Species.EELEKTROSS, - Species.MIENSHAO, - Species.GOLURK, - Species.BISHARP, - Species.MANDIBUZZ, - Species.DURANT, - Species.GALAR_DARMANITAN, - ], - [TrainerPoolTier.RARE]: [Species.HAXORUS, Species.HYDREIGON, Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY], - }; - } - case "plasma_2": { - return { - [TrainerPoolTier.COMMON]: [ - Species.MUK, - Species.ELECTRODE, - Species.BRONZONG, - Species.MAGNEZONE, - Species.PORYGON_Z, - Species.MUSHARNA, - Species.REUNICLUS, - Species.GALVANTULA, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.BEHEEYEM, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.METAGROSS, - Species.ROTOM, - Species.CARRACOSTA, - Species.ARCHEOPS, - Species.GOLURK, - Species.DURANT, - Species.VIKAVOLT, - Species.ORBEETLE, - Species.REVAVROOM, - Species.ALOLA_MUK, - Species.HISUI_ELECTRODE, - ], - [TrainerPoolTier.RARE]: [Species.ELECTIVIRE, Species.MAGMORTAR, Species.BISHARP, Species.ARCHALUDON], - }; - } - case "flare": { - return { - [TrainerPoolTier.COMMON]: [ - Species.MANECTRIC, - Species.DRAPION, - Species.LIEPARD, - Species.AMOONGUSS, - Species.DIGGERSBY, - Species.TALONFLAME, - Species.PYROAR, - Species.PANGORO, - Species.MEOWSTIC, - Species.MALAMAR, - Species.CLAWITZER, - Species.HELIOLISK, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.HOUNDOOM, - Species.WEAVILE, - Species.CHANDELURE, - Species.AEGISLASH, - Species.BARBARACLE, - Species.DRAGALGE, - Species.GOODRA, - Species.TREVENANT, - Species.GOURGEIST, - ], - [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.HISUI_GOODRA, Species.HISUI_AVALUGG], - }; - } - case "aether": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ALAKAZAM, - Species.SLOWBRO, - Species.EXEGGUTOR, - Species.XATU, - Species.CLAYDOL, - Species.BEHEEYEM, - Species.ORANGURU, - Species.BRUXISH, - Species.ORBEETLE, - Species.FARIGIRAF, - Species.ALOLA_RAICHU, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.KIRLIA, - Species.MEDICHAM, - Species.METAGROSS, - Species.MALAMAR, - Species.HATTERENE, - Species.MR_RIME, - Species.GALAR_SLOWKING, - ], - [TrainerPoolTier.RARE]: [Species.PORYGON_Z, Species.ARMAROUGE, Species.HISUI_BRAVIARY], - }; - } - case "skull": { - return { - [TrainerPoolTier.COMMON]: [ - Species.NIDOQUEEN, - Species.GENGAR, - Species.KOFFING, - Species.CROBAT, - Species.ROSERADE, - Species.SKUNTANK, - Species.TOXICROAK, - Species.SCOLIPEDE, - Species.TOXAPEX, - Species.LURANTIS, - Species.ALOLA_MUK, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.DRAPION, - Species.MANDIBUZZ, - Species.OVERQWIL, - Species.GLIMMORA, - Species.CLODSIRE, - Species.GALAR_SLOWBRO, - ], - [TrainerPoolTier.RARE]: [Species.DRAGALGE, Species.SNEASLER], - }; - } - case "macro": { - return { - [TrainerPoolTier.COMMON]: [ - Species.NINETALES, - Species.BELLOSSOM, - Species.MILOTIC, - Species.FROSLASS, - Species.GOTHITELLE, - Species.JELLICENT, - Species.SALAZZLE, - Species.TSAREENA, - Species.POLTEAGEIST, - Species.HATTERENE, - Species.GALAR_RAPIDASH, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.TOGEKISS, - Species.MANDIBUZZ, - Species.TOXAPEX, - Species.APPLETUN, - Species.CURSOLA, - Species.ALOLA_NINETALES, - ], - [TrainerPoolTier.RARE]: [Species.TINKATON, Species.HISUI_LILLIGANT], - }; - } - case "star_1": { - return { - [TrainerPoolTier.COMMON]: [ - Species.SHIFTRY, - Species.CACTURNE, - Species.HONCHKROW, - Species.SKUNTANK, - Species.KROOKODILE, - Species.OBSTAGOON, - Species.LOKIX, - Species.MABOSSTIFF, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.UMBREON, - Species.CRAWDAUNT, - Species.WEAVILE, - Species.ZOROARK, - Species.MALAMAR, - Species.BOMBIRDIER, - ], - [TrainerPoolTier.RARE]: [Species.HYDREIGON, Species.MEOWSCARADA], - }; - } - case "star_2": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ARCANINE, - Species.HOUNDOOM, - Species.CAMERUPT, - Species.CHANDELURE, - Species.TALONFLAME, - Species.PYROAR, - Species.COALOSSAL, - Species.SCOVILLAIN, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.RAPIDASH, - Species.FLAREON, - Species.TORKOAL, - Species.MAGMORTAR, - Species.SALAZZLE, - Species.TURTONATOR, - ], - [TrainerPoolTier.RARE]: [Species.VOLCARONA, Species.SKELEDIRGE], - }; - } - case "star_3": { - return { - [TrainerPoolTier.COMMON]: [ - Species.MUK, - Species.CROBAT, - Species.SKUNTANK, - Species.AMOONGUSS, - Species.TOXAPEX, - Species.TOXTRICITY, - Species.GRAFAIAI, - Species.CLODSIRE, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.GENGAR, - Species.SEVIPER, - Species.DRAGALGE, - Species.OVERQWIL, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - ], - [TrainerPoolTier.RARE]: [Species.GLIMMORA, Species.VENUSAUR], - }; - } - case "star_4": { - return { - [TrainerPoolTier.COMMON]: [ - Species.CLEFABLE, - Species.WIGGLYTUFF, - Species.AZUMARILL, - Species.WHIMSICOTT, - Species.FLORGES, - Species.HATTERENE, - Species.GRIMMSNARL, - Species.TINKATON, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.TOGEKISS, - Species.GARDEVOIR, - Species.SYLVEON, - Species.KLEFKI, - Species.MIMIKYU, - Species.ALOLA_NINETALES, - ], - [TrainerPoolTier.RARE]: [Species.GALAR_RAPIDASH, Species.PRIMARINA], - }; - } - case "star_5": { - return { - [TrainerPoolTier.COMMON]: [ - Species.BRELOOM, - Species.HARIYAMA, - Species.MEDICHAM, - Species.TOXICROAK, - Species.SCRAFTY, - Species.MIENSHAO, - Species.PAWMOT, - Species.PALDEA_TAUROS, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.LUCARIO, - Species.CONKELDURR, - Species.HAWLUCHA, - Species.PASSIMIAN, - Species.FALINKS, - Species.FLAMIGO, - ], - [TrainerPoolTier.RARE]: [Species.KOMMO_O, Species.QUAQUAVAL], - }; - } - } - - console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`); - return []; - } - /** * Initializes the trainer configuration for an evil team admin. * @param title The title of the evil team admin. @@ -1193,7 +546,7 @@ export class TrainerConfig { * **/ initForEvilTeamAdmin( title: string, - poolName: string, + poolName: EvilTeam, signatureSpecies: (Species | Species[])[], specialtyType?: PokemonType, ): TrainerConfig { @@ -1208,7 +561,7 @@ export class TrainerConfig { this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); // Set the species pools for the evil team admin. - this.speciesPools = this.speciesPoolPerEvilTeamAdmin(poolName); + this.speciesPools = evilAdminTrainerPools[poolName]; signatureSpecies.forEach((speciesPool, s) => { if (!Array.isArray(speciesPool)) { @@ -1637,56 +990,6 @@ export class TrainerConfig { let t = 0; -interface TrainerConfigs { - [key: number]: TrainerConfig; -} - -/** - * The function to get variable strength grunts - * @returns the correct TrainerPartyTemplate - */ -function getEvilGruntPartyTemplate(): TrainerPartyTemplate { - const waveIndex = globalScene.currentBattle?.waveIndex; - if (waveIndex < 40) { - return trainerPartyTemplates.TWO_AVG; - } - if (waveIndex < 63) { - return trainerPartyTemplates.THREE_AVG; - } - if (waveIndex < 65) { - return trainerPartyTemplates.TWO_AVG_ONE_STRONG; - } - if (waveIndex < 112) { - return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger - } - return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger -} - -function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { - return templates[ - Math.min( - Math.max( - Math.ceil( - (globalScene.gameMode.getWaveForDifficulty(globalScene.currentBattle?.waveIndex || startingWave, true) - 20) / - 30, - ), - 0, - ), - templates.length - 1, - ) - ]; -} - -function getGymLeaderPartyTemplate() { - return getWavePartyTemplate( - trainerPartyTemplates.GYM_LEADER_1, - trainerPartyTemplates.GYM_LEADER_2, - trainerPartyTemplates.GYM_LEADER_3, - trainerPartyTemplates.GYM_LEADER_4, - trainerPartyTemplates.GYM_LEADER_5, - ); -} - /** * Randomly selects one of the `Species` from `speciesPool`, determines its evolution, level, and strength. * Then adds Pokemon to globalScene. @@ -2878,7 +2181,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.ZINZOLIN]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]) + .initForEvilTeamAdmin("plasma_sage", "plasma_zinzolin", [Species.CRYOGONAL]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_plasma_grunt") @@ -2886,7 +2189,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.COLRESS]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("plasma_boss", "plasma_2", [Species.KLINKLANG]) + .initForEvilTeamAdmin("plasma_boss", "plasma_colress", [Species.KLINKLANG]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_colress") .setMixedBattleBgm("battle_colress") @@ -3105,7 +2408,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.OLEANA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("macro_admin", "macro", [Species.GARBODOR]) + .initForEvilTeamAdmin("macro_admin", "macro_cosmos", [Species.GARBODOR]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_oleana") @@ -3172,7 +2475,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.GIACOMO]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_1", [Species.KINGAMBIT], PokemonType.DARK) + .initForEvilTeamAdmin("star_admin", "star_dark", [Species.KINGAMBIT], PokemonType.DARK) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3192,7 +2495,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.MELA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_2", [Species.ARMAROUGE], PokemonType.FIRE) + .initForEvilTeamAdmin("star_admin", "star_fire", [Species.ARMAROUGE], PokemonType.FIRE) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3212,7 +2515,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.ATTICUS]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_3", [Species.REVAVROOM], PokemonType.POISON) + .initForEvilTeamAdmin("star_admin", "star_poison", [Species.REVAVROOM], PokemonType.POISON) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3232,7 +2535,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.ORTEGA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_4", [Species.DACHSBUN], PokemonType.FAIRY) + .initForEvilTeamAdmin("star_admin", "star_fairy", [Species.DACHSBUN], PokemonType.FAIRY) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3252,7 +2555,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.ERI]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_5", [Species.ANNIHILAPE], PokemonType.FIGHTING) + .initForEvilTeamAdmin("star_admin", "star_fighting", [Species.ANNIHILAPE], PokemonType.FIGHTING) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") diff --git a/src/data/trainers/typedefs.ts b/src/data/trainers/typedefs.ts new file mode 100644 index 00000000000..c6d286e961e --- /dev/null +++ b/src/data/trainers/typedefs.ts @@ -0,0 +1,22 @@ +import type { EnemyPokemon } from "#app/field/pokemon"; +import type { PersistentModifier } from "#app/modifier/modifier"; +import type { PartyMemberStrength } from "#enums/party-member-strength"; +import type { Species } from "#enums/species"; +import type { TrainerConfig } from "./trainer-config"; +import type { TrainerPartyTemplate } from "./TrainerPartyTemplate"; + +export type PartyTemplateFunc = () => TrainerPartyTemplate; +export type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon; +export type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; +export type GenAIFunc = (party: EnemyPokemon[]) => void; + +export interface TrainerTierPools { + [key: number]: Species[]; +} +export interface TrainerConfigs { + [key: number]: TrainerConfig; +} + +export interface PartyMemberFuncs { + [key: number]: PartyMemberFunc; +} diff --git a/src/enums/tera-ai-mode.ts b/src/enums/tera-ai-mode.ts new file mode 100644 index 00000000000..35d4e4f3420 --- /dev/null +++ b/src/enums/tera-ai-mode.ts @@ -0,0 +1,5 @@ +export enum TeraAIMode { + NO_TERA, + INSTANT_TERA, + SMART_TERA +} diff --git a/src/enums/trainer-pool-tier.ts b/src/enums/trainer-pool-tier.ts new file mode 100644 index 00000000000..da6355d021b --- /dev/null +++ b/src/enums/trainer-pool-tier.ts @@ -0,0 +1,7 @@ +export enum TrainerPoolTier { + COMMON, + UNCOMMON, + RARE, + SUPER_RARE, + ULTRA_RARE +} diff --git a/src/enums/trainer-slot.ts b/src/enums/trainer-slot.ts new file mode 100644 index 00000000000..2dfa468f74c --- /dev/null +++ b/src/enums/trainer-slot.ts @@ -0,0 +1,5 @@ +export enum TrainerSlot { + NONE, + TRAINER, + TRAINER_PARTNER +} diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 51a5a10b010..aba13b2e51b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -225,7 +225,7 @@ import { SpeciesFormChangeStatusEffectTrigger, } from "#app/data/pokemon-forms"; import { TerrainType } from "#app/data/terrain"; -import type { TrainerSlot } from "#app/data/trainer-config"; +import type { TrainerSlot } from "#enums/trainer-slot"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 2af3e25050f..c52957eef75 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -2,15 +2,14 @@ import { globalScene } from "#app/global-scene"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import type { TrainerConfig, TrainerPartyTemplate } from "#app/data/trainer-config"; -import { - TrainerPartyCompoundTemplate, - TrainerPoolTier, - TrainerSlot, - trainerConfigs, - trainerPartyTemplates, - TeraAIMode, -} from "#app/data/trainer-config"; +import type { TrainerConfig } from "#app/data/trainers/trainer-config"; +import type { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerSlot } from "#enums/trainer-slot"; +import { TrainerPoolTier } from "#enums/trainer-pool-tier"; +import { TeraAIMode } from "#enums/tera-ai-mode"; import type { EnemyPokemon } from "#app/field/pokemon"; import * as Utils from "#app/utils"; import type { PersistentModifier } from "#app/modifier/modifier"; diff --git a/src/phases/battle-phase.ts b/src/phases/battle-phase.ts index 3fc2b9c0467..72bcc85bc62 100644 --- a/src/phases/battle-phase.ts +++ b/src/phases/battle-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { Phase } from "#app/phase"; export class BattlePhase extends Phase { diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 7afd4176788..ad2bf689e38 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -7,7 +7,7 @@ import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { doTrainerExclamation } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getGoldenBugNetSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { getRandomWeatherType } from "#app/data/weather"; import { EncounterPhaseEvent } from "#app/events/battle-scene"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index af948ad0632..2090592367d 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -5,7 +5,7 @@ import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; import { BattlePhase } from "#app/phases/battle-phase"; diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 26012df191d..eb187617e69 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -22,7 +22,7 @@ import { globalScene } from "#app/global-scene"; import { getCharVariantFromDialogue } from "../data/dialogue"; import type { OptionSelectSettings } from "../data/mystery-encounters/utils/encounter-phase-utils"; import { transitionMysteryEncounterIntroVisuals } from "../data/mystery-encounters/utils/encounter-phase-utils"; -import { TrainerSlot } from "../data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { IvScannerModifier } from "../modifier/modifier"; import { Phase } from "../phase"; import { Mode } from "../ui/ui"; diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 42463e7edb0..621c8c8c2a9 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -1,7 +1,7 @@ import { BattleType } from "#app/battle"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { PlayerGender } from "#app/enums/player-gender"; import { addPokeballOpenParticles } from "#app/field/anims"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 48bcd0c4ebd..16868bf9bc0 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -3,7 +3,7 @@ import { applyPreSwitchOutAbAttrs, PostDamageForceSwitchAbAttr, PreSwitchOutAbAt import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { SwitchEffectTransferModifier } from "#app/modifier/modifier"; diff --git a/src/phases/trainer-message-test-phase.ts b/src/phases/trainer-message-test-phase.ts index fa3f553cdd6..23c2c86361c 100644 --- a/src/phases/trainer-message-test-phase.ts +++ b/src/phases/trainer-message-test-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import type { TrainerType } from "#app/enums/trainer-type"; import { BattlePhase } from "./battle-phase"; import { TestMessagePhase } from "./test-message-phase"; diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index 024c1e3f837..f7b2eb2bb66 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -7,7 +7,7 @@ import * as Utils from "#app/utils"; import { BattlePhase } from "./battle-phase"; import { ModifierRewardPhase } from "./modifier-reward-phase"; import { MoneyRewardPhase } from "./money-reward-phase"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { globalScene } from "#app/global-scene"; import { Biome } from "#app/enums/biome"; import { achvs } from "#app/system/achv"; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 7845d50b2ad..3a098a55a56 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -17,7 +17,7 @@ import { Unlockables } from "#app/system/unlockables"; import { GameModes, getGameMode } from "#app/game-mode"; import { BattleType } from "#app/battle"; import TrainerData from "#app/system/trainer-data"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { resetSettings, setSetting, SettingKeys } from "#app/system/settings/settings"; import { achvs } from "#app/system/achv"; import EggData from "#app/system/egg-data"; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 3fa07e8b085..a1d27394d9f 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -6,7 +6,7 @@ import type { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; -import { TrainerSlot } from "../data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/data/variant"; import { loadBattlerTag } from "../data/battler-tags"; import type { Biome } from "#enums/biome"; diff --git a/src/system/voucher.ts b/src/system/voucher.ts index 39294bccf13..ce10560c3e2 100644 --- a/src/system/voucher.ts +++ b/src/system/voucher.ts @@ -3,7 +3,7 @@ import { AchvTier, achvs, getAchievementDescription } from "./achv"; import type { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import type { ConditionFn } from "#app/@types/common"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; export enum VoucherType { REGULAR, diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index dc55392f8bf..fb03f1c10a0 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#app/data/moves/move"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 8e825dc2c9b..f620cbd6c36 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -16,7 +16,9 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { MysteriousChallengersEncounter } from "#app/data/mystery-encounters/encounters/mysterious-challengers-encounter"; -import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#app/data/trainer-config"; +import { TrainerConfig } from "#app/data/trainers/trainer-config"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; From a727375730b2af8e76e357a4d45a7ef0b76538ed Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sat, 29 Mar 2025 01:51:28 -0700 Subject: [PATCH 4/7] [Bug] Fix Flash Fire has No Message (#5578) Add flash fire message --- src/data/battler-tags.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 8981644d885..b139faaeb88 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2151,6 +2151,21 @@ export class TypeBoostTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { return lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); } + + override onAdd(pokemon: Pokemon): void { + globalScene.queueMessage( + i18next.t("abilityTriggers:typeImmunityPowerBoost", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.boostedType]}`), + }), + ); + } + + override onOverlap(pokemon: Pokemon): void { + globalScene.queueMessage( + i18next.t("abilityTriggers:moveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), + ); + } } export class CritBoostTag extends BattlerTag { From 25b9fa793352d1d48213d572a0a344926b90d19a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 29 Mar 2025 03:24:23 -0700 Subject: [PATCH 5/7] [Biome] Add "no unused imports" rule (#5580) * Apply Biome to files * Add `lint/correctness/noUnusedImports` rule * Apply rule * Remove obsolete eslint directives * Fix variable naming in `game-speed.ts` --- biome.jsonc | 3 +- .../the-expert-pokemon-breeder-encounter.ts | 1 - .../mystery-encounters/mystery-encounters.ts | 1 - src/data/pokemon-species.ts | 2 +- src/data/splash-messages.ts | 15 +++---- src/phases/game-over-modifier-reward-phase.ts | 1 - src/phases/message-phase.ts | 2 +- src/phases/move-end-phase.ts | 1 - src/phases/post-summon-phase.ts | 1 - src/system/game-speed.ts | 8 ++-- src/system/pokemon-data.ts | 1 - src/system/settings/settings.ts | 2 +- src/ui/message-ui-handler.ts | 2 +- src/ui/pokedex-page-ui-handler.ts | 17 ++++---- src/ui/pokedex-ui-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 4 +- src/ui/ui.ts | 2 +- test/abilities/desolate-land.test.ts | 6 +-- test/abilities/flower_gift.test.ts | 39 ++++++++++++------- test/abilities/neutralizing_gas.test.ts | 6 +-- test/abilities/victory_star.test.ts | 6 +-- test/abilities/wonder_skin.test.ts | 1 - test/data/splash_messages.test.ts | 2 +- test/items/reviver_seed.test.ts | 26 +++++-------- test/moves/endure.test.ts | 6 +-- test/moves/revival_blessing.test.ts | 8 +--- test/testUtils/gameWrapper.ts | 12 ++---- test/testUtils/helpers/overridesHelper.ts | 3 -- .../mocks/mocksContainer/mockRectangle.ts | 1 - test/vitest.setup.ts | 15 ------- 30 files changed, 79 insertions(+), 117 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index 3ec4552d359..c5e1d713d86 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -50,7 +50,8 @@ "noUndeclaredVariables": "off", "noUnusedVariables": "error", "noSwitchDeclarations": "warn", // TODO: refactor and make this an error - "noVoidTypeReturn": "warn" // TODO: Refactor and make this an error + "noVoidTypeReturn": "warn", // TODO: Refactor and make this an error + "noUnusedImports": "error" }, "style": { "noVar": "error", diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 84dd5002e83..c189e341089 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -30,7 +30,6 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { modifierTypes } from "#app/modifier/modifier-type"; import { PokemonType } from "#enums/pokemon-type"; import { getPokeballTintColor } from "#app/data/pokeball"; -import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/theExpertPokemonBreeder"; diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 354f69d0ca3..5dd952b2bce 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -332,7 +332,6 @@ export function initMysteryEncounters() { }); // Add ANY biome encounters to biome map - // eslint-disable-next-line let _encounterBiomeTableLog = ""; mysteryEncountersByBiome.forEach((biomeEncounters, biome) => { anyBiomeEncounters.forEach(encounter => { diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index eca7d65ac6a..15c60d28969 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -7,7 +7,7 @@ import i18next from "i18next"; import type { AnySound } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type { GameMode } from "#app/game-mode"; -import { DexAttr, DexEntry, type StarterMoveset } from "#app/system/game-data"; +import { DexAttr, type StarterMoveset } from "#app/system/game-data"; import * as Utils from "#app/utils"; import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index de14e913664..3223bbb019e 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -214,7 +214,7 @@ const commonSplashMessages = [ "bornToBeAWinner", "onARollout", "itsAlwaysNightDeepInTheAbyss", - "folksThisIsInsane" + "folksThisIsInsane", ]; //#region Seasonal Messages @@ -224,10 +224,7 @@ const seasonalSplashMessages: Season[] = [ name: "New Year's", start: "01-01", end: "01-15", - messages: [ - "newYears.happyNewYear", - "newYears.andAHappyNewYear" - ], + messages: ["newYears.happyNewYear", "newYears.andAHappyNewYear"], }, { name: "Valentines", @@ -239,7 +236,7 @@ const seasonalSplashMessages: Season[] = [ "valentines.applinForYou", "valentines.thePowerOfLoveIsThreeThirtyBST", "valentines.haveAHeartScale", - "valentines.i<3You" + "valentines.i<3You", ], }, { @@ -279,7 +276,7 @@ const seasonalSplashMessages: Season[] = [ "aprilFools.nowWithQuickTimeEncounters", "aprilFools.timeYourInputsForHigherCatchrate", "aprilFools.certifiedButtonSimulator", - "aprilFools.iHopeYouGetSuckerPunched" + "aprilFools.iHopeYouGetSuckerPunched", ], }, { @@ -293,7 +290,7 @@ const seasonalSplashMessages: Season[] = [ "halloween.mayContainSpiders", "halloween.spookyScarySkeledirge", "halloween.gourgeistUsedTrickOrTreat", - "halloween.letsSnuggleForever" + "halloween.letsSnuggleForever", ], }, { @@ -316,7 +313,7 @@ const seasonalSplashMessages: Season[] = [ "winterHoliday.tisTheSeasonToBeSpeSpa", "winterHoliday.deckTheHalls", "winterHoliday.saveScummingGetsYouOnTheNaughtyList", - "winterHoliday.badTrainersGetRolycoly" + "winterHoliday.badTrainersGetRolycoly", ], }, ]; diff --git a/src/phases/game-over-modifier-reward-phase.ts b/src/phases/game-over-modifier-reward-phase.ts index f3f2aebd67d..d0a39a4031a 100644 --- a/src/phases/game-over-modifier-reward-phase.ts +++ b/src/phases/game-over-modifier-reward-phase.ts @@ -1,5 +1,4 @@ import { globalScene } from "#app/global-scene"; -import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index 2a5bcf6b99c..cff7249fcfa 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -29,7 +29,7 @@ export class MessagePhase extends Phase { if (this.text.indexOf("$") > -1) { const pokename: string[] = []; - const repname = [ "#POKEMON1", "#POKEMON2" ]; + const repname = ["#POKEMON1", "#POKEMON2"]; for (let p = 0; p < globalScene.getPlayerField().length; p++) { pokename.push(globalScene.getPlayerField()[p].getNameToRender()); this.text = this.text.split(pokename[p]).join(repname[p]); diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 4716370cc4e..46e266a32b7 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -1,5 +1,4 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { PokemonPhase } from "./pokemon-phase"; diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index a7aa9389505..45b0a0f65ce 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -1,5 +1,4 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; import { applyAbAttrs, applyPostSummonAbAttrs, CommanderAbAttr, PostSummonAbAttr } from "#app/data/ability"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { StatusEffect } from "#app/enums/status-effect"; diff --git a/src/system/game-speed.ts b/src/system/game-speed.ts index e2156c03728..d9c48664f80 100644 --- a/src/system/game-speed.ts +++ b/src/system/game-speed.ts @@ -5,8 +5,8 @@ import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import * as Utils from "../utils"; -type FadeIn = typeof FadeIn; -type FadeOut = typeof FadeOut; +type FadeInType = typeof FadeIn; +type FadeOutType = typeof FadeOut; export function initGameSpeed() { const thisArg = this as BattleScene; @@ -101,7 +101,7 @@ export function initGameSpeed() { const originalFadeOut = SoundFade.fadeOut; SoundFade.fadeOut = ((_scene: Phaser.Scene, sound: Phaser.Sound.BaseSound, duration: number, destroy?: boolean) => - originalFadeOut(globalScene, sound, transformValue(duration), destroy)) as FadeOut; + originalFadeOut(globalScene, sound, transformValue(duration), destroy)) as FadeOutType; const originalFadeIn = SoundFade.fadeIn; SoundFade.fadeIn = (( @@ -110,5 +110,5 @@ export function initGameSpeed() { duration: number, endVolume?: number, startVolume?: number, - ) => originalFadeIn(globalScene, sound, transformValue(duration), endVolume, startVolume)) as FadeIn; + ) => originalFadeIn(globalScene, sound, transformValue(duration), endVolume, startVolume)) as FadeInType; } diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index a1d27394d9f..957d43797a1 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -14,7 +14,6 @@ import { Moves } from "#enums/moves"; import type { Species } from "#enums/species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import type { PokemonType } from "#enums/pokemon-type"; -import { getSpeciesFormChangeMessage } from "#app/data/pokemon-forms"; export default class PokemonData { public id: number; diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index b2b1d3eb298..2db72dfecda 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -950,7 +950,7 @@ export function setSetting(setting: string, value: number): boolean { }, { label: "Català", - handler: () => changeLocaleHandler("ca-ES") + handler: () => changeLocaleHandler("ca-ES"), }, { label: i18next.t("settings:back"), diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index 230b951de59..e927793e0ab 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -77,7 +77,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { const actionPattern = /@(c|d|s|f)\{(.*?)\}/; let actionMatch: RegExpExecArray | null; const pokename: string[] = []; - const repname = [ "#POKEMON1", "#POKEMON2" ]; + const repname = ["#POKEMON1", "#POKEMON2"]; for (let p = 0; p < globalScene.getPlayerField().length; p++) { pokename.push(globalScene.getPlayerField()[p].getNameToRender()); text = text.split(pokename[p]).join(repname[p]); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index b359c188e0c..24812f62044 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -1150,15 +1150,14 @@ export default class PokedexPageUiHandler extends MessageUiHandler { }); this.blockInput = false; } else { - ui.revertMode() - .then(() => { - console.log("exitCallback", this.exitCallback); - if (this.exitCallback instanceof Function) { - const exitCallback = this.exitCallback; - this.exitCallback = null; - exitCallback(); - } - }); + ui.revertMode().then(() => { + console.log("exitCallback", this.exitCallback); + if (this.exitCallback instanceof Function) { + const exitCallback = this.exitCallback; + this.exitCallback = null; + exitCallback(); + } + }); success = true; } } else { diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index a98415f72d2..230b1bcb42b 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -12,7 +12,7 @@ import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUN import { catchableSpecies } from "#app/data/balance/biomes"; import { PokemonType } from "#enums/pokemon-type"; import type { DexAttrProps, DexEntry, StarterAttributes, StarterPreferences } from "#app/system/game-data"; -import { AbilityAttr, DexAttr, loadStarterPreferences, saveStarterPreferences } from "#app/system/game-data"; +import { AbilityAttr, DexAttr, loadStarterPreferences } from "#app/system/game-data"; import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "#app/ui/text"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 1599c86aa87..c1e2b2ac568 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,6 +1,6 @@ import type { CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene"; import { BattleSceneEventType } from "#app/events/battle-scene"; -import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type { Variant } from "#app/data/variant"; import { getVariantTint, getVariantIcon } from "#app/data/variant"; import { argbFromRgba } from "@material/material-color-utilities"; @@ -19,7 +19,7 @@ import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { PokemonType } from "#enums/pokemon-type"; import { GameModes } from "#app/game-mode"; diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 026e42ccf46..6605e5ef730 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -329,7 +329,7 @@ export default class UI extends Phaser.GameObjects.Container { promptDelay?: number | null, ): void { const pokename: string[] = []; - const repname = [ "#POKEMON1", "#POKEMON2" ]; + const repname = ["#POKEMON1", "#POKEMON2"]; for (let p = 0; p < globalScene.getPlayerField().length; p++) { pokename.push(globalScene.getPlayerField()[p].getNameToRender()); text = text.split(pokename[p]).join(repname[p]); diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index 405aab873aa..bb0b152418d 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -135,10 +135,8 @@ describe("Abilities - Desolate Land", () => { }); it("should lift after fleeing from a wild pokemon", async () => { - game.override - .enemyAbility(Abilities.DESOLATE_LAND) - .ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.enemyAbility(Abilities.DESOLATE_LAND).ability(Abilities.BALL_FETCH); + await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index 1104a3c111f..5c3fd246b7a 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -40,17 +40,23 @@ describe("Abilities - Flower Gift", () => { * * @returns Two numbers, the first being the damage done to the target without flower gift active, the second being the damage done with flower gift active */ - const testDamageDealt = async (game: GameManager, move: Moves, allyAttacker: boolean, allyAbility = Abilities.BALL_FETCH, enemyAbility = Abilities.BALL_FETCH): Promise<[number, number]> => { + const testDamageDealt = async ( + game: GameManager, + move: Moves, + allyAttacker: boolean, + allyAbility = Abilities.BALL_FETCH, + enemyAbility = Abilities.BALL_FETCH, + ): Promise<[number, number]> => { game.override.battleType("double"); - game.override.moveset([ Moves.SPLASH, Moves.SUNNY_DAY, move, Moves.HEAL_PULSE ]); - game.override.enemyMoveset([ Moves.SPLASH, Moves.HEAL_PULSE ]); + game.override.moveset([Moves.SPLASH, Moves.SUNNY_DAY, move, Moves.HEAL_PULSE]); + game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); const target_index = allyAttacker ? BattlerIndex.ENEMY : BattlerIndex.PLAYER_2; const attacker_index = allyAttacker ? BattlerIndex.PLAYER_2 : BattlerIndex.ENEMY; const ally_move = allyAttacker ? move : Moves.SPLASH; const enemy_move = allyAttacker ? Moves.SPLASH : move; const ally_target = allyAttacker ? BattlerIndex.ENEMY : null; - await game.classicMode.startBattle([ Species.CHERRIM, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); const target = allyAttacker ? game.scene.getEnemyField()[0] : game.scene.getPlayerField()[1]; const initialHp = target.getMaxHp(); @@ -64,7 +70,7 @@ describe("Abilities - Flower Gift", () => { await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); await game.forceEnemyMove(Moves.SPLASH); // Ensure sunny day is used last. - await game.setTurnOrder([ attacker_index, target_index, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER ]); + await game.setTurnOrder([attacker_index, target_index, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); const damageWithoutGift = initialHp - target.hp; @@ -75,14 +81,13 @@ describe("Abilities - Flower Gift", () => { game.move.select(ally_move, 1, ally_target); await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); await game.forceEnemyMove(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, target_index, attacker_index ]); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, target_index, attacker_index]); await game.phaseInterceptor.to(TurnEndPhase); const damageWithGift = initialHp - target.hp; - return [ damageWithoutGift, damageWithGift ]; + return [damageWithoutGift, damageWithGift]; }; - beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -129,22 +134,28 @@ describe("Abilities - Flower Gift", () => { }); it("should not increase the damage of an ally using an ability ignoring move", async () => { - const [ damageWithGift, damageWithoutGift ] = await testDamageDealt(game, Moves.SUNSTEEL_STRIKE, true); + const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.SUNSTEEL_STRIKE, true); expect(damageWithGift).toBe(damageWithoutGift); }); it("should not increase the damage of a mold breaker ally", async () => { - const [ damageWithGift, damageWithoutGift ] = await testDamageDealt(game, Moves.TACKLE, true, Abilities.MOLD_BREAKER); + const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.TACKLE, true, Abilities.MOLD_BREAKER); expect(damageWithGift).toBe(damageWithoutGift); }); it("should decrease the damage an ally takes from a special attack", async () => { - const [ damageWithoutGift, damageWithGift ] = await testDamageDealt(game, Moves.MUD_SLAP, false); + const [damageWithoutGift, damageWithGift] = await testDamageDealt(game, Moves.MUD_SLAP, false); expect(damageWithGift).toBeLessThan(damageWithoutGift); }); - it("should not decrease the damage an ally takes from a mold breaker enemy using a special attack", async () => { - const [ damageWithoutGift, damageWithGift ] = await testDamageDealt(game, Moves.MUD_SLAP, false, Abilities.BALL_FETCH, Abilities.MOLD_BREAKER); + it("should not decrease the damage an ally takes from a mold breaker enemy using a special attack", async () => { + const [damageWithoutGift, damageWithGift] = await testDamageDealt( + game, + Moves.MUD_SLAP, + false, + Abilities.BALL_FETCH, + Abilities.MOLD_BREAKER, + ); expect(damageWithGift).toBe(damageWithoutGift); }); @@ -168,7 +179,7 @@ describe("Abilities - Flower Gift", () => { it("reverts to Overcast Form when the Pokémon loses Flower Gift, changes form under Harsh Sunlight/Sunny when it regains it", async () => { game.override.enemyMoveset([Moves.SKILL_SWAP]).weather(WeatherType.HARSH_SUN); - game.override.moveset([ Moves.SKILL_SWAP ]); + game.override.moveset([Moves.SKILL_SWAP]); await game.classicMode.startBattle([Species.CHERRIM]); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index aa5a48d5e4e..a10a246d855 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -160,10 +160,8 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should deactivate after fleeing from a wild pokemon", async () => { - game.override - .enemyAbility(Abilities.NEUTRALIZING_GAS) - .ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.enemyAbility(Abilities.NEUTRALIZING_GAS).ability(Abilities.BALL_FETCH); + await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts index 456f8cd7ddd..92db522871a 100644 --- a/test/abilities/victory_star.test.ts +++ b/test/abilities/victory_star.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Victory Star", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.TACKLE, Moves.SPLASH ]) + .moveset([Moves.TACKLE, Moves.SPLASH]) .battleType("double") .disableCrits() .enemySpecies(Species.MAGIKARP) @@ -33,7 +33,7 @@ describe("Abilities - Victory Star", () => { }); it("should increase the accuracy of its user", async () => { - await game.classicMode.startBattle([ Species.VICTINI, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.VICTINI, Species.MAGIKARP]); const user = game.scene.getPlayerField()[0]; @@ -46,7 +46,7 @@ describe("Abilities - Victory Star", () => { }); it("should increase the accuracy of its user's ally", async () => { - await game.classicMode.startBattle([ Species.MAGIKARP, Species.VICTINI ]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.VICTINI]); const ally = game.scene.getPlayerField()[0]; vi.spyOn(ally, "getAccuracyMultiplier"); diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index db746831753..18d5be36aef 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -1,4 +1,3 @@ -import { allAbilities } from "#app/data/ability"; import { allMoves } from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; diff --git a/test/data/splash_messages.test.ts b/test/data/splash_messages.test.ts index bd29a17339a..773b2715825 100644 --- a/test/data/splash_messages.test.ts +++ b/test/data/splash_messages.test.ts @@ -9,7 +9,7 @@ describe("Data - Splash Messages", () => { // Make sure to adjust this test if the weight is changed! it("should add contain 15 `battlesWon` splash messages", () => { - const battlesWonMessages = getSplashMessages().filter((message) => message === "splashMessages:battlesWon"); + const battlesWonMessages = getSplashMessages().filter(message => message === "splashMessages:battlesWon"); expect(battlesWonMessages).toHaveLength(15); }); diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index ab249d48a23..c06f354a94a 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -26,7 +26,7 @@ describe("Items - Reviver Seed", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH, Moves.TACKLE, Moves.ENDURE ]) + .moveset([Moves.SPLASH, Moves.TACKLE, Moves.ENDURE]) .ability(Abilities.BALL_FETCH) .battleType("single") .disableCrits() @@ -47,13 +47,10 @@ describe("Items - Reviver Seed", () => { { moveType: "Fixed Damage Move", move: Moves.SEISMIC_TOSS }, { moveType: "Final Gambit", move: Moves.FINAL_GAMBIT }, { moveType: "Counter", move: Moves.COUNTER }, - { moveType: "OHKO", move: Moves.SHEER_COLD } + { moveType: "OHKO", move: Moves.SHEER_COLD }, ])("should activate the holder's reviver seed from a $moveType", async ({ move }) => { - game.override - .enemyLevel(100) - .startingLevel(1) - .enemyMoveset(move); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + game.override.enemyLevel(100).startingLevel(1).enemyMoveset(move); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); @@ -67,11 +64,8 @@ describe("Items - Reviver Seed", () => { }); it("should activate the holder's reviver seed from confusion self-hit", async () => { - game.override - .enemyLevel(1) - .startingLevel(100) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + game.override.enemyLevel(1).startingLevel(100).enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); player.addTag(BattlerTagType.CONFUSED, 3); @@ -100,7 +94,7 @@ describe("Items - Reviver Seed", () => { .enemySpecies(Species.MAGIKARP) .moveset(move) .enemyMoveset(Moves.ENDURE); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); @@ -124,7 +118,7 @@ describe("Items - Reviver Seed", () => { .moveset(move) .enemyAbility(Abilities.LIQUID_OOZE) .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([ Species.GASTLY, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.GASTLY, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); @@ -145,13 +139,13 @@ describe("Items - Reviver Seed", () => { .moveset(Moves.DESTINY_BOND) .startingHeldItems([]) // reset held items to nothing so user doesn't revive and not trigger Destiny Bond .enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.DESTINY_BOND); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFainted()).toBeTruthy(); diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index d706d5d9581..8fbb2272ece 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -22,7 +22,7 @@ describe("Moves - Endure", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD ]) + .moveset([Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD]) .ability(Abilities.SKILL_LINK) .startingLevel(100) .battleType("single") @@ -51,7 +51,7 @@ describe("Moves - Endure", () => { }); it("should let the pokemon survive against OHKO moves", async () => { - await game.classicMode.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.SHEER_COLD); @@ -74,7 +74,7 @@ describe("Moves - Endure", () => { .enemySpecies(Species.MAGIKARP) .moveset(move) .enemyMoveset(Moves.ENDURE); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index 1ceb850edea..87be20f60ad 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -116,12 +116,8 @@ describe("Moves - Revival Blessing", () => { }); it("should not summon multiple pokemon to the same slot when reviving the enemy ally in doubles", async () => { - game.override - .battleType("double") - .enemyMoveset([ Moves.REVIVAL_BLESSING ]) - .moveset([ Moves.SPLASH ]) - .startingWave(25); // 2nd rival battle - must have 3+ pokemon - await game.classicMode.startBattle([ Species.ARCEUS, Species.GIRATINA ]); + game.override.battleType("double").enemyMoveset([Moves.REVIVAL_BLESSING]).moveset([Moves.SPLASH]).startingWave(25); // 2nd rival battle - must have 3+ pokemon + await game.classicMode.startBattle([Species.ARCEUS, Species.GIRATINA]); const enemyFainting = game.scene.getEnemyField()[0]; diff --git a/test/testUtils/gameWrapper.ts b/test/testUtils/gameWrapper.ts index 28c7c4af80f..388861e01c4 100644 --- a/test/testUtils/gameWrapper.ts +++ b/test/testUtils/gameWrapper.ts @@ -1,31 +1,25 @@ -/* eslint-disable */ -// @ts-nocheck +// @ts-nocheck - TODO: remove this import BattleScene, * as battleScene from "#app/battle-scene"; import { MoveAnim } from "#app/data/battle-anims"; import Pokemon from "#app/field/pokemon"; import * as Utils from "#app/utils"; import { blobToString } from "#test/testUtils/gameManagerUtils"; import { MockClock } from "#test/testUtils/mocks/mockClock"; -import { MockConsoleLog } from "#test/testUtils/mocks/mockConsoleLog"; import { MockFetch } from "#test/testUtils/mocks/mockFetch"; import MockLoader from "#test/testUtils/mocks/mockLoader"; -import { mockLocalStorage } from "#test/testUtils/mocks/mockLocalStorage"; -import { MockImage } from "#test/testUtils/mocks/mocksContainer/mockImage"; import MockTextureManager from "#test/testUtils/mocks/mockTextureManager"; import fs from "node:fs"; import Phaser from "phaser"; -import InputText from "phaser3-rex-plugins/plugins/inputtext"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { vi } from "vitest"; +import { version } from "../../package.json"; import { MockGameObjectCreator } from "./mocks/mockGameObjectCreator"; +import { MockTimedEventManager } from "./mocks/mockTimedEventManager"; import InputManager = Phaser.Input.InputManager; import KeyboardManager = Phaser.Input.Keyboard.KeyboardManager; import KeyboardPlugin = Phaser.Input.Keyboard.KeyboardPlugin; import GamepadPlugin = Phaser.Input.Gamepad.GamepadPlugin; import EventEmitter = Phaser.Events.EventEmitter; import UpdateList = Phaser.GameObjects.UpdateList; -import { version } from "../../package.json"; -import { MockTimedEventManager } from "./mocks/mockTimedEventManager"; window.URL.createObjectURL = (blob: Blob) => { blobToString(blob).then((data: string) => { diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index 2d56ae35fce..9bb0369a31a 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -1,9 +1,6 @@ import type { Variant } from "#app/data/variant"; import { Weather } from "#app/data/weather"; import { Abilities } from "#app/enums/abilities"; -import * as GameMode from "#app/game-mode"; -import type { GameModes } from "#app/game-mode"; -import { getGameMode } from "#app/game-mode"; import type { ModifierOverride } from "#app/modifier/modifier-type"; import type { BattleStyle } from "#app/overrides"; import Overrides, { defaultOverrides } from "#app/overrides"; diff --git a/test/testUtils/mocks/mocksContainer/mockRectangle.ts b/test/testUtils/mocks/mocksContainer/mockRectangle.ts index 854baed5915..7bdf343759d 100644 --- a/test/testUtils/mocks/mocksContainer/mockRectangle.ts +++ b/test/testUtils/mocks/mocksContainer/mockRectangle.ts @@ -1,4 +1,3 @@ -import { off } from "process"; import type { MockGameObject } from "../mockGameObject"; export default class MockRectangle implements MockGameObject { diff --git a/test/vitest.setup.ts b/test/vitest.setup.ts index b9da0850306..93b439e540f 100644 --- a/test/vitest.setup.ts +++ b/test/vitest.setup.ts @@ -1,17 +1,4 @@ import "vitest-canvas-mock"; - -import { initLoggedInUser } from "#app/account"; -import { initAbilities } from "#app/data/ability"; -import { initBiomes } from "#app/data/balance/biomes"; -import { initEggMoves } from "#app/data/balance/egg-moves"; -import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import { initMoves } from "#app/data/moves/move"; -import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; -import { initPokemonForms } from "#app/data/pokemon-forms"; -import { initSpecies } from "#app/data/pokemon-species"; -import { initAchievements } from "#app/system/achv"; -import { initVouchers } from "#app/system/voucher"; -import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; import { afterAll, beforeAll, vi } from "vitest"; import { initTestFile } from "./testUtils/testFileInitialization"; @@ -20,13 +7,11 @@ import { initTestFile } from "./testUtils/testFileInitialization"; /** Mock the override import to always return default values, ignoring any custom overrides. */ vi.mock("#app/overrides", async importOriginal => { - // eslint-disable-next-line @typescript-eslint/consistent-type-imports const { defaultOverrides } = await importOriginal(); return { default: defaultOverrides, defaultOverrides, - // eslint-disable-next-line @typescript-eslint/consistent-type-imports } satisfies typeof import("#app/overrides"); }); From 4f19e4a1269052698a0a2a1ab0a4b46e201bf388 Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 29 Mar 2025 13:10:07 -0400 Subject: [PATCH 6/7] [Move] False Swipe/Hold Back don't fail if the target has 1 HP (#5577) * Remove condition from `SurviveDamageAttr` * Add test for False Swipe --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: EmberCM --- src/data/moves/move.ts | 4 --- test/moves/false_swipe.test.ts | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 test/moves/false_swipe.test.ts diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index e18e898bc68..2f935b7cc16 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -1580,10 +1580,6 @@ export class SurviveDamageAttr extends ModifiedDamageAttr { return Math.min(damage, target.hp - 1); } - getCondition(): MoveConditionFunc { - return (user, target, move) => target.hp > 1; - } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return target.hp > 1 ? 0 : -20; } diff --git a/test/moves/false_swipe.test.ts b/test/moves/false_swipe.test.ts new file mode 100644 index 00000000000..4fb5b81ef67 --- /dev/null +++ b/test/moves/false_swipe.test.ts @@ -0,0 +1,53 @@ +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - False Swipe", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.FALSE_SWIPE]) + .ability(Abilities.BALL_FETCH) + .startingLevel(1000) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should reduce the target to 1 HP", async () => { + await game.classicMode.startBattle([Species.MILOTIC]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FALSE_SWIPE); + await game.toNextTurn(); + game.move.select(Moves.FALSE_SWIPE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy.hp).toBe(1); + const falseSwipeHistory = player + .getMoveHistory() + .every(turnMove => turnMove.move === Moves.FALSE_SWIPE && turnMove.result === MoveResult.SUCCESS); + expect(falseSwipeHistory).toBe(true); + }); +}); From 27a16382436fd08208c1fe5666a65fe1f93a9802 Mon Sep 17 00:00:00 2001 From: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> Date: Sat, 29 Mar 2025 14:25:34 -0400 Subject: [PATCH 7/7] [Bug] Fix interactions for Pollen Puff Parental Bond, Multi-Lens, Grip Claw Ally Healing (#5550) * Checks for hit result status on Grip Claw application * Adds a boolean check for the Pollen Puff edge case in canBeMultiStrikeEnhanced * Adds parental bond test * Adds grip claw and multi lens tests --- src/data/moves/move.ts | 6 +++++- src/phases/move-effect-phase.ts | 2 +- test/abilities/parental_bond.test.ts | 18 ++++++++++++++++++ test/items/grip_claw.test.ts | 25 +++++++++++++++++++++++++ test/items/multi_lens.test.ts | 17 +++++++++++++++++ 5 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 2f935b7cc16..aeab8a6490b 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -905,7 +905,7 @@ export default class Move implements Localizable { SacrificialAttrOnHit ]; - // ...and cannot enhance these specific moves. + // ...and cannot enhance these specific moves const exceptMoves: Moves[] = [ Moves.FLING, Moves.UPROAR, @@ -914,10 +914,14 @@ export default class Move implements Localizable { Moves.ENDEAVOR ]; + // ...and cannot enhance Pollen Puff when targeting an ally. + const exceptPollenPuffAlly: boolean = this.id === Moves.POLLEN_PUFF && targets.includes(user.getAlly().getBattlerIndex()) + return (!restrictSpread || !isMultiTarget) && !this.isChargingMove() && !exceptAttrs.some(attr => this.hasAttr(attr)) && !exceptMoves.some(id => this.id === id) + && !exceptPollenPuffAlly && this.category !== MoveCategory.STATUS; } } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 4152fc243f0..995684f8c03 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -653,7 +653,7 @@ export class MoveEffectPhase extends PokemonPhase { this.applyOnHitEffects(user, target, firstHit, lastHit, firstTarget); this.applyOnGetHitAbEffects(user, target, hitResult); applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move.getMove(), hitResult); - if (this.move.getMove() instanceof AttackMove) { + if (this.move.getMove() instanceof AttackMove && hitResult !== HitResult.STATUS) { globalScene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); } } diff --git a/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts index 2aa24e78d6e..d4bf544e8c7 100644 --- a/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -9,6 +9,7 @@ import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { BattlerIndex } from "#app/battle"; describe("Abilities - Parental Bond", () => { let phaserGame: Phaser.Game; @@ -426,4 +427,21 @@ describe("Abilities - Parental Bond", () => { // TODO: Update hit count to 1 once Future Sight is fixed to not activate abilities if user is off the field expect(enemyPokemon.damageAndUpdate).toHaveBeenCalledTimes(2); }); + + it("should not allow Pollen Puff to heal ally more than once", async () => { + game.override.battleType("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + + const [, rightPokemon] = game.scene.getPlayerField(); + + rightPokemon.damageAndUpdate(rightPokemon.hp - 1); + + game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.ENDURE, 1); + + await game.toNextTurn(); + + // Pollen Puff heals with a ratio of 0.5, as long as Pollen Puff triggers only once the pokemon will always be <= (0.5 * Max HP) + 1 + expect(rightPokemon.hp).toBeLessThanOrEqual(0.5 * rightPokemon.getMaxHp() + 1); + }); }); diff --git a/test/items/grip_claw.test.ts b/test/items/grip_claw.test.ts index 1d169006116..aa7c23ca43d 100644 --- a/test/items/grip_claw.test.ts +++ b/test/items/grip_claw.test.ts @@ -98,6 +98,31 @@ describe("Items - Grip Claw", () => { expect(enemy1HeldItemCountsAfter).toBe(enemy1HeldItemCount); expect(enemy2HeldItemCountsAfter).toBe(enemy2HeldItemCount); }); + + it("should not allow Pollen Puff to steal items when healing ally", async () => { + game.override + .battleType("double") + .moveset([Moves.POLLEN_PUFF, Moves.ENDURE]) + .startingHeldItems([ + { name: "GRIP_CLAW", count: 1 }, + { name: "BERRY", type: BerryType.LUM, count: 1 }, + ]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + + const [leftPokemon, rightPokemon] = game.scene.getPlayerField(); + + const gripClaw = leftPokemon.getHeldItems()[0] as ContactHeldItemTransferChanceModifier; + vi.spyOn(gripClaw, "chance", "get").mockReturnValue(100); + + const heldItemCountBefore = getHeldItemCount(rightPokemon); + + game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.ENDURE, 1); + + await game.toNextTurn(); + + expect(getHeldItemCount(rightPokemon)).toBe(heldItemCountBefore); + }); }); /* diff --git a/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts index 90e73ae88ea..176e8213f55 100644 --- a/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -211,4 +211,21 @@ describe("Items - Multi Lens", () => { // TODO: Update hit count to 1 once Future Sight is fixed to not activate held items if user is off the field expect(enemyPokemon.damageAndUpdate).toHaveBeenCalledTimes(2); }); + + it("should not allow Pollen Puff to heal ally more than once", async () => { + game.override.battleType("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + + const [, rightPokemon] = game.scene.getPlayerField(); + + rightPokemon.damageAndUpdate(rightPokemon.hp - 1); + + game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.ENDURE, 1); + + await game.toNextTurn(); + + // Pollen Puff heals with a ratio of 0.5, as long as Pollen Puff triggers only once the pokemon will always be <= (0.5 * Max HP) + 1 + expect(rightPokemon.hp).toBeLessThanOrEqual(0.5 * rightPokemon.getMaxHp() + 1); + }); });