diff --git a/public/images/items.json b/public/images/items.json index b318f79b0a0..6195350508a 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 428, - "h": 428 + "w": 430, + "h": 430 }, "scale": 1, "frames": [ @@ -388,7 +388,7 @@ } }, { - "filename": "mega_bracelet", + "filename": "choice_specs", "rotated": false, "trimmed": true, "sourceSize": { @@ -396,16 +396,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 4, "y": 8, - "w": 20, - "h": 16 + "w": 24, + "h": 18 }, "frame": { "x": 0, "y": 412, - "w": 20, - "h": 16 + "w": 24, + "h": 18 } }, { @@ -640,7 +640,7 @@ } }, { - "filename": "catching_charm", + "filename": "big_root", "rotated": false, "trimmed": true, "sourceSize": { @@ -648,15 +648,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 4, "y": 4, - "w": 21, + "w": 23, "h": 24 }, "frame": { "x": 407, "y": 0, - "w": 21, + "w": 23, "h": 24 } }, @@ -786,27 +786,6 @@ "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": 262, - "w": 23, - "h": 24 - } - }, { "filename": "blank_plate", "rotated": false, @@ -823,7 +802,7 @@ }, "frame": { "x": 22, - "y": 286, + "y": 262, "w": 24, "h": 24 } @@ -844,7 +823,7 @@ }, "frame": { "x": 22, - "y": 310, + "y": 286, "w": 24, "h": 24 } @@ -865,7 +844,7 @@ }, "frame": { "x": 22, - "y": 334, + "y": 310, "w": 24, "h": 24 } @@ -886,7 +865,7 @@ }, "frame": { "x": 22, - "y": 358, + "y": 334, "w": 24, "h": 24 } @@ -907,13 +886,13 @@ }, "frame": { "x": 22, - "y": 382, + "y": 358, "w": 24, "h": 24 } }, { - "filename": "exp_balance", + "filename": "fist_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -922,15 +901,36 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, + "y": 4, "w": 24, - "h": 22 + "h": 24 }, "frame": { "x": 22, + "y": 382, + "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": 24, "y": 406, "w": 24, - "h": 22 + "h": 24 } }, { @@ -955,7 +955,7 @@ } }, { - "filename": "relic_band", + "filename": "mega_bracelet", "rotated": false, "trimmed": true, "sourceSize": { @@ -963,20 +963,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 17, + "x": 6, + "y": 8, + "w": 20, "h": 16 }, "frame": { "x": 28, "y": 70, - "w": 17, + "w": 20, "h": 16 } }, { - "filename": "abomasite", + "filename": "calcium", "rotated": false, "trimmed": true, "sourceSize": { @@ -985,40 +985,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 45, - "y": 70, - "w": 16, - "h": 16 - } - }, - { - "filename": "fist_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, "y": 4, - "w": 24, + "w": 16, "h": 24 }, "frame": { "x": 39, "y": 86, - "w": 24, + "w": 16, "h": 24 } }, { - "filename": "flame_plate", + "filename": "carbos", "rotated": false, "trimmed": true, "sourceSize": { @@ -1026,20 +1005,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 8, "y": 4, - "w": 24, + "w": 16, "h": 24 }, "frame": { "x": 39, "y": 110, - "w": 24, + "w": 16, "h": 24 } }, { - "filename": "focus_band", + "filename": "catching_charm", "rotated": false, "trimmed": true, "sourceSize": { @@ -1047,20 +1026,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 5, "y": 4, - "w": 24, + "w": 21, "h": 24 }, "frame": { "x": 39, "y": 134, - "w": 24, + "w": 21, "h": 24 } }, { - "filename": "golden_punch", + "filename": "focus_band", "rotated": false, "trimmed": true, "sourceSize": { @@ -1081,7 +1060,7 @@ } }, { - "filename": "gracidea", + "filename": "golden_punch", "rotated": false, "trimmed": true, "sourceSize": { @@ -1102,7 +1081,7 @@ } }, { - "filename": "grip_claw", + "filename": "gracidea", "rotated": false, "trimmed": true, "sourceSize": { @@ -1123,7 +1102,7 @@ } }, { - "filename": "icicle_plate", + "filename": "grip_claw", "rotated": false, "trimmed": true, "sourceSize": { @@ -1144,7 +1123,7 @@ } }, { - "filename": "insect_plate", + "filename": "icicle_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -1158,14 +1137,14 @@ "h": 24 }, "frame": { - "x": 45, + "x": 46, "y": 254, "w": 24, "h": 24 } }, { - "filename": "iron_plate", + "filename": "insect_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -1186,7 +1165,7 @@ } }, { - "filename": "lucky_punch", + "filename": "iron_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -1207,7 +1186,7 @@ } }, { - "filename": "lucky_punch_great", + "filename": "lucky_punch", "rotated": false, "trimmed": true, "sourceSize": { @@ -1228,7 +1207,7 @@ } }, { - "filename": "lucky_punch_master", + "filename": "lucky_punch_great", "rotated": false, "trimmed": true, "sourceSize": { @@ -1249,7 +1228,7 @@ } }, { - "filename": "lucky_punch_ultra", + "filename": "lucky_punch_master", "rotated": false, "trimmed": true, "sourceSize": { @@ -1269,6 +1248,174 @@ "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": 48, + "y": 398, + "w": 23, + "h": 24 + } + }, + { + "filename": "abomasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 48, + "y": 70, + "w": 16, + "h": 16 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 55, + "y": 86, + "w": 18, + "h": 24 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 55, + "y": 110, + "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": 60, + "y": 134, + "w": 18, + "h": 24 + } + }, + { + "filename": "hp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 63, + "y": 158, + "w": 16, + "h": 24 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 63, + "y": 182, + "w": 16, + "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": 68, + "y": 206, + "w": 24, + "h": 24 + } + }, { "filename": "lustrous_globe", "rotated": false, @@ -1284,12 +1431,159 @@ "h": 24 }, "frame": { - "x": 46, - "y": 398, + "x": 68, + "y": 230, "w": 24, "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": 70, + "y": 254, + "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": 70, + "y": 278, + "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": 70, + "y": 302, + "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": 70, + "y": 326, + "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": 70, + "y": 350, + "w": 24, + "h": 24 + } + }, + { + "filename": "salac_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 374, + "w": 24, + "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": 71, + "y": 398, + "w": 23, + "h": 24 + } + }, { "filename": "ability_capsule", "rotated": false, @@ -1312,7 +1606,7 @@ } }, { - "filename": "calcium", + "filename": "lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -1322,18 +1616,18 @@ "spriteSourceSize": { "x": 8, "y": 4, - "w": 16, + "w": 17, "h": 24 }, "frame": { "x": 59, "y": 27, - "w": 16, + "w": 17, "h": 24 } }, { - "filename": "meadow_plate", + "filename": "scanner", "rotated": false, "trimmed": true, "sourceSize": { @@ -1347,14 +1641,14 @@ "h": 24 }, "frame": { - "x": 75, + "x": 76, "y": 26, "w": 24, "h": 24 } }, { - "filename": "mind_plate", + "filename": "silk_scarf", "rotated": false, "trimmed": true, "sourceSize": { @@ -1368,33 +1662,12 @@ "h": 24 }, "frame": { - "x": 99, + "x": 100, "y": 26, "w": 24, "h": 24 } }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 123, - "y": 26, - "w": 12, - "h": 17 - } - }, { "filename": "big_mushroom", "rotated": false, @@ -1458,468 +1731,6 @@ "h": 23 } }, - { - "filename": "absolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 61, - "y": 70, - "w": 16, - "h": 16 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 63, - "y": 86, - "w": 16, - "h": 24 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 63, - "y": 110, - "w": 18, - "h": 24 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 63, - "y": 134, - "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": 63, - "y": 158, - "w": 18, - "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": 63, - "y": 182, - "w": 23, - "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": 68, - "y": 206, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 68, - "y": 230, - "w": 18, - "h": 24 - } - }, - { - "filename": "lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 69, - "y": 254, - "w": 17, - "h": 24 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 70, - "y": 278, - "w": 16, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 70, - "y": 302, - "w": 16, - "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": 70, - "y": 326, - "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": 70, - "y": 350, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 70, - "y": 374, - "w": 22, - "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": 70, - "y": 398, - "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": 79, - "y": 73, - "w": 24, - "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": 103, - "y": 73, - "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": 81, - "y": 97, - "w": 24, - "h": 24 - } - }, - { - "filename": "scanner", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 81, - "y": 121, - "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": 81, - "y": 145, - "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": 105, - "y": 97, - "w": 21, - "h": 24 - } - }, - { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 105, - "y": 121, - "w": 21, - "h": 24 - } - }, { "filename": "sky_plate", "rotated": false, @@ -1935,8 +1746,8 @@ "h": 24 }, "frame": { - "x": 105, - "y": 145, + "x": 73, + "y": 73, "w": 24, "h": 24 } @@ -1956,8 +1767,8 @@ "h": 24 }, "frame": { - "x": 86, - "y": 169, + "x": 97, + "y": 73, "w": 24, "h": 24 } @@ -1977,8 +1788,8 @@ "h": 24 }, "frame": { - "x": 86, - "y": 193, + "x": 73, + "y": 97, "w": 24, "h": 24 } @@ -1998,8 +1809,8 @@ "h": 24 }, "frame": { - "x": 86, - "y": 217, + "x": 97, + "y": 97, "w": 24, "h": 24 } @@ -2019,12 +1830,33 @@ "h": 24 }, "frame": { - "x": 86, - "y": 241, + "x": 78, + "y": 121, "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": 102, + "y": 121, + "w": 21, + "h": 24 + } + }, { "filename": "toxic_plate", "rotated": false, @@ -2040,8 +1872,8 @@ "h": 24 }, "frame": { - "x": 86, - "y": 265, + "x": 79, + "y": 145, "w": 24, "h": 24 } @@ -2061,8 +1893,8 @@ "h": 24 }, "frame": { - "x": 86, - "y": 289, + "x": 79, + "y": 169, "w": 24, "h": 24 } @@ -2082,35 +1914,14 @@ "h": 24 }, "frame": { - "x": 110, - "y": 169, + "x": 103, + "y": 145, "w": 20, "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": 110, - "y": 193, - "w": 22, - "h": 23 - } - }, - { - "filename": "bug_tera_shard", + "filename": "shiny_charm", "rotated": false, "trimmed": true, "sourceSize": { @@ -2120,14 +1931,14 @@ "spriteSourceSize": { "x": 6, "y": 4, - "w": 22, - "h": 23 + "w": 21, + "h": 24 }, "frame": { - "x": 110, - "y": 216, - "w": 22, - "h": 23 + "x": 103, + "y": 169, + "w": 21, + "h": 24 } }, { @@ -2145,8 +1956,8 @@ "h": 23 }, "frame": { - "x": 110, - "y": 239, + "x": 92, + "y": 193, "w": 24, "h": 23 } @@ -2166,8 +1977,8 @@ "h": 23 }, "frame": { - "x": 110, - "y": 262, + "x": 92, + "y": 216, "w": 24, "h": 23 } @@ -2187,14 +1998,14 @@ "h": 23 }, "frame": { - "x": 110, - "y": 285, + "x": 92, + "y": 239, "w": 24, "h": 23 } }, { - "filename": "dynamax_band", + "filename": "silver_powder", "rotated": false, "trimmed": true, "sourceSize": { @@ -2203,19 +2014,40 @@ }, "spriteSourceSize": { "x": 4, + "y": 11, + "w": 24, + "h": 15 + }, + "frame": { + "x": 92, + "y": 262, + "w": 24, + "h": 15 + } + }, + { + "filename": "black_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, "y": 4, - "w": 23, + "w": 22, "h": 23 }, "frame": { - "x": 87, - "y": 313, - "w": 23, + "x": 94, + "y": 277, + "w": 22, "h": 23 } }, { - "filename": "leppa_berry", + "filename": "bug_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -2223,60 +2055,18 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, + "x": 6, + "y": 4, + "w": 22, "h": 23 }, "frame": { - "x": 110, - "y": 308, - "w": 24, + "x": 94, + "y": 300, + "w": 22, "h": 23 } }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 135, - "y": 36, - "w": 24, - "h": 18 - } - }, - { - "filename": "coupon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 125, - "y": 54, - "w": 23, - "h": 19 - } - }, { "filename": "dark_tera_shard", "rotated": false, @@ -2292,8 +2082,8 @@ "h": 23 }, "frame": { - "x": 126, - "y": 73, + "x": 94, + "y": 323, "w": 22, "h": 23 } @@ -2313,12 +2103,180 @@ "h": 23 }, "frame": { - "x": 126, - "y": 96, + "x": 94, + "y": 346, "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": 94, + "y": 369, + "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": 94, + "y": 392, + "w": 23, + "h": 23 + } + }, + { + "filename": "candy_overlay", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 12, + "w": 16, + "h": 15 + }, + "frame": { + "x": 94, + "y": 415, + "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": 110, + "y": 415, + "w": 15, + "h": 15 + } + }, + { + "filename": "max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 116, + "y": 193, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 116, + "y": 217, + "w": 18, + "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": 116, + "y": 241, + "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": 116, + "y": 265, + "w": 21, + "h": 23 + } + }, { "filename": "electric_tera_shard", "rotated": false, @@ -2334,33 +2292,12 @@ "h": 23 }, "frame": { - "x": 126, - "y": 119, + "x": 116, + "y": 288, "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": 129, - "y": 142, - "w": 21, - "h": 23 - } - }, { "filename": "fairy_tera_shard", "rotated": false, @@ -2376,8 +2313,8 @@ "h": 23 }, "frame": { - "x": 130, - "y": 165, + "x": 116, + "y": 311, "w": 22, "h": 23 } @@ -2397,8 +2334,8 @@ "h": 23 }, "frame": { - "x": 132, - "y": 188, + "x": 116, + "y": 334, "w": 22, "h": 23 } @@ -2418,8 +2355,8 @@ "h": 23 }, "frame": { - "x": 132, - "y": 211, + "x": 117, + "y": 357, "w": 22, "h": 23 } @@ -2439,14 +2376,14 @@ "h": 23 }, "frame": { - "x": 134, - "y": 234, + "x": 117, + "y": 380, "w": 22, "h": 23 } }, { - "filename": "flying_tera_shard", + "filename": "max_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -2454,20 +2391,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 8, "y": 4, - "w": 22, - "h": 23 + "w": 17, + "h": 24 }, "frame": { - "x": 134, - "y": 257, - "w": 22, - "h": 23 + "x": 121, + "y": 73, + "w": 17, + "h": 24 } }, { - "filename": "focus_sash", + "filename": "super_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -2475,37 +2412,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 8, "y": 4, - "w": 22, - "h": 23 + "w": 17, + "h": 24 }, "frame": { - "x": 134, - "y": 280, - "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": 134, - "y": 303, - "w": 22, - "h": 23 + "x": 121, + "y": 97, + "w": 17, + "h": 24 } }, { @@ -2523,8 +2439,8 @@ "h": 24 }, "frame": { - "x": 148, - "y": 54, + "x": 123, + "y": 121, "w": 16, "h": 24 } @@ -2544,8 +2460,8 @@ "h": 24 }, "frame": { - "x": 148, - "y": 78, + "x": 123, + "y": 145, "w": 16, "h": 24 } @@ -2565,14 +2481,14 @@ "h": 24 }, "frame": { - "x": 148, - "y": 102, + "x": 124, + "y": 169, "w": 16, "h": 24 } }, { - "filename": "aerodactylite", + "filename": "protein", "rotated": false, "trimmed": true, "sourceSize": { @@ -2581,19 +2497,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, + "y": 4, "w": 16, - "h": 16 + "h": 24 }, "frame": { - "x": 148, - "y": 126, + "x": 134, + "y": 193, "w": 16, - "h": 16 + "h": 24 } }, { - "filename": "full_heal", + "filename": "repel", "rotated": false, "trimmed": true, "sourceSize": { @@ -2601,15 +2517,99 @@ "h": 32 }, "spriteSourceSize": { - "x": 9, + "x": 8, "y": 4, - "w": 15, + "w": 16, + "h": 24 + }, + "frame": { + "x": 134, + "y": 217, + "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": 134, + "y": 241, + "w": 16, + "h": 24 + } + }, + { + "filename": "flying_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, "h": 23 }, "frame": { - "x": 150, - "y": 142, - "w": 15, + "x": 137, + "y": 265, + "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": 138, + "y": 288, + "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": 138, + "y": 311, + "w": 22, "h": 23 } }, @@ -2628,54 +2628,12 @@ "h": 23 }, "frame": { - "x": 152, - "y": 165, + "x": 138, + "y": 334, "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": 154, - "y": 188, - "w": 23, - "h": 23 - } - }, - { - "filename": "leek", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 154, - "y": 211, - "w": 23, - "h": 23 - } - }, { "filename": "ground_tera_shard", "rotated": false, @@ -2691,8 +2649,8 @@ "h": 23 }, "frame": { - "x": 156, - "y": 234, + "x": 139, + "y": 357, "w": 22, "h": 23 } @@ -2712,14 +2670,14 @@ "h": 23 }, "frame": { - "x": 156, - "y": 257, + "x": 139, + "y": 380, "w": 22, "h": 23 } }, { - "filename": "macho_brace", + "filename": "leppa_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -2729,18 +2687,60 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 23, + "w": 24, "h": 23 }, "frame": { - "x": 156, - "y": 280, - "w": 23, + "x": 125, + "y": 403, + "w": 24, "h": 23 } }, { - "filename": "rare_candy", + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 149, + "y": 403, + "w": 15, + "h": 23 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 330, + "y": 20, + "w": 24, + "h": 18 + } + }, + { + "filename": "exp_balance", "rotated": false, "trimmed": true, "sourceSize": { @@ -2750,18 +2750,18 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 23, - "h": 23 + "w": 24, + "h": 22 }, "frame": { - "x": 156, - "y": 303, - "w": 23, - "h": 23 + "x": 354, + "y": 20, + "w": 24, + "h": 22 } }, { - "filename": "never_melt_ice", + "filename": "exp_share", "rotated": false, "trimmed": true, "sourceSize": { @@ -2769,16 +2769,100 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 4, "y": 5, - "w": 22, - "h": 23 + "w": 24, + "h": 22 }, "frame": { - "x": 88, - "y": 336, - "w": 22, - "h": 23 + "x": 378, + "y": 20, + "w": 24, + "h": 22 + } + }, + { + "filename": "golden_net", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 21 + }, + "frame": { + "x": 402, + "y": 24, + "w": 24, + "h": 21 + } + }, + { + "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": 162, + "y": 21, + "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": 186, + "y": 21, + "w": 24, + "h": 20 + } + }, + { + "filename": "peat_block", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 210, + "y": 21, + "w": 24, + "h": 22 } }, { @@ -2796,8 +2880,8 @@ "h": 23 }, "frame": { - "x": 110, - "y": 331, + "x": 234, + "y": 21, "w": 24, "h": 23 } @@ -2817,371 +2901,14 @@ "h": 23 }, "frame": { - "x": 134, - "y": 326, - "w": 24, - "h": 23 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 158, - "y": 326, - "w": 21, - "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": 88, - "y": 359, - "w": 24, - "h": 15 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 92, - "y": 374, - "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": 94, - "y": 397, - "w": 20, - "h": 23 - } - }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 112, - "y": 354, - "w": 23, - "h": 20 - } - }, - { - "filename": "normal_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 113, - "y": 374, - "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": 114, - "y": 397, - "w": 22, - "h": 23 - } - }, - { - "filename": "exp_share", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 135, - "y": 349, - "w": 24, - "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": 135, - "y": 371, - "w": 24, - "h": 22 - } - }, - { - "filename": "poison_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 159, - "y": 349, - "w": 22, - "h": 23 - } - }, - { - "filename": "adamant_crystal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 159, - "y": 372, - "w": 23, - "h": 21 - } - }, - { - "filename": "rarer_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 136, - "y": 393, - "w": 23, - "h": 23 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 159, - "y": 393, - "w": 23, - "h": 22 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 159, - "y": 22, - "w": 16, - "h": 24 - } - }, - { - "filename": "psychic_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 175, + "x": 258, "y": 21, - "w": 22, + "w": 24, "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": 197, - "y": 21, - "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": 219, - "y": 21, - "w": 22, - "h": 23 - } - }, - { - "filename": "rusted_sword", + "filename": "leek", "rotated": false, "trimmed": true, "sourceSize": { @@ -3192,17 +2919,17 @@ "x": 4, "y": 5, "w": 23, - "h": 22 + "h": 23 }, "frame": { - "x": 241, + "x": 282, "y": 21, "w": 23, - "h": 22 + "h": 23 } }, { - "filename": "amulet_coin", + "filename": "macho_brace", "rotated": false, "trimmed": true, "sourceSize": { @@ -3210,1024 +2937,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 4, "y": 5, "w": 23, - "h": 21 + "h": 23 }, "frame": { - "x": 264, + "x": 305, "y": 21, "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": 287, - "y": 21, - "w": 23, - "h": 21 - } - }, - { - "filename": "berry_juice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 24, "h": 23 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 22, - "h": 21 - }, - "frame": { - "x": 310, - "y": 21, - "w": 22, - "h": 21 - } - }, - { - "filename": "blank_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 332, - "y": 20, - "w": 22, - "h": 22 - } - }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 354, - "y": 20, - "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": 376, - "y": 20, - "w": 22, - "h": 22 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 398, - "y": 24, - "w": 24, - "h": 18 - } - }, - { - "filename": "repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 164, - "y": 46, - "w": 16, - "h": 24 - } - }, - { - "filename": "steel_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 180, - "y": 44, - "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": 202, - "y": 44, - "w": 22, - "h": 23 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 224, - "y": 44, - "w": 17, - "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": 241, - "y": 43, - "w": 22, - "h": 23 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 164, - "y": 70, - "w": 17, - "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": 181, - "y": 67, - "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": 203, - "y": 67, - "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": 164, - "y": 94, - "w": 17, - "h": 23 - } - }, - { - "filename": "dire_hit", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 181, - "y": 90, - "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": 203, - "y": 89, - "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": 164, - "y": 117, - "w": 18, - "h": 23 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 225, - "y": 67, - "w": 16, - "h": 24 - } - }, - { - "filename": "dragon_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 241, - "y": 66, - "w": 22, - "h": 22 - } - }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 182, - "y": 112, - "w": 21, - "h": 23 - } - }, - { - "filename": "electirizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 203, - "y": 111, - "w": 22, - "h": 22 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 225, - "y": 91, - "w": 16, - "h": 24 - } - }, - { - "filename": "electric_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 241, - "y": 88, - "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": 165, - "y": 140, - "w": 17, - "h": 23 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 182, - "y": 135, - "w": 21, - "h": 23 - } - }, - { - "filename": "enigma_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 203, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 225, - "y": 115, - "w": 16, - "h": 24 - } - }, - { - "filename": "fairy_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 241, - "y": 110, - "w": 22, - "h": 22 - } - }, - { - "filename": "aggronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 225, - "y": 139, - "w": 16, - "h": 16 - } - }, - { - "filename": "fighting_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 241, - "y": 132, - "w": 22, - "h": 22 - } - }, - { - "filename": "berry_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 18, - "h": 22 - }, - "frame": { - "x": 174, - "y": 163, - "w": 18, - "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": 177, - "y": 185, - "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": 207, - "w": 22, - "h": 22 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 178, - "y": 229, - "w": 22, - "h": 22 - } - }, - { - "filename": "ghost_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 178, - "y": 251, - "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": 179, - "y": 273, - "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": 179, - "y": 295, - "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": 179, - "y": 317, - "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": 181, - "y": 339, - "w": 20, - "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": 182, - "y": 361, - "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": 182, - "y": 383, - "w": 22, - "h": 22 - } - }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 182, - "y": 405, - "w": 23, - "h": 17 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 192, - "y": 158, - "w": 15, - "h": 22 - } - }, - { - "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": 207, - "y": 155, - "w": 24, - "h": 20 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 231, - "y": 155, - "w": 19, - "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": 250, - "y": 154, - "w": 20, - "h": 21 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 207, - "y": 175, - "w": 24, - "h": 20 } }, { @@ -4245,306 +2964,12 @@ "h": 20 }, "frame": { - "x": 231, - "y": 175, + "x": 328, + "y": 38, "w": 24, "h": 20 } }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 199, - "y": 195, - "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": 221, - "y": 195, - "w": 22, - "h": 22 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 255, - "y": 175, - "w": 20, - "h": 20 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 243, - "y": 195, - "w": 23, - "h": 21 - } - }, - { - "filename": "n_lunarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 200, - "y": 217, - "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": 200, - "y": 238, - "w": 23, - "h": 21 - } - }, - { - "filename": "poison_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 223, - "y": 217, - "w": 22, - "h": 22 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 223, - "y": 239, - "w": 22, - "h": 20 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 245, - "y": 216, - "w": 22, - "h": 22 - } - }, - { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 245, - "y": 238, - "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": 266, - "y": 195, - "w": 21, - "h": 21 - } - }, - { - "filename": "psychic_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 267, - "y": 216, - "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": 267, - "y": 238, - "w": 22, - "h": 21 - } - }, - { - "filename": "rock_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 201, - "y": 259, - "w": 22, - "h": 22 - } - }, { "filename": "rusted_shield", "rotated": false, @@ -4560,8 +2985,8 @@ "h": 20 }, "frame": { - "x": 223, - "y": 259, + "x": 352, + "y": 42, "w": 24, "h": 20 } @@ -4581,54 +3006,12 @@ "h": 20 }, "frame": { - "x": 247, - "y": 259, + "x": 376, + "y": 42, "w": 24, "h": 20 } }, - { - "filename": "scroll_of_darkness", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 201, - "y": 281, - "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": 223, - "y": 279, - "w": 22, - "h": 22 - } - }, { "filename": "shadow_reins_of_unity", "rotated": false, @@ -4644,12 +3027,1419 @@ "h": 20 }, "frame": { - "x": 245, - "y": 279, + "x": 400, + "y": 45, "w": 24, "h": 20 } }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 125, + "y": 58, + "w": 15, + "h": 15 + } + }, + { + "filename": "healing_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 125, + "y": 36, + "w": 23, + "h": 22 + } + }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 148, + "y": 36, + "w": 12, + "h": 17 + } + }, + { + "filename": "soft_sand", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 160, + "y": 41, + "w": 24, + "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": 184, + "y": 41, + "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": 207, + "y": 43, + "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": 230, + "y": 44, + "w": 23, + "h": 21 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 253, + "y": 44, + "w": 23, + "h": 21 + } + }, + { + "filename": "n_lunarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 276, + "y": 44, + "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": 299, + "y": 44, + "w": 23, + "h": 21 + } + }, + { + "filename": "big_nugget", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 140, + "y": 58, + "w": 20, + "h": 20 + } + }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 138, + "y": 78, + "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": 160, + "y": 61, + "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": 183, + "y": 62, + "w": 23, + "h": 23 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 138, + "y": 101, + "w": 23, + "h": 20 + } + }, + { + "filename": "normal_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 139, + "y": 121, + "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": 139, + "y": 144, + "w": 22, + "h": 23 + } + }, + { + "filename": "rusted_sword", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 206, + "y": 64, + "w": 23, + "h": 22 + } + }, + { + "filename": "wellspring_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 229, + "y": 65, + "w": 23, + "h": 21 + } + }, + { + "filename": "berry_juice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 24, + "h": 23 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 22, + "h": 21 + }, + "frame": { + "x": 252, + "y": 65, + "w": 22, + "h": 21 + } + }, + { + "filename": "blank_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 274, + "y": 65, + "w": 22, + "h": 22 + } + }, + { + "filename": "bug_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 296, + "y": 65, + "w": 22, + "h": 22 + } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 160, + "y": 84, + "w": 23, + "h": 17 + } + }, + { + "filename": "poison_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 161, + "y": 101, + "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": 183, + "y": 85, + "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": 161, + "y": 124, + "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": 183, + "y": 108, + "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": 205, + "y": 86, + "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": 227, + "y": 86, + "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": 249, + "y": 86, + "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": 205, + "y": 109, + "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": 227, + "y": 109, + "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": 249, + "y": 109, + "w": 22, + "h": 22 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 161, + "y": 147, + "w": 22, + "h": 20 + } + }, + { + "filename": "wide_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 183, + "y": 131, + "w": 22, + "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": 205, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "dragon_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 227, + "y": 131, + "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": 249, + "y": 131, + "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": 140, + "y": 167, + "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": 162, + "y": 167, + "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": 271, + "y": 87, + "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": 271, + "y": 109, + "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": 293, + "y": 87, + "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": 271, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 293, + "y": 109, + "w": 22, + "h": 22 + } + }, + { + "filename": "ghost_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 293, + "y": 131, + "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": 150, + "y": 189, + "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": 150, + "y": 211, + "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": 150, + "y": 233, + "w": 22, + "h": 22 + } + }, + { + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 172, + "y": 189, + "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": 172, + "y": 213, + "w": 16, + "h": 24 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 172, + "y": 237, + "w": 19, + "h": 20 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 184, + "y": 154, + "w": 21, + "h": 23 + } + }, + { + "filename": "ice_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 205, + "y": 153, + "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": 227, + "y": 153, + "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": 249, + "y": 153, + "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": 271, + "y": 153, + "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": 293, + "y": 153, + "w": 22, + "h": 22 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 188, + "y": 177, + "w": 17, + "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": 205, + "y": 175, + "w": 21, + "h": 23 + } + }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 226, + "y": 175, + "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": 248, + "y": 175, + "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": 270, + "y": 175, + "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": 292, + "y": 175, + "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": 188, + "y": 200, + "w": 20, + "h": 23 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 208, + "y": 198, + "w": 18, + "h": 23 + } + }, + { + "filename": "scroll_of_waters", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 226, + "y": 197, + "w": 22, + "h": 22 + } + }, { "filename": "shed_shell", "rotated": false, @@ -4665,8 +4455,8 @@ "h": 22 }, "frame": { - "x": 201, - "y": 303, + "x": 248, + "y": 197, "w": 22, "h": 22 } @@ -4686,33 +4476,12 @@ "h": 22 }, "frame": { - "x": 223, - "y": 301, + "x": 270, + "y": 197, "w": 22, "h": 22 } }, - { - "filename": "soft_sand", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 245, - "y": 299, - "w": 24, - "h": 20 - } - }, { "filename": "steel_memory", "rotated": false, @@ -4728,12 +4497,75 @@ "h": 22 }, "frame": { - "x": 201, - "y": 325, + "x": 292, + "y": 197, "w": 22, "h": 22 } }, + { + "filename": "berry_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 318, + "y": 65, + "w": 18, + "h": 22 + } + }, + { + "filename": "sharp_beak", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 315, + "y": 87, + "w": 21, + "h": 23 + } + }, + { + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 315, + "y": 110, + "w": 21, + "h": 23 + } + }, { "filename": "thick_club", "rotated": false, @@ -4749,12 +4581,33 @@ "h": 22 }, "frame": { - "x": 223, - "y": 323, + "x": 315, + "y": 133, "w": 22, "h": 22 } }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 315, + "y": 155, + "w": 22, + "h": 21 + } + }, { "filename": "thunder_stone", "rotated": false, @@ -4770,14 +4623,14 @@ "h": 22 }, "frame": { - "x": 245, - "y": 319, + "x": 314, + "y": 176, "w": 22, "h": 22 } }, { - "filename": "blue_orb", + "filename": "liechi_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -4785,16 +4638,79 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 5, "y": 6, - "w": 20, - "h": 20 + "w": 22, + "h": 21 }, "frame": { - "x": 271, - "y": 259, - "w": 20, - "h": 20 + "x": 314, + "y": 198, + "w": 22, + "h": 21 + } + }, + { + "filename": "mystery_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 18 + }, + "frame": { + "x": 336, + "y": 58, + "w": 16, + "h": 18 + } + }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 336, + "y": 76, + "w": 17, + "h": 23 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 336, + "y": 99, + "w": 17, + "h": 23 } }, { @@ -4812,159 +4728,12 @@ "h": 22 }, "frame": { - "x": 269, - "y": 279, + "x": 353, + "y": 62, "w": 22, "h": 22 } }, - { - "filename": "black_sludge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 24, - "h": 24 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 22, - "h": 19 - }, - "frame": { - "x": 269, - "y": 301, - "w": 22, - "h": 19 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 267, - "y": 320, - "w": 23, - "h": 21 - } - }, - { - "filename": "burn_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 245, - "y": 341, - "w": 23, - "h": 17 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 268, - "y": 341, - "w": 22, - "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": 223, - "y": 345, - "w": 22, - "h": 19 - } - }, - { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 204, - "y": 347, - "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": 204, - "y": 369, - "w": 19, - "h": 22 - } - }, { "filename": "tm_dark", "rotated": false, @@ -4980,117 +4749,12 @@ "h": 22 }, "frame": { - "x": 223, - "y": 364, + "x": 375, + "y": 62, "w": 22, "h": 22 } }, - { - "filename": "reviver_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 8, - "w": 23, - "h": 20 - }, - "frame": { - "x": 245, - "y": 358, - "w": 23, - "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": 268, - "y": 360, - "w": 22, - "h": 20 - } - }, - { - "filename": "chill_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 245, - "y": 378, - "w": 23, - "h": 17 - } - }, - { - "filename": "douse_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 268, - "y": 380, - "w": 23, - "h": 17 - } - }, - { - "filename": "malicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 223, - "y": 386, - "w": 22, - "h": 20 - } - }, { "filename": "tm_dragon", "rotated": false, @@ -5106,8 +4770,8 @@ "h": 22 }, "frame": { - "x": 205, - "y": 406, + "x": 353, + "y": 84, "w": 22, "h": 22 } @@ -5127,117 +4791,12 @@ "h": 22 }, "frame": { - "x": 227, - "y": 406, + "x": 375, + "y": 84, "w": 22, "h": 22 } }, - { - "filename": "candy_overlay", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 16, - "h": 15 - }, - "frame": { - "x": 205, - "y": 391, - "w": 16, - "h": 15 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 249, - "y": 395, - "w": 19, - "h": 21 - } - }, - { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 268, - "y": 397, - "w": 23, - "h": 19 - } - }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 249, - "y": 416, - "w": 15, - "h": 11 - } - }, - { - "filename": "mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 264, - "y": 42, - "w": 23, - "h": 19 - } - }, { "filename": "tm_fairy", "rotated": false, @@ -5253,12 +4812,159 @@ "h": 22 }, "frame": { - "x": 263, - "y": 61, + "x": 397, + "y": 65, "w": 22, "h": 22 } }, + { + "filename": "black_sludge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 24, + "h": 24 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 22, + "h": 19 + }, + "frame": { + "x": 397, + "y": 87, + "w": 22, + "h": 19 + } + }, + { + "filename": "burn_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 353, + "y": 106, + "w": 23, + "h": 17 + } + }, + { + "filename": "chill_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 376, + "y": 106, + "w": 23, + "h": 17 + } + }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 399, + "y": 106, + "w": 20, + "h": 20 + } + }, + { + "filename": "relic_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 15, + "h": 11 + }, + "frame": { + "x": 336, + "y": 122, + "w": 15, + "h": 11 + } + }, + { + "filename": "hard_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 337, + "y": 133, + "w": 20, + "h": 22 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 337, + "y": 155, + "w": 20, + "h": 21 + } + }, { "filename": "tm_fighting", "rotated": false, @@ -5274,12 +4980,33 @@ "h": 22 }, "frame": { - "x": 263, - "y": 83, + "x": 336, + "y": 176, "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": 336, + "y": 198, + "w": 22, + "h": 21 + } + }, { "filename": "tm_fire", "rotated": false, @@ -5295,12 +5022,33 @@ "h": 22 }, "frame": { - "x": 263, - "y": 105, + "x": 357, + "y": 123, "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": 379, + "y": 123, + "w": 20, + "h": 22 + } + }, { "filename": "tm_flying", "rotated": false, @@ -5316,33 +5064,12 @@ "h": 22 }, "frame": { - "x": 263, - "y": 127, + "x": 357, + "y": 145, "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": 287, - "y": 42, - "w": 23, - "h": 19 - } - }, { "filename": "tm_ghost", "rotated": false, @@ -5358,12 +5085,33 @@ "h": 22 }, "frame": { - "x": 285, - "y": 61, + "x": 379, + "y": 145, "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": 399, + "y": 126, + "w": 22, + "h": 19 + } + }, { "filename": "tm_grass", "rotated": false, @@ -5379,8 +5127,8 @@ "h": 22 }, "frame": { - "x": 285, - "y": 83, + "x": 401, + "y": 145, "w": 22, "h": 22 } @@ -5400,8 +5148,8 @@ "h": 22 }, "frame": { - "x": 285, - "y": 105, + "x": 358, + "y": 167, "w": 22, "h": 22 } @@ -5421,96 +5169,12 @@ "h": 22 }, "frame": { - "x": 285, - "y": 127, + "x": 358, + "y": 189, "w": 22, "h": 22 } }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 310, - "y": 42, - "w": 23, - "h": 20 - } - }, - { - "filename": "sweet_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 333, - "y": 42, - "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": 355, - "y": 42, - "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": 377, - "y": 42, - "w": 22, - "h": 21 - } - }, { "filename": "tm_normal", "rotated": false, @@ -5526,8 +5190,8 @@ "h": 22 }, "frame": { - "x": 399, - "y": 42, + "x": 380, + "y": 167, "w": 22, "h": 22 } @@ -5547,8 +5211,8 @@ "h": 22 }, "frame": { - "x": 307, - "y": 62, + "x": 380, + "y": 189, "w": 22, "h": 22 } @@ -5568,8 +5232,8 @@ "h": 22 }, "frame": { - "x": 307, - "y": 84, + "x": 402, + "y": 167, "w": 22, "h": 22 } @@ -5589,12 +5253,432 @@ "h": 22 }, "frame": { - "x": 307, - "y": 106, + "x": 402, + "y": 189, "w": 22, "h": 22 } }, + { + "filename": "coupon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 358, + "y": 211, + "w": 23, + "h": 19 + } + }, + { + "filename": "golden_mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 381, + "y": 211, + "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": 404, + "y": 211, + "w": 22, + "h": 19 + } + }, + { + "filename": "douse_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 226, + "y": 219, + "w": 23, + "h": 17 + } + }, + { + "filename": "mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 249, + "y": 219, + "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": 272, + "y": 219, + "w": 23, + "h": 19 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 295, + "y": 219, + "w": 23, + "h": 20 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 318, + "y": 219, + "w": 23, + "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": 341, + "y": 219, + "w": 17, + "h": 20 + } + }, + { + "filename": "baton", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 208, + "y": 221, + "w": 18, + "h": 18 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 191, + "y": 223, + "w": 17, + "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": 358, + "y": 230, + "w": 23, + "h": 18 + } + }, + { + "filename": "fairy_feather", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 381, + "y": 230, + "w": 22, + "h": 20 + } + }, + { + "filename": "malicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 403, + "y": 230, + "w": 22, + "h": 20 + } + }, + { + "filename": "candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 191, + "y": 245, + "w": 18, + "h": 18 + } + }, + { + "filename": "lock_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 209, + "y": 239, + "w": 19, + "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": 228, + "y": 236, + "w": 21, + "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": 249, + "y": 238, + "w": 22, + "h": 21 + } + }, + { + "filename": "tart_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 271, + "y": 238, + "w": 22, + "h": 21 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 293, + "y": 239, + "w": 22, + "h": 20 + } + }, { "filename": "tm_steel", "rotated": false, @@ -5610,197 +5694,8 @@ "h": 22 }, "frame": { - "x": 307, - "y": 128, - "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": 329, - "y": 63, - "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": 329, - "y": 85, - "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": 351, - "y": 63, - "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": 329, - "y": 107, - "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": 351, - "y": 85, - "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": 373, - "y": 63, - "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": 351, - "y": 107, - "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": 373, - "y": 85, - "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": 373, - "y": 107, + "x": 315, + "y": 239, "w": 22, "h": 22 } @@ -5820,12 +5715,180 @@ "h": 21 }, "frame": { - "x": 329, - "y": 129, + "x": 337, + "y": 239, "w": 21, "h": 21 } }, + { + "filename": "shock_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 358, + "y": 248, + "w": 23, + "h": 17 + } + }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 381, + "y": 250, + "w": 23, + "h": 17 + } + }, + { + "filename": "masterpiece_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 404, + "y": 250, + "w": 21, + "h": 18 + } + }, + { + "filename": "metal_alloy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 228, + "y": 257, + "w": 21, + "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": 249, + "y": 259, + "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": 271, + "y": 259, + "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": 293, + "y": 259, + "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": 315, + "y": 261, + "w": 22, + "h": 22 + } + }, { "filename": "shiny_stone", "rotated": false, @@ -5841,14 +5904,14 @@ "h": 21 }, "frame": { - "x": 350, - "y": 129, + "x": 337, + "y": 260, "w": 21, "h": 21 } }, { - "filename": "tera_orb", + "filename": "upgrade", "rotated": false, "trimmed": true, "sourceSize": { @@ -5857,19 +5920,61 @@ }, "spriteSourceSize": { "x": 5, - "y": 6, + "y": 7, "w": 22, - "h": 20 + "h": 19 }, "frame": { - "x": 371, - "y": 129, + "x": 358, + "y": 265, "w": 22, - "h": 20 + "h": 19 } }, { - "filename": "sitrus_berry", + "filename": "x_attack", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 380, + "y": 267, + "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": 402, + "y": 268, + "w": 22, + "h": 22 + } + }, + { + "filename": "candy_jar", "rotated": false, "trimmed": true, "sourceSize": { @@ -5878,14 +5983,98 @@ }, "spriteSourceSize": { "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 209, + "y": 261, + "w": 19, + "h": 20 + } + }, + { + "filename": "old_gateau", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 228, + "y": 276, + "w": 21, + "h": 18 + } + }, + { + "filename": "x_sp_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, "y": 5, - "w": 20, + "w": 22, "h": 22 }, "frame": { - "x": 395, - "y": 64, - "w": 20, + "x": 249, + "y": 281, + "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": 271, + "y": 281, + "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": 293, + "y": 281, + "w": 22, "h": 22 } }, @@ -5904,222 +6093,12 @@ "h": 21 }, "frame": { - "x": 395, - "y": 86, + "x": 315, + "y": 283, "w": 21, "h": 21 } }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 395, - "y": 107, - "w": 20, - "h": 20 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 270, - "y": 149, - "w": 23, - "h": 18 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 275, - "y": 167, - "w": 17, - "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": 293, - "y": 150, - "w": 23, - "h": 17 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 292, - "y": 167, - "w": 22, - "h": 19 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 316, - "y": 150, - "w": 23, - "h": 17 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 314, - "y": 167, - "w": 21, - "h": 19 - } - }, - { - "filename": "masterpiece_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 339, - "y": 150, - "w": 21, - "h": 18 - } - }, - { - "filename": "old_gateau", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 335, - "y": 168, - "w": 21, - "h": 18 - } - }, - { - "filename": "baton", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 360, - "y": 150, - "w": 18, - "h": 18 - } - }, { "filename": "sharp_meteorite", "rotated": false, @@ -6135,14 +6114,14 @@ "h": 18 }, "frame": { - "x": 356, - "y": 168, + "x": 337, + "y": 281, "w": 21, "h": 18 } }, { - "filename": "candy_jar", + "filename": "unremarkable_teacup", "rotated": false, "trimmed": true, "sourceSize": { @@ -6150,16 +6129,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 + "x": 5, + "y": 7, + "w": 21, + "h": 18 }, "frame": { - "x": 378, - "y": 149, - "w": 19, - "h": 20 + "x": 358, + "y": 284, + "w": 21, + "h": 18 } }, { @@ -6177,14 +6156,14 @@ "h": 17 }, "frame": { - "x": 377, - "y": 169, + "x": 379, + "y": 289, "w": 20, "h": 17 } }, { - "filename": "golden_egg", + "filename": "gb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6192,20 +6171,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, + "x": 6, "y": 6, - "w": 17, + "w": 20, "h": 20 }, "frame": { - "x": 393, - "y": 129, - "w": 17, + "x": 399, + "y": 290, + "w": 20, "h": 20 } }, { - "filename": "razor_fang", + "filename": "lum_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -6213,36 +6192,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 18, - "h": 20 - }, - "frame": { - "x": 410, - "y": 127, - "w": 18, - "h": 20 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, + "x": 6, "y": 7, - "w": 18, + "w": 20, "h": 19 }, "frame": { - "x": 410, - "y": 147, - "w": 18, + "x": 336, + "y": 299, + "w": 20, "h": 19 } }, @@ -6261,54 +6219,12 @@ "h": 20 }, "frame": { - "x": 397, - "y": 166, + "x": 356, + "y": 302, "w": 20, "h": 20 } }, - { - "filename": "unremarkable_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 292, - "y": 186, - "w": 21, - "h": 18 - } - }, - { - "filename": "lum_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 313, - "y": 186, - "w": 20, - "h": 19 - } - }, { "filename": "mb", "rotated": false, @@ -6324,8 +6240,8 @@ "h": 20 }, "frame": { - "x": 333, - "y": 186, + "x": 376, + "y": 306, "w": 20, "h": 20 } @@ -6345,56 +6261,14 @@ "h": 20 }, "frame": { - "x": 353, - "y": 186, + "x": 396, + "y": 310, "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": 373, - "y": 186, - "w": 20, - "h": 20 - } - }, - { - "filename": "rb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 393, - "y": 186, - "w": 20, - "h": 20 - } - }, - { - "filename": "eviolite", + "filename": "leftovers", "rotated": false, "trimmed": true, "sourceSize": { @@ -6403,19 +6277,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, + "y": 5, "w": 15, - "h": 15 + "h": 22 }, "frame": { - "x": 413, - "y": 186, + "x": 160, + "y": 294, "w": 15, - "h": 15 + "h": 22 } }, { - "filename": "prism_scale", + "filename": "metal_coat", "rotated": false, "trimmed": true, "sourceSize": { @@ -6423,20 +6297,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 + "x": 6, + "y": 5, + "w": 19, + "h": 22 }, "frame": { - "x": 413, - "y": 201, - "w": 15, - "h": 15 + "x": 160, + "y": 316, + "w": 19, + "h": 22 } }, { - "filename": "smooth_meteorite", + "filename": "miracle_seed", "rotated": false, "trimmed": true, "sourceSize": { @@ -6444,16 +6318,37 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 160, + "y": 338, + "w": 19, + "h": 19 + } + }, + { + "filename": "quick_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, "y": 6, - "w": 20, - "h": 20 + "w": 19, + "h": 21 }, "frame": { - "x": 289, - "y": 204, - "w": 20, - "h": 20 + "x": 161, + "y": 357, + "w": 19, + "h": 21 } }, { @@ -6471,14 +6366,14 @@ "h": 21 }, "frame": { - "x": 289, - "y": 224, + "x": 161, + "y": 378, "w": 19, "h": 21 } }, { - "filename": "power_herb", + "filename": "soothe_bell", "rotated": false, "trimmed": true, "sourceSize": { @@ -6486,20 +6381,83 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 + "x": 8, + "y": 5, + "w": 17, + "h": 22 }, "frame": { - "x": 309, - "y": 205, - "w": 20, - "h": 19 + "x": 164, + "y": 399, + "w": 17, + "h": 22 } }, { - "filename": "strange_ball", + "filename": "absolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 175, + "y": 257, + "w": 16, + "h": 16 + } + }, + { + "filename": "dark_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 191, + "y": 263, + "w": 18, + "h": 18 + } + }, + { + "filename": "aerodactylite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 159, + "y": 257, + "w": 16, + "h": 16 + } + }, + { + "filename": "pb_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -6513,50 +6471,8 @@ "h": 20 }, "frame": { - "x": 308, - "y": 224, - "w": 20, - "h": 20 - } - }, - { - "filename": "razor_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 329, - "y": 206, - "w": 20, - "h": 19 - } - }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 349, - "y": 206, + "x": 160, + "y": 273, "w": 20, "h": 20 } @@ -6576,12 +6492,243 @@ "h": 20 }, "frame": { - "x": 369, - "y": 206, + "x": 175, + "y": 293, "w": 19, "h": 20 } }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 179, + "y": 313, + "w": 17, + "h": 20 + } + }, + { + "filename": "razor_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 18, + "h": 20 + }, + "frame": { + "x": 179, + "y": 333, + "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": 180, + "y": 353, + "w": 20, + "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": 180, + "y": 373, + "w": 20, + "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": 181, + "y": 393, + "w": 20, + "h": 20 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 194, + "y": 281, + "w": 20, + "h": 20 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 196, + "y": 301, + "w": 18, + "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": 214, + "y": 294, + "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": 214, + "y": 313, + "w": 20, + "h": 19 + } + }, + { + "filename": "relic_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 16 + }, + "frame": { + "x": 197, + "y": 320, + "w": 17, + "h": 16 + } + }, + { + "filename": "aggronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 197, + "y": 336, + "w": 16, + "h": 16 + } + }, { "filename": "white_herb", "rotated": false, @@ -6597,8 +6744,8 @@ "h": 19 }, "frame": { - "x": 388, - "y": 206, + "x": 200, + "y": 352, "w": 20, "h": 19 } @@ -6618,33 +6765,12 @@ "h": 18 }, "frame": { - "x": 408, - "y": 216, + "x": 200, + "y": 371, "w": 20, "h": 18 } }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 328, - "y": 225, - "w": 19, - "h": 19 - } - }, { "filename": "wl_antidote", "rotated": false, @@ -6660,8 +6786,8 @@ "h": 18 }, "frame": { - "x": 347, - "y": 226, + "x": 201, + "y": 389, "w": 20, "h": 18 } @@ -6681,56 +6807,14 @@ "h": 18 }, "frame": { - "x": 367, - "y": 226, + "x": 201, + "y": 407, "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": 388, - "y": 225, - "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": 408, - "y": 234, - "w": 20, - "h": 18 - } - }, - { - "filename": "soothe_bell", + "filename": "alakazite", "rotated": false, "trimmed": true, "sourceSize": { @@ -6739,477 +6823,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 291, - "y": 245, - "w": 17, - "h": 22 - } - }, - { - "filename": "wl_custom_thief", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, "y": 8, - "w": 20, - "h": 18 + "w": 16, + "h": 16 }, "frame": { - "x": 308, - "y": 244, - "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": 328, - "y": 244, - "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": 348, - "y": 244, - "w": 20, - "h": 18 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 291, - "y": 267, - "w": 17, - "h": 20 - } - }, - { - "filename": "wl_full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 308, - "y": 262, - "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": 328, - "y": 262, - "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": 348, - "y": 262, - "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": 368, - "y": 244, - "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": 388, - "y": 243, - "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": 408, - "y": 252, - "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": 368, - "y": 262, - "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": 388, - "y": 261, - "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": 408, - "y": 270, - "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": 291, - "y": 287, - "w": 18, - "h": 18 - } - }, - { - "filename": "dark_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 291, - "y": 305, - "w": 18, - "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": 290, - "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": 290, - "y": 341, - "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": 290, - "y": 359, - "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": 291, - "y": 377, - "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": 291, - "y": 395, - "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": 309, - "y": 280, - "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": 309, - "y": 298, - "w": 20, - "h": 18 + "x": 213, + "y": 336, + "w": 16, + "h": 16 } }, { @@ -7227,8 +6849,8 @@ "h": 18 }, "frame": { - "x": 329, - "y": 280, + "x": 220, + "y": 352, "w": 18, "h": 18 } @@ -7248,8 +6870,8 @@ "h": 18 }, "frame": { - "x": 329, - "y": 298, + "x": 220, + "y": 370, "w": 18, "h": 18 } @@ -7269,8 +6891,8 @@ "h": 18 }, "frame": { - "x": 347, - "y": 280, + "x": 221, + "y": 388, "w": 18, "h": 18 } @@ -7290,54 +6912,12 @@ "h": 18 }, "frame": { - "x": 347, - "y": 298, + "x": 221, + "y": 406, "w": 18, "h": 18 } }, - { - "filename": "mystery_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 18 - }, - "frame": { - "x": 365, - "y": 280, - "w": 16, - "h": 18 - } - }, - { - "filename": "alakazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 365, - "y": 298, - "w": 16, - "h": 16 - } - }, { "filename": "altarianite", "rotated": false, @@ -7353,12 +6933,306 @@ "h": 16 }, "frame": { - "x": 310, - "y": 316, + "x": 181, + "y": 413, "w": 16, "h": 16 } }, + { + "filename": "wl_burn_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 234, + "y": 303, + "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": 254, + "y": 303, + "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": 274, + "y": 303, + "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": 294, + "y": 303, + "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": 314, + "y": 304, + "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": 234, + "y": 321, + "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": 254, + "y": 321, + "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": 274, + "y": 321, + "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": 294, + "y": 321, + "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": 314, + "y": 322, + "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": 334, + "y": 318, + "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": 354, + "y": 322, + "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": 374, + "y": 326, + "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": 394, + "y": 330, + "w": 20, + "h": 18 + } + }, { "filename": "ampharosite", "rotated": false, @@ -7374,8 +7248,8 @@ "h": 16 }, "frame": { - "x": 310, - "y": 332, + "x": 414, + "y": 330, "w": 16, "h": 16 } @@ -7395,12 +7269,96 @@ "h": 16 }, "frame": { - "x": 326, - "y": 316, + "x": 414, + "y": 346, "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": 334, + "y": 336, + "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": 354, + "y": 340, + "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": 374, + "y": 344, + "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": 394, + "y": 348, + "w": 20, + "h": 18 + } + }, { "filename": "banettite", "rotated": false, @@ -7416,12 +7374,75 @@ "h": 16 }, "frame": { - "x": 310, - "y": 348, + "x": 414, + "y": 362, "w": 16, "h": 16 } }, + { + "filename": "wl_reset_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 238, + "y": 339, + "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": 258, + "y": 339, + "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": 238, + "y": 357, + "w": 20, + "h": 18 + } + }, { "filename": "beedrillite", "rotated": false, @@ -7437,8 +7458,8 @@ "h": 16 }, "frame": { - "x": 326, - "y": 332, + "x": 278, + "y": 339, "w": 16, "h": 16 } @@ -7458,8 +7479,8 @@ "h": 16 }, "frame": { - "x": 342, - "y": 316, + "x": 258, + "y": 357, "w": 16, "h": 16 } @@ -7479,8 +7500,8 @@ "h": 16 }, "frame": { - "x": 326, - "y": 348, + "x": 294, + "y": 339, "w": 16, "h": 16 } @@ -7500,8 +7521,8 @@ "h": 16 }, "frame": { - "x": 342, - "y": 332, + "x": 310, + "y": 340, "w": 16, "h": 16 } @@ -7521,8 +7542,8 @@ "h": 16 }, "frame": { - "x": 342, - "y": 348, + "x": 274, + "y": 357, "w": 16, "h": 16 } @@ -7542,8 +7563,8 @@ "h": 16 }, "frame": { - "x": 381, - "y": 280, + "x": 290, + "y": 355, "w": 16, "h": 16 } @@ -7563,8 +7584,8 @@ "h": 16 }, "frame": { - "x": 381, - "y": 296, + "x": 306, + "y": 356, "w": 16, "h": 16 } @@ -7584,8 +7605,8 @@ "h": 16 }, "frame": { - "x": 358, - "y": 316, + "x": 322, + "y": 356, "w": 16, "h": 16 } @@ -7605,8 +7626,8 @@ "h": 16 }, "frame": { - "x": 358, - "y": 332, + "x": 338, + "y": 354, "w": 16, "h": 16 } @@ -7626,8 +7647,8 @@ "h": 16 }, "frame": { - "x": 358, - "y": 348, + "x": 354, + "y": 358, "w": 16, "h": 16 } @@ -7647,8 +7668,8 @@ "h": 16 }, "frame": { - "x": 397, - "y": 288, + "x": 370, + "y": 362, "w": 16, "h": 16 } @@ -7668,8 +7689,8 @@ "h": 16 }, "frame": { - "x": 397, - "y": 304, + "x": 338, + "y": 370, "w": 16, "h": 16 } @@ -7689,8 +7710,8 @@ "h": 16 }, "frame": { - "x": 381, - "y": 312, + "x": 354, + "y": 374, "w": 16, "h": 16 } @@ -7710,8 +7731,8 @@ "h": 16 }, "frame": { - "x": 374, - "y": 328, + "x": 370, + "y": 378, "w": 16, "h": 16 } @@ -7731,8 +7752,8 @@ "h": 16 }, "frame": { - "x": 374, - "y": 344, + "x": 386, + "y": 366, "w": 16, "h": 16 } @@ -7752,8 +7773,8 @@ "h": 16 }, "frame": { - "x": 397, - "y": 320, + "x": 386, + "y": 382, "w": 16, "h": 16 } @@ -7773,8 +7794,8 @@ "h": 16 }, "frame": { - "x": 390, - "y": 336, + "x": 402, + "y": 378, "w": 16, "h": 16 } @@ -7794,8 +7815,8 @@ "h": 16 }, "frame": { - "x": 390, - "y": 352, + "x": 402, + "y": 394, "w": 16, "h": 16 } @@ -7815,8 +7836,8 @@ "h": 16 }, "frame": { - "x": 374, - "y": 360, + "x": 290, + "y": 371, "w": 16, "h": 16 } @@ -7836,8 +7857,8 @@ "h": 16 }, "frame": { - "x": 390, - "y": 368, + "x": 306, + "y": 372, "w": 16, "h": 16 } @@ -7857,8 +7878,8 @@ "h": 16 }, "frame": { - "x": 406, - "y": 336, + "x": 322, + "y": 372, "w": 16, "h": 16 } @@ -7878,8 +7899,8 @@ "h": 16 }, "frame": { - "x": 406, - "y": 352, + "x": 338, + "y": 386, "w": 16, "h": 16 } @@ -7899,8 +7920,8 @@ "h": 16 }, "frame": { - "x": 406, - "y": 368, + "x": 354, + "y": 390, "w": 16, "h": 16 } @@ -7920,8 +7941,8 @@ "h": 16 }, "frame": { - "x": 311, - "y": 364, + "x": 370, + "y": 394, "w": 16, "h": 16 } @@ -7941,8 +7962,8 @@ "h": 16 }, "frame": { - "x": 327, - "y": 364, + "x": 386, + "y": 398, "w": 16, "h": 16 } @@ -7962,8 +7983,8 @@ "h": 16 }, "frame": { - "x": 311, - "y": 380, + "x": 239, + "y": 414, "w": 16, "h": 16 } @@ -7983,8 +8004,8 @@ "h": 16 }, "frame": { - "x": 343, - "y": 364, + "x": 255, + "y": 414, "w": 16, "h": 16 } @@ -8004,8 +8025,8 @@ "h": 16 }, "frame": { - "x": 311, - "y": 396, + "x": 271, + "y": 414, "w": 16, "h": 16 } @@ -8025,8 +8046,8 @@ "h": 16 }, "frame": { - "x": 311, - "y": 412, + "x": 287, + "y": 414, "w": 16, "h": 16 } @@ -8046,8 +8067,8 @@ "h": 16 }, "frame": { - "x": 327, - "y": 380, + "x": 303, + "y": 414, "w": 16, "h": 16 } @@ -8067,8 +8088,8 @@ "h": 16 }, "frame": { - "x": 327, - "y": 396, + "x": 319, + "y": 414, "w": 16, "h": 16 } @@ -8088,8 +8109,8 @@ "h": 16 }, "frame": { - "x": 327, - "y": 412, + "x": 335, + "y": 414, "w": 16, "h": 16 } @@ -8109,8 +8130,8 @@ "h": 16 }, "frame": { - "x": 343, - "y": 380, + "x": 351, + "y": 414, "w": 16, "h": 16 } @@ -8130,8 +8151,8 @@ "h": 16 }, "frame": { - "x": 343, - "y": 396, + "x": 367, + "y": 414, "w": 16, "h": 16 } @@ -8151,8 +8172,8 @@ "h": 16 }, "frame": { - "x": 343, - "y": 412, + "x": 383, + "y": 414, "w": 16, "h": 16 } @@ -8172,8 +8193,8 @@ "h": 16 }, "frame": { - "x": 359, - "y": 376, + "x": 399, + "y": 414, "w": 16, "h": 16 } @@ -8193,8 +8214,8 @@ "h": 16 }, "frame": { - "x": 359, - "y": 392, + "x": 239, + "y": 375, "w": 16, "h": 16 } @@ -8214,8 +8235,8 @@ "h": 16 }, "frame": { - "x": 359, - "y": 408, + "x": 239, + "y": 391, "w": 16, "h": 16 } @@ -8235,8 +8256,8 @@ "h": 16 }, "frame": { - "x": 375, - "y": 384, + "x": 255, + "y": 375, "w": 16, "h": 16 } @@ -8256,8 +8277,8 @@ "h": 16 }, "frame": { - "x": 375, - "y": 400, + "x": 255, + "y": 391, "w": 16, "h": 16 } @@ -8277,8 +8298,8 @@ "h": 16 }, "frame": { - "x": 391, - "y": 384, + "x": 271, + "y": 373, "w": 16, "h": 16 } @@ -8298,8 +8319,8 @@ "h": 16 }, "frame": { - "x": 391, - "y": 400, + "x": 271, + "y": 389, "w": 16, "h": 16 } @@ -8310,6 +8331,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ae06b70c6800597c7ac11beefc1d8aad:b9f30512e12737247c8cb2691252baac:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:d4a093d6c2afb1a689f792d07fc18264:8cc8502bdaaf610b661a1589e1a22f99:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index a031b00ceb0..932c9b88874 100644 Binary files a/public/images/items.png and b/public/images/items.png differ diff --git a/public/images/items/golden_net.png b/public/images/items/golden_net.png new file mode 100644 index 00000000000..5fea1ee7dba Binary files /dev/null and b/public/images/items/golden_net.png differ diff --git a/public/images/trainer/bug_type_superfan.json b/public/images/trainer/bug_type_superfan.json new file mode 100644 index 00000000000..74dca3583d5 --- /dev/null +++ b/public/images/trainer/bug_type_superfan.json @@ -0,0 +1,1469 @@ +{ + "textures": [ + { + "image": "bug_type_superfan.png", + "format": "RGBA8888", + "size": { + "w": 224, + "h": 224 + }, + "scale": 1, + "frames": [ + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 52, + "h": 85 + }, + "frame": { + "x": 1, + "y": 1, + "w": 52, + "h": 85 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 52, + "h": 85 + }, + "frame": { + "x": 1, + "y": 1, + "w": 52, + "h": 85 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 60, + "h": 75 + }, + "frame": { + "x": 55, + "y": 1, + "w": 60, + "h": 75 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 6, + "y": 18, + "w": 65, + "h": 68 + }, + "frame": { + "x": 117, + "y": 1, + "w": 65, + "h": 68 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 46, + "h": 86 + }, + "frame": { + "x": 1, + "y": 88, + "w": 46, + "h": 86 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 46, + "h": 86 + }, + "frame": { + "x": 1, + "y": 88, + "w": 46, + "h": 86 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 46, + "h": 86 + }, + "frame": { + "x": 1, + "y": 88, + "w": 46, + "h": 86 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 46, + "h": 86 + }, + "frame": { + "x": 1, + "y": 88, + "w": 46, + "h": 86 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 46, + "h": 86 + }, + "frame": { + "x": 1, + "y": 88, + "w": 46, + "h": 86 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 46, + "h": 86 + }, + "frame": { + "x": 1, + "y": 88, + "w": 46, + "h": 86 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 46, + "h": 86 + }, + "frame": { + "x": 1, + "y": 88, + "w": 46, + "h": 86 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 19, + "w": 66, + "h": 67 + }, + "frame": { + "x": 49, + "y": 88, + "w": 66, + "h": 67 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 19, + "w": 66, + "h": 67 + }, + "frame": { + "x": 49, + "y": 88, + "w": 66, + "h": 67 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 49, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 49, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 8, + "y": 20, + "w": 65, + "h": 66 + }, + "frame": { + "x": 116, + "y": 157, + "w": 65, + "h": 66 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 7, + "y": 19, + "w": 65, + "h": 67 + }, + "frame": { + "x": 117, + "y": 71, + "w": 65, + "h": 67 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 80, + "h": 86 + }, + "spriteSourceSize": { + "x": 7, + "y": 19, + "w": 65, + "h": 67 + }, + "frame": { + "x": 117, + "y": 71, + "w": 65, + "h": 67 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:442c13442d70348845d7f5fcdfc121b3:3b8402aa64ee8990e64c7f03ffffbc55:568199339797fd79d11ae8d741953c1c$" + } +} diff --git a/public/images/trainer/bug_type_superfan.png b/public/images/trainer/bug_type_superfan.png new file mode 100644 index 00000000000..59316fe6ed8 Binary files /dev/null and b/public/images/trainer/bug_type_superfan.png differ diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 50fcad4f417..17c18c3b2fe 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -13,7 +13,18 @@ import { Arena, ArenaBase } from "./field/arena"; import { GameData } from "./system/game-data"; import { addTextObject, getTextColor, TextStyle } from "./ui/text"; import { allMoves } from "./data/move"; -import { ModifierPoolType, getDefaultModifierTypeForTier, getEnemyModifierTypesForWave, getLuckString, getLuckTextTint, getModifierPoolForType, getModifierType, getPartyLuckValue, modifierTypes } from "./modifier/modifier-type"; +import { + ModifierPoolType, + getDefaultModifierTypeForTier, + getEnemyModifierTypesForWave, + getLuckString, + getLuckTextTint, + getModifierPoolForType, + getModifierType, + getPartyLuckValue, + modifierTypes, + PokemonHeldItemModifierType +} from "./modifier/modifier-type"; import AbilityBar from "./ui/ability-bar"; import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, ChangeMovePriorityAbAttr, PostBattleInitAbAttr, applyAbAttrs, applyPostBattleInitAbAttrs } from "./data/ability"; import { allAbilities } from "./data/ability"; @@ -38,7 +49,7 @@ import PokemonData from "./system/pokemon-data"; import { Nature } from "./data/nature"; import { SpeciesFormChangeManualTrigger, SpeciesFormChangeTimeOfDayTrigger, SpeciesFormChangeTrigger, pokemonFormChanges, FormChangeItem, SpeciesFormChange } from "./data/pokemon-forms"; import { FormChangePhase } from "./phases/form-change-phase"; -import { getTypeRgb } from "./data/type"; +import { getTypeRgb, Type } from "./data/type"; import PokemonSpriteSparkleHandler from "./field/pokemon-sprite-sparkle-handler"; import CharSprite from "./ui/char-sprite"; import DamageNumberHandler from "./field/damage-number-handler"; @@ -91,6 +102,8 @@ import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -1102,6 +1115,11 @@ export default class BattleScene extends SceneBase { const playerField = this.getPlayerField(); + const mod = generateModifierType(this, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.BUG]); + if (mod) { + applyModifierTypeToPlayerPokemon(this, this.getParty()[0], mod as PokemonHeldItemModifierType); + } + if (this.gameMode.isFixedBattle(newWaveIndex) && trainerData === undefined) { battleConfig = this.gameMode.getFixedBattle(newWaveIndex); newDouble = battleConfig.double; 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 003dcf0cde1..c6de3130ad5 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -19,7 +19,7 @@ const namespace = "mysteryEncounter:aTrainersTest"; /** * A Trainer's Test encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/115 | GitHub Issue #115} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3816 | GitHub Issue #3816} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const ATrainersTestEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 29e84355ace..dc554c440f7 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -29,7 +29,7 @@ const namespace = "mysteryEncounter:absoluteAvarice"; /** * Absolute Avarice encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/58 | GitHub Issue #58} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3805 | GitHub Issue #3805} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const AbsoluteAvariceEncounter: MysteryEncounter = @@ -249,8 +249,10 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = const givePartyPokemonReviverSeeds = () => { const party = scene.getParty(); party.forEach(p => { - const seedModifier = revSeed.newModifier(p); - scene.addModifier(seedModifier, false, false, false, true); + if (revSeed) { + const seedModifier = revSeed.newModifier(p); + scene.addModifier(seedModifier, false, false, false, true); + } }); queueEncounterMessage(scene, `${namespace}.option.1.food_stash`); }; @@ -349,7 +351,7 @@ function doGreedentSpriteSteal(scene: BattleScene) { const greedentSprites = scene.currentBattle.mysteryEncounter.introVisuals?.getSpriteAtIndex(1); - scene.playSound("Follow Me"); + scene.playSound("battle-anims/Follow Me"); scene.tweens.chain({ targets: greedentSprites, tweens: [ @@ -431,11 +433,11 @@ function doGreedentEatBerries(scene: BattleScene) { y: "-=8", loop: 5, onStart: () => { - scene.playSound("PRSFX- Bug Bite"); + scene.playSound("battle_anims/PRSFX- Bug Bite"); }, onLoop: () => { if (index % 2 === 0) { - scene.playSound("PRSFX- Bug Bite"); + scene.playSound("battle_anims/PRSFX- Bug Bite"); } index++; } diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index 19bc4d98513..94c004b2617 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -18,7 +18,7 @@ const namespace = "mysteryEncounter:offerYouCantRefuse"; /** * An Offer You Can't Refuse encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/72 | GitHub Issue #72} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3808 | GitHub Issue #3808} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 7a464a5fd55..68fd7b90f9c 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -37,7 +37,7 @@ const namespace = "mysteryEncounter:berriesAbound"; /** * Berries Abound encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/24 | GitHub Issue #24} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3810 | GitHub Issue #3810} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const BerriesAboundEncounter: MysteryEncounter = @@ -131,7 +131,7 @@ export const BerriesAboundEncounter: MysteryEncounter = const doBerryRewards = async () => { const berryText = numBerries + " " + i18next.t(`${namespace}.berries`); - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); queueEncounterMessage(scene, i18next.t("battle:rewardGain", { modifierName: berryText })); // Generate a random berry and give it to the first Pokemon with room for it @@ -143,7 +143,10 @@ export const BerriesAboundEncounter: MysteryEncounter = const shopOptions: ModifierTypeOption[] = []; for (let i = 0; i < 5; i++) { // Generate shop berries - shopOptions.push(generateModifierTypeOption(scene, modifierTypes.BERRY)); + const mod = generateModifierTypeOption(scene, modifierTypes.BERRY); + if (mod) { + shopOptions.push(mod); + } } setEncounterRewards(scene, { guaranteedModifierTypeOptions: shopOptions, fillRemaining: false }, undefined, doBerryRewards); @@ -168,7 +171,10 @@ export const BerriesAboundEncounter: MysteryEncounter = const shopOptions: ModifierTypeOption[] = []; for (let i = 0; i < 5; i++) { // Generate shop berries - shopOptions.push(generateModifierTypeOption(scene, modifierTypes.BERRY)); + const mod = generateModifierTypeOption(scene, modifierTypes.BERRY); + if (mod) { + shopOptions.push(mod); + } } if (speedDiff < 1) { @@ -176,7 +182,7 @@ export const BerriesAboundEncounter: MysteryEncounter = const doBerryRewards = async () => { const berryText = numBerries + " " + i18next.t(`${namespace}.berries`); - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); queueEncounterMessage(scene, i18next.t("battle:rewardGain", { modifierName: berryText })); // Generate a random berry and give it to the first Pokemon with room for it @@ -202,7 +208,7 @@ export const BerriesAboundEncounter: MysteryEncounter = const doFasterBerryRewards = async () => { const berryText = numBerriesGrabbed + " " + i18next.t(`${namespace}.berries`); - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); queueEncounterMessage(scene, i18next.t("battle:rewardGain", { modifierName: berryText })); // Generate a random berry and give it to the first Pokemon with room for it (trying to give to fastest first) diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts new file mode 100644 index 00000000000..9042ea4b8de --- /dev/null +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -0,0 +1,654 @@ +import { + EnemyPartyConfig, + generateModifierTypeOption, + initBattleWithEnemyConfig, + leaveEncounterWithoutBattle, + selectOptionThenPokemon, + selectPokemonForOption, + setEncounterRewards, + transitionMysteryEncounterIntroVisuals, +} from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { + trainerConfigs, + TrainerPartyCompoundTemplate, + TrainerPartyTemplate, + TrainerSlot, +} from "#app/data/trainer-config"; +import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import { PartyMemberStrength } from "#enums/party-member-strength"; +import BattleScene from "#app/battle-scene"; +import * as Utils from "#app/utils"; +import { isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; +import MysteryEncounter, { MysteryEncounterBuilder } from "../mystery-encounter"; +import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; +import { TrainerType } from "#enums/trainer-type"; +import { Species } from "#enums/species"; +import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; +import { LearnMovePhase } from "#app/phases/learn-move-phase"; +import { Moves } from "#enums/moves"; +import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; +import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; +import { + AttackTypeBoosterHeldItemTypeRequirement, + CombinationPokemonRequirement, + HeldItemRequirement, + TypeRequirement +} from "#app/data/mystery-encounters/mystery-encounter-requirements"; +import { Type } from "#app/data/type"; +import { AttackTypeBoosterModifierType, ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; +import { + AttackTypeBoosterModifier, + BypassSpeedChanceModifier, + ContactHeldItemTransferChanceModifier, + PokemonHeldItemModifier +} from "#app/modifier/modifier"; +import i18next from "i18next"; +import MoveInfoOverlay from "#app/ui/move-info-overlay"; +import { allMoves } from "#app/data/move"; +import { ModifierTier } from "#app/modifier/modifier-tier"; + +/** the i18n namespace for the encounter */ +const namespace = "mysteryEncounter:bugTypeSuperfan"; + +const POOL_1_POKEMON = [ + Species.PARASECT, + Species.VENOMOTH, + Species.LEDIAN, + Species.ARIADOS, + Species.YANMA, + Species.BEAUTIFLY, + Species.DUSTOX, + Species.MASQUERAIN, + Species.NINJASK, + Species.VOLBEAT, + Species.ILLUMISE, + Species.ANORITH, + Species.KRICKETUNE, + Species.WORMADAM, + Species.MOTHIM, + Species.SKORUPI, + Species.JOLTIK, + Species.LARVESTA, + Species.VIVILLON, + Species.CHARJABUG, + Species.RIBOMBEE, + Species.SPIDOPS, + Species.LOKIX +]; + +const POOL_2_POKEMON = [ + Species.SCYTHER, + Species.PINSIR, + Species.HERACROSS, + Species.FORRETRESS, + Species.SCIZOR, + Species.SHUCKLE, + Species.SHEDINJA, + Species.ARMALDO, + Species.VESPIQUEN, + Species.DRAPION, + Species.YANMEGA, + Species.LEAVANNY, + Species.SCOLIPEDE, + Species.CRUSTLE, + Species.ESCAVALIER, + Species.ACCELGOR, + Species.GALVANTULA, + Species.VIKAVOLT, + Species.ARAQUANID, + Species.ORBEETLE, + Species.CENTISKORCH, + Species.FROSMOTH, + Species.KLEAVOR, +]; + +const POOL_3_POKEMON: { species: Species, formIndex?: number }[] = [ + { + species: Species.PINSIR, + formIndex: 1 + }, + { + species: Species.SCIZOR, + formIndex: 1 + }, + { + species: Species.HERACROSS, + formIndex: 1 + }, + { + species: Species.ORBEETLE, + formIndex: 1 + }, + { + species: Species.CENTISKORCH, + formIndex: 1 + }, + { + species: Species.DURANT, + }, + { + species: Species.VOLCARONA, + }, + { + species: Species.GOLISOPOD, + }, +]; + +const POOL_4_POKEMON = [ + Species.GENESECT, + Species.SLITHER_WING, + Species.BUZZWOLE, + Species.PHEROMOSA +]; + +const PHYSICAL_TUTOR_MOVES = [ + Moves.MEGAHORN, + Moves.X_SCISSOR, + Moves.ATTACK_ORDER, + Moves.PIN_MISSILE, + Moves.FIRST_IMPRESSION +]; + +const SPECIAL_TUTOR_MOVES = [ + Moves.SILVER_WIND, + Moves.BUG_BUZZ, + Moves.SIGNAL_BEAM, + Moves.POLLEN_PUFF +]; + +const STATUS_TUTOR_MOVES = [ + Moves.STRING_SHOT, + Moves.STICKY_WEB, + Moves.SILK_TRAP, + Moves.RAGE_POWDER, + Moves.HEAL_ORDER +]; + +const MISC_TUTOR_MOVES = [ + Moves.BUG_BITE, + Moves.LEECH_LIFE, + Moves.DEFEND_ORDER, + Moves.QUIVER_DANCE, + Moves.TAIL_GLOW, + Moves.INFESTATION, + Moves.U_TURN +]; + +/** + * Bug Type Superfan encounter. + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3810 | GitHub Issue #3810} + * @see For biome requirements check {@linkcode mysteryEncountersByBiome} + */ +export const BugTypeSuperfanEncounter: MysteryEncounter = + MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.BUG_TYPE_SUPERFAN) + .withEncounterTier(MysteryEncounterTier.GREAT) + .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( + // Must have at least 1 Bug type on team, OR have a bug item somewhere on the team + new HeldItemRequirement(["BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier"], 1), + new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1), + new TypeRequirement(Type.BUG, false, 1) + )) + .withSceneWaveRangeRequirement(10, 180) // waves 10 to 180 + .withIntroSpriteConfigs([]) // These are set in onInit() + .withAutoHideIntroVisuals(false) + .withIntroDialogue([ + { + text: `${namespace}.intro`, + }, + { + speaker: `${namespace}.speaker`, + text: `${namespace}.intro_dialogue`, + }, + ]) + .withOnInit((scene: BattleScene) => { + const encounter = scene.currentBattle.mysteryEncounter; + // Calculates what trainers are available for battle in the encounter + + // Bug type superfan trainer config + const config = getTrainerConfigForWave(scene.currentBattle.waveIndex); + const spriteKey = config.getSpriteKey(); + encounter.enemyPartyConfigs.push({ + trainerConfig: config, + female: true, + }); + + encounter.spriteConfigs = [ + { + spriteKey: spriteKey, + fileRoot: "trainer", + hasShadow: true, + }, + ]; + + return true; + }) + .withTitle(`${namespace}.title`) + .withDescription(`${namespace}.description`) + .withQuery(`${namespace}.query`) + .withSimpleOption( + { + buttonLabel: `${namespace}.option.1.label`, + buttonTooltip: `${namespace}.option.1.tooltip`, + selected: [ + { + speaker: `${namespace}.speaker`, + text: `${namespace}.option.1.selected`, + }, + ], + secondOptionPrompt: `${namespace}.option.3.select_prompt`, + }, + async (scene: BattleScene) => { + // Select battle the bug trainer + const encounter = scene.currentBattle.mysteryEncounter; + const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; + + // Init the moves available for tutor + const moveTutorOptions: PokemonMove[] = []; + moveTutorOptions.push(new PokemonMove(PHYSICAL_TUTOR_MOVES[randSeedInt(PHYSICAL_TUTOR_MOVES.length)])); + moveTutorOptions.push(new PokemonMove(SPECIAL_TUTOR_MOVES[randSeedInt(SPECIAL_TUTOR_MOVES.length)])); + moveTutorOptions.push(new PokemonMove(STATUS_TUTOR_MOVES[randSeedInt(STATUS_TUTOR_MOVES.length)])); + moveTutorOptions.push(new PokemonMove(MISC_TUTOR_MOVES[randSeedInt(MISC_TUTOR_MOVES.length)])); + encounter.misc = { + moveTutorOptions + }; + + // Assigns callback that teaches move before continuing to rewards + encounter.onRewards = doBugTypeMoveTutor; + + setEncounterRewards(scene, { fillRemaining: true }); + await transitionMysteryEncounterIntroVisuals(scene, true, true); + await initBattleWithEnemyConfig(scene, config); + } + ) + .withOption(MysteryEncounterOptionBuilder + .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_DEFAULT) + .withPrimaryPokemonRequirement(new TypeRequirement(Type.BUG, false, 1)) // Must have 1 Bug type on team + .withDialogue({ + buttonLabel: `${namespace}.option.2.label`, + buttonTooltip: `${namespace}.option.2.tooltip`, + disabledButtonTooltip: `${namespace}.option.2.disabled_tooltip` + }) + .withPreOptionPhase(async (scene: BattleScene) => { + // Player shows off their bug types + const encounter = scene.currentBattle.mysteryEncounter; + + // Player gets different rewards depending on the number of bug types they have + const numBugTypes = scene.getParty().filter(p => p.isOfType(Type.BUG, true)).length; + encounter.setDialogueToken("numBugTypes", numBugTypes.toString()); + + if (numBugTypes < 2) { + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.SUPER_LURE, modifierTypes.GREAT_BALL], fillRemaining: false }); + encounter.selectedOption!.dialogue!.selected = [ + { + speaker: `${namespace}.speaker`, + text: `${namespace}.option.2.selected_0_to_1`, + }, + ]; + } else if (numBugTypes < 4) { + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.QUICK_CLAW, modifierTypes.MAX_LURE, modifierTypes.ULTRA_BALL], fillRemaining: false }); + encounter.selectedOption!.dialogue!.selected = [ + { + speaker: `${namespace}.speaker`, + text: `${namespace}.option.2.selected_2_to_3`, + }, + ]; + } else if (numBugTypes < 6) { + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.GRIP_CLAW, modifierTypes.MAX_LURE, modifierTypes.ROGUE_BALL], fillRemaining: false }); + encounter.selectedOption!.dialogue!.selected = [ + { + speaker: `${namespace}.speaker`, + text: `${namespace}.option.2.selected_4_to_5`, + }, + ]; + } else { + // If player has any evolution/form change items that are valid for their party, will spawn one of those items in addition to a Master Ball + const modifierOptions: ModifierTypeOption[] = [generateModifierTypeOption(scene, modifierTypes.MASTER_BALL)!, generateModifierTypeOption(scene, modifierTypes.MAX_LURE)!]; + const specialOptions: ModifierTypeOption[] = []; + + const nonRareEvolutionModifier = generateModifierTypeOption(scene, modifierTypes.EVOLUTION_ITEM); + if (nonRareEvolutionModifier) { + specialOptions.push(nonRareEvolutionModifier); + } + const rareEvolutionModifier = generateModifierTypeOption(scene, modifierTypes.RARE_EVOLUTION_ITEM); + if (rareEvolutionModifier) { + specialOptions.push(rareEvolutionModifier); + } + const formChangeModifier = generateModifierTypeOption(scene, modifierTypes.FORM_CHANGE_ITEM); + if (formChangeModifier) { + specialOptions.push(formChangeModifier); + } + if (specialOptions.length > 0) { + modifierOptions.push(specialOptions[randSeedInt(specialOptions.length)]); + } + + setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifierOptions, fillRemaining: false }); + encounter.selectedOption!.dialogue!.selected = [ + { + speaker: `${namespace}.speaker`, + text: `${namespace}.option.2.selected_6`, + }, + ]; + } + }) + .withOptionPhase(async (scene: BattleScene) => { + // Player shows off their bug types + leaveEncounterWithoutBattle(scene); + }) + .build()) + .withOption(MysteryEncounterOptionBuilder + .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_DEFAULT) + .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( + // Meets one or both of the below reqs + new HeldItemRequirement(["BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier"], 1), + new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1) + )) + .withDialogue({ + buttonLabel: `${namespace}.option.3.label`, + buttonTooltip: `${namespace}.option.3.tooltip`, + disabledButtonTooltip: `${namespace}.option.3.disabled_tooltip`, + selected: [ + { + text: `${namespace}.option.3.selected`, + }, + { + speaker: `${namespace}.speaker`, + text: `${namespace}.option.3.selected_dialogue`, + }, + ], + secondOptionPrompt: `${namespace}.option.3.select_prompt`, + }) + .withPreOptionPhase(async (scene: BattleScene): Promise => { + const encounter = scene.currentBattle.mysteryEncounter; + const onPokemonSelected = (pokemon: PlayerPokemon) => { + // Get Pokemon held items and filter for valid ones + const validItems = pokemon.getHeldItems().filter(item => { + return item instanceof BypassSpeedChanceModifier || + item instanceof ContactHeldItemTransferChanceModifier || + (item instanceof AttackTypeBoosterModifier && (item.type as AttackTypeBoosterModifierType).moveType === Type.BUG); + }); + + return validItems.map((modifier: PokemonHeldItemModifier) => { + const option: OptionSelectItem = { + label: modifier.type.name, + handler: () => { + // Pokemon and item selected + encounter.setDialogueToken("selectedItem", modifier.type.name); + encounter.misc = { + chosenPokemon: pokemon, + chosenModifier: modifier, + }; + return true; + }, + }; + return option; + }); + }; + + const selectableFilter = (pokemon: Pokemon) => { + // If pokemon has valid item, it can be selected + const hasValidItem = pokemon.getHeldItems().some(item => { + return item instanceof BypassSpeedChanceModifier || + item instanceof ContactHeldItemTransferChanceModifier || + (item instanceof AttackTypeBoosterModifier && (item.type as AttackTypeBoosterModifierType).moveType === Type.BUG); + }); + if (!hasValidItem) { + return getEncounterText(scene, `${namespace}.option.3.invalid_selection`) ?? null; + } + + return null; + }; + + return selectPokemonForOption(scene, onPokemonSelected, undefined, selectableFilter); + }) + .withOptionPhase(async (scene: BattleScene) => { + const encounter = scene.currentBattle.mysteryEncounter; + const modifier = encounter.misc.chosenModifier; + + // Remove the modifier if its stacks go to 0 + modifier.stackCount -= 1; + if (modifier.stackCount === 0) { + scene.removeModifier(modifier); + } + scene.updateModifiers(true, true); + + const bugNet = generateModifierTypeOption(scene, modifierTypes.MYSTERY_ENCOUNTER_GOLDEN_BUG_NET)!; + bugNet.type.tier = ModifierTier.MASTER; + + setEncounterRewards(scene, { guaranteedModifierTypeOptions: [bugNet], guaranteedModifierTypeFuncs: [modifierTypes.REVIVER_SEED], fillRemaining: false }); + leaveEncounterWithoutBattle(scene, true); + }) + .build()) + .withOutroDialogue([ + { + text: `${namespace}.outro`, + }, + ]) + .build(); + +function getTrainerConfigForWave(waveIndex: number) { + // Bug type superfan trainer config + const config = trainerConfigs[TrainerType.BUG_TYPE_SUPERFAN].copy(); + config.name = i18next.t("trainerNames:bug_type_superfan"); + + const pool3Copy = POOL_3_POKEMON.slice(0); + randSeedShuffle(pool3Copy); + const pool3Mon = pool3Copy.pop()!; + + if (waveIndex < 30) { + // Use default template (2 AVG) + config + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true)); + } else if (waveIndex < 50) { + config + .setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true)); + } else if (waveIndex < 70) { + config + .setPartyTemplates(new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)); + } else if (waveIndex < 100) { + config + .setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(4, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)); + } else if (waveIndex < 120) { + config + .setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + if (!isNullOrUndefined(pool3Mon.formIndex)) { + p.formIndex = pool3Mon.formIndex!; + p.generateAndPopulateMoveset(); + p.generateName(); + } + })); + } else if (waveIndex < 140) { + randSeedShuffle(pool3Copy); + const pool3Mon2 = pool3Copy.pop()!; + config + .setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + if (!isNullOrUndefined(pool3Mon.formIndex)) { + p.formIndex = pool3Mon.formIndex!; + p.generateAndPopulateMoveset(); + p.generateName(); + } + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([pool3Mon2.species], TrainerSlot.TRAINER, true, p => { + if (!isNullOrUndefined(pool3Mon2.formIndex)) { + p.formIndex = pool3Mon2.formIndex!; + p.generateAndPopulateMoveset(); + p.generateName(); + } + })); + } else if (waveIndex < 160) { + config + .setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG))) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + if (!isNullOrUndefined(pool3Mon.formIndex)) { + p.formIndex = pool3Mon.formIndex!; + p.generateAndPopulateMoveset(); + p.generateName(); + } + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc(POOL_4_POKEMON, TrainerSlot.TRAINER, true)); + } else { + config + .setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG))) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BUTTERFREE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + if (!isNullOrUndefined(pool3Mon.formIndex)) { + p.formIndex = pool3Mon.formIndex!; + p.generateAndPopulateMoveset(); + p.generateName(); + } + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc(POOL_4_POKEMON, TrainerSlot.TRAINER, true)); + } + + return config; +} + +function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSlot = TrainerSlot.TRAINER, ignoreEvolution: boolean = false, postProcess?: (enemyPokemon: EnemyPokemon) => void) { + return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { + let species = Utils.randSeedItem(speciesPool); + if (!ignoreEvolution) { + species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength); + } + return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, undefined, postProcess); + }; +} + +function doBugTypeMoveTutor(scene: BattleScene): Promise { + return new Promise(async resolve => { + const moveOptions = scene.currentBattle.mysteryEncounter.misc.moveTutorOptions; + await showEncounterDialogue(scene, `${namespace}.battle_won`, `${namespace}.speaker`); + + const overlayScale = 1; + const moveInfoOverlay = new MoveInfoOverlay(scene, { + delayVisibility: false, + scale: overlayScale, + onSide: true, + right: true, + x: 1, + y: -MoveInfoOverlay.getHeight(overlayScale, true) - 1, + width: (scene.game.canvas.width / 6) - 2, + }); + scene.ui.add(moveInfoOverlay); + + const optionSelectItems = moveOptions.map((move: PokemonMove) => { + const option: OptionSelectItem = { + label: move.getName(), + handler: () => { + moveInfoOverlay.active = false; + moveInfoOverlay.setVisible(false); + return true; + }, + onHover: () => { + moveInfoOverlay.active = true; + moveInfoOverlay.show(allMoves[move.moveId]); + }, + }; + return option; + }); + + const onHoverOverCancel = () => { + moveInfoOverlay.active = false; + moveInfoOverlay.setVisible(false); + }; + + const result = await selectOptionThenPokemon(scene, optionSelectItems, `${namespace}.option.3.select_prompt`, undefined, onHoverOverCancel); + // let forceExit = !!result; + if (!result) { + moveInfoOverlay.active = false; + moveInfoOverlay.setVisible(false); + } + + // TODO: add menu to confirm player doesn't want to teach a move + // while (!result && !forceExit) { + // // Didn't teach a move, ask the player to confirm they don't want to teach a move + // await showEncounterDialogue(scene, `${namespace}.confirm_no_teach`, `${namespace}.speaker`); + // const confirm = await new Promise(confirmResolve => { + // scene.ui.setMode(Mode.CONFIRM, () => confirmResolve(true), () => confirmResolve(false)); + // }); + // scene.ui.clearText(); + // await scene.ui.setMode(Mode.MESSAGE); + // if (confirm) { + // // No teach, break out of loop + // forceExit = true; + // } else { + // // Re-show learn menu + // result = await selectOptionThenPokemon(scene, optionSelectItems, `${namespace}.option.3.select_prompt`, undefined, onHoverOverCancel); + // if (!result) { + // moveInfoOverlay.active = false; + // moveInfoOverlay.setVisible(false); + // } + // } + // } + + // Option select complete, handle if they are learning a move + if (result && result.selectedOptionIndex < moveOptions.length) { + scene.unshiftPhase(new LearnMovePhase(scene, result.selectedPokemonIndex, moveOptions[result.selectedOptionIndex].moveId)); + } + + // Complete battle and go to rewards + resolve(); + }); +} diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index e8a7a238743..4ea978c8c4c 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -53,7 +53,7 @@ const RANDOM_ABILITY_POOL = [ /** * Clowning Around encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/69 | GitHub Issue #69} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3807 | GitHub Issue #3807} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const ClowningAroundEncounter: MysteryEncounter = @@ -334,13 +334,13 @@ export const ClowningAroundEncounter: MysteryEncounter = randSeedShuffle(priorityTypes); } - let newTypes; + let newTypes: Type[]; if (!originalTypes || originalTypes.length < 1) { - newTypes = priorityTypes?.length > 0 ? [priorityTypes.pop()] : [(randSeedInt(18) as Type)]; + newTypes = priorityTypes && priorityTypes.length > 0 ? [priorityTypes.pop()!] : [(randSeedInt(18) as Type)]; } else { newTypes = originalTypes.map(m => { - if (priorityTypes?.length > 0) { - const ret = priorityTypes.pop(); + if (priorityTypes && priorityTypes.length > 0) { + const ret = priorityTypes.pop()!; randSeedShuffle(priorityTypes); return ret; } diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index d5515ce43cb..5b6cbfa9866 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -75,7 +75,7 @@ const SENSU_STYLE_BIOMES = [ /** * Dancing Lessons encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/130 | GitHub Issue #130} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3823 | GitHub Issue #3823} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const DancingLessonsEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 4136100b6b8..b8e3ba81101 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -71,7 +71,7 @@ const excludedBosses = [ /** * Dark Deal encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/61 | GitHub Issue #61} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3806 | GitHub Issue #3806} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const DarkDealEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index e6ed3641982..ecb8cbeb925 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -33,7 +33,7 @@ const OPTION_3_DISALLOWED_MODIFIERS = [ /** * Delibird-y encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/57 | GitHub Issue #57} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3804 | GitHub Issue #3804} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const DelibirdyEncounter: MysteryEncounter = @@ -115,7 +115,7 @@ export const DelibirdyEncounter: MysteryEncounter = // At max stacks, give the first party pokemon a Shell Bell instead const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell); - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.ABILITY_CHARM)); @@ -190,7 +190,7 @@ export const DelibirdyEncounter: MysteryEncounter = // At max stacks, give the first party pokemon a Shell Bell instead const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell); - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.CANDY_JAR)); @@ -203,7 +203,7 @@ export const DelibirdyEncounter: MysteryEncounter = // At max stacks, give the first party pokemon a Shell Bell instead const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell); - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.HEALING_CHARM)); @@ -283,7 +283,7 @@ export const DelibirdyEncounter: MysteryEncounter = // At max stacks, give the first party pokemon a Shell Bell instead const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType; await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell); - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.BERRY_POUCH)); diff --git a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts index 09c991ee4a3..34270892999 100644 --- a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts +++ b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts @@ -17,7 +17,7 @@ const namespace = "mysteryEncounter:departmentStoreSale"; /** * Department Store Sale encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/33 | GitHub Issue #33} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3797 | GitHub Issue #3797} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const DepartmentStoreSaleEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index ca6f7424dc8..cef0a9cd3fd 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -16,7 +16,7 @@ const namespace = "mysteryEncounter:fieldTrip"; /** * Field Trip encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/17 | GitHub Issue #17} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3794 | GitHub Issue #3794} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const FieldTripEncounter: MysteryEncounter = @@ -126,10 +126,10 @@ export const FieldTripEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.ATK]), - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.DEF]), - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPD]), - generateModifierTypeOption(scene, modifierTypes.DIRE_HIT), + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.ATK])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.DEF])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPD])!, + generateModifierTypeOption(scene, modifierTypes.DIRE_HIT)!, ]; setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); @@ -218,10 +218,10 @@ export const FieldTripEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPATK]), - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPDEF]), - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPD]), - generateModifierTypeOption(scene, modifierTypes.DIRE_HIT), + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPATK])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPDEF])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPD])!, + generateModifierTypeOption(scene, modifierTypes.DIRE_HIT)!, ]; setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); @@ -304,10 +304,10 @@ export const FieldTripEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.ACC]), - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPD]), - generateModifierTypeOption(scene, modifierTypes.GREAT_BALL), - generateModifierTypeOption(scene, modifierTypes.IV_SCANNER), + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.ACC])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_BOOSTER, [TempBattleStat.SPD])!, + generateModifierTypeOption(scene, modifierTypes.GREAT_BALL)!, + generateModifierTypeOption(scene, modifierTypes.IV_SCANNER)!, ]; setEncounterRewards(scene, { guaranteedModifierTypeOptions: modifiers, fillRemaining: false }); diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index fe5cf320401..346158ec6d5 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -33,7 +33,7 @@ const DAMAGE_PERCENTAGE: number = 20; /** * Fiery Fallout encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/88 | GitHub Issue #88} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3814 | GitHub Issue #3814} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const FieryFalloutEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index a7aeefe2db5..304f81846b1 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -30,7 +30,7 @@ const namespace = "mysteryEncounter:fightOrFlight"; /** * Fight or Flight encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/24 | GitHub Issue #24} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3795 | GitHub Issue #3795} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const FightOrFlightEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index db8168e7bd7..a06aa5a404b 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -23,7 +23,7 @@ const namespace = "mysteryEncounter:lostAtSea"; /** * Lost at sea encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/9 | GitHub Issue #9} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3793 | GitHub Issue #3793} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.LOST_AT_SEA) @@ -125,7 +125,6 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with * Generic handler for using a guiding pokemon to guide you back. * * @param scene Battle scene - * @param guidePokemon pokemon choosen as a guide */ async function handlePokemonGuidingYouPhase(scene: BattleScene) { const laprasSpecies = getPokemonSpecies(Species.LAPRAS); diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index 1695466c1cd..de9132f3493 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -23,7 +23,7 @@ const namespace = "mysteryEncounter:mysteriousChallengers"; /** * Mysterious Challengers encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/41 | GitHub Issue #41} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3801 | GitHub Issue #3801} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const MysteriousChallengersEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 303beb57aae..6caef1c36ec 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -15,7 +15,7 @@ const namespace = "mysteryEncounter:mysteriousChest"; /** * Mysterious Chest encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/32 | GitHub Issue #32} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3796 | GitHub Issue #3796} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const MysteriousChestEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/part-timer-encounter.ts b/src/data/mystery-encounters/encounters/part-timer-encounter.ts index a17a47f23fe..bfd977babfd 100644 --- a/src/data/mystery-encounters/encounters/part-timer-encounter.ts +++ b/src/data/mystery-encounters/encounters/part-timer-encounter.ts @@ -17,7 +17,7 @@ const namespace = "mysteryEncounter:partTimer"; /** * Part Timer encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/82 | GitHub Issue #82} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3813 | GitHub Issue #3813} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const PartTimerEncounter: MysteryEncounter = @@ -290,50 +290,50 @@ export const PartTimerEncounter: MysteryEncounter = .build(); function doStrongWorkSfx(scene: BattleScene) { - scene.playSound("PRSFX- Horn Drill1"); - scene.playSound("PRSFX- Horn Drill1"); + scene.playSound("battle_anims/PRSFX- Horn Drill1"); + scene.playSound("battle_anims/PRSFX- Horn Drill1"); scene.time.delayedCall(1000, () => { - scene.playSound("PRSFX- Guillotine2"); + scene.playSound("battle_anims/PRSFX- Guillotine2"); }); scene.time.delayedCall(2000, () => { - scene.playSound("PRSFX- Heavy Slam2"); + scene.playSound("battle_anims/PRSFX- Heavy Slam2"); }); scene.time.delayedCall(2500, () => { - scene.playSound("PRSFX- Guillotine2"); + scene.playSound("battle_anims/PRSFX- Guillotine2"); }); } function doDeliverySfx(scene: BattleScene) { - scene.playSound("PRSFX- Accelerock1"); + scene.playSound("battle_anims/PRSFX- Accelerock1"); scene.time.delayedCall(1500, () => { - scene.playSound("PRSFX- Extremespeed1"); + scene.playSound("battle_anims/PRSFX- Extremespeed1"); }); scene.time.delayedCall(2000, () => { - scene.playSound("PRSFX- Extremespeed1"); + scene.playSound("battle_anims/PRSFX- Extremespeed1"); }); scene.time.delayedCall(2250, () => { - scene.playSound("PRSFX- Agility"); + scene.playSound("battle_anims/PRSFX- Agility"); }); } function doSalesSfx(scene: BattleScene) { - scene.playSound("PRSFX- Captivate"); + scene.playSound("battle_anims/PRSFX- Captivate"); scene.time.delayedCall(1500, () => { - scene.playSound("PRSFX- Attract2"); + scene.playSound("battle_anims/PRSFX- Attract2"); }); scene.time.delayedCall(2000, () => { - scene.playSound("PRSFX- Aurora Veil2"); + scene.playSound("battle_anims/PRSFX- Aurora Veil2"); }); scene.time.delayedCall(3000, () => { - scene.playSound("PRSFX- Attract2"); + scene.playSound("battle_anims/PRSFX- Attract2"); }); } diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index a7ac57fff7d..43370fc189c 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -26,7 +26,7 @@ const TRAINER_THROW_ANIMATION_TIMES = [512, 184, 768]; /** * Safari Zone encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/39 | GitHub Issue #39} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3800 | GitHub Issue #3800} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const SafariZoneEncounter: MysteryEncounter = @@ -322,7 +322,7 @@ async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise { scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[0], () => { - scene.playSound("pb_throw"); + scene.playSound("se/pb_throw"); // Trainer throw frames scene.trainer.setFrame("2"); @@ -351,12 +351,12 @@ async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise { - scene.playSound("PRSFX- Bug Bite"); + scene.playSound("battle-anims/PRSFX- Bug Bite"); bait.setFrame("0002.png"); }, onLoop: () => { if (index % 2 === 0) { - scene.playSound("PRSFX- Bug Bite"); + scene.playSound("battle-anims/PRSFX- Bug Bite"); } if (index === 4) { bait.setFrame("0003.png"); @@ -388,7 +388,7 @@ async function throwMud(scene: BattleScene, pokemon: EnemyPokemon): Promise { scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); scene.time.delayedCall(TRAINER_THROW_ANIMATION_TIMES[0], () => { - scene.playSound("pb_throw"); + scene.playSound("se/pb_throw"); // Trainer throw frames scene.trainer.setFrame("2"); @@ -407,7 +407,7 @@ async function throwMud(scene: BattleScene, pokemon: EnemyPokemon): Promise { // Mud frame 2 - scene.playSound("PRSFX- Sludge Bomb2"); + scene.playSound("battle-anims/PRSFX- Sludge Bomb2"); mud.setFrame("0002.png"); // Mud splat scene.time.delayedCall(200, () => { @@ -433,10 +433,10 @@ async function throwMud(scene: BattleScene, pokemon: EnemyPokemon): Promise { - scene.playSound("PRSFX- Taunt2"); + scene.playSound("battle-anims/PRSFX- Taunt2"); }, onLoop: () => { - scene.playSound("PRSFX- Taunt2"); + scene.playSound("battle-anims/PRSFX- Taunt2"); }, onComplete: () => { resolve(true); diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index 2876ce64c8f..1f553624aa7 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -19,7 +19,7 @@ const namespace = "mysteryEncounter:shadyVitaminDealer"; /** * Shady Vitamin Dealer encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/34 | GitHub Issue #34} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3798 | GitHub Issue #3798} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const ShadyVitaminDealerEncounter: MysteryEncounter = @@ -79,8 +79,8 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = updatePlayerMoney(scene, -(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney); // Calculate modifiers and dialogue tokens const modifiers = [ - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER), - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER), + generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, + generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, ]; encounter.setDialogueToken("boost1", modifiers[0].name); encounter.setDialogueToken("boost2", modifiers[1].name); @@ -162,8 +162,8 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = updatePlayerMoney(scene, -(encounter.options[1].requirements[0] as MoneyRequirement).requiredMoney); // Calculate modifiers and dialogue tokens const modifiers = [ - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER), - generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER), + generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, + generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER)!, ]; encounter.setDialogueToken("boost1", modifiers[0].name); encounter.setDialogueToken("boost2", modifiers[1].name); diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index f819e6cb7e5..47a85edb4f2 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -22,7 +22,7 @@ const namespace = "mysteryEncounter:slumberingSnorlax"; /** * Sleeping Snorlax encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/103 | GitHub Issue #103} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3815 | GitHub Issue #3815} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const SlumberingSnorlaxEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index 63e7674b05a..6ba73357f42 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -29,7 +29,7 @@ const MACHINE_INTERFACING_TYPES = [Type.ELECTRIC, Type.STEEL]; /** * Teleporting Hijinks encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/119 | GitHub Issue #119} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3817 | GitHub Issue #3817} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const TeleportingHijinksEncounter: MysteryEncounter = @@ -140,8 +140,8 @@ export const TeleportingHijinksEncounter: MysteryEncounter = }], }; - const magnet = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.STEEL]); - const metalCoat = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.ELECTRIC]); + const magnet = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.STEEL])!; + const metalCoat = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.ELECTRIC])!; setEncounterRewards(scene, { guaranteedModifierTypeOptions: [magnet, metalCoat], fillRemaining: true }); setEncounterExp(scene, encounter.selectedOption!.primaryPokemon!.id, 100); transitionMysteryEncounterIntroVisuals(scene, true, true); diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index 9604783d3ff..cb0d7e486fe 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -22,7 +22,7 @@ const MAX_POKEMON_PRICE_MULTIPLIER = 6; /** * Pokemon Salesman encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/36 | GitHub Issue #36} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3799 | GitHub Issue #3799} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const ThePokemonSalesmanEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index 0b4e60a16e4..ccdfe98d7a9 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -23,7 +23,7 @@ const namespace = "mysteryEncounter:theStrongStuff"; /** * The Strong Stuff encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/54 | GitHub Issue #54} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3803 | GitHub Issue #3803} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const TheStrongStuffEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 08940818b9b..24c5af39f45 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -26,7 +26,7 @@ const namespace = "mysteryEncounter:theWinstrateChallenge"; /** * The Winstrate Challenge encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/136 | GitHub Issue #136} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3821 | GitHub Issue #3821} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const TheWinstrateChallengeEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 19e8fc50136..d82ca5c704d 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -24,7 +24,7 @@ const namespace = "mysteryEncounter:trainingSession"; /** * Training Session encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/43 | GitHub Issue #43} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3802 | GitHub Issue #3802} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const TrainingSessionEncounter: MysteryEncounter = diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index d14f3fe6441..47a214b7fa2 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -25,7 +25,7 @@ const SOUND_EFFECT_WAIT_TIME = 700; /** * Trash to Treasure encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/74 | GitHub Issue #74} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3809 | GitHub Issue #3809} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const TrashToTreasureEncounter: MysteryEncounter = @@ -177,7 +177,7 @@ async function tryApplyDigRewardItems(scene: BattleScene) { } } - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: "2 " + leftovers.name }), undefined, true); // First Shell bell @@ -204,17 +204,17 @@ async function tryApplyDigRewardItems(scene: BattleScene) { } } - scene.playSound("item_fanfare"); + scene.playSound("bgm/item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: "2 " + shellBell.name }), undefined, true); } async function doGarbageDig(scene: BattleScene) { - scene.playSound("PRSFX- Dig2"); + scene.playSound("battle-anims/PRSFX- Dig2"); scene.time.delayedCall(SOUND_EFFECT_WAIT_TIME, () => { - scene.playSound("PRSFX- Dig2"); - scene.playSound("PRSFX- Venom Drench", { volume: 2 }); + scene.playSound("battle-anims/PRSFX- Dig2"); + scene.playSound("battle-anims/PRSFX- Venom Drench", { volume: 2 }); }); scene.time.delayedCall(SOUND_EFFECT_WAIT_TIME * 2, () => { - scene.playSound("PRSFX- Dig2"); + scene.playSound("battle-anims/PRSFX- Dig2"); }); } diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index d4ec3ab3c04..8e79506b4b9 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -24,8 +24,8 @@ import { getLevelTotalExp } from "#app/data/exp"; /** i18n namespace for encounter */ const namespace = "mysteryEncounter:weirdDream"; -/** Exclude Ultra Beasts (inludes Cosmog/Solgaleo/Lunala/Necrozma), Paradox (includes Miraidon/Koraidon), Eternatus, Urshifu, the Poison Chain trio, Ogerpon */ -const excludedPokemon = [ +/** Exclude Ultra Beasts, Paradox, Eternatus, and all legendary/mythical/trio pokemon that are below 570 BST */ +const EXCLUDED_TRANSFORMATION_SPECIES = [ Species.ETERNATUS, /** UBs */ Species.NIHILEGO, @@ -77,9 +77,18 @@ const excludedPokemon = [ Species.FEZANDIPITI, ]; +const SUPER_LEGENDARY_BST_THRESHOLD = 600; +const NON_LEGENDARY_BST_THRESHOLD = 570; +const GAIN_OLD_GATEAU_ITEM_BST_THRESHOLD = 450; + +/** Value ranges of the resulting species BST transformations after adding values to original species */ + +const HIGH_BST_TRANSFORM_BASE_VALUES = [90, 110]; +const STANDARD_BST_TRANSFORM_BASE_VALUES = [40, 50]; + /** * Weird Dream encounter. - * @see {@link https://github.com/AsdarDevelops/PokeRogue-Events/issues/137 | GitHub Issue #137} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3822 | GitHub Issue #3822} * @see For biome requirements check {@linkcode mysteryEncountersByBiome} */ export const WeirdDreamEncounter: MysteryEncounter = @@ -225,9 +234,9 @@ function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { }); // Only 1 Pokemon can be transformed into BST higher than 600 - let hasPokemonBstHigherThan600 = false; + let hasPokemonInSuperLegendaryBstThreshold = false; // Only 1 other Pokemon can be transformed into BST between 570-600 - let hasPokemonBstBetween570And600 = false; + let hasPokemonInLegendaryBstThreshold = false; // First, roll 2 of the party members to new Pokemon at a +90 to +110 BST difference // Then, roll the remainder of the party members at a +40 to +50 BST difference @@ -241,19 +250,19 @@ function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { const bst = getOriginalBst(scene, removed); let newBstRange; if (i < 2) { - newBstRange = [90, 110]; + newBstRange = HIGH_BST_TRANSFORM_BASE_VALUES; } else { - newBstRange = [40, 50]; + newBstRange = STANDARD_BST_TRANSFORM_BASE_VALUES; } - const newSpecies = getTransformedSpecies(bst, newBstRange, hasPokemonBstHigherThan600, hasPokemonBstBetween570And600, alreadyUsedSpecies); + const newSpecies = getTransformedSpecies(bst, newBstRange, hasPokemonInSuperLegendaryBstThreshold, hasPokemonInLegendaryBstThreshold, alreadyUsedSpecies); const newSpeciesBst = newSpecies.getBaseStatTotal(); - if (newSpeciesBst > 600) { - hasPokemonBstHigherThan600 = true; + if (newSpeciesBst > SUPER_LEGENDARY_BST_THRESHOLD) { + hasPokemonInSuperLegendaryBstThreshold = true; } - if (newSpeciesBst <= 600 && newSpeciesBst >= 570) { - hasPokemonBstBetween570And600 = true; + if (newSpeciesBst <= SUPER_LEGENDARY_BST_THRESHOLD && newSpeciesBst >= NON_LEGENDARY_BST_THRESHOLD) { + hasPokemonInLegendaryBstThreshold = true; } @@ -299,9 +308,8 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon return newValue > iv ? newValue : iv; }); - // For pokemon at/below 570 BST or any shiny pokemon, unlock it permanently as if you had caught it - if (newPokemon.getSpeciesForm().getBaseStatTotal() <= 570 || newPokemon.isShiny()) { + if (newPokemon.getSpeciesForm().getBaseStatTotal() <= NON_LEGENDARY_BST_THRESHOLD || newPokemon.isShiny()) { if (newPokemon.getSpeciesForm().abilityHidden && newPokemon.abilityIndex === newPokemon.getSpeciesForm().getAbilityCount() - 1) { scene.validateAchv(achvs.HIDDEN_ABILITY); } @@ -372,8 +380,8 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon scene.addModifier(item, false, false, false, true); } - // Any pokemon that is at or below 450 BST gets +20 permanent BST to 3 stats: HP, lowest of Atk/SpAtk, and lowest of Def/SpDef - if (newPokemon.getSpeciesForm().getBaseStatTotal() <= 450) { + // Any pokemon that is at or below 450 BST gets +20 permanent BST to 3 stats: HP (halved, +10), lowest of Atk/SpAtk, and lowest of Def/SpDef + if (newPokemon.getSpeciesForm().getBaseStatTotal() <= GAIN_OLD_GATEAU_ITEM_BST_THRESHOLD) { const stats: Stat[] = [Stat.HP]; const baseStats = newPokemon.getSpeciesForm().baseStats.slice(0); // Attack or SpAtk @@ -435,9 +443,9 @@ function getTransformedSpecies(originalBst: number, bstSearchRange: [number, num const speciesBst = s.getBaseStatTotal(); const bstInRange = speciesBst >= bstMin && speciesBst <= bstCap; // Checks that a Pokemon has not already been added in the +600 or 570-600 slots; - const validBst = (!hasPokemonBstBetween570And600 || (speciesBst < 570 || speciesBst > 600)) && - (!hasPokemonBstHigherThan600 || speciesBst <= 600); - return bstInRange && validBst && !excludedPokemon.includes(s.speciesId); + const validBst = (!hasPokemonBstBetween570And600 || (speciesBst < NON_LEGENDARY_BST_THRESHOLD || speciesBst > SUPER_LEGENDARY_BST_THRESHOLD)) && + (!hasPokemonBstHigherThan600 || speciesBst <= SUPER_LEGENDARY_BST_THRESHOLD); + return bstInRange && validBst && !EXCLUDED_TRANSFORMATION_SPECIES.includes(s.speciesId); }); // There must be at least 20 species available before it will choose one diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index 042f967a23d..212982920c8 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -13,6 +13,8 @@ import { StatusEffect } from "../status-effect"; import { Type } from "../type"; import { WeatherType } from "../weather"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import { AttackTypeBoosterModifier } from "#app/modifier/modifier"; +import { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; export interface EncounterRequirement { meetsRequirement(scene: BattleScene): boolean; // Boolean to see if a requirement is met @@ -420,11 +422,11 @@ export class TypeRequirement extends EncounterPokemonRequirement { meetsRequirement(scene: BattleScene): boolean { let partyPokemon = scene.getParty(); - if (isNullOrUndefined(partyPokemon) || this?.requiredType?.length < 0) { + if (isNullOrUndefined(partyPokemon)) { return false; } - if (!this.excludeFainted) { + if (this.excludeFainted) { partyPokemon = partyPokemon.filter((pokemon) => !pokemon.isFainted()); } @@ -795,7 +797,7 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { meetsRequirement(scene: BattleScene): boolean { const partyPokemon = scene.getParty(); - if (isNullOrUndefined(partyPokemon) || this?.requiredHeldItemModifiers?.length < 0) { + if (isNullOrUndefined(partyPokemon)) { return false; } return this.queryParty(partyPokemon).length >= this.minNumberOfPokemon; @@ -828,6 +830,53 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { } } +export class AttackTypeBoosterHeldItemTypeRequirement extends EncounterPokemonRequirement { + requiredHeldItemTypes: Type[]; + minNumberOfPokemon: number; + invertQuery: boolean; + + constructor(heldItemTypes: Type | Type[], minNumberOfPokemon: number = 1, invertQuery: boolean = false) { + super(); + this.minNumberOfPokemon = minNumberOfPokemon; + this.invertQuery = invertQuery; + this.requiredHeldItemTypes = Array.isArray(heldItemTypes) ? heldItemTypes : [heldItemTypes]; + } + + meetsRequirement(scene: BattleScene): boolean { + const partyPokemon = scene.getParty(); + if (isNullOrUndefined(partyPokemon)) { + return false; + } + return this.queryParty(partyPokemon).length >= this.minNumberOfPokemon; + } + + queryParty(partyPokemon: PlayerPokemon[]): PlayerPokemon[] { + if (!this.invertQuery) { + return partyPokemon.filter((pokemon) => this.requiredHeldItemTypes.some((heldItemType) => { + return pokemon.getHeldItems().some((it) => { + return it instanceof AttackTypeBoosterModifier && (it.type as AttackTypeBoosterModifierType).moveType === heldItemType; + }); + })); + } else { + // for an inverted query, we only want to get the pokemon that have any held items that are NOT in requiredHeldItemModifiers + // E.g. functions as a blacklist + return partyPokemon.filter((pokemon) => pokemon.getHeldItems().filter((it) => { + return !this.requiredHeldItemTypes.some(heldItemType => it instanceof AttackTypeBoosterModifier && (it.type as AttackTypeBoosterModifierType).moveType === heldItemType); + }).length > 0); + } + } + + getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + const requiredItems = pokemon?.getHeldItems().filter((it) => { + return this.requiredHeldItemTypes.some(heldItemType => it instanceof AttackTypeBoosterModifier && (it.type as AttackTypeBoosterModifierType).moveType === heldItemType); + }); + if (requiredItems && requiredItems.length > 0) { + return ["heldItem", requiredItems[0].type.name]; + } + return ["heldItem", ""]; + } +} + export class LevelRequirement extends EncounterPokemonRequirement { requiredLevelRange: [number, number]; minNumberOfPokemon: number; diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 3db97bf1f98..8efac442e7c 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -122,6 +122,8 @@ export default class MysteryEncounter implements IMysteryEncounter { onInit?: (scene: BattleScene) => boolean; /** Event when battlefield visuals have finished sliding in and the encounter dialogue begins */ onVisualsStart?: (scene: BattleScene) => boolean; + /** Event prior to any rewards logic in {@link MysteryEncounterRewardsPhase} */ + onRewards?: (scene: BattleScene) => Promise; /** Will provide the player party EXP before rewards are displayed for that wave */ doEncounterExp?: (scene: BattleScene) => boolean; /** Will provide the player a rewards shop for that wave */ diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 79a3b6ed635..794c2772be1 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -27,6 +27,7 @@ import { DancingLessonsEncounter } from "#app/data/mystery-encounters/encounters import { WeirdDreamEncounter } from "#app/data/mystery-encounters/encounters/weird-dream-encounter"; import { TheWinstrateChallengeEncounter } from "#app/data/mystery-encounters/encounters/the-winstrate-challenge-encounter"; import { TeleportingHijinksEncounter } from "#app/data/mystery-encounters/encounters/teleporting-hijinks-encounter"; +import { BugTypeSuperfanEncounter } from "#app/data/mystery-encounters/encounters/bug-type-superfan-encounter"; // Spawn chance: (BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + WIGHT_INCREMENT_ON_SPAWN_MISS * ) / 256 export const BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT = 1; @@ -171,7 +172,8 @@ const anyBiomeEncounters: MysteryEncounterType[] = [ MysteryEncounterType.BERRIES_ABOUND, MysteryEncounterType.CLOWNING_AROUND, MysteryEncounterType.WEIRD_DREAM, - MysteryEncounterType.TELEPORTING_HIJINKS + MysteryEncounterType.TELEPORTING_HIJINKS, + MysteryEncounterType.BUG_TYPE_SUPERFAN ]; /** @@ -276,6 +278,7 @@ export function initMysteryEncounters() { allMysteryEncounters[MysteryEncounterType.WEIRD_DREAM] = WeirdDreamEncounter; allMysteryEncounters[MysteryEncounterType.THE_WINSTRATE_CHALLENGE] = TheWinstrateChallengeEncounter; allMysteryEncounters[MysteryEncounterType.TELEPORTING_HIJINKS] = TeleportingHijinksEncounter; + allMysteryEncounters[MysteryEncounterType.BUG_TYPE_SUPERFAN] = BugTypeSuperfanEncounter; // Add extreme encounters to biome map extremeBiomeEncounters.forEach(encounter => { diff --git a/src/data/mystery-encounters/requirements/requirement-groups.ts b/src/data/mystery-encounters/requirements/requirement-groups.ts index 235c9910ef0..679bd980907 100644 --- a/src/data/mystery-encounters/requirements/requirement-groups.ts +++ b/src/data/mystery-encounters/requirements/requirement-groups.ts @@ -36,8 +36,7 @@ export const DANCING_MOVES = [ Moves.QUIVER_DANCE, Moves.SWORDS_DANCE, Moves.TEETER_DANCE, - Moves.VICTORY_DANCE, - Moves.KNOCK_OFF + Moves.VICTORY_DANCE ]; export const DISTRACTION_MOVES = [ diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index f2ffcb964a0..b4942b01c15 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -64,7 +64,7 @@ export function doTrainerExclamation(scene: BattleScene) { } }); - scene.playSound("GEN8- Exclaim", { volume: 0.7 }); + scene.playSound("battle_anims/GEN8- Exclaim", { volume: 0.7 }); } export interface EnemyPokemonConfig { @@ -363,7 +363,7 @@ export function updatePlayerMoney(scene: BattleScene, changeValue: number, playS scene.updateMoneyText(); scene.animateMoneyChanged(false); if (playSound) { - scene.playSound("buy"); + scene.playSound("se/buy"); } if (showMessage) { if (changeValue < 0) { @@ -380,17 +380,20 @@ export function updatePlayerMoney(scene: BattleScene, changeValue: number, playS * @param modifier * @param pregenArgs - can specify BerryType for berries, TM for TMs, AttackBoostType for item, etc. */ -export function generateModifierType(scene: BattleScene, modifier: () => ModifierType, pregenArgs?: any[]): ModifierType { - const modifierId = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifier)!; - let result: ModifierType = modifierTypes[modifierId]?.(); +export function generateModifierType(scene: BattleScene, modifier: () => ModifierType, pregenArgs?: any[]): ModifierType | null { + const modifierId = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifier); + if (!modifierId) { + return null; + } + + let result: ModifierType = modifierTypes[modifierId](); // Populates item id and tier (order matters) result = result .withIdFromFunc(modifierTypes[modifierId]) .withTierFromPool(); - const generatedResult = result instanceof ModifierTypeGenerator ? result.generateType(scene.getParty(), pregenArgs) : result; - return generatedResult ?? result; + return result instanceof ModifierTypeGenerator ? result.generateType(scene.getParty(), pregenArgs) : result; } /** @@ -399,9 +402,12 @@ export function generateModifierType(scene: BattleScene, modifier: () => Modifie * @param modifier * @param pregenArgs - can specify BerryType for berries, TM for TMs, AttackBoostType for item, etc. */ -export function generateModifierTypeOption(scene: BattleScene, modifier: () => ModifierType, pregenArgs?: any[]): ModifierTypeOption { +export function generateModifierTypeOption(scene: BattleScene, modifier: () => ModifierType, pregenArgs?: any[]): ModifierTypeOption | null { const result = generateModifierType(scene, modifier, pregenArgs); - return new ModifierTypeOption(result, 0); + if (result) { + return new ModifierTypeOption(result, 0); + } + return result; } /** @@ -416,7 +422,7 @@ export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (p return new Promise(resolve => { const modeToSetOnExit = scene.ui.getMode(); - // Open party screen to choose pokemon to train + // Open party screen to choose pokemon scene.ui.setMode(Mode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: integer, option: PartyOption) => { if (slotIndex < scene.getParty().length) { scene.ui.setMode(modeToSetOnExit).then(() => { @@ -446,7 +452,7 @@ export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (p label: i18next.t("menu:cancel"), handler: () => { scene.ui.clearText(); - scene.ui.setMode(Mode.MYSTERY_ENCOUNTER); + scene.ui.setMode(modeToSetOnExit); resolve(false); return true; }, @@ -461,6 +467,11 @@ export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (p yOffset: 0, supportHover: true }; + + // Do hover over the starting selection option + if (fullOptions[0].onHover) { + fullOptions[0].onHover(); + } scene.ui.setModeWithoutClear(Mode.OPTION_SELECT, config, null, true); }; @@ -484,6 +495,97 @@ export function selectPokemonForOption(scene: BattleScene, onPokemonSelected: (p }); } +interface PokemonAndOptionSelected { + selectedPokemonIndex: number; + selectedOptionIndex: number; +} + +/** + * This function is intended for use inside onPreOptionPhase() of an encounter option + * @param scene + * If a second option needs to be selected, onPokemonSelected should return a OptionSelectItem[] object + * @param options + * @param optionSelectPromptKey + * @param selectablePokemonFilter + * @param onHoverOverCancelOption + */ +export function selectOptionThenPokemon(scene: BattleScene, options: OptionSelectItem[], optionSelectPromptKey: string, selectablePokemonFilter?: PokemonSelectFilter, onHoverOverCancelOption?: () => void): Promise { + return new Promise(resolve => { + const modeToSetOnExit = scene.ui.getMode(); + + const displayOptions = (config: OptionSelectConfig) => { + scene.ui.setMode(Mode.MESSAGE).then(() => { + if (!optionSelectPromptKey) { + // Do hover over the starting selection option + if (fullOptions[0].onHover) { + fullOptions[0].onHover(); + } + scene.ui.setMode(Mode.OPTION_SELECT, config); + } else { + showEncounterText(scene, optionSelectPromptKey).then(() => { + // Do hover over the starting selection option + if (fullOptions[0].onHover) { + fullOptions[0].onHover(); + } + scene.ui.setMode(Mode.OPTION_SELECT, config); + }); + } + }); + }; + + const selectPokemonAfterOption = (selectedOptionIndex: number) => { + // Open party screen to choose a Pokemon + scene.ui.setMode(Mode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: integer, option: PartyOption) => { + if (slotIndex < scene.getParty().length) { + // Pokemon and option selected + scene.ui.setMode(modeToSetOnExit).then(() => { + const result: PokemonAndOptionSelected = { selectedPokemonIndex: slotIndex, selectedOptionIndex: selectedOptionIndex }; + resolve(result); + }); + } else { + // Back to first option select screen + displayOptions(config); + } + }, selectablePokemonFilter); + }; + + // Always appends a cancel option to bottom of options + const fullOptions = options.map((option, index) => { + // Update handler to resolve promise + const onSelect = option.handler; + option.handler = () => { + onSelect(); + selectPokemonAfterOption(index); + return true; + }; + return option; + }).concat({ + label: i18next.t("menu:cancel"), + handler: () => { + scene.ui.clearText(); + scene.ui.setMode(modeToSetOnExit); + resolve(null); + return true; + }, + onHover: () => { + if (onHoverOverCancelOption) { + onHoverOverCancelOption(); + } + scene.ui.showText(i18next.t("mysteryEncounter:cancel_option")); + } + }); + + const config: OptionSelectConfig = { + options: fullOptions, + maxOptions: 7, + yOffset: 0, + supportHover: true + }; + + displayOptions(config); + }); +} + /** * Will initialize reward phases to follow the mystery encounter * Can have shop displayed or skipped diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 7ee670b4828..51e737f9b46 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -335,7 +335,7 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, return new Promise(resolve => { scene.trainer.setTexture(`trainer_${scene.gameData.gender === PlayerGender.FEMALE ? "f" : "m"}_back_pb`); scene.time.delayedCall(512, () => { - scene.playSound("pb_throw"); + scene.playSound("se/pb_throw"); // Trainer throw frames scene.trainer.setFrame("2"); @@ -355,7 +355,7 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, onComplete: () => { pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); scene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); - scene.playSound("pb_rel"); + scene.playSound("se/pb_rel"); pokemon.tint(getPokeballTintColor(pokeballType)); addPokeballOpenParticles(scene, pokeball.x, pokeball.y, pokeballType); @@ -369,7 +369,7 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, onComplete: () => { pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); pokemon.setVisible(false); - scene.playSound("pb_catch"); + scene.playSound("se/pb_catch"); scene.time.delayedCall(17, () => pokeball.setTexture("pb", `${pokeballAtlasKey}`)); const doShake = () => { @@ -397,13 +397,13 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, failCatch(scene, pokemon, originalY, pokeball, pokeballType).then(() => resolve(false)); } else if (shakeCount++ < 3) { if (randSeedInt(65536) < ballTwitchRate) { - scene.playSound("pb_move"); + scene.playSound("se/pb_move"); } else { shakeCounter.stop(); failCatch(scene, pokemon, originalY, pokeball, pokeballType).then(() => resolve(false)); } } else { - scene.playSound("pb_lock"); + scene.playSound("se/pb_lock"); addPokeballCaptureStars(scene, pokeball); const pbTint = scene.add.sprite(pokeball.x, pokeball.y, "pb", "pb"); @@ -445,7 +445,7 @@ export function trainerThrowPokeball(scene: BattleScene, pokemon: EnemyPokemon, function failCatch(scene: BattleScene, pokemon: EnemyPokemon, originalY: number, pokeball: Phaser.GameObjects.Sprite, pokeballType: PokeballType) { return new Promise(resolve => { - scene.playSound("pb_rel"); + scene.playSound("se/pb_rel"); pokemon.setY(originalY); if (pokemon.status?.effect !== StatusEffect.SLEEP) { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); @@ -591,7 +591,7 @@ function removePb(scene: BattleScene, pokeball: Phaser.GameObjects.Sprite) { export async function doPokemonFlee(scene: BattleScene, pokemon: EnemyPokemon): Promise { await new Promise(resolve => { - scene.playSound("flee"); + scene.playSound("se/flee"); // Ease pokemon out scene.tweens.add({ targets: pokemon, @@ -635,3 +635,50 @@ export function doPlayerFlee(scene: BattleScene, pokemon: EnemyPokemon): Promise }); }); } + +// Bug Species and their corresponding weights +const GOLDEN_BUG_NET_SPECIES_POOL: [Species, number][] = [ + [Species.SCYTHER, 40], + [Species.SCIZOR, 40], + [Species.KLEAVOR, 40], + [Species.PINSIR, 40], + [Species.HERACROSS, 40], + [Species.YANMA, 40], + [Species.YANMEGA, 40], + [Species.SHUCKLE, 40], + [Species.ANORITH, 40], + [Species.ARMALDO, 40], + [Species.ESCAVALIER, 40], + [Species.ACCELGOR, 40], + [Species.JOLTIK, 40], + [Species.GALVANTULA, 40], + [Species.DURANT, 40], + [Species.LARVESTA, 40], + [Species.VOLCARONA, 40], + [Species.DEWPIDER, 40], + [Species.ARAQUANID, 40], + [Species.WIMPOD, 40], + [Species.GOLISOPOD, 40], + [Species.SIZZLIPEDE, 40], + [Species.CENTISKORCH, 40], + [Species.NYMBLE, 40], + [Species.LOKIX, 40], + [Species.BUZZWOLE, 1], + [Species.PHEROMOSA, 1], +]; + +export function getGoldenBugNetSpecies(scene: BattleScene, waveIndex: integer, level: integer): PokemonSpecies { + const totalWeight = GOLDEN_BUG_NET_SPECIES_POOL.reduce((a, b) => a + b[1], 0); + const roll = randSeedInt(totalWeight); + + let w = 0; + for (const species of GOLDEN_BUG_NET_SPECIES_POOL) { + w += species[1]; + if (roll < w) { + return getPokemonSpecies(species); + } + } + + // Defaults to Scyther + return getPokemonSpecies(GOLDEN_BUG_NET_SPECIES_POOL[0][0]); +} diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 507b7bd5139..892627f8f7e 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -2104,5 +2104,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplates(trainerPartyTemplates.ONE_AVG), [TrainerType.VITO]: new TrainerConfig(++t).setName("Vito").setTitle("The Winstrates") .setMoneyMultiplier(2) - .setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG))) + .setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG))), + [TrainerType.BUG_TYPE_SUPERFAN]: new TrainerConfig(++t).setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) + .setPartyTemplates(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE)) }; diff --git a/src/enums/mystery-encounter-type.ts b/src/enums/mystery-encounter-type.ts index b36a2c4ce41..26a6b591048 100644 --- a/src/enums/mystery-encounter-type.ts +++ b/src/enums/mystery-encounter-type.ts @@ -24,5 +24,6 @@ export enum MysteryEncounterType { DANCING_LESSONS, WEIRD_DREAM, THE_WINSTRATE_CHALLENGE, - TELEPORTING_HIJINKS + TELEPORTING_HIJINKS, + BUG_TYPE_SUPERFAN } diff --git a/src/enums/trainer-type.ts b/src/enums/trainer-type.ts index 37c5bb5f20b..9ca634ae1f2 100644 --- a/src/enums/trainer-type.ts +++ b/src/enums/trainer-type.ts @@ -94,6 +94,7 @@ export enum TrainerType { VIVI, VICKY, VITO, + BUG_TYPE_SUPERFAN, BROCK = 200, MISTY, diff --git a/src/locales/en/dialogue-female.json b/src/locales/en/dialogue-female.json index 2268b7ccebd..6faf53d86e1 100644 --- a/src/locales/en/dialogue-female.json +++ b/src/locales/en/dialogue-female.json @@ -841,7 +841,7 @@ "2": "We're pulling out all the stops to put your Pokémon down." }, "victory": { - "1": "At times we battle, and sometimes we team up...\n $It's great how Trainers can interact." + "1": "At times we battle, and sometimes we team up...$It's great how Trainers can interact." }, "defeat": { "1": "You put up quite the display.\nBetter luck next time." @@ -857,7 +857,7 @@ }, "winstrates_victoria": { "encounter": { - "1": "My goodness! Aren't you young?\n $You must be quite the trainer to beat my husband, though.\n $Now I suppose it's my turn to battle!" + "1": "My goodness! Aren't you young?$You must be quite the trainer to beat my husband, though.$Now I suppose it's my turn to battle!" }, "victory": { "1": "Uwah! Just how strong are you?!" @@ -865,7 +865,7 @@ }, "winstrates_vivi": { "encounter": { - "1": "You're stronger than Mom? Wow!\n $But I'm strong, too!\nReally! Honestly!" + "1": "You're stronger than Mom? Wow!$But I'm strong, too!\nReally! Honestly!" }, "victory": { "1": "Huh? Did I really lose?\nSnivel... Grandmaaa!" @@ -873,7 +873,7 @@ }, "winstrates_vicky": { "encounter": { - "1": "How dare you make my precious\ngranddaughter cry!\n $I see I need to teach you a lesson.\nPrepare to feel the sting of defeat!" + "1": "How dare you make my precious\ngranddaughter cry!$I see I need to teach you a lesson.\nPrepare to feel the sting of defeat!" }, "victory": { "1": "Whoa! So strong!\nMy granddaughter wasn't lying." @@ -881,7 +881,7 @@ }, "winstrates_vito": { "encounter": { - "1": "I trained together with my whole family,\nevery one of us!\n $I'm not losing to anyone!" + "1": "I trained together with my whole family,\nevery one of us!$I'm not losing to anyone!" }, "victory": { "1": "I was better than everyone in my family.\nI've never lost before..." diff --git a/src/locales/en/dialogue-male.json b/src/locales/en/dialogue-male.json index f10fc11fa7c..410cfd9c3cf 100644 --- a/src/locales/en/dialogue-male.json +++ b/src/locales/en/dialogue-male.json @@ -841,7 +841,7 @@ "2": "We're pulling out all the stops to put your Pokémon down." }, "victory": { - "1": "At times we battle, and sometimes we team up...\n $It's great how Trainers can interact." + "1": "At times we battle, and sometimes we team up...$It's great how Trainers can interact." }, "defeat": { "1": "You put up quite the display.\nBetter luck next time." @@ -857,7 +857,7 @@ }, "winstrates_victoria": { "encounter": { - "1": "My goodness! Aren't you young?\n $You must be quite the trainer to beat my husband, though.\n $Now I suppose it's my turn to battle!" + "1": "My goodness! Aren't you young?$You must be quite the trainer to beat my husband, though.$Now I suppose it's my turn to battle!" }, "victory": { "1": "Uwah! Just how strong are you?!" @@ -865,7 +865,7 @@ }, "winstrates_vivi": { "encounter": { - "1": "You're stronger than Mom? Wow!\n $But I'm strong, too!\nReally! Honestly!" + "1": "You're stronger than Mom? Wow!$But I'm strong, too!\nReally! Honestly!" }, "victory": { "1": "Huh? Did I really lose?\nSnivel... Grandmaaa!" @@ -873,7 +873,7 @@ }, "winstrates_vicky": { "encounter": { - "1": "How dare you make my precious\ngranddaughter cry!\n $I see I need to teach you a lesson.\nPrepare to feel the sting of defeat!" + "1": "How dare you make my precious\ngranddaughter cry!$I see I need to teach you a lesson.\nPrepare to feel the sting of defeat!" }, "victory": { "1": "Whoa! So strong!\nMy granddaughter wasn't lying." @@ -881,7 +881,7 @@ }, "winstrates_vito": { "encounter": { - "1": "I trained together with my whole family,\nevery one of us!\n $I'm not losing to anyone!" + "1": "I trained together with my whole family,\nevery one of us!$I'm not losing to anyone!" }, "victory": { "1": "I was better than everyone in my family.\nI've never lost before..." diff --git a/src/locales/en/modifier-type.json b/src/locales/en/modifier-type.json index 886b93a19f9..21a60788bb7 100644 --- a/src/locales/en/modifier-type.json +++ b/src/locales/en/modifier-type.json @@ -259,9 +259,10 @@ "ENEMY_FUSED_CHANCE": { "name": "Fusion Token", "description": "Adds a 1% chance that a wild Pokémon will be a fusion." }, "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Shuckle Juice" }, - "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Black Sludge", "description": "The stench is so powerful that healing items are no longer available to purchase in shops." }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Black Sludge", "description": "The stench is so powerful that shops will only sell you items at a steep cost increase." }, "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Macho Brace", "description": "Defeating a Pokémon grants the holder a Macho Brace stack. Each stack slightly boosts stats, with an extra bonus at max stacks." }, - "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Old Gateau", "description": "Increases the holder's {{stats}} stats by {{statValue}}." } + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Old Gateau", "description": "Increases the holder's {{stats}} stats by {{statValue}}." }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Golden Bug Net", "description": "Imbues the owner with luck to find Bug Type Pokémon more often. Has a strange heft to it." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { "name": "Light Ball", "description": "It's a mysterious orb that boosts Pikachu's Attack and Sp. Atk stats." }, diff --git a/src/locales/en/mystery-encounter.ts b/src/locales/en/mystery-encounter.ts index 7328c2d5b1b..5578cf6fe1b 100644 --- a/src/locales/en/mystery-encounter.ts +++ b/src/locales/en/mystery-encounter.ts @@ -24,6 +24,7 @@ import dancingLessonsDialogue from "#app/locales/en/mystery-encounters/dancing-l import weirdDreamDialogue from "#app/locales/en/mystery-encounters/weird-dream-dialogue.json"; import theWinstrateChallengeDialogue from "#app/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json"; import teleportingHijinksDialogue from "#app/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfanDialogue from "#app/locales/en/mystery-encounters/bug-type-superfan-dialogue.json"; /** * Injection patterns that can be used: @@ -75,5 +76,6 @@ export const mysteryEncounter = { dancingLessons: dancingLessonsDialogue, weirdDream: weirdDreamDialogue, theWinstrateChallenge: theWinstrateChallengeDialogue, - teleportingHijinks: teleportingHijinksDialogue + teleportingHijinks: teleportingHijinksDialogue, + bugTypeSuperfan: bugTypeSuperfanDialogue } as const; diff --git a/src/locales/en/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/en/mystery-encounters/a-trainers-test-dialogue.json index a28d31841a3..c96c0d5f327 100644 --- a/src/locales/en/mystery-encounters/a-trainers-test-dialogue.json +++ b/src/locales/en/mystery-encounters/a-trainers-test-dialogue.json @@ -1,29 +1,29 @@ { "intro": "An extremely strong trainer approaches you...", "buck": { - "intro_dialogue": "Yo, trainer! My name's Buck.\n $I have a super awesome proposal\nfor a strong trainer such as yourself!\n $I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.\n $If you can prove your strength as a trainer to me,\nI'll give you the rarer egg!", + "intro_dialogue": "Yo, trainer! My name's Buck.$I have a super awesome proposal\nfor a strong trainer such as yourself!$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you can prove your strength as a trainer to me,\nI'll give you the rarer egg!", "accept": "Whoooo, I'm getting fired up!", - "decline": "Darn, it looks like your\nteam isn't in peak condition.\n $Here, let me help with that." + "decline": "Darn, it looks like your\nteam isn't in peak condition.$Here, let me help with that." }, "cheryl": { - "intro_dialogue": "Hello, my name's Cheryl.\n $I have a particularly interesting request,\nfor a strong trainer such as yourself.\n $I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.\n $If you can prove your strength as a trainer to me,\nI'll give you the rarer Egg!", + "intro_dialogue": "Hello, my name's Cheryl.$I have a particularly interesting request,\nfor a strong trainer such as yourself.$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you can prove your strength as a trainer to me,\nI'll give you the rarer Egg!", "accept": "I hope you're ready!", - "decline": "I understand, it looks like your team\nisn't in the best condition at the moment.\n $Here, let me help with that." + "decline": "I understand, it looks like your team\nisn't in the best condition at the moment.$Here, let me help with that." }, "marley": { - "intro_dialogue": "...@d{64} I'm Marley.\n $I have an offer for you...\n $I'm carrying two Pokémon Eggs with me,\nbut I'd like someone else to care for one.\n $If you're stronger than me,\nI'll give you the rarer Egg.", + "intro_dialogue": "...@d{64} I'm Marley.$I have an offer for you...$I'm carrying two Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you're stronger than me,\nI'll give you the rarer Egg.", "accept": "... I see.", - "decline": "... I see.\n $Your Pokémon look hurt...\nLet me help." + "decline": "... I see.$Your Pokémon look hurt...\nLet me help." }, "mira": { - "intro_dialogue": "Hi! I'm Mira!\n $Mira has a request\nfor a strong trainer like you!\n $Mira has two rare Pokémon Eggs,\nbut Mira wants someone else to take one!\n $If you show Mira that you're strong,\nMira will give you the rarer Egg!", + "intro_dialogue": "Hi! I'm Mira!$Mira has a request\nfor a strong trainer like you!$Mira has two rare Pokémon Eggs,\nbut Mira wants someone else to take one!$If you show Mira that you're strong,\nMira will give you the rarer Egg!", "accept": "You'll battle Mira?\nYay!", - "decline": "Aww, no battle?\nThat's okay!\n $Here, Mira will heal your team!" + "decline": "Aww, no battle?\nThat's okay!$Here, Mira will heal your team!" }, "riley": { - "intro_dialogue": "I'm Riley.\n $I have an odd proposal\nfor a strong trainer such as yourself.\n $I'm carrying two rare Pokémon Eggs with me,\nbut I'd like to give one to another trainer.\n $If you can prove your strength to me,\nI'll give you the rarer Egg!", + "intro_dialogue": "I'm Riley.$I have an odd proposal\nfor a strong trainer such as yourself.$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like to give one to another trainer.$If you can prove your strength to me,\nI'll give you the rarer Egg!", "accept": "That look you have...\nLet's do this.", - "decline": "I understand, your team looks beat up.\n $Here, let me help with that." + "decline": "I understand, your team looks beat up.$Here, let me help with that." }, "title": "A Trainer's Test", "description": "It seems this trainer is willing to give you an Egg regardless of your decision. However, if you can manage to defeat this strong trainer, you'll receive a much rarer Egg.", diff --git a/src/locales/en/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/en/mystery-encounters/absolute-avarice-dialogue.json index 9e58b3ec8ac..234371c4b4e 100644 --- a/src/locales/en/mystery-encounters/absolute-avarice-dialogue.json +++ b/src/locales/en/mystery-encounters/absolute-avarice-dialogue.json @@ -9,17 +9,17 @@ "tooltip": "(-) Tough Battle\n(+) Rewards from its Berry Hoard", "selected": "The Greedent stuffs its cheeks\nand prepares for battle!", "boss_enraged": "Greedent's fierce love for food has it incensed!", - "food_stash": "It looks like the Greedent was guarding an enormous stash of food!\n $@s{item_fanfare}Each Pokémon in your party gains 1x Reviver Seed!" + "food_stash": "It looks like the Greedent was guarding an enormous stash of food!$@s{item_fanfare}Each Pokémon in your party gains 1x Reviver Seed!" }, "2": { "label": "Reason with It", "tooltip": "(+) Regain Some Lost Berries", - "selected": "Your pleading strikes a chord with the Greedent.\n $It doesn't give all your berries back, but still tosses a few in your direction." + "selected": "Your pleading strikes a chord with the Greedent.$It doesn't give all your berries back, but still tosses a few in your direction." }, "3": { "label": "Let It Have the Food", "tooltip": "(-) Lose All Berries\n(?) The Greedent Will Like You", - "selected": "The Greedent devours the entire\nstash of berries in a flash!\n $Patting its stomach,\nit looks at you appreciatively.\n $Perhaps you could feed it\nmore berries on your adventure...\n $@s{level_up_fanfare}The Greedent wants to join your party!" + "selected": "The Greedent devours the entire\nstash of berries in a flash!$Patting its stomach,\nit looks at you appreciatively.$Perhaps you could feed it\nmore berries on your adventure...$@s{level_up_fanfare}The Greedent wants to join your party!" } } } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json index 30665fdb5d1..cb3415fefd9 100644 --- a/src/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json +++ b/src/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -1,7 +1,7 @@ { "intro": "You're stopped by a rich looking boy.", "speaker": "Rich Boy", - "intro_dialogue": "Good day to you.\n $I can't help but notice that your\n{{strongestPokemon}} looks positively divine!\n $I've always wanted to have a pet like that!\n $I'd pay you handsomely,\nand also give you this old bauble!", + "intro_dialogue": "Good day to you.$I can't help but notice that your\n{{strongestPokemon}} looks positively divine!$I've always wanted to have a pet like that!$I'd pay you handsomely,\nand also give you this old bauble!", "title": "An Offer You Can't Refuse", "description": "You're being offered a @[TOOLTIP_TITLE]{Shiny Charm} and {{price, money}} for your {{strongestPokemon}}!\n\nIt's an extremely good deal, but can you really bear to part with such a strong team member?", "query": "What will you do?", @@ -9,7 +9,7 @@ "1": { "label": "Accept the Deal", "tooltip": "(-) Lose {{strongestPokemon}}\n(+) Gain a @[TOOLTIP_TITLE]{Shiny Charm}\n(+) Gain {{price, money}}", - "selected": "Wonderful!@d{32} Come along, {{strongestPokemon}}!\n $It's time to show you off to everyone at the yacht club!\n $They'll be so jealous!" + "selected": "Wonderful!@d{32} Come along, {{strongestPokemon}}!$It's time to show you off to everyone at the yacht club!$They'll be so jealous!" }, "2": { "label": "Extort the Kid", @@ -20,7 +20,7 @@ "3": { "label": "Leave", "tooltip": "(-) No Rewards", - "selected": "What a rotten day...\n $Ah, well. Let's return to the yacht club then, Liepard." + "selected": "What a rotten day...$Ah, well. Let's return to the yacht club then, Liepard." } } } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/berries-abound-dialogue.json b/src/locales/en/mystery-encounters/berries-abound-dialogue.json index 1a6ed26e661..7add02a40a1 100644 --- a/src/locales/en/mystery-encounters/berries-abound-dialogue.json +++ b/src/locales/en/mystery-encounters/berries-abound-dialogue.json @@ -13,8 +13,8 @@ "2": { "label": "Race to the Bush", "tooltip": "(-) {{fastestPokemon}} Uses its Speed\n(+) Gain Berries", - "selected": "Your {{fastestPokemon}} races for the berry bush!\n $It manages to nab {{numBerries}} before the {{enemyPokemon}} can react!\n $You quickly retreat with your newfound prize.", - "selected_bad": "Your {{fastestPokemon}} races for the berry bush!\n $Oh no! The {{enemyPokemon}} was faster and blocked off the approach!", + "selected": "Your {{fastestPokemon}} races for the berry bush!$It manages to nab {{numBerries}} before the {{enemyPokemon}} can react!$You quickly retreat with your newfound prize.", + "selected_bad": "Your {{fastestPokemon}} races for the berry bush!$Oh no! The {{enemyPokemon}} was faster and blocked off the approach!", "boss_enraged": "The opposing {{enemyPokemon}} has become enraged!" }, "3": { diff --git a/src/locales/en/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/en/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..13087c1d932 --- /dev/null +++ b/src/locales/en/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,37 @@ +{ + "intro": "An unusual trainer with all kinds of Bug paraphernalia blocks your way!", + "intro_dialogue": "Hey, trainer! I'm on a mission to find the rarest Bug Pokémon in existence!$You must love Bug Pokémon too, right?\nEveryone loves Bug Pokémon!", + "title": "The Bug-Type Superfan", + "speaker": "Bug-Type Superfan", + "description": "The trainer prattles, not even waiting for a response...\n\nIt seems the only way to get out of this situation is by catching the trainer's attention!", + "query": "What will you do?", + "option": { + "1": { + "label": "Offer to Battle", + "tooltip": "(-) Challenging Battle\n(+) Teach a Pokémon a Bug Type Move", + "selected": "A challenge, eh?\nMy bugs are more than ready for you!" + }, + "2": { + "label": "Show Your Bug Types", + "tooltip": "(+) Receive a Gift Item", + "disabled_tooltip": "You need at least 1 Bug Type Pokémon on your team to select this.", + "selected": "You show the trainer all your Bug Type Pokémon...", + "selected_0_to_1": "Huh? You only have {{numBugTypes}}...$Guess I'm wasting my breath on someone like you...", + "selected_2_3": "Hey, you've got {{numBugTypes}} Bug Types!\nNot bad.$Here, this might help you on your journey to catch more!", + "selected_4_to_5": "What? You have {{numBugTypes}} Bug Types?\nNice!$You're not quite at my level, but I can see shades of myself in you!\n$Take this, my young apprentice!", + "selected_6": "Whoa! {{numBugTypes}} Bug Types!\n$You must love Bug Types almost as much as I do!$Here, take this as a token of our camaraderie!" + }, + "3": { + "label": "Gift a Bug Item", + "tooltip": "(-) Give the trainer a Quick Claw, Grip Claw, or Silver Powder\n(+) Receive a Gift Item", + "disabled_tooltip": "You need to have a Quick Claw, Grip Claw, or Silver Powder to select this.", + "select_prompt": "Select an item to give.", + "invalid_selection": "Pokémon doesn't have that kind of item.", + "selected": "You hand the trainer a {{selectedItem}}.", + "selected_dialogue": "Whoa! A {{selectedItem}}, for me?\nYou're not so bad, kid!$As a token of my appreciation,\nI want you to have this special gift!$It's been passed all through my family, and now I want you to have it!" + } + }, + "battle_won": "Your knowledge and skill were perfect at exploiting our weaknesses!$In exchange for the valuable lesson,\nallow me to teach one of your Pokémon a Bug Type Move!", + "confirm_no_teach": "You sure you don't want to learn one of these great moves?", + "outro": "I see great Bug Pokémon in your future!\nMay our paths cross again!$Bug out!" +} \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/en/mystery-encounters/dancing-lessons-dialogue.json index bd75ab13f24..98f38aac62d 100644 --- a/src/locales/en/mystery-encounters/dancing-lessons-dialogue.json +++ b/src/locales/en/mystery-encounters/dancing-lessons-dialogue.json @@ -13,14 +13,14 @@ "2": { "label": "Learn Its Dance", "tooltip": "(+) Teach a Pokémon Revelation Dance", - "selected": "You watch the Oricorio closely as it performs its dance...\n $@s{level_up_fanfare}Your {{selectedPokemon}} wants to learn Revelation Dance!" + "selected": "You watch the Oricorio closely as it performs its dance...$@s{level_up_fanfare}Your {{selectedPokemon}} wants to learn Revelation Dance!" }, "3": { "label": "Show It a Dance", "tooltip": "(-) Teach the Oricorio a Dance Move\n(+) The Oricorio Will Like You", "disabled_tooltip": "Your Pokémon need to know a Dance move for this.", "select_prompt": "Select a Dance type move to use.", - "selected": "The Oricorio watches in fascination as\n{{selectedPokemon}} shows off {{selectedMove}}!\n $It loves the display!\n $@s{level_up_fanfare}The Oricorio wants to join your party!" + "selected": "The Oricorio watches in fascination as\n{{selectedPokemon}} shows off {{selectedMove}}!$It loves the display!$@s{level_up_fanfare}The Oricorio wants to join your party!" } }, "invalid_selection": "This Pokémon doesn't know a Dance move" diff --git a/src/locales/en/mystery-encounters/dark-deal-dialogue.json b/src/locales/en/mystery-encounters/dark-deal-dialogue.json index d3a94a312d3..3086ebb0f9b 100644 --- a/src/locales/en/mystery-encounters/dark-deal-dialogue.json +++ b/src/locales/en/mystery-encounters/dark-deal-dialogue.json @@ -3,7 +3,7 @@ { "intro": "A strange man in a tattered coat\nstands in your way...", "speaker": "Shady Guy", - "intro_dialogue": "Hey, you!\n $I've been working on a new device\nto bring out a Pokémon's latent power!\n $It completely rebinds the Pokémon's atoms\nat a molecular level into a far more powerful form.\n $Hehe...@d{64} I just need some sac-@d{32}\nErr, test subjects, to prove it works.", + "intro_dialogue": "Hey, you!$I've been working on a new device\nto bring out a Pokémon's latent power!$It completely rebinds the Pokémon's atoms\nat a molecular level into a far more powerful form.$Hehe...@d{64} I just need some sac-@d{32}\nErr, test subjects, to prove it works.", "title": "Dark Deal", "description": "The disturbing fellow holds up some Pokéballs.\n\"I'll make it worth your while! You can have these strong Pokéballs as payment, All I need is a Pokémon from your team! Hehe...\"", "query": "What will you do?", @@ -11,8 +11,8 @@ "1": { "label": "Accept", "tooltip": "(+) 5 Rogue Balls\n(?) Enhance a Random Pokémon", - "selected_dialogue": "Let's see, that {{pokeName}} will do nicely!\n $Remember, I'm not responsible\nif anything bad happens!@d{32} Hehe...", - "selected_message": "The man hands you 5 Rogue Balls.\n ${{pokeName}} hops into the strange machine...\n $Flashing lights and weird noises\nstart coming from the machine!\n $...@d{96} Something emerges\nfrom the device, raging wildly!" + "selected_dialogue": "Let's see, that {{pokeName}} will do nicely!$Remember, I'm not responsible\nif anything bad happens!@d{32} Hehe...", + "selected_message": "The man hands you 5 Rogue Balls.${{pokeName}} hops into the strange machine...$Flashing lights and weird noises\nstart coming from the machine!$...@d{96} Something emerges\nfrom the device, raging wildly!" }, "2": { "label": "Refuse", diff --git a/src/locales/en/mystery-encounters/delibirdy-dialogue.json b/src/locales/en/mystery-encounters/delibirdy-dialogue.json index d5bdf608663..b20e7195659 100644 --- a/src/locales/en/mystery-encounters/delibirdy-dialogue.json +++ b/src/locales/en/mystery-encounters/delibirdy-dialogue.json @@ -10,20 +10,20 @@ "1": { "label": "Give Money", "tooltip": "(-) Give the Delibirds {{money, money}}\n(+) Receive a Gift Item", - "selected": "You toss the money to the Delibirds,\nwho chatter amongst themselves excitedly.\n $They turn back to you and happily give you a present!" + "selected": "You toss the money to the Delibirds,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!" }, "2": { "label": "Give Food", "tooltip": "(-) Give the Delibirds a Berry or Reviver Seed\n(+) Receive a Gift Item", "select_prompt": "Select an item to give.", - "selected": "You toss the {{chosenItem}} to the Delibirds,\nwho chatter amongst themselves excitedly.\n $They turn back to you and happily give you a present!" + "selected": "You toss the {{chosenItem}} to the Delibirds,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!" }, "3": { "label": "Give an Item", "tooltip": "(-) Give the Delibirds a Held Item\n(+) Receive a Gift Item", "select_prompt": "Select an item to give.", - "selected": "You toss the {{chosenItem}} to the Delibirds,\nwho chatter amongst themselves excitedly.\n $They turn back to you and happily give you a present!" + "selected": "You toss the {{chosenItem}} to the Delibirds,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!" } }, - "outro": "The Delibird pack happily waddles off into the distance.\n $What a curious little exchange!" + "outro": "The Delibird pack happily waddles off into the distance.$What a curious little exchange!" } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/department-store-sale-dialogue.json b/src/locales/en/mystery-encounters/department-store-sale-dialogue.json index d7ef07f7462..d651f32665a 100644 --- a/src/locales/en/mystery-encounters/department-store-sale-dialogue.json +++ b/src/locales/en/mystery-encounters/department-store-sale-dialogue.json @@ -1,7 +1,7 @@ { "intro": "It's a lady with a ton of shopping bags.", "speaker": "Shopper", - "intro_dialogue": "Hello! Are you here for\nthe amazing sales too?\n $There's a special coupon that you can\nredeem for a free item during the sale!\n $I have an extra one. Here you go!", + "intro_dialogue": "Hello! Are you here for\nthe amazing sales too?$There's a special coupon that you can\nredeem for a free item during the sale!$I have an extra one. Here you go!", "title": "Department Store Sale", "description": "There is merchandise in every direction! It looks like there are 4 counters where you can redeem the coupon for various items. The possibilities are endless!", "query": "Which counter will you go to?", diff --git a/src/locales/en/mystery-encounters/field-trip-dialogue.json b/src/locales/en/mystery-encounters/field-trip-dialogue.json index 1bb58be363b..d688fe7af97 100644 --- a/src/locales/en/mystery-encounters/field-trip-dialogue.json +++ b/src/locales/en/mystery-encounters/field-trip-dialogue.json @@ -1,7 +1,7 @@ { "intro": "It's a teacher and some school children!", "speaker": "Teacher", - "intro_dialogue": "Hello, there! Would you be able to\nspare a minute for my students?\n $I'm teaching them about Pokémon moves\nand would love to show them a demonstration.\n $Would you mind showing us one of\nthe moves your Pokémon can use?", + "intro_dialogue": "Hello, there! Would you be able to\nspare a minute for my students?$I'm teaching them about Pokémon moves\nand would love to show them a demonstration.$Would you mind showing us one of\nthe moves your Pokémon can use?", "title": "Field Trip", "description": "A teacher is requesting a move demonstration from a Pokémon. Depending on the move you choose, she might have something useful for you in exchange.", "query": "Which move category will you show off?", @@ -19,8 +19,8 @@ "tooltip": "(+) Status Item Rewards" }, "selected": "{{pokeName}} shows off an awesome display of {{move}}!", - "incorrect": "...\n $That isn't a {{moveCategory}} move!\n $I'm sorry, but I can't give you anything.", - "lesson_learned": "Looks like you learned a valuable lesson?\n $Your Pokémon also gained some knowledge." + "incorrect": "...$That isn't a {{moveCategory}} move!$I'm sorry, but I can't give you anything.", + "lesson_learned": "Looks like you learned a valuable lesson?$Your Pokémon also gained some knowledge." }, "second_option_prompt": "Choose a move for your Pokémon to use.", "outro_good": "Thank you so much for your kindness!\nI hope the items I had were helpful!", diff --git a/src/locales/en/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/en/mystery-encounters/fiery-fallout-dialogue.json index 5c36f3a8b99..ea45ddf4bb8 100644 --- a/src/locales/en/mystery-encounters/fiery-fallout-dialogue.json +++ b/src/locales/en/mystery-encounters/fiery-fallout-dialogue.json @@ -7,20 +7,20 @@ "1": { "label": "Find the Source", "tooltip": "(?) Discover the source\n(-) Hard Battle", - "selected": "You push through the storm, and find two Volcarona in the middle of a mating dance!\n $They don't take kindly to the interruption and attack!" + "selected": "You push through the storm, and find two Volcarona in the middle of a mating dance!$They don't take kindly to the interruption and attack!" }, "2": { "label": "Hunker Down", "tooltip": "(-) Suffer the effects of the weather", - "selected": "The weather effects cause significant\nharm as you struggle to find shelter!\n $Your party takes 20% Max HP damage!", + "selected": "The weather effects cause significant\nharm as you struggle to find shelter!$Your party takes 20% Max HP damage!", "target_burned": "Your {{burnedPokemon}} also became burned!" }, "3": { "label": "Your Fire Types Help", "tooltip": "(+) End the conditions\n(+) Gain a Charcoal", "disabled_tooltip": "You need at least 2 Fire Type Pokémon to choose this", - "selected": "Your {{option3PrimaryName}} and {{option3SecondaryName}} guide you to where two Volcarona are in the middle of a mating dance!\n $Thankfully, your Pokémon are able to calm them,\nand they depart without issue." + "selected": "Your {{option3PrimaryName}} and {{option3SecondaryName}} guide you to where two Volcarona are in the middle of a mating dance!$Thankfully, your Pokémon are able to calm them,\nand they depart without issue." } }, - "found_charcoal": "After the weather clears,\nyour {{leadPokemon}} spots something on the ground.\n $@s{item_fanfare}{{leadPokemon}} gained a Charcoal!" + "found_charcoal": "After the weather clears,\nyour {{leadPokemon}} spots something on the ground.$@s{item_fanfare}{{leadPokemon}} gained a Charcoal!" } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/en/mystery-encounters/fight-or-flight-dialogue.json index 3ba99b7ba17..2a82287327c 100644 --- a/src/locales/en/mystery-encounters/fight-or-flight-dialogue.json +++ b/src/locales/en/mystery-encounters/fight-or-flight-dialogue.json @@ -13,7 +13,7 @@ "label": "Steal the Item", "disabled_tooltip": "Your Pokémon need to know certain moves to choose this", "tooltip": "(+) {{option2PrimaryName}} uses {{option2PrimaryMove}}", - "selected": ".@d{32}.@d{32}.@d{32}\n $Your {{option2PrimaryName}} helps you out and uses {{option2PrimaryMove}}!\n $You nabbed the item!" + "selected": ".@d{32}.@d{32}.@d{32}$Your {{option2PrimaryName}} helps you out and uses {{option2PrimaryMove}}!$You nabbed the item!" }, "3": { "label": "Leave", diff --git a/src/locales/en/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/en/mystery-encounters/lost-at-sea-dialogue.json index 8e10a39b479..41709c66799 100644 --- a/src/locales/en/mystery-encounters/lost-at-sea-dialogue.json +++ b/src/locales/en/mystery-encounters/lost-at-sea-dialogue.json @@ -9,19 +9,19 @@ "label_disabled": "Can't {{option1RequiredMove}}", "tooltip": "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", "tooltip_disabled": "You have no Pokémon to {{option1RequiredMove}} on", - "selected": "{{option1PrimaryName}} swims ahead, guiding you back on track.\n ${{option1PrimaryName}} seems to also have gotten stronger in this time of need!" + "selected": "{{option1PrimaryName}} swims ahead, guiding you back on track.${{option1PrimaryName}} seems to also have gotten stronger in this time of need!" }, "2": { "label": "{{option2PrimaryName}} Might Help", "label_disabled": "Can't {{option2RequiredMove}}", "tooltip": "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", "tooltip_disabled": "You have no Pokémon to {{option2RequiredMove}} with", - "selected": "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n ${{option2PrimaryName}} seems to also have gotten stronger in this time of need!" + "selected": "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.${{option2PrimaryName}} seems to also have gotten stronger in this time of need!" }, "3": { "label": "Wander Aimlessly", "tooltip": "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", - "selected": "You float about in the boat, steering without direction until you finally spot a landmark you remember.\n $You and your Pokémon are fatigued from the whole ordeal." + "selected": "You float about in the boat, steering without direction until you finally spot a landmark you remember.$You and your Pokémon are fatigued from the whole ordeal." } }, "outro": "You are back on track." diff --git a/src/locales/en/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/en/mystery-encounters/mysterious-chest-dialogue.json index cbe5df1cda8..3703ec4d606 100644 --- a/src/locales/en/mystery-encounters/mysterious-chest-dialogue.json +++ b/src/locales/en/mystery-encounters/mysterious-chest-dialogue.json @@ -12,7 +12,7 @@ "good": "Some pretty nice tools and items.", "great": "A couple great tools and items!", "amazing": "Whoa! An amazing item!", - "bad": "Oh no!@d{32}\nThe chest was trapped!\n $Your {{pokeName}} jumps in front of you\nbut is KOed in the process." + "bad": "Oh no!@d{32}\nThe chest was trapped!$Your {{pokeName}} jumps in front of you\nbut is KOed in the process." }, "2": { "label": "Too Risky, Leave", diff --git a/src/locales/en/mystery-encounters/part-timer-dialogue.json b/src/locales/en/mystery-encounters/part-timer-dialogue.json index 918b1fb61b8..614f1818e3f 100644 --- a/src/locales/en/mystery-encounters/part-timer-dialogue.json +++ b/src/locales/en/mystery-encounters/part-timer-dialogue.json @@ -1,7 +1,7 @@ { "intro": "A busy worker flags you down.", "speaker": "Worker", - "intro_dialogue": "You look like someone with lots of capable Pokémon!\n $We can pay you if you're able to help us with some part-time work!", + "intro_dialogue": "You look like someone with lots of capable Pokémon!$We can pay you if you're able to help us with some part-time work!", "title": "Part-Timer", "description": "Looks like there are plenty of tasks that need to be done. Depending how well-suited your Pokémon is to a task, they might earn more or less money.", "query": "Which job will you choose?", @@ -24,8 +24,8 @@ "selected": "Your {{option3PrimaryName}} spends the day using {{option3PrimaryMove}} to attract customers to the business!" } }, - "job_complete_good": "Thanks for the assistance!\nYour {{selectedPokemon}} was incredibly helpful!\n $Here's your check for the day.", - "job_complete_bad": "Your {{selectedPokemon}} helped us out a bit!\n $Here's your check for the day.", + "job_complete_good": "Thanks for the assistance!\nYour {{selectedPokemon}} was incredibly helpful!$Here's your check for the day.", + "job_complete_bad": "Your {{selectedPokemon}} helped us out a bit!$Here's your check for the day.", "pokemon_tired": "Your {{selectedPokemon}} is worn out!\nThe PP of all its moves was reduced to 2!", "outro": "Come back and help out again sometime!" } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json index 94904fbcb12..8d59cd03316 100644 --- a/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json +++ b/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -1,7 +1,7 @@ { "intro": "A man in a dark coat approaches you.", "speaker": "Shady Salesman", - "intro_dialogue": ".@d{16}.@d{16}.@d{16}\n $I've got the goods if you've got the money.\n $Make sure your Pokémon can handle it though.", + "intro_dialogue": ".@d{16}.@d{16}.@d{16}$I've got the goods if you've got the money.$Make sure your Pokémon can handle it though.", "title": "The Vitamin Dealer", "description": "The man opens his jacket to reveal some Pokémon vitamins. The numbers he quotes seem like a really good deal. Almost too good...\nHe offers two package deals to choose from.", "query": "Which deal will choose?", @@ -20,10 +20,10 @@ "tooltip": "(-) No Rewards", "selected": "Heh, wouldn't have figured you for a coward." }, - "selected": "The man hands you two bottles and quickly disappears.\n ${{selectedPokemon}} gained {{boost1}} and {{boost2}} boosts!" + "selected": "The man hands you two bottles and quickly disappears.${{selectedPokemon}} gained {{boost1}} and {{boost2}} boosts!" }, - "damage_only": "But the medicine had some side effects!\n $Your {{selectedPokemon}} takes some damage...", - "bad_poison": "But the medicine had some side effects!\n $Your {{selectedPokemon}} takes some damage\nand becomes badly poisoned...", - "poison": "But the medicine had some side effects!\n $Your {{selectedPokemon}} becomes poisoned...", + "damage_only": "But the medicine had some side effects!$Your {{selectedPokemon}} takes some damage...", + "bad_poison": "But the medicine had some side effects!$Your {{selectedPokemon}} takes some damage\nand becomes badly poisoned...", + "poison": "But the medicine had some side effects!$Your {{selectedPokemon}} becomes poisoned...", "no_bad_effects": "Looks like there were no side-effects this time." } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json index 82e202d9367..f6f4da7826a 100644 --- a/src/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json +++ b/src/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json @@ -1,5 +1,5 @@ { - "intro": "As you walk down a narrow pathway, you see a towering silhouette blocking your path.\n $You get closer to see a Snorlax sleeping peacefully.\nIt seems like there's no way around it.", + "intro": "As you walk down a narrow pathway, you see a towering silhouette blocking your path.$You get closer to see a Snorlax sleeping peacefully.\nIt seems like there's no way around it.", "title": "Slumbering Snorlax", "description": "You could attack it to try and get it to move, or simply wait for it to wake up. Who knows how long that could take, though...", "query": "What will you do?", @@ -12,14 +12,14 @@ "2": { "label": "Wait for It to Move", "tooltip": "(-) Wait a Long Time\n(+) Recover Party", - "selected": ".@d{32}.@d{32}.@d{32}\n $You wait for a time, but the Snorlax's yawns make your party sleepy...", + "selected": ".@d{32}.@d{32}.@d{32}$You wait for a time, but the Snorlax's yawns make your party sleepy...", "rest_result": "When you all awaken, the Snorlax is no where to be found -\nbut your Pokémon are all healed!" }, "3": { "label": "Steal Its Item", "tooltip": "(+) {{option3PrimaryName}} uses {{option3PrimaryMove}}\n(+) Special Reward", "disabled_tooltip": "Your Pokémon need to know certain moves to choose this", - "selected": "Your {{option3PrimaryName}} uses {{option3PrimaryMove}}!\n $@s{item_fanfare}It steals Leftovers off the sleeping\nSnorlax and you make out like bandits!" + "selected": "Your {{option3PrimaryName}} uses {{option3PrimaryMove}}!$@s{item_fanfare}It steals Leftovers off the sleeping\nSnorlax and you make out like bandits!" } } } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json index a2665686d88..c295867f521 100644 --- a/src/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json +++ b/src/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json @@ -13,15 +13,15 @@ "label": "A Pokémon Helps", "tooltip": "(-) {{option2PrimaryName}} Helps\n(+) {{option2PrimaryName}} gains EXP\n(?) Teleport to New Biome", "disabled_tooltip": "You need a Steel or Electric Type Pokémon to choose this", - "selected": "{{option2PrimaryName}}'s Type allows it to bypass the machine's paywall!\n $The capsule opens, and you step inside..." + "selected": "{{option2PrimaryName}}'s Type allows it to bypass the machine's paywall!$The capsule opens, and you step inside..." }, "3": { "label": "Inspect the Machine", "tooltip": "(-) Pokémon Battle", - "selected": "You are drawn in by the blinking lights\nand strange noises coming from the machine...\n $You don't even notice as a wild\nPokémon sneaks up and ambushes you!" + "selected": "You are drawn in by the blinking lights\nand strange noises coming from the machine...$You don't even notice as a wild\nPokémon sneaks up and ambushes you!" } }, - "transport": "The machine shakes violently,\nmaking all sorts of strange noises!\n $Just as soon as it had started, it quiets once more.", - "attacked": "You step out into a completely new area, startling a wild Pokémon!\n $The wild Pokémon attacks!", + "transport": "The machine shakes violently,\nmaking all sorts of strange noises!$Just as soon as it had started, it quiets once more.", + "attacked": "You step out into a completely new area, startling a wild Pokémon!$The wild Pokémon attacks!", "boss_enraged": "The opposing {{enemyPokemon}} has become enraged!" } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json index 88e93782062..7e8091bbfff 100644 --- a/src/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json +++ b/src/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -12,12 +12,12 @@ "tooltip": "(-) Pay {{price, money}}\n(+) Gain a {{purchasePokemon}} with its Hidden Ability", "tooltip_shiny": "(-) Pay {{price, money}}\n(+) Gain a shiny {{purchasePokemon}}", "selected_message": "You paid an outrageous sum and bought the {{purchasePokemon}}.", - "selected_dialogue": "Excellent choice!\n $I can see you've a keen eye for business.\n $Oh, yeah...@d{64} Returns not accepted, got that?" + "selected_dialogue": "Excellent choice!$I can see you've a keen eye for business.$Oh, yeah...@d{64} Returns not accepted, got that?" }, "2": { "label": "Refuse", "tooltip": "(-) No Rewards", - "selected": "No?@d{32} You say no?\n $I'm only doing this as a favor to you!" + "selected": "No?@d{32} You say no?$I'm only doing this as a favor to you!" } } } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/en/mystery-encounters/the-strong-stuff-dialogue.json index b0174486b29..1cc35267d00 100644 --- a/src/locales/en/mystery-encounters/the-strong-stuff-dialogue.json +++ b/src/locales/en/mystery-encounters/the-strong-stuff-dialogue.json @@ -8,7 +8,7 @@ "label": "Let It Touch You", "tooltip": "(?) Something awful or amazing might happen", "selected": "You black out.", - "selected_2": "@f{150}When you awaken, the Shuckle is gone\nand juice stash completely drained.\n $Your {{highBstPokemon}} feels a\nterrible lethargy come over it!\n $Its base stats were reduced by 20 in each stat!\n $Your remaining Pokémon feel an incredible vigor, though!\n $Their base stats are increased by 10 in each stat!" + "selected_2": "@f{150}When you awaken, the Shuckle is gone\nand juice stash completely drained.$Your {{highBstPokemon}} feels a\nterrible lethargy come over it!$Its base stats were reduced by 20 in each stat!$Your remaining Pokémon feel an incredible vigor, though!$Their base stats are increased by 10 in each stat!" }, "2": { "label": "Battle the Shuckle", diff --git a/src/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json index 9f50b6abae1..11829896be4 100644 --- a/src/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json +++ b/src/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -1,7 +1,7 @@ { "intro": "It's a family standing outside their house!", "speaker": "The Winstrates", - "intro_dialogue": "We're the Winstrates!\n $What do you say to taking on our family in a series of Pokémon battles?", + "intro_dialogue": "We're the Winstrates!$What do you say to taking on our family in a series of Pokémon battles?", "title": "The Winstrate Challenge", "description": "The Winstrates are a family of 5 trainers, and they want to battle! If you beat all of them back-to-back, they'll give you a grand prize. But can you handle the heat?", "query": "What will you do?", @@ -17,5 +17,5 @@ "selected": "That's too bad. Say, your team looks worn out, why don't you stay awhile and rest?" } }, - "victory": "Congratulations on beating our challenge!\n $Our family uses this Macho Brace to strengthen our Pokémon more effectively during their training.\n $You may not need it, considering that you beat the whole lot of us, but we hope you'll accept it anyway!" + "victory": "Congratulations on beating our challenge!$Our family uses this Macho Brace to strengthen our Pokémon more effectively during their training.$You may not need it, considering that you beat the whole lot of us, but we hope you'll accept it anyway!" } \ No newline at end of file diff --git a/src/locales/en/mystery-encounters/training-session-dialogue.json b/src/locales/en/mystery-encounters/training-session-dialogue.json index 62e89cd1dae..3cad95d1603 100644 --- a/src/locales/en/mystery-encounters/training-session-dialogue.json +++ b/src/locales/en/mystery-encounters/training-session-dialogue.json @@ -8,19 +8,19 @@ "1": { "label": "Light Training", "tooltip": "(-) Light Battle\n(+) Improve 2 Random IVs of Pokémon", - "finished": "{{selectedPokemon}} returns, feeling\nworn out but accomplished!\n $Its {{stat1}} and {{stat2}} IVs were improved!" + "finished": "{{selectedPokemon}} returns, feeling\nworn out but accomplished!$Its {{stat1}} and {{stat2}} IVs were improved!" }, "2": { "label": "Moderate Training", "tooltip": "(-) Moderate Battle\n(+) Change Pokémon's Nature", "select_prompt": "Select a new nature\nto train your Pokémon in.", - "finished": "{{selectedPokemon}} returns, feeling\nworn out but accomplished!\n $Its nature was changed to {{nature}}!" + "finished": "{{selectedPokemon}} returns, feeling\nworn out but accomplished!$Its nature was changed to {{nature}}!" }, "3": { "label": "Heavy Training", "tooltip": "(-) Harsh Battle\n(+) Change Pokémon's Ability", "select_prompt": "Select a new ability\nto train your Pokémon in.", - "finished": "{{selectedPokemon}} returns, feeling\nworn out but accomplished!\n $Its ability was changed to {{ability}}!" + "finished": "{{selectedPokemon}} returns, feeling\nworn out but accomplished!$Its ability was changed to {{ability}}!" }, "selected": "{{selectedPokemon}} moves across\nthe clearing to face you..." }, diff --git a/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json index 1ec4a7102d7..ae6e63ed800 100644 --- a/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json @@ -7,7 +7,7 @@ "1": { "label": "Dig for Valuables", "tooltip": "(-) Lose Healing Items in Shops\n(+) Gain Amazing Items", - "selected": "You wade through the garbage pile, becoming mired in filth.\n $There's no way any respectable shopkeepers\nwill sell you anything in your grimy state!\n $You'll just have to make do without shop healing items.\n $However, you found some incredible items in the garbage!" + "selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeepers\nwill sell you anything in your grimy state!$You'll just have to make do without shop healing items.$However, you found some incredible items in the garbage!" }, "2": { "label": "Investigate Further", diff --git a/src/locales/en/mystery-encounters/weird-dream-dialogue.json b/src/locales/en/mystery-encounters/weird-dream-dialogue.json index 254c161d92d..44acde84002 100644 --- a/src/locales/en/mystery-encounters/weird-dream-dialogue.json +++ b/src/locales/en/mystery-encounters/weird-dream-dialogue.json @@ -1,7 +1,7 @@ { "intro": "A shadowy woman blocks your path.\nSomething about her is unsettling...", "speaker": "Woman", - "intro_dialogue": "I have seen your futures, your pasts...\n $Child, do you see them too?", + "intro_dialogue": "I have seen your futures, your pasts...$Child, do you see them too?", "title": "???", "description": "The woman's words echo in your head. It wasn't just a singular voice, but a vast multitude, from all timelines and realities. You begin to feel dizzy, the question lingering on your mind...\n\n@[TOOLTIP_TITLE]{\"I have seen your futures, your pasts... Child, do you see them too?\"}", "query": "What will you do?", @@ -9,14 +9,14 @@ "1": { "label": "\"I See Them\"", "tooltip": "@[SUMMARY_GREEN]{(?) Affects your Pokémon}", - "selected": "Her hand reaches out to touch you,\nand everything goes black.\n $Then...@d{64} You see everything.\nEvery timeline, all your different selves,\n past and future.\n $Everything that has made you,\neverything you will become...@d{64}", + "selected": "Her hand reaches out to touch you,\nand everything goes black.$Then...@d{64} You see everything.\nEvery timeline, all your different selves,\n past and future.$Everything that has made you,\neverything you will become...@d{64}", "cutscene": "You see your Pokémon,@d{32} converging from\nevery reality to become something new...@d{64}", - "dream_complete": "When you awaken, the woman - was it a woman or a ghost? - is gone...\n $.@d{32}.@d{32}.@d{32}\n $Your Pokémon team has changed...\nOr is it the same team you've always had?" + "dream_complete": "When you awaken, the woman - was it a woman or a ghost? - is gone...$.@d{32}.@d{32}.@d{32}$Your Pokémon team has changed...\nOr is it the same team you've always had?" }, "2": { "label": "Quickly Leave", "tooltip": "(-) Affects your Pokémon", - "selected": "You tear your mind from a numbing grip, and hastily depart.\n $When you finally stop to collect yourself, you check the Pokémon in your team.\n $For some reason, all of their levels have decreased!" + "selected": "You tear your mind from a numbing grip, and hastily depart.$When you finally stop to collect yourself, you check the Pokémon in your team.$For some reason, all of their levels have decreased!" } } } \ No newline at end of file diff --git a/src/locales/en/trainer-classes.json b/src/locales/en/trainer-classes.json index f3b81b06acb..1b827281a6a 100644 --- a/src/locales/en/trainer-classes.json +++ b/src/locales/en/trainer-classes.json @@ -117,15 +117,5 @@ "plasma_grunts": "Plasma Grunts", "flare_grunt": "Flare Grunt", "flare_grunt_female": "Flare Grunt", - "flare_grunts": "Flare Grunts", - "buck": "Buck", - "cheryl": "Cheryl", - "marley": "Marley", - "mira": "Mira", - "riley": "Riley", - "victor": "Victor", - "victoria": "Victoria", - "vivi": "Vivi", - "vicky": "Vicky", - "vito": "Vito" + "flare_grunts": "Flare Grunts" } \ No newline at end of file diff --git a/src/locales/en/trainer-names.json b/src/locales/en/trainer-names.json index 1d4cddf3411..077e7068512 100644 --- a/src/locales/en/trainer-names.json +++ b/src/locales/en/trainer-names.json @@ -152,5 +152,16 @@ "alder_iris_double": "Alder & Iris", "iris_alder_double": "Iris & Alder", "marnie_piers_double": "Marnie & Piers", - "piers_marnie_double": "Piers & Marnie" + "piers_marnie_double": "Piers & Marnie", + "buck": "Buck", + "cheryl": "Cheryl", + "marley": "Marley", + "mira": "Mira", + "riley": "Riley", + "victor": "Victor", + "victoria": "Victoria", + "vivi": "Vivi", + "vicky": "Vicky", + "vito": "Vito", + "bug_type_superfan": "Bug-Type Superfan" } \ No newline at end of file diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 6a70b4c7737..8322c1ea63d 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1536,8 +1536,9 @@ export const modifierTypes = { } return new PokemonBaseStatFlatModifierType(Utils.randSeedInt(20), [Stat.HP, Stat.ATK, Stat.DEF]); }), - MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_BLACK_SLUDGE", "black_sludge", (type, _args) => new Modifiers.RemoveHealShopModifier(type)), + MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_BLACK_SLUDGE", "black_sludge", (type, _args) => new Modifiers.HealShopCostModifier(type)), MYSTERY_ENCOUNTER_MACHO_BRACE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_MACHO_BRACE", "macho_brace", (type, args) => new Modifiers.PokemonIncrementingStatModifier(type, (args[0] as Pokemon).id)), + MYSTERY_ENCOUNTER_GOLDEN_BUG_NET: () => new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_GOLDEN_BUG_NET", "golden_net", (type, _args) => new Modifiers.BoostBugSpawnModifier(type)), }; interface ModifierPool { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index a2ce1eacc3f..bbc2e31b836 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -734,7 +734,8 @@ export class PokemonBaseStatTotalModifier extends PokemonHeldItemModifier { apply(args: any[]): boolean { // Modifies the passed in baseStats[] array args[1].forEach((v, i) => { - const newVal = Math.floor(v + this.statModifier); + // HP is affected by half as much as other stats + const newVal = i === 0 ? Math.floor(v + this.statModifier / 2) : Math.floor(v + this.statModifier); args[1][i] = Math.min(Math.max(newVal, 1), 999999); }); @@ -2366,17 +2367,41 @@ export class LockModifierTiersModifier extends PersistentModifier { } } -export class RemoveHealShopModifier extends PersistentModifier { +export class HealShopCostModifier extends PersistentModifier { constructor(type: ModifierType, stackCount?: integer) { super(type, stackCount); } match(modifier: Modifier): boolean { - return modifier instanceof RemoveHealShopModifier; + return modifier instanceof HealShopCostModifier; } - clone(): RemoveHealShopModifier { - return new RemoveHealShopModifier(this.type, this.stackCount); + clone(): HealShopCostModifier { + return new HealShopCostModifier(this.type, this.stackCount); + } + + apply(args: any[]): boolean { + (args[0] as Utils.IntegerHolder).value *= Math.pow(3, this.getStackCount()); + + return true; + } + + getMaxStackCount(scene: BattleScene): integer { + return 1; + } +} + +export class BoostBugSpawnModifier extends PersistentModifier { + constructor(type: ModifierType, stackCount?: integer) { + super(type, stackCount); + } + + match(modifier: Modifier): boolean { + return modifier instanceof BoostBugSpawnModifier; + } + + clone(): HealShopCostModifier { + return new BoostBugSpawnModifier(this.type, this.stackCount); } apply(args: any[]): boolean { diff --git a/src/overrides.ts b/src/overrides.ts index 1ec9df4b442..41f261b73df 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -131,9 +131,9 @@ class DefaultOverrides { // MYSTERY ENCOUNTER OVERRIDES // ------------------------- // 1 to 256, set to null to ignore - readonly MYSTERY_ENCOUNTER_RATE_OVERRIDE: number | null = null; + readonly MYSTERY_ENCOUNTER_RATE_OVERRIDE: number | null = 256; readonly MYSTERY_ENCOUNTER_TIER_OVERRIDE: MysteryEncounterTier | null = null; - readonly MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType | null = null; + readonly MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType | null = MysteryEncounterType.BUG_TYPE_SUPERFAN; // ------------------------- // MODIFIER / ITEM OVERRIDES diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index de0262bd70a..ec4a4d8fb62 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -31,6 +31,8 @@ import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { doTrainerExclamation } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; +import { randSeedInt } from "#app/utils"; +import { getGoldenBugNetSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; export class EncounterPhase extends BattlePhase { private loaded: boolean; @@ -89,7 +91,11 @@ export class EncounterPhase extends BattlePhase { if (battle.battleType === BattleType.TRAINER) { battle.enemyParty[e] = battle.trainer?.genPartyMember(e)!; // TODO:: is the bang correct here? } else { - const enemySpecies = this.scene.randomSpecies(battle.waveIndex, level, true); + let enemySpecies = this.scene.randomSpecies(battle.waveIndex, level, true); + // If player has golden bug net, rolls 10% chance to replace with species from the golden bug net bug pool + if (randSeedInt(10) === 0) { + enemySpecies = getGoldenBugNetSpecies(this.scene, battle.waveIndex, level); + } battle.enemyParty[e] = this.scene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, !!this.scene.getEncounterBossSegments(battle.waveIndex, level, enemySpecies)); if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { battle.enemyParty[e].ivs = new Array(6).fill(31); diff --git a/src/phases/modifier-reward-phase.ts b/src/phases/modifier-reward-phase.ts index 4d083a367a6..87167893e3e 100644 --- a/src/phases/modifier-reward-phase.ts +++ b/src/phases/modifier-reward-phase.ts @@ -22,7 +22,7 @@ export class ModifierRewardPhase extends BattlePhase { return new Promise(resolve => { const newModifier = this.modifierType.newModifier(); this.scene.addModifier(newModifier).then(() => { - this.scene.playSound("item_fanfare"); + this.scene.playSound("bgm/item_fanfare"); this.scene.ui.showText(i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name }), null, () => resolve(), null, true); }); }); diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 52b4f0163db..92850b3b38e 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -418,23 +418,35 @@ export class MysteryEncounterRewardsPhase extends Phase { }); } else { this.scene.executeWithSeedOffset(() => { - if (this.scene.currentBattle.mysteryEncounter.doEncounterExp) { - this.scene.currentBattle.mysteryEncounter.doEncounterExp(this.scene); - } - - if (this.scene.currentBattle.mysteryEncounter.doEncounterRewards) { - this.scene.currentBattle.mysteryEncounter.doEncounterRewards(this.scene); - } else if (this.addHealPhase) { - this.scene.tryRemovePhase(p => p instanceof SelectModifierPhase); - this.scene.unshiftPhase(new SelectModifierPhase(this.scene, 0, undefined, { fillRemaining: false, rerollMultiplier: 0 })); + if (encounter.onRewards) { + encounter.onRewards(this.scene).then(() => { + this.doEncounterRewardsAndContinue(); + }); + } else { + this.doEncounterRewardsAndContinue(); } // Do not use ME's seedOffset for rewards, these should always be consistent with waveIndex (once per wave) }, this.scene.currentBattle.waveIndex * 1000); - - this.scene.pushPhase(new PostMysteryEncounterPhase(this.scene)); - this.end(); } } + + doEncounterRewardsAndContinue() { + const encounter = this.scene.currentBattle.mysteryEncounter; + + if (encounter.doEncounterExp) { + encounter.doEncounterExp(this.scene); + } + + if (encounter.doEncounterRewards) { + encounter.doEncounterRewards(this.scene); + } else if (this.addHealPhase) { + this.scene.tryRemovePhase(p => p instanceof SelectModifierPhase); + this.scene.unshiftPhase(new SelectModifierPhase(this.scene, 0, undefined, { fillRemaining: false, rerollMultiplier: 0 })); + } + + this.scene.pushPhase(new PostMysteryEncounterPhase(this.scene)); + this.end(); + } } /** diff --git a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 136df416ea7..0fe8e27b44f 100644 --- a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -137,7 +137,7 @@ describe("Delibird-y - Mystery Encounter", () => { // 5 Healing Charms scene.modifiers = []; - const abilityCharm = generateModifierType(scene, modifierTypes.ABILITY_CHARM).newModifier() as HiddenAbilityRateBoosterModifier; + const abilityCharm = generateModifierType(scene, modifierTypes.ABILITY_CHARM)!.newModifier() as HiddenAbilityRateBoosterModifier; abilityCharm.stackCount = 4; await scene.addModifier(abilityCharm, true, false, false, true); await scene.updateModifiers(true); @@ -206,7 +206,7 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 2 Sitrus berries on party lead scene.modifiers = []; - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]); + const sitrus = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS])!; const sitrusMod = sitrus.newModifier(scene.getParty()[0]) as BerryModifier; sitrusMod.stackCount = 2; await scene.addModifier(sitrusMod, true, false, false, true); @@ -227,7 +227,7 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Reviver Seed on party lead scene.modifiers = []; - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED); + const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getParty()[0]) as PokemonInstantReviveModifier; modifier.stackCount = 1; await scene.addModifier(modifier, true, false, false, true); @@ -248,10 +248,10 @@ describe("Delibird-y - Mystery Encounter", () => { // 99 Candy Jars scene.modifiers = []; - const candyJar = generateModifierType(scene, modifierTypes.CANDY_JAR).newModifier() as LevelIncrementBoosterModifier; + const candyJar = generateModifierType(scene, modifierTypes.CANDY_JAR)!.newModifier() as LevelIncrementBoosterModifier; candyJar.stackCount = 99; await scene.addModifier(candyJar, true, false, false, true); - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]); + const sitrus = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS])!; // Sitrus berries on party const sitrusMod = sitrus.newModifier(scene.getParty()[0]) as BerryModifier; @@ -277,12 +277,12 @@ describe("Delibird-y - Mystery Encounter", () => { // 5 Healing Charms scene.modifiers = []; - const healingCharm = generateModifierType(scene, modifierTypes.HEALING_CHARM).newModifier() as HealingBoosterModifier; + const healingCharm = generateModifierType(scene, modifierTypes.HEALING_CHARM)!.newModifier() as HealingBoosterModifier; healingCharm.stackCount = 5; await scene.addModifier(healingCharm, true, false, false, true); // Set 1 Reviver Seed on party lead - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED); + const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getParty()[0]) as PokemonInstantReviveModifier; modifier.stackCount = 1; await scene.addModifier(modifier, true, false, false, true); @@ -306,7 +306,7 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW); + const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getParty()[0]); await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); @@ -334,7 +334,7 @@ describe("Delibird-y - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); // Set 1 Reviver Seed on party lead - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED); + const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getParty()[0]) as PokemonInstantReviveModifier; modifier.stackCount = 1; await scene.addModifier(modifier, true, false, false, true); @@ -368,7 +368,7 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 2 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW); + const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 2; await scene.addModifier(modifier, true, false, false, true); @@ -389,7 +389,7 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW); + const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 1; await scene.addModifier(modifier, true, false, false, true); @@ -410,12 +410,12 @@ describe("Delibird-y - Mystery Encounter", () => { // 5 Healing Charms scene.modifiers = []; - const healingCharm = generateModifierType(scene, modifierTypes.BERRY_POUCH).newModifier() as PreserveBerryModifier; + const healingCharm = generateModifierType(scene, modifierTypes.BERRY_POUCH)!.newModifier() as PreserveBerryModifier; healingCharm.stackCount = 3; await scene.addModifier(healingCharm, true, false, false, true); // Set 1 Soul Dew on party lead - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW); + const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 1; await scene.addModifier(modifier, true, false, false, true); @@ -439,7 +439,7 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Reviver Seed on party lead scene.modifiers = []; - const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED); + const revSeed = generateModifierType(scene, modifierTypes.REVIVER_SEED)!; const modifier = revSeed.newModifier(scene.getParty()[0]); await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); @@ -468,7 +468,7 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 1 Soul Dew on party lead scene.modifiers = []; - const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW); + const soulDew = generateModifierType(scene, modifierTypes.SOUL_DEW)!; const modifier = soulDew.newModifier(scene.getParty()[0]) as PokemonNatureWeightModifier; modifier.stackCount = 1; await scene.addModifier(modifier, true, false, false, true); diff --git a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 2a60c4686e2..319a5daa38b 100644 --- a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -13,7 +13,7 @@ import BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { HitHealModifier, RemoveHealShopModifier, TurnHealModifier } from "#app/modifier/modifier"; +import { HitHealModifier, HealShopCostModifier, TurnHealModifier } from "#app/modifier/modifier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; @@ -150,7 +150,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { expect(shellBell).toBeDefined(); expect(shellBell?.stackCount).toBe(2); - const blackSludge = scene.findModifier(m => m instanceof RemoveHealShopModifier) as RemoveHealShopModifier; + const blackSludge = scene.findModifier(m => m instanceof HealShopCostModifier) as HealShopCostModifier; expect(blackSludge).toBeDefined(); expect(blackSludge?.stackCount).toBe(1); }); diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 2ea053f47b4..18a4cbba09a 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -4,7 +4,7 @@ import { getPokeballAtlasKey, PokeballType } from "../data/pokeball"; import { addTextObject, getTextStyleOptions, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; import AwaitableUiHandler from "./awaitable-ui-handler"; import { Mode } from "./ui"; -import { LockModifierTiersModifier, PokemonHeldItemModifier, RemoveHealShopModifier } from "../modifier/modifier"; +import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifier } from "../modifier/modifier"; import { handleTutorial, Tutorial } from "../tutorial"; import { Button } from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; @@ -13,6 +13,7 @@ import * as Utils from "./../utils"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; +import { IntegerHolder } from "./../utils"; export const SHOP_OPTIONS_ROW_LIMIT = 6; @@ -171,9 +172,11 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.updateRerollCostText(); const typeOptions = args[1] as ModifierTypeOption[]; - const removeHealShop = this.scene.gameMode.hasNoShop || !!this.scene.findModifier(m => m instanceof RemoveHealShopModifier); + const removeHealShop = this.scene.gameMode.hasNoShop; + const baseShopCost = new IntegerHolder(this.scene.getWaveMoneyAmount(1)); + this.scene.applyModifier(HealShopCostModifier, true, baseShopCost); const shopTypeOptions = !removeHealShop - ? getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, this.scene.getWaveMoneyAmount(1)) + ? getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, baseShopCost.value) : []; const optionsYOffset = shopTypeOptions.length >= SHOP_OPTIONS_ROW_LIMIT ? -8 : -24;