diff --git a/public/images/items.json b/public/images/items.json index 9ba66e483f5..95f716f186a 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 267, - "h": 267 + "w": 281, + "h": 281 }, "scale": 1, "frames": [ @@ -324,6 +324,27 @@ "h": 23 } }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 259, + "y": 0, + "w": 22, + "h": 24 + } + }, { "filename": "catching_charm", "rotated": false, @@ -409,7 +430,7 @@ } }, { - "filename": "max_revive", + "filename": "rare_candy", "rotated": false, "trimmed": true, "sourceSize": { @@ -417,20 +438,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 24 + "x": 4, + "y": 5, + "w": 23, + "h": 23 }, "frame": { "x": 0, "y": 174, - "w": 22, - "h": 24 + "w": 23, + "h": 23 } }, { - "filename": "black_belt", + "filename": "rarer_candy", "rotated": false, "trimmed": true, "sourceSize": { @@ -438,36 +459,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 0, - "y": 198, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, + "x": 4, "y": 5, - "w": 22, + "w": 23, "h": 23 }, "frame": { "x": 0, - "y": 221, - "w": 22, + "y": 197, + "w": 23, "h": 23 } }, @@ -487,11 +487,53 @@ }, "frame": { "x": 0, - "y": 244, + "y": 220, "w": 24, "h": 23 } }, + { + "filename": "twisted_spoon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 0, + "y": 243, + "w": 24, + "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": 0, + "y": 266, + "w": 24, + "h": 15 + } + }, { "filename": "oval_charm", "rotated": false, @@ -535,7 +577,28 @@ } }, { - "filename": "dragon_fang", + "filename": "black_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 23, + "y": 120, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -545,13 +608,13 @@ "spriteSourceSize": { "x": 5, "y": 5, - "w": 21, + "w": 22, "h": 23 }, "frame": { "x": 23, - "y": 120, - "w": 21, + "y": 143, + "w": 22, "h": 23 } }, @@ -571,11 +634,95 @@ }, "frame": { "x": 23, - "y": 143, + "y": 166, "w": 22, "h": 23 } }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 23, + "y": 189, + "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": 24, + "y": 212, + "w": 21, + "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": 24, + "y": 235, + "w": 21, + "h": 23 + } + }, + { + "filename": "stick", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 24, + "y": 258, + "w": 23, + "h": 23 + } + }, { "filename": "calcium", "rotated": false, @@ -681,27 +828,6 @@ "h": 24 } }, - { - "filename": "twisted_spoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 44, - "y": 96, - "w": 24, - "h": 23 - } - }, { "filename": "exp_balance", "rotated": false, @@ -718,32 +844,11 @@ }, "frame": { "x": 44, - "y": 119, + "y": 96, "w": 24, "h": 22 } }, - { - "filename": "rare_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 45, - "y": 141, - "w": 23, - "h": 23 - } - }, { "filename": "exp_share", "rotated": false, @@ -759,8 +864,8 @@ "h": 22 }, "frame": { - "x": 74, - "y": 24, + "x": 45, + "y": 118, "w": 24, "h": 22 } @@ -780,75 +885,12 @@ "h": 22 }, "frame": { - "x": 98, - "y": 24, + "x": 45, + "y": 140, "w": 23, "h": 22 } }, - { - "filename": "rarer_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 121, - "y": 24, - "w": 23, - "h": 23 - } - }, - { - "filename": "stick", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 144, - "y": 24, - "w": 23, - "h": 23 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 167, - "y": 24, - "w": 22, - "h": 23 - } - }, { "filename": "petaya_berry", "rotated": false, @@ -864,8 +906,8 @@ "h": 23 }, "frame": { - "x": 189, - "y": 24, + "x": 45, + "y": 162, "w": 22, "h": 23 } @@ -885,8 +927,8 @@ "h": 23 }, "frame": { - "x": 211, - "y": 23, + "x": 45, + "y": 185, "w": 22, "h": 23 } @@ -906,8 +948,8 @@ "h": 22 }, "frame": { - "x": 233, - "y": 23, + "x": 45, + "y": 208, "w": 22, "h": 22 } @@ -926,13 +968,202 @@ "w": 22, "h": 22 }, + "frame": { + "x": 45, + "y": 230, + "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": 74, + "y": 24, + "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": 96, + "y": 24, + "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": 118, + "y": 24, + "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": 140, + "y": 24, + "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": 162, + "y": 24, + "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": 184, + "y": 24, + "w": 22, + "h": 22 + } + }, + { + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, "frame": { "x": 75, "y": 46, + "w": 21, + "h": 23 + } + }, + { + "filename": "mini_black_hole", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 96, + "y": 46, "w": 22, "h": 22 } }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 118, + "y": 46, + "w": 23, + "h": 21 + } + }, { "filename": "sacred_ash", "rotated": false, @@ -948,7 +1179,7 @@ "h": 20 }, "frame": { - "x": 97, + "x": 141, "y": 46, "w": 24, "h": 20 @@ -969,56 +1200,14 @@ "h": 20 }, "frame": { - "x": 121, - "y": 47, + "x": 165, + "y": 46, "w": 24, "h": 20 } }, { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 145, - "y": 47, - "w": 23, - "h": 20 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 168, - "y": 47, - "w": 23, - "h": 21 - } - }, - { - "filename": "dawn_stone", + "filename": "mystic_water", "rotated": false, "trimmed": true, "sourceSize": { @@ -1027,374 +1216,17 @@ }, "spriteSourceSize": { "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 191, - "y": 47, - "w": 20, - "h": 21 - } - }, - { - "filename": "electirizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 211, - "y": 46, - "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": 233, - "y": 45, - "w": 22, - "h": 22 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, + "w": 20, "h": 23 }, "frame": { "x": 76, - "y": 68, - "w": 21, + "y": 69, + "w": 20, "h": 23 } }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 97, - "y": 66, - "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": 119, - "y": 67, - "w": 22, - "h": 21 - } - }, - { - "filename": "guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 141, - "y": 67, - "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": 163, - "y": 68, - "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": 185, - "y": 68, - "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": 207, - "y": 68, - "w": 22, - "h": 22 - } - }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 255, - "y": 23, - "w": 12, - "h": 17 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 68, - "y": 96, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 68, - "y": 120, - "w": 18, - "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": 68, - "y": 144, - "w": 19, - "h": 20 - } - }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 23, - "y": 166, - "w": 24, - "h": 18 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 22, - "y": 184, - "w": 21, - "h": 23 - } - }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 22, - "y": 207, - "w": 21, - "h": 23 - } - }, - { - "filename": "reviver_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 8, - "w": 23, - "h": 20 - }, - "frame": { - "x": 47, - "y": 164, - "w": 23, - "h": 20 - } - }, { "filename": "protector", "rotated": false, @@ -1410,12 +1242,138 @@ "h": 22 }, "frame": { - "x": 43, - "y": 184, + "x": 96, + "y": 68, "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": 118, + "y": 67, + "w": 21, + "h": 23 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 189, + "y": 46, + "w": 19, + "h": 20 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 47, + "y": 252, + "w": 18, + "h": 24 + } + }, + { + "filename": "leftovers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 15, + "h": 22 + }, + "frame": { + "x": 68, + "y": 96, + "w": 15, + "h": 22 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 69, + "y": 118, + "w": 15, + "h": 23 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 68, + "y": 141, + "w": 20, + "h": 21 + } + }, { "filename": "shed_shell", "rotated": false, @@ -1431,33 +1389,12 @@ "h": 22 }, "frame": { - "x": 43, - "y": 206, + "x": 67, + "y": 162, "w": 22, "h": 22 } }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 70, - "y": 164, - "w": 19, - "h": 20 - } - }, { "filename": "starf_berry", "rotated": false, @@ -1473,7 +1410,7 @@ "h": 22 }, "frame": { - "x": 65, + "x": 67, "y": 184, "w": 22, "h": 22 @@ -1494,12 +1431,33 @@ "h": 22 }, "frame": { - "x": 65, + "x": 67, "y": 206, "w": 22, "h": 22 } }, + { + "filename": "tm_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 67, + "y": 228, + "w": 22, + "h": 22 + } + }, { "filename": "hp_up", "rotated": false, @@ -1515,54 +1473,12 @@ "h": 24 }, "frame": { - "x": 86, - "y": 91, + "x": 83, + "y": 92, "w": 16, "h": 24 } }, - { - "filename": "tm_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 102, - "y": 88, - "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": 124, - "y": 88, - "w": 17, - "h": 23 - } - }, { "filename": "tm_dark", "rotated": false, @@ -1578,14 +1494,14 @@ "h": 22 }, "frame": { - "x": 141, - "y": 89, + "x": 99, + "y": 90, "w": 22, "h": 22 } }, { - "filename": "liechi_berry", + "filename": "max_elixir", "rotated": false, "trimmed": true, "sourceSize": { @@ -1593,58 +1509,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 + "x": 7, + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 163, + "x": 121, "y": 90, - "w": 22, - "h": 21 - } - }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 185, - "y": 90, - "w": 23, - "h": 20 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 208, - "y": 90, - "w": 22, - "h": 20 + "w": 18, + "h": 24 } }, { @@ -1662,12 +1536,138 @@ "h": 24 }, "frame": { - "x": 86, - "y": 115, + "x": 84, + "y": 116, "w": 16, "h": 24 } }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 100, + "y": 112, + "w": 21, + "h": 21 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 121, + "y": 114, + "w": 19, + "h": 19 + } + }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 88, + "y": 140, + "w": 19, + "h": 22 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 89, + "y": 162, + "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": 89, + "y": 186, + "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": 89, + "y": 210, + "w": 17, + "h": 24 + } + }, { "filename": "tm_dragon", "rotated": false, @@ -1683,8 +1683,8 @@ "h": 22 }, "frame": { - "x": 102, - "y": 110, + "x": 107, + "y": 133, "w": 22, "h": 22 } @@ -1704,8 +1704,8 @@ "h": 22 }, "frame": { - "x": 124, - "y": 111, + "x": 107, + "y": 155, "w": 22, "h": 22 } @@ -1725,14 +1725,14 @@ "h": 22 }, "frame": { - "x": 146, - "y": 111, + "x": 107, + "y": 177, "w": 22, "h": 22 } }, { - "filename": "lure", + "filename": "max_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -1746,12 +1746,201 @@ "h": 24 }, "frame": { - "x": 168, - "y": 111, + "x": 129, + "y": 133, "w": 17, "h": 24 } }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 129, + "y": 157, + "w": 17, + "h": 24 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 129, + "y": 181, + "w": 23, + "h": 20 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 107, + "y": 199, + "w": 22, + "h": 20 + } + }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 129, + "y": 201, + "w": 24, + "h": 18 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 106, + "y": 219, + "w": 24, + "h": 18 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 130, + "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": 89, + "y": 234, + "w": 17, + "h": 20 + } + }, + { + "filename": "ability_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 9, + "w": 24, + "h": 14 + }, + "frame": { + "x": 106, + "y": 237, + "w": 24, + "h": 14 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 130, + "y": 239, + "w": 23, + "h": 20 + } + }, { "filename": "tm_fighting", "rotated": false, @@ -1767,8 +1956,8 @@ "h": 22 }, "frame": { - "x": 185, - "y": 110, + "x": 65, + "y": 259, "w": 22, "h": 22 } @@ -1788,54 +1977,12 @@ "h": 22 }, "frame": { - "x": 207, - "y": 110, + "x": 87, + "y": 259, "w": 22, "h": 22 } }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 87, - "y": 139, - "w": 18, - "h": 24 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 89, - "y": 163, - "w": 21, - "h": 21 - } - }, { "filename": "tm_flying", "rotated": false, @@ -1851,8 +1998,8 @@ "h": 22 }, "frame": { - "x": 87, - "y": 184, + "x": 109, + "y": 259, "w": 22, "h": 22 } @@ -1872,470 +2019,8 @@ "h": 22 }, "frame": { - "x": 87, - "y": 206, - "w": 22, - "h": 22 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 105, - "y": 132, - "w": 18, - "h": 24 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 123, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 145, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 167, - "y": 135, - "w": 20, - "h": 20 - } - }, - { - "filename": "tm_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 187, - "y": 132, - "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": 209, - "y": 132, - "w": 20, - "h": 23 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 110, - "y": 156, - "w": 17, - "h": 24 - } - }, - { - "filename": "tm_normal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 127, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_poison", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 149, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 171, - "y": 155, - "w": 19, - "h": 22 - } - }, - { - "filename": "spell_tag", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 190, - "y": 154, - "w": 19, - "h": 21 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 209, - "y": 155, - "w": 20, - "h": 20 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 127, - "y": 177, - "w": 24, - "h": 18 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 151, - "y": 177, - "w": 22, - "h": 19 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 110, - "y": 180, - "w": 17, - "h": 20 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 109, - "y": 200, - "w": 17, - "h": 24 - } - }, - { - "filename": "hard_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 173, - "y": 177, - "w": 19, - "h": 20 - } - }, - { - "filename": "tm_psychic", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 192, - "y": 175, - "w": 22, - "h": 22 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 214, - "y": 175, - "w": 15, - "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": 127, - "y": 195, - "w": 24, - "h": 15 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 151, - "y": 196, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 173, - "y": 197, + "x": 131, + "y": 259, "w": 22, "h": 22 } @@ -2355,12 +2040,96 @@ "h": 22 }, "frame": { - "x": 195, - "y": 197, + "x": 206, + "y": 24, "w": 17, "h": 22 } }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 223, + "y": 23, + "w": 22, + "h": 22 + } + }, + { + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 208, + "y": 46, + "w": 19, + "h": 20 + } + }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 227, + "y": 45, + "w": 22, + "h": 21 + } + }, + { + "filename": "liechi_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 245, + "y": 24, + "w": 22, + "h": 21 + } + }, { "filename": "poison_barb", "rotated": false, @@ -2376,14 +2145,14 @@ "h": 21 }, "frame": { - "x": 212, - "y": 198, + "x": 249, + "y": 45, "w": 21, "h": 21 } }, { - "filename": "wise_glasses", + "filename": "revive", "rotated": false, "trimmed": true, "sourceSize": { @@ -2391,18 +2160,249 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 10, "y": 8, - "w": 23, + "w": 12, "h": 17 }, "frame": { - "x": 126, - "y": 210, - "w": 23, + "x": 267, + "y": 24, + "w": 12, "h": 17 } }, + { + "filename": "pp_max", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 139, + "y": 67, + "w": 16, + "h": 24 + } + }, + { + "filename": "tm_ground", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 155, + "y": 66, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 177, + "y": 66, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_normal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 199, + "y": 66, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_poison", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 221, + "y": 66, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 243, + "y": 66, + "w": 22, + "h": 22 + } + }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 265, + "y": 66, + "w": 16, + "h": 24 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 139, + "y": 91, + "w": 17, + "h": 23 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 140, + "y": 114, + "w": 22, + "h": 19 + } + }, + { + "filename": "tm_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 156, + "y": 88, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 178, + "y": 88, + "w": 22, + "h": 22 + } + }, { "filename": "tm_water", "rotated": false, @@ -2418,8 +2418,8 @@ "h": 22 }, "frame": { - "x": 149, - "y": 218, + "x": 200, + "y": 88, "w": 22, "h": 22 } @@ -2439,117 +2439,12 @@ "h": 22 }, "frame": { - "x": 171, - "y": 219, + "x": 222, + "y": 88, "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": 193, - "y": 219, - "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": 215, - "y": 219, - "w": 20, - "h": 22 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 229, - "y": 68, - "w": 15, - "h": 22 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 230, - "y": 90, - "w": 17, - "h": 20 - } - }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 229, - "y": 110, - "w": 17, - "h": 23 - } - }, { "filename": "shiny_stone", "rotated": false, @@ -2565,56 +2460,14 @@ "h": 21 }, "frame": { - "x": 246, - "y": 110, + "x": 244, + "y": 88, "w": 21, "h": 21 } }, { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 246, - "y": 131, - "w": 21, - "h": 21 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 229, - "y": 133, - "w": 17, - "h": 23 - } - }, - { - "filename": "pp_max", + "filename": "protein", "rotated": false, "trimmed": true, "sourceSize": { @@ -2628,12 +2481,33 @@ "h": 24 }, "frame": { - "x": 229, - "y": 156, + "x": 265, + "y": 90, "w": 16, "h": 24 } }, + { + "filename": "x_accuracy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 162, + "y": 110, + "w": 22, + "h": 22 + } + }, { "filename": "x_attack", "rotated": false, @@ -2649,8 +2523,8 @@ "h": 22 }, "frame": { - "x": 245, - "y": 156, + "x": 184, + "y": 110, "w": 22, "h": 22 } @@ -2670,12 +2544,33 @@ "h": 22 }, "frame": { - "x": 245, - "y": 178, + "x": 206, + "y": 110, "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": 146, + "y": 133, + "w": 16, + "h": 24 + } + }, { "filename": "x_sp_atk", "rotated": false, @@ -2691,54 +2586,12 @@ "h": 22 }, "frame": { - "x": 244, - "y": 67, + "x": 162, + "y": 132, "w": 22, "h": 22 } }, - { - "filename": "mb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 247, - "y": 89, - "w": 20, - "h": 20 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 233, - "y": 200, - "w": 22, - "h": 19 - } - }, { "filename": "x_sp_def", "rotated": false, @@ -2754,33 +2607,12 @@ "h": 22 }, "frame": { - "x": 235, - "y": 219, + "x": 184, + "y": 132, "w": 22, "h": 22 } }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 229, - "y": 180, - "w": 15, - "h": 15 - } - }, { "filename": "x_speed", "rotated": false, @@ -2796,12 +2628,243 @@ "h": 22 }, "frame": { - "x": 24, - "y": 230, + "x": 206, + "y": 132, "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": 228, + "y": 110, + "w": 17, + "h": 23 + } + }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 245, + "y": 109, + "w": 20, + "h": 22 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 146, + "y": 157, + "w": 17, + "h": 23 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 163, + "y": 154, + "w": 21, + "h": 21 + } + }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 184, + "y": 154, + "w": 22, + "h": 19 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 206, + "y": 154, + "w": 20, + "h": 20 + } + }, + { + "filename": "spell_tag", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 228, + "y": 133, + "w": 19, + "h": 21 + } + }, + { + "filename": "magnet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 226, + "y": 154, + "w": 20, + "h": 20 + } + }, + { + "filename": "hard_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 247, + "y": 131, + "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": 152, + "y": 180, + "w": 17, + "h": 20 + } + }, + { + "filename": "mb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 153, + "y": 200, + "w": 20, + "h": 20 + } + }, { "filename": "pb", "rotated": false, @@ -2817,33 +2880,12 @@ "h": 20 }, "frame": { - "x": 46, - "y": 228, + "x": 153, + "y": 220, "w": 20, "h": 20 } }, - { - "filename": "lum_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 46, - "y": 248, - "w": 20, - "h": 19 - } - }, { "filename": "pb_gold", "rotated": false, @@ -2859,75 +2901,12 @@ "h": 20 }, "frame": { - "x": 66, - "y": 228, + "x": 153, + "y": 240, "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": 66, - "y": 248, - "w": 20, - "h": 19 - } - }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 86, - "y": 228, - "w": 16, - "h": 24 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 102, - "y": 228, - "w": 16, - "h": 24 - } - }, { "filename": "ub", "rotated": false, @@ -2943,12 +2922,33 @@ "h": 20 }, "frame": { - "x": 118, - "y": 227, + "x": 153, + "y": 260, "w": 20, "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": 265, + "y": 114, + "w": 15, + "h": 15 + } + }, { "filename": "razor_fang", "rotated": false, @@ -2964,8 +2964,8 @@ "h": 20 }, "frame": { - "x": 118, - "y": 247, + "x": 169, + "y": 175, "w": 18, "h": 20 } @@ -2985,14 +2985,14 @@ "h": 19 }, "frame": { - "x": 136, - "y": 247, + "x": 187, + "y": 173, "w": 19, "h": 19 } }, { - "filename": "zinc", + "filename": "wise_glasses", "rotated": false, "trimmed": true, "sourceSize": { @@ -3000,16 +3000,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 4, + "y": 8, + "w": 23, + "h": 17 }, "frame": { - "x": 155, - "y": 240, - "w": 16, - "h": 24 + "x": 206, + "y": 174, + "w": 23, + "h": 17 } }, { @@ -3027,12 +3027,96 @@ "h": 17 }, "frame": { - "x": 171, - "y": 241, + "x": 229, + "y": 174, "w": 20, "h": 17 } }, + { + "filename": "lum_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 173, + "y": 195, + "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": 173, + "y": 214, + "w": 20, + "h": 19 + } + }, + { + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 173, + "y": 233, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_antidote", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 173, + "y": 251, + "w": 20, + "h": 18 + } + }, { "filename": "oval_stone", "rotated": false, @@ -3048,11 +3132,368 @@ "h": 19 }, "frame": { - "x": 191, - "y": 241, + "x": 193, + "y": 192, "w": 18, "h": 19 } + }, + { + "filename": "wl_awakening", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 211, + "y": 191, + "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": 193, + "y": 211, + "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": 193, + "y": 229, + "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": 193, + "y": 247, + "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": 231, + "y": 191, + "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": 213, + "y": 209, + "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": 213, + "y": 227, + "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": 213, + "y": 245, + "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": 213, + "y": 263, + "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": 233, + "y": 209, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 233, + "y": 227, + "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": 233, + "y": 245, + "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": 233, + "y": 263, + "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": 247, + "y": 151, + "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": 249, + "y": 169, + "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": 251, + "y": 187, + "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": 253, + "y": 205, + "w": 20, + "h": 18 + } } ] } @@ -3060,6 +3501,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ba82aafcf565da1a9adf0d1e3a405b83:d751914787cd1ba803961379ea6f7f7f:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:cb4559b9895634c5b63991a8f07b201f:60ff4678e7949d65c84f4a9476e5d0e7:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index febace7f2bd..eedb3d0c381 100644 Binary files a/public/images/items.png and b/public/images/items.png differ diff --git a/public/images/items/ability_capsule.png b/public/images/items/ability_capsule.png new file mode 100644 index 00000000000..06b6b3e173d Binary files /dev/null and b/public/images/items/ability_capsule.png differ diff --git a/public/images/items/big_mushroom.png b/public/images/items/big_mushroom.png new file mode 100644 index 00000000000..4384c7933b3 Binary files /dev/null and b/public/images/items/big_mushroom.png differ diff --git a/public/images/items/wl_ability_urge.png b/public/images/items/wl_ability_urge.png new file mode 100644 index 00000000000..a9eaa834313 Binary files /dev/null and b/public/images/items/wl_ability_urge.png differ diff --git a/public/images/items/wl_antidote.png b/public/images/items/wl_antidote.png new file mode 100644 index 00000000000..dbe0d5b94ea Binary files /dev/null and b/public/images/items/wl_antidote.png differ diff --git a/public/images/items/wl_awakening.png b/public/images/items/wl_awakening.png new file mode 100644 index 00000000000..9a0adcda904 Binary files /dev/null and b/public/images/items/wl_awakening.png differ diff --git a/public/images/items/wl_burn_heal.png b/public/images/items/wl_burn_heal.png new file mode 100644 index 00000000000..d2f65e7da4c Binary files /dev/null and b/public/images/items/wl_burn_heal.png differ diff --git a/public/images/items/wl_ether.png b/public/images/items/wl_ether.png new file mode 100644 index 00000000000..d3c0fe85918 Binary files /dev/null and b/public/images/items/wl_ether.png differ diff --git a/public/images/items/wl_full_heal.png b/public/images/items/wl_full_heal.png new file mode 100644 index 00000000000..68b8272c08f Binary files /dev/null and b/public/images/items/wl_full_heal.png differ diff --git a/public/images/items/wl_full_restore.png b/public/images/items/wl_full_restore.png new file mode 100644 index 00000000000..d6d4ffe720f Binary files /dev/null and b/public/images/items/wl_full_restore.png differ diff --git a/public/images/items/wl_guard_spec.png b/public/images/items/wl_guard_spec.png new file mode 100644 index 00000000000..b494123e92e Binary files /dev/null and b/public/images/items/wl_guard_spec.png differ diff --git a/public/images/items/wl_hyper_potion.png b/public/images/items/wl_hyper_potion.png new file mode 100644 index 00000000000..51e81461da9 Binary files /dev/null and b/public/images/items/wl_hyper_potion.png differ diff --git a/public/images/items/wl_ice_heal.png b/public/images/items/wl_ice_heal.png new file mode 100644 index 00000000000..e28f3205a80 Binary files /dev/null and b/public/images/items/wl_ice_heal.png differ diff --git a/public/images/items/wl_item_drop.png b/public/images/items/wl_item_drop.png new file mode 100644 index 00000000000..fe7ffdbdc1f Binary files /dev/null and b/public/images/items/wl_item_drop.png differ diff --git a/public/images/items/wl_item_urge.png b/public/images/items/wl_item_urge.png new file mode 100644 index 00000000000..5c291188dee Binary files /dev/null and b/public/images/items/wl_item_urge.png differ diff --git a/public/images/items/wl_max_potion.png b/public/images/items/wl_max_potion.png new file mode 100644 index 00000000000..cf92810943c Binary files /dev/null and b/public/images/items/wl_max_potion.png differ diff --git a/public/images/items/wl_max_revive.png b/public/images/items/wl_max_revive.png new file mode 100644 index 00000000000..12e3b263c21 Binary files /dev/null and b/public/images/items/wl_max_revive.png differ diff --git a/public/images/items/wl_paralyze_heal.png b/public/images/items/wl_paralyze_heal.png new file mode 100644 index 00000000000..9a741c705d4 Binary files /dev/null and b/public/images/items/wl_paralyze_heal.png differ diff --git a/public/images/items/wl_potion.png b/public/images/items/wl_potion.png new file mode 100644 index 00000000000..42086fc20ba Binary files /dev/null and b/public/images/items/wl_potion.png differ diff --git a/public/images/items/wl_reset_urge.png b/public/images/items/wl_reset_urge.png new file mode 100644 index 00000000000..25ba0dfcdb9 Binary files /dev/null and b/public/images/items/wl_reset_urge.png differ diff --git a/public/images/items/wl_revive.png b/public/images/items/wl_revive.png new file mode 100644 index 00000000000..c0881125c52 Binary files /dev/null and b/public/images/items/wl_revive.png differ diff --git a/public/images/items/wl_super_potion.png b/public/images/items/wl_super_potion.png new file mode 100644 index 00000000000..da9ccec78ce Binary files /dev/null and b/public/images/items/wl_super_potion.png differ diff --git a/public/images/ui/pokemon_icons_5.json b/public/images/ui/pokemon_icons_5.json index 462d1e0019d..5ab5a613f63 100644 --- a/public/images/ui/pokemon_icons_5.json +++ b/public/images/ui/pokemon_icons_5.json @@ -49024,7 +49024,7 @@ } }, { - "filename": "555standard_01.png", + "filename": "555_01.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49045,7 +49045,7 @@ } }, { - "filename": "555standard_02.png", + "filename": "555_02.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49066,7 +49066,7 @@ } }, { - "filename": "555standard_03.png", + "filename": "555_03.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49087,7 +49087,7 @@ } }, { - "filename": "555standard_04.png", + "filename": "555_04.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49108,7 +49108,7 @@ } }, { - "filename": "555standard_05.png", + "filename": "555_05.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49129,7 +49129,7 @@ } }, { - "filename": "555standard_06.png", + "filename": "555_06.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49150,7 +49150,7 @@ } }, { - "filename": "555standard_07.png", + "filename": "555_07.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49171,7 +49171,7 @@ } }, { - "filename": "555standard_08.png", + "filename": "555_08.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49192,7 +49192,7 @@ } }, { - "filename": "555standard_09.png", + "filename": "555_09.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49213,7 +49213,7 @@ } }, { - "filename": "555standard_10.png", + "filename": "555_10.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49234,7 +49234,7 @@ } }, { - "filename": "555standard_11.png", + "filename": "555_11.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49255,7 +49255,7 @@ } }, { - "filename": "555standard_12.png", + "filename": "555_12.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49276,7 +49276,7 @@ } }, { - "filename": "555standard_13.png", + "filename": "555_13.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49297,7 +49297,7 @@ } }, { - "filename": "555standard_14.png", + "filename": "555_14.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49318,7 +49318,7 @@ } }, { - "filename": "555standard_15.png", + "filename": "555_15.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49339,7 +49339,7 @@ } }, { - "filename": "555standard_16.png", + "filename": "555_16.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -49360,7 +49360,7 @@ } }, { - "filename": "555standard_17.png", + "filename": "555_17.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50809,7 +50809,7 @@ } }, { - "filename": "555standard_18.png", + "filename": "555_18.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50830,7 +50830,7 @@ } }, { - "filename": "555standard_19.png", + "filename": "555_19.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50851,7 +50851,7 @@ } }, { - "filename": "555standard_20.png", + "filename": "555_20.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50872,7 +50872,7 @@ } }, { - "filename": "555standard_21.png", + "filename": "555_21.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50893,7 +50893,7 @@ } }, { - "filename": "555standard_22.png", + "filename": "555_22.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50914,7 +50914,7 @@ } }, { - "filename": "555standard_23.png", + "filename": "555_23.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50935,7 +50935,7 @@ } }, { - "filename": "555standard_24.png", + "filename": "555_24.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50956,7 +50956,7 @@ } }, { - "filename": "555standard_25.png", + "filename": "555_25.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50977,7 +50977,7 @@ } }, { - "filename": "555standard_26.png", + "filename": "555_26.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -50998,7 +50998,7 @@ } }, { - "filename": "555standard_27.png", + "filename": "555_27.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -51019,7 +51019,7 @@ } }, { - "filename": "555standard_28.png", + "filename": "555_28.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -51040,7 +51040,7 @@ } }, { - "filename": "555standard_29.png", + "filename": "555_29.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -51061,7 +51061,7 @@ } }, { - "filename": "555standard_30.png", + "filename": "555_30.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -51082,7 +51082,7 @@ } }, { - "filename": "555standard_31.png", + "filename": "555_31.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -51103,7 +51103,7 @@ } }, { - "filename": "555standard_32.png", + "filename": "555_32.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -51124,7 +51124,7 @@ } }, { - "filename": "555standard_33.png", + "filename": "555_33.png", "rotated": false, "trimmed": true, "sourceSize": { @@ -51145,7 +51145,7 @@ } }, { - "filename": "555standard_34.png", + "filename": "555_34.png", "rotated": false, "trimmed": true, "sourceSize": { diff --git a/src/arena.ts b/src/arena.ts index c2aaa648f4c..8cf9c736deb 100644 --- a/src/arena.ts +++ b/src/arena.ts @@ -119,7 +119,18 @@ export class Arena { getFormIndex(species: PokemonSpecies) { if (!species.canChangeForm && species.forms?.length) - return Utils.randSeedInt(species.forms.length); // TODO: Base on biome + return Utils.randSeedInt(species.forms.length); + switch (species.speciesId) { + case Species.BURMY: + case Species.WORMADAM: + switch (this.biomeType) { + case Biome.BEACH: + return 1; + case Biome.CITY: + return 2; + } + break; + } return 0; } diff --git a/src/battle-phases.ts b/src/battle-phases.ts index fee08ed715f..c02b1bf6967 100644 --- a/src/battle-phases.ts +++ b/src/battle-phases.ts @@ -16,7 +16,7 @@ import { EvolutionPhase } from "./evolution-phase"; import { BattlePhase } from "./battle-phase"; import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } from "./data/battle-stat"; import { Biome, biomeLinks } from "./data/biome"; -import { ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, TmModifierType, getPlayerModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type"; +import { ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, TmModifierType, getModifierType, getPlayerModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { BattlerTagLapseType, BattlerTagType, HideSpriteTag as HiddenTag, TrappedTag } from "./data/battler-tag"; import { getPokemonMessage } from "./messages"; @@ -246,7 +246,7 @@ export class EncounterPhase extends BattlePhase { battle.enemyParty[e] = battle.trainer.genPartyMember(e); else { const enemySpecies = this.scene.randomSpecies(battle.waveIndex, level, null, true); - battle.enemyParty[e] = new EnemyPokemon(this.scene, enemySpecies, level); + battle.enemyParty[e] = new EnemyPokemon(this.scene, enemySpecies, level, false); } } const enemyPokemon = this.scene.getEnemyParty()[e]; @@ -256,7 +256,7 @@ export class EncounterPhase extends BattlePhase { this.scene.gameData.setPokemonSeen(enemyPokemon); } - if (this.scene.gameMode === GameMode.CLASSIC && battle.waveIndex === 200 && enemyPokemon.species.speciesId === Species.ETERNATUS) + if (this.scene.gameMode === GameMode.CLASSIC && (battle.waveIndex === 200 || !(battle.waveIndex % 250)) && enemyPokemon.species.speciesId === Species.ETERNATUS) enemyPokemon.formIndex = 1; loadEnemyAssets.push(enemyPokemon.loadAssets()); @@ -635,7 +635,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { this.scene.field.add(pokemon); if (!this.player) { const playerPokemon = this.scene.getPlayerPokemon() as Pokemon; - if (playerPokemon.visible) + if (playerPokemon?.visible) this.scene.field.moveBelow(pokemon, playerPokemon); this.scene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); this.scene.updateModifiers(false); @@ -937,6 +937,15 @@ export class CommandPhase extends FieldPhase { start() { super.start(); + if (this.fieldIndex) { + const allyCommand = this.scene.currentBattle.turnCommands[this.fieldIndex - 1]; + if (allyCommand.command === Command.BALL || allyCommand.command === Command.RUN) + this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: allyCommand.command, skip: true }; + } + + if (this.scene.currentBattle.turnCommands[this.fieldIndex]?.skip) + return this.end(); + const playerPokemon = this.scene.getPlayerField()[this.fieldIndex]; const moveQueue = playerPokemon.getMoveQueue(); @@ -968,10 +977,12 @@ export class CommandPhase extends FieldPhase { switch (command) { case Command.FIGHT: - if (cursor === -1 || playerPokemon.trySelectMove(cursor, args[0] as boolean)) { + let useStruggle = false; + if (cursor === -1 || playerPokemon.trySelectMove(cursor, args[0] as boolean) || (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m.isUsable(playerPokemon)).length)) { + const moveId = !useStruggle ? playerPokemon.moveset[cursor].moveId : Moves.STRUGGLE; const turnCommand: TurnCommand = { command: Command.FIGHT, cursor: cursor, - move: cursor > -1 ? { move: playerPokemon.moveset[cursor].moveId, targets: [] } : null, args: args }; // TODO: Struggle logic - const moveTargets: MoveTargetSet = args.length < 3 ? getMoveTargets(playerPokemon, cursor > -1 ? playerPokemon.moveset[cursor].moveId : Moves.NONE) : args[2]; + move: cursor > -1 ? { move: moveId, targets: [] } : null, args: args }; + const moveTargets: MoveTargetSet = args.length < 3 ? getMoveTargets(playerPokemon, cursor > -1 ? moveId : Moves.NONE) : args[2]; console.log(moveTargets, playerPokemon.name); if (moveTargets.targets.length <= 1 || moveTargets.multiple) turnCommand.move.targets = moveTargets.targets; @@ -989,13 +1000,12 @@ export class CommandPhase extends FieldPhase { }, null, true); } } - break; case Command.BALL: if (this.scene.arena.biomeType === Biome.END) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(`A strange force\nprevents using Poké Balls.`, null, () => { + this.scene.ui.showText(`An unseen force\nprevents using Poké Balls.`, null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1006,21 +1016,39 @@ export class CommandPhase extends FieldPhase { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); - } else if (cursor < 4) { + } else { const targets = this.scene.getEnemyField().filter(p => p.isActive(true)).map(p => p.getBattlerIndex()); - this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.BALL, cursor: cursor }; - this.scene.currentBattle.turnPokeballCounts[cursor as PokeballType]--; - if (targets.length > 1) - this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); - else - this.scene.currentBattle.turnCommands[this.fieldIndex].targets = targets; - success = true; + if (targets.length > 1) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.ui.showText(`You can only throw a Poké Ball\nwhen there is one Pokémon remaining!`, null, () => { + this.scene.ui.showText(null, 0); + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + }, null, true); + } else if (cursor < 4) { + this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.BALL, cursor: cursor }; + if (targets.length > 1) + this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); + else { + this.scene.currentBattle.turnCommands[this.fieldIndex].targets = targets; + if (this.fieldIndex) + this.scene.currentBattle.turnCommands[this.fieldIndex - 1].skip = true; + } + success = true; + } } break; case Command.POKEMON: case Command.RUN: const isSwitch = command === Command.POKEMON; - if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) { + if (!isSwitch && this.scene.arena.biomeType === Biome.END) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.ui.showText(`An unseen force\nprevents escape.`, null, () => { + this.scene.ui.showText(null, 0); + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + }, null, true); + } else if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.showText(`You can't run\nfrom a trainer battle!`, null, () => { @@ -1038,6 +1066,8 @@ export class CommandPhase extends FieldPhase { ? { command: Command.POKEMON, cursor: cursor, args: args } : { command: Command.RUN }; success = true; + if (this.fieldIndex) + this.scene.currentBattle.turnCommands[this.fieldIndex - 1].skip = true; } else if (trapTag) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); @@ -1058,9 +1088,6 @@ export class CommandPhase extends FieldPhase { cancel() { if (this.fieldIndex) { - const lastCommand = this.scene.currentBattle.turnCommands[0]; - if (lastCommand.command === Command.BALL) - this.scene.currentBattle.turnPokeballCounts[lastCommand.cursor]++; this.scene.unshiftPhase(new CommandPhase(this.scene, 0)); this.scene.unshiftPhase(new CommandPhase(this.scene, 1)); this.end(); @@ -1116,12 +1143,12 @@ export class SelectTargetPhase extends PokemonPhase { this.scene.ui.setMode(Mode.TARGET_SELECT, this.fieldIndex, move, (cursor: integer) => { this.scene.ui.setMode(Mode.MESSAGE); if (cursor === -1) { - if (turnCommand.command === Command.BALL) - this.scene.currentBattle.turnPokeballCounts[turnCommand.cursor]++; this.scene.currentBattle.turnCommands[this.fieldIndex] = null; this.scene.unshiftPhase(new CommandPhase(this.scene, this.fieldIndex)); } else turnCommand.targets = [ cursor ]; + if (turnCommand.command === Command.BALL && this.fieldIndex) + this.scene.currentBattle.turnCommands[this.fieldIndex - 1].skip = true; this.end(); }); } @@ -1168,6 +1195,9 @@ export class TurnStartPhase extends FieldPhase { const pokemon = field[o]; const turnCommand = this.scene.currentBattle.turnCommands[o]; + if (turnCommand.skip) + continue; + switch (turnCommand.command) { case Command.FIGHT: const queuedMove = turnCommand.move; @@ -1263,7 +1293,7 @@ export class BattleEndPhase extends BattlePhase { pokemon.resetBattleSummonData(); } - this.scene.clearEnemyModifiers(); + this.scene.clearEnemyHeldItemModifiers(); const lapsingModifiers = this.scene.findModifiers(m => m instanceof LapsingPersistentModifier) as LapsingPersistentModifier[]; for (let m of lapsingModifiers) { @@ -2141,9 +2171,7 @@ export class ModifierRewardPhase extends BattlePhase { constructor(scene: BattleScene, modifierTypeFunc: ModifierTypeFunc) { super(scene); - this.modifierType = modifierTypeFunc(); - if (!this.modifierType.id) - this.modifierType.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifierTypeFunc); + this.modifierType = getModifierType(modifierTypeFunc); } start() { @@ -2664,7 +2692,7 @@ export class AttemptCapturePhase extends PokemonPhase { this.scene.getPlayerField().filter(p => p.isActive()).forEach(playerPokemon => playerPokemon.removeTagsBySourceId(pokemon.id)); pokemon.hp = 0; pokemon.trySetStatus(StatusEffect.FAINT); - this.scene.clearEnemyModifiers(); + this.scene.clearEnemyHeldItemModifiers(); this.scene.field.remove(pokemon, true); }; const addToParty = () => { diff --git a/src/battle-scene.ts b/src/battle-scene.ts index cf594568b22..7a90445f57e 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -16,7 +16,7 @@ import { GameData } from './system/game-data'; import StarterSelectUiHandler from './ui/starter-select-ui-handler'; import { TextStyle, addTextObject } from './ui/text'; import { Moves, initMoves } from './data/move'; -import { ModifierPoolType, getDefaultModifierTypeForTier, getEnemyModifierTypesForWave } from './modifier/modifier-type'; +import { ModifierPoolType, getDefaultModifierTypeForTier, getEnemyModifierTypesForWave, getModifierType, modifierTypes } from './modifier/modifier-type'; import AbilityBar from './ui/ability-bar'; import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, applyAbAttrs, initAbilities } from './data/ability'; import Battle, { BattleType, FixedBattleConfig, fixedBattles } from './battle'; @@ -104,7 +104,7 @@ export default class BattleScene extends Phaser.Scene { private modifierBar: ModifierBar; private enemyModifierBar: ModifierBar; private modifiers: PersistentModifier[]; - private enemyModifiers: PokemonHeldItemModifier[]; + private enemyModifiers: PersistentModifier[]; public uiContainer: Phaser.GameObjects.Container; public ui: UI; @@ -1148,7 +1148,7 @@ export default class BattleScene extends Phaser.Scene { }); } - addEnemyModifier(itemModifier: PokemonHeldItemModifier): Promise { + addEnemyModifier(itemModifier: PersistentModifier): Promise { return new Promise(resolve => { itemModifier.add(this.enemyModifiers, false); this.updateModifiers(false).then(() => resolve()); @@ -1206,7 +1206,7 @@ export default class BattleScene extends Phaser.Scene { removePartyMemberModifiers(partyMemberIndex: integer): Promise { return new Promise(resolve => { const pokemonId = this.getParty()[partyMemberIndex].id; - const modifiersToRemove = this.modifiers.filter(m => (m instanceof PokemonHeldItemModifier) && (m as PokemonHeldItemModifier).pokemonId === pokemonId); + const modifiersToRemove = this.modifiers.filter(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === pokemonId); for (let m of modifiersToRemove) this.modifiers.splice(this.modifiers.indexOf(m), 1); this.updateModifiers().then(() => resolve()); @@ -1233,12 +1233,10 @@ export default class BattleScene extends Phaser.Scene { for (let c = 0; c < chances; c++) { if (!Utils.randSeedInt(modifierChance)) count++; - if (count === 12) - break; } if (isBoss) count = Math.max(count, Math.floor(chances / 2)); - getEnemyModifierTypesForWave(waveIndex, count, [ enemyPokemon ], this.currentBattle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD) + getEnemyModifierTypesForWave(waveIndex, count, [ enemyPokemon ], this.currentBattle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD, this.gameMode) .map(mt => mt.newModifier(enemyPokemon).add(this.enemyModifiers, false)); }); @@ -1246,8 +1244,17 @@ export default class BattleScene extends Phaser.Scene { }); } - clearEnemyModifiers(): void { - this.enemyModifiers.splice(0, this.enemyModifiers.length); + generateEnemyBuffModifier(): void{ + const enemyBuffModifierTypes = [ modifierTypes.ENEMY_DAMAGE_BOOSTER, modifierTypes.ENEMY_DAMAGE_REDUCTION ]; + this.executeWithSeedOffset(() => { + (getModifierType(Phaser.Math.RND.pick(enemyBuffModifierTypes)).newModifier() as PersistentModifier).add(this.enemyModifiers, false); + }, Math.floor(this.currentBattle.waveIndex / 50)); + } + + clearEnemyHeldItemModifiers(): void { + const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier); + for (let m of modifiersToRemove) + this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1); this.updateModifiers(false).then(() => this.updateUIPositions()); } diff --git a/src/battle.ts b/src/battle.ts index c15b9d5cfd8..0e61208423b 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -24,6 +24,7 @@ export interface TurnCommand { cursor?: integer; move?: QueuedMove; targets?: BattlerIndex[]; + skip?: boolean; args?: any[]; }; @@ -42,7 +43,6 @@ export default class Battle { public started: boolean; public turn: integer; public turnCommands: TurnCommands; - public turnPokeballCounts: PokeballCounts; public playerParticipantIds: Set = new Set(); public escapeAttempts: integer = 0; public lastMove: Moves; @@ -94,7 +94,6 @@ export default class Battle { incrementTurn(scene: BattleScene): void { this.turn++; this.turnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [ bt, null ])); - this.turnPokeballCounts = Object.assign({}, scene.pokeballCounts); } addParticipant(playerPokemon: PlayerPokemon): void { diff --git a/src/data/ability.ts b/src/data/ability.ts index 179e2aa0c83..a171252ae19 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2,7 +2,7 @@ import Pokemon, { HitResult, PokemonMove } from "../pokemon"; import { Type } from "./type"; import * as Utils from "../utils"; import { BattleStat, getBattleStatName } from "./battle-stat"; -import { DamagePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../battle-phases"; +import { DamagePhase, ObtainStatusEffectPhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../battle-phases"; import { getPokemonMessage } from "../messages"; import { Weather, WeatherType } from "./weather"; import { BattlerTag, BattlerTagType } from "./battler-tag"; @@ -290,9 +290,9 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { } applyPostDefend(pokemon: Pokemon, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { - if (move.getMove().hasFlag(MoveFlags.MAKES_CONTACT) && Utils.randInt(100) < this.chance) { + if (move.getMove().hasFlag(MoveFlags.MAKES_CONTACT) && Utils.randInt(100) < this.chance && !pokemon.status) { const effect = this.effects.length === 1 ? this.effects[0] : this.effects[Utils.randInt(this.effects.length)]; - return attacker.trySetStatus(effect); + pokemon.scene.unshiftPhase(new ObtainStatusEffectPhase(pokemon.scene, attacker.getBattlerIndex(), effect)); } return false; diff --git a/src/data/move.ts b/src/data/move.ts index 79e909311bb..b2a6a07965d 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -13,6 +13,7 @@ import { BlockRecoilDamageAttr, applyAbAttrs } from "./ability"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import { BattlerIndex } from "../battle"; import { Stat } from "./pokemon-stat"; +import { Species } from "./species"; export enum MoveCategory { PHYSICAL, @@ -977,7 +978,7 @@ export class RandomLevelDamageAttr extends FixedDamageAttr { } getDamage(user: Pokemon, target: Pokemon, move: Move): number { - return user.level * (Utils.randIntRange(50, 150) * 0.01); + return Math.max(Math.floor(user.level * (Utils.randIntRange(50, 150) * 0.01)), 1); } } @@ -1155,18 +1156,22 @@ export class MultiHitAttr extends MoveAttr { export class StatusEffectAttr extends MoveEffectAttr { public effect: StatusEffect; public cureTurn: integer; + public overrideStatus: boolean; - constructor(effect: StatusEffect, selfTarget?: boolean, cureTurn?: integer) { + constructor(effect: StatusEffect, selfTarget?: boolean, cureTurn?: integer, overrideStatus?: boolean) { super(selfTarget, MoveEffectTrigger.HIT); this.effect = effect; this.cureTurn = cureTurn; + this.overrideStatus = !!overrideStatus; } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const statusCheck = move.chance < 0 || move.chance === 100 || Utils.randInt(100) < move.chance; if (statusCheck) { const pokemon = this.selfTarget ? user : target; + if (pokemon.status) + pokemon.resetStatus(); if (!pokemon.status || (pokemon.status.effect === this.effect && move.chance < 0)) { user.scene.unshiftPhase(new ObtainStatusEffectPhase(user.scene, pokemon.getBattlerIndex(), this.effect, this.cureTurn)); return true; @@ -1296,6 +1301,8 @@ export class OneHitKOAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (target.species.speciesId === Species.ETERNATUS && target.formIndex === 1) + return false; target.damage(target.hp, true); user.scene.queueMessage('It\'s a one-hit KO!'); return true; @@ -2299,7 +2306,7 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.PARALYSIS), new AttackMove(Moves.SCRATCH, "Scratch", Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, "", -1, 0, 1), new AttackMove(Moves.VISE_GRIP, "Vise Grip", Type.NORMAL, MoveCategory.PHYSICAL, 55, 100, 30, -1, "", -1, 0, 1), - new AttackMove(Moves.GUILLOTINE, "Guillotine", Type.NORMAL, MoveCategory.PHYSICAL, -1, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 1) + new AttackMove(Moves.GUILLOTINE, "Guillotine", Type.NORMAL, MoveCategory.PHYSICAL, 250, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 1) .attr(OneHitKOAttr), new AttackMove(Moves.RAZOR_WIND, "Razor Wind", Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, "Charges on first turn, attacks on second. High critical hit ratio.", -1, 0, 1) .attr(ChargeAttr, ChargeAnim.RAZOR_WIND_CHARGING, 'whipped\nup a whirlwind!') @@ -2340,7 +2347,7 @@ export function initMoves() { new AttackMove(Moves.HORN_ATTACK, "Horn Attack", Type.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, "", -1, 0, 1), new AttackMove(Moves.FURY_ATTACK, "Fury Attack", Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, "Hits 2-5 times in one turn.", -1, 0, 1) .attr(MultiHitAttr), - new AttackMove(Moves.HORN_DRILL, "Horn Drill", Type.NORMAL, MoveCategory.PHYSICAL, -1, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 1) + new AttackMove(Moves.HORN_DRILL, "Horn Drill", Type.NORMAL, MoveCategory.PHYSICAL, 250, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 1) .attr(OneHitKOAttr), new AttackMove(Moves.TACKLE, "Tackle", Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, "", -1, 0, 1), new AttackMove(Moves.BODY_SLAM, "Body Slam", Type.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 66, "May paralyze opponent.", 30, 0, 1) @@ -2478,7 +2485,7 @@ export function initMoves() { .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FISSURE, "Fissure", Type.GROUND, MoveCategory.PHYSICAL, -1, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 1) + new AttackMove(Moves.FISSURE, "Fissure", Type.GROUND, MoveCategory.PHYSICAL, 250, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 1) .attr(OneHitKOAttr) .makesContact(false), new AttackMove(Moves.DIG, "Dig", Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, 55, "Digs underground on first turn, attacks on second. Can also escape from caves.", -1, 0, 1) @@ -2632,7 +2639,7 @@ export function initMoves() { .attr(MultiHitAttr, MultiHitType._2) .makesContact(false), new SelfStatusMove(Moves.REST, "Rest", Type.PSYCHIC, -1, 5, 85, "User sleeps for 2 turns, but user is fully healed.", -1, 0, 1) - .attr(StatusEffectAttr, StatusEffect.SLEEP, true, 3) + .attr(StatusEffectAttr, StatusEffect.SLEEP, true, 3, true) .attr(HealAttr, 1, true) .condition((user: Pokemon, target: Pokemon, move: Move) => user.status?.effect !== StatusEffect.SLEEP), new AttackMove(Moves.ROCK_SLIDE, "Rock Slide", Type.ROCK, MoveCategory.PHYSICAL, 75, 90, 10, 86, "May cause flinching.", 30, 0, 1) @@ -2744,9 +2751,9 @@ export function initMoves() { new StatusMove(Moves.SANDSTORM, "Sandstorm", Type.ROCK, -1, 10, 51, "Creates a sandstorm for 5 turns.", -1, 0, 2) .attr(WeatherChangeAttr, WeatherType.SANDSTORM) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.GIGA_DRAIN, "Giga Drain", Type.GRASS, MoveCategory.SPECIAL, 75, 100, 10, 111, "User recovers half the HP inflicted on opponent.", -1, 4, 2) + new AttackMove(Moves.GIGA_DRAIN, "Giga Drain", Type.GRASS, MoveCategory.SPECIAL, 75, 100, 10, 111, "User recovers half the HP inflicted on opponent.", -1, 0, 2) .attr(HitHealAttr), - new SelfStatusMove(Moves.ENDURE, "Endure (N)", Type.NORMAL, -1, 10, 47, "Always left with at least 1 HP, but may fail if used consecutively.", -1, 0, 2), + new SelfStatusMove(Moves.ENDURE, "Endure (N)", Type.NORMAL, -1, 10, 47, "Always left with at least 1 HP, but may fail if used consecutively.", -1, 4, 2), new StatusMove(Moves.CHARM, "Charm", Type.FAIRY, 100, 20, 2, "Sharply lowers opponent's Attack.", -1, 0, 2) .attr(StatChangeAttr, BattleStat.ATK, -2), new AttackMove(Moves.ROLLOUT, "Rollout", Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, "Doubles in power each turn for 5 turns.", -1, 0, 2) @@ -2919,7 +2926,7 @@ export function initMoves() { new AttackMove(Moves.SECRET_POWER, "Secret Power (N)", Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, "Effects of the attack vary with the location.", 30, 0, 3) .makesContact(false), new AttackMove(Moves.DIVE, "Dive", Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, "Dives underwater on first turn, attacks on second turn.", -1, 0, 3) - .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, 'hid\nunderwater!') + .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, 'hid\nunderwater!', BattlerTagType.UNDERGROUND) .ignoresVirtual(), new AttackMove(Moves.ARM_THRUST, "Arm Thrust", Type.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, "Hits 2-5 times in one turn.", -1, 0, 3) .attr(MultiHitAttr), @@ -3000,7 +3007,7 @@ export function initMoves() { new AttackMove(Moves.SAND_TOMB, "Sand Tomb", Type.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, "Traps opponent, damaging them for 4-5 turns.", 100, 0, 3) .attr(TrapAttr, BattlerTagType.SAND_TOMB) .makesContact(false), - new AttackMove(Moves.SHEER_COLD, "Sheer Cold", Type.ICE, MoveCategory.SPECIAL, -1, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 3) + new AttackMove(Moves.SHEER_COLD, "Sheer Cold", Type.ICE, MoveCategory.SPECIAL, 250, 30, 5, -1, "One-Hit-KO, if it hits.", -1, 0, 3) .attr(OneHitKOAttr), new AttackMove(Moves.MUDDY_WATER, "Muddy Water", Type.WATER, MoveCategory.SPECIAL, 90, 85, 10, -1, "May lower opponent's Accuracy.", 30, 0, 3) .attr(StatChangeAttr, BattleStat.ACC, -1) diff --git a/src/data/trainer-type.ts b/src/data/trainer-type.ts index 953e4788c1b..61bfabb3f35 100644 --- a/src/data/trainer-type.ts +++ b/src/data/trainer-type.ts @@ -521,7 +521,7 @@ function getGymLeaderPartyTemplate(scene: BattleScene) { function getRandomPartyMemberFunc(speciesPool: Species[], postProcess?: (enemyPokemon: EnemyPokemon) => void): PartyMemberFunc { return (scene: BattleScene, level: integer) => { const species = getPokemonSpecies(Phaser.Math.RND.pick(speciesPool)).getSpeciesForLevel(level, true); - const ret = new EnemyPokemon(scene, getPokemonSpecies(species), level); + const ret = new EnemyPokemon(scene, getPokemonSpecies(species), level, true); if (postProcess) postProcess(ret); return ret; @@ -532,7 +532,7 @@ function getSpeciesFilterRandomPartyMemberFunc(speciesFilter: PokemonSpeciesFilt const originalSpeciesFilter = speciesFilter; speciesFilter = (species: PokemonSpecies) => allowLegendaries || (!species.legendary && !species.pseudoLegendary && !species.mythical) && originalSpeciesFilter(species); return (scene: BattleScene, level: integer) => { - const ret = new EnemyPokemon(scene, scene.randomSpecies(scene.currentBattle.waveIndex, level, speciesFilter), level); + const ret = new EnemyPokemon(scene, scene.randomSpecies(scene.currentBattle.waveIndex, level, speciesFilter), level, true); if (postProcess) postProcess(ret); return ret; @@ -735,7 +735,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT ])) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) .setSpeciesFilter(species => species.baseTotal >= 540) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.RAYQUAZA ])), + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.RAYQUAZA ], p => p.formIndex = 0)), [TrainerType.RIVAL_6]: new TrainerConfig(++t).setBoss().setStaticParty().setEncounterBgm('final').setBattleBgm('battle_rival_3').setPartyTemplates(trainerPartyTemplates.RIVAL_6) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT ])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT ])) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 76b636194b8..57c31144840 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -660,6 +660,9 @@ export const modifierTypes = { GOLDEN_POKEBALL: () => new ModifierType(`Golden ${getPokeballName(PokeballType.POKEBALL)}`, 'Adds 1 extra item option at the end of every battle', (type, _args) => new Modifiers.ExtraModifierModifier(type), 'pb_gold', null, 'pb_bounce_1'), + + ENEMY_DAMAGE_BOOSTER: () => new ModifierType('Damage Booster', 'Increases damage by 20%', (type, _args) => new Modifiers.EnemyDamageBoosterModifier(type), 'wl_item_drop'), + ENEMY_DAMAGE_REDUCTION: () => new ModifierType('Damage Reducer', 'Reduces incoming damage by 10%', (type, _args) => new Modifiers.EnemyDamageReducerModifier(type), 'wl_guard_spec') }; const modifierPool = { @@ -797,6 +800,13 @@ const trainerModifierPool = { ].map(m => { m.setTier(ModifierTier.MASTER); return m; }) }; +export function getModifierType(modifierTypeFunc: ModifierTypeFunc): ModifierType { + const modifierType = modifierTypeFunc(); + if (!modifierType.id) + modifierType.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifierTypeFunc); + return modifierType; +} + let modifierPoolThresholds = {}; let ignoredPoolIndexes = {}; @@ -813,8 +823,8 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod let i = 0; pool[t].reduce((total: integer, modifierType: WeightedModifierType) => { const weightedModifierType = modifierType as WeightedModifierType; - const existingModifier = party[0].scene.findModifier(m => (m.type.generatorId || m.type.id) === weightedModifierType.modifierType.id); - const weight = !existingModifier || existingModifier.stackCount < existingModifier.getMaxStackCount() + const existingModifiers = party[0].scene.findModifiers(m => (m.type.generatorId || m.type.id) === weightedModifierType.modifierType.id, player); + const weight = !existingModifiers.length || existingModifiers.filter(m => m.stackCount < m.getMaxStackCount()) ? weightedModifierType.weight instanceof Function ? (weightedModifierType.weight as Function)(party) : weightedModifierType.weight as integer @@ -858,13 +868,10 @@ export function getPlayerModifierTypeOptionsForWave(waveIndex: integer, count: i return options; } -export function getEnemyModifierTypesForWave(waveIndex: integer, count: integer, party: EnemyPokemon[], poolType: ModifierPoolType.WILD | ModifierPoolType.TRAINER): PokemonHeldItemModifierType[] { +export function getEnemyModifierTypesForWave(waveIndex: integer, count: integer, party: EnemyPokemon[], poolType: ModifierPoolType.WILD | ModifierPoolType.TRAINER, gameMode: GameMode): PokemonHeldItemModifierType[] { const ret = new Array(count).fill(0).map(() => getNewModifierTypeOption(party, poolType).type as PokemonHeldItemModifierType); - if (waveIndex === 200) { - const miniBlackHole = modifierTypes.MINI_BLACK_HOLE(); - miniBlackHole.id = 'MINI_BLACK_HOLE'; - ret.push(miniBlackHole); - } + if ((gameMode === GameMode.CLASSIC && waveIndex === 200) || !(waveIndex % 1000)) + ret.push(getModifierType(modifierTypes.MINI_BLACK_HOLE) as PokemonHeldItemModifierType); return ret; } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 18e3a0df193..4ac8eb57e14 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,5 +1,5 @@ import * as ModifierTypes from './modifier-type'; -import { LearnMovePhase, LevelUpPhase, PokemonHealPhase } from "../battle-phases"; +import { LearnMovePhase, LevelUpPhase, ObtainStatusEffectPhase, PokemonHealPhase } from "../battle-phases"; import BattleScene from "../battle-scene"; import { getLevelTotalExp } from "../data/exp"; import { PokeballType } from "../data/pokeball"; @@ -15,6 +15,7 @@ import { TempBattleStat } from '../data/temp-battle-stat'; import { BerryType, getBerryEffectFunc, getBerryPredicate } from '../data/berry'; import { Species } from '../data/species'; import { BattleType } from '../battle'; +import { StatusEffect } from '../data/status-effect'; type ModifierType = ModifierTypes.ModifierType; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -671,13 +672,13 @@ export class PreserveBerryModifier extends PersistentModifier { apply(args: any[]): boolean { if (!(args[0] as Utils.BooleanHolder).value) - (args[0] as Utils.BooleanHolder).value = this.getStackCount() === this.getMaxStackCount() || Utils.randInt(this.getMaxStackCount()) < this.getStackCount(); + (args[0] as Utils.BooleanHolder).value = Utils.randInt(this.getMaxStackCount()) < this.getStackCount(); return true; } getMaxStackCount(): integer { - return 4; + return 3; } } @@ -1224,4 +1225,88 @@ export class ExtraModifierModifier extends PersistentModifier { getMaxStackCount(): integer { return 3; } +} + +export abstract class EnemyPersistentModifer extends PersistentModifier { + constructor(type: ModifierType, stackCount?: integer) { + super(type, stackCount); + } +} + +export class EnemyDamageBoosterModifier extends EnemyPersistentModifer { + constructor(type: ModifierType, stackCount?: integer) { + super(type, stackCount); + } + + match(modifier: Modifier): boolean { + return modifier instanceof EnemyDamageBoosterModifier; + } + + clone(): EnemyDamageBoosterModifier { + return new EnemyDamageBoosterModifier(this.type, this.stackCount); + } + + apply(args: any[]): boolean { + (args[0] as Utils.NumberHolder).value = Math.floor((args[0] as Utils.NumberHolder).value * (1 + 0.2 * this.getStackCount())); + + return true; + } + + getMaxStackCount(): number { + return 5; + } +} + +export class EnemyDamageReducerModifier extends EnemyPersistentModifer { + constructor(type: ModifierType, stackCount?: integer) { + super(type, stackCount); + } + + match(modifier: Modifier): boolean { + return modifier instanceof EnemyDamageReducerModifier; + } + + clone(): EnemyDamageReducerModifier { + return new EnemyDamageReducerModifier(this.type, this.stackCount); + } + + apply(args: any[]): boolean { + (args[0] as Utils.NumberHolder).value = Math.floor((args[0] as Utils.NumberHolder).value * (1 - 0.2 * this.getStackCount())); + + return true; + } + + getMaxStackCount(): number { + return 5; + } +} + +export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifer { + public effect: StatusEffect; + + constructor(type: ModifierType, effect: StatusEffect, stackCount?: integer) { + super(type, stackCount); + + this.effect = effect; + } + + match(modifier: Modifier): boolean { + return modifier instanceof EnemyAttackStatusEffectChanceModifier && modifier.effect === this.effect; + } + + clone(): EnemyDamageReducerModifier { + return new EnemyAttackStatusEffectChanceModifier(this.type, this.effect, this.stackCount); + } + + apply(args: any[]): boolean { + const target = (args[0] as Pokemon); + if (Utils.randInt(10) < this.getStackCount()) + target.scene.unshiftPhase(new ObtainStatusEffectPhase(target.scene, target.getBattlerIndex(), this.effect)); + + return true; + } + + getMaxStackCount(): number { + return 5; + } } \ No newline at end of file diff --git a/src/pokemon.ts b/src/pokemon.ts index 5498a193346..e6238302fac 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -8,7 +8,7 @@ import * as Utils from './utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier } from './data/type'; import { getLevelTotalExp } from './data/exp'; import { Stat } from './data/pokemon-stat'; -import { AttackTypeBoosterModifier, PokemonBaseStatModifier, PokemonHeldItemModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier } from './modifier/modifier'; +import { AttackTypeBoosterModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, PokemonBaseStatModifier, PokemonHeldItemModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier } from './modifier/modifier'; import { PokeballType } from './data/pokeball'; import { Gender } from './data/gender'; import { initMoveAnim, loadMoveAnimAssets } from './data/battle-anims'; @@ -125,23 +125,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - const rand1 = Utils.binToDec(Utils.decToBin(this.id).substring(0, 16)); - const rand2 = Utils.binToDec(Utils.decToBin(this.id).substring(16, 32)); - - const E = this.scene.gameData.trainerId ^ this.scene.gameData.secretId; - const F = rand1 ^ rand2; - - if (this.shiny === undefined) { - let shinyThreshold = new Utils.IntegerHolder(32); - this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); - console.log(shinyThreshold.value); - - this.shiny = (E ^ F) < shinyThreshold.value; - if ((E ^ F) < 32) - console.log('REAL SHINY!!'); - if (this.shiny) - console.log((E ^ F), shinyThreshold.value); - } + if (this.shiny === undefined) + this.trySetShiny(); this.winCount = 0; this.pokerus = false; @@ -207,6 +192,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract isPlayer(): boolean; + abstract hasTrainer(): boolean; + abstract getFieldIndex(): integer; abstract getBattlerIndex(): BattlerIndex; @@ -507,6 +494,26 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.summonData.moveset[moveIndex] = move; } + trySetShiny(): boolean { + const rand1 = Utils.binToDec(Utils.decToBin(this.id).substring(0, 16)); + const rand2 = Utils.binToDec(Utils.decToBin(this.id).substring(16, 32)); + + const E = this.scene.gameData.trainerId ^ this.scene.gameData.secretId; + const F = rand1 ^ rand2; + + let shinyThreshold = new Utils.IntegerHolder(32); + if (!this.hasTrainer()) { + this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); + console.log(shinyThreshold.value); + } + + this.shiny = (E ^ F) < shinyThreshold.value; + if ((E ^ F) < 32) + console.log('REAL SHINY!!'); + + return this.shiny; + } + generateAndPopulateMoveset(): void { this.moveset = []; const movePool = []; @@ -629,7 +636,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let result: HitResult; const move = battlerMove.getMove(); const moveCategory = move.category; - let damage = 0; + let damage = new Utils.NumberHolder(0); const cancelled = new Utils.BooleanHolder(false); const typeless = !!move.getAttrs(TypelessAttr).length @@ -683,19 +690,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs(StabBoostAbAttr, source, null, stabMultiplier); if (!isTypeImmune) { - damage = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk / targetDef) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * weatherTypeMultiplier * ((Utils.randInt(15) + 85) / 100)) * criticalMultiplier; + damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk / targetDef) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * weatherTypeMultiplier * ((Utils.randInt(15) + 85) / 100)) * criticalMultiplier; if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) - damage = Math.floor(damage / 2); + damage.value = Math.floor(damage.value / 2); move.getAttrs(HitsTagAttr).map(hta => hta as HitsTagAttr).filter(hta => hta.doubleDamage).forEach(hta => { if (this.getTag(hta.tagType)) - damage *= 2; + damage.value *= 2; }); } const fixedDamage = new Utils.IntegerHolder(0); applyMoveAttrs(FixedDamageAttr, source, this, move, fixedDamage); if (!isTypeImmune && fixedDamage.value) { - damage = fixedDamage.value; + damage.value = fixedDamage.value; isCritical = false; result = HitResult.EFFECTIVE; } @@ -713,15 +720,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { result = HitResult.NO_EFFECT; } + if (!source.isPlayer()) + this.scene.applyModifiers(EnemyDamageBoosterModifier, false, damage); + + if (!this.isPlayer()) + this.scene.applyModifiers(EnemyDamageReducerModifier, false, damage); + if (damage) { this.scene.unshiftPhase(new DamagePhase(this.scene, this.getBattlerIndex(), result as DamageResult)); if (isCritical) this.scene.queueMessage('A critical hit!'); this.scene.setPhaseQueueSplice(); - damage = Math.min(damage, this.hp); - this.damage(damage); - source.turnData.damageDealt += damage; - this.turnData.attacksReceived.unshift({ move: move.id, result: result as DamageResult, damage: damage, critical: isCritical, sourceId: source.id }); + damage.value = Math.min(damage.value, this.hp); + this.damage(damage.value); + source.turnData.damageDealt += damage.value; + this.turnData.attacksReceived.unshift({ move: move.id, result: result as DamageResult, damage: damage.value, critical: isCritical, sourceId: source.id }); } switch (result) { @@ -1097,6 +1110,10 @@ export class PlayerPokemon extends Pokemon { return true; } + hasTrainer(): boolean { + return true; + } + getFieldIndex(): integer { return this.scene.getPlayerField().indexOf(this); } @@ -1165,12 +1182,15 @@ export class PlayerPokemon extends Pokemon { } export class EnemyPokemon extends Pokemon { + public trainer: boolean; public aiType: AiType; - constructor(scene: BattleScene, species: PokemonSpecies, level: integer, dataSource?: PokemonData) { + constructor(scene: BattleScene, species: PokemonSpecies, level: integer, trainer: boolean, dataSource?: PokemonData) { super(scene, 236, 84, species, level, dataSource?.abilityIndex, dataSource ? dataSource.formIndex : scene.arena.getFormIndex(species), dataSource?.gender, dataSource?.shiny, dataSource); + this.trainer = trainer; + if (!dataSource) { let prevolution: Species; let speciesId = species.speciesId; @@ -1323,6 +1343,10 @@ export class EnemyPokemon extends Pokemon { return false; } + hasTrainer(): boolean { + return this.trainer; + } + getFieldIndex(): integer { return this.scene.getEnemyField().indexOf(this); } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 28ba02c4d4a..62d6d675e04 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -253,7 +253,7 @@ export class GameData { scene.newArena(sessionData.arena.biome, true); sessionData.enemyParty.forEach((enemyData, e) => { - const enemyPokemon = enemyData.toPokemon(scene) as EnemyPokemon; + const enemyPokemon = enemyData.toPokemon(scene, battleType) as EnemyPokemon; battle.enemyParty[e] = enemyPokemon; if (battleType === BattleType.WILD) battle.seenEnemyPartyMemberIds.add(enemyPokemon.id); @@ -274,7 +274,7 @@ export class GameData { } for (let enemyModifierData of sessionData.enemyModifiers) { - const modifier = enemyModifierData.toModifier(scene, modifiersModule[enemyModifierData.className]) as PokemonHeldItemModifier; + const modifier = enemyModifierData.toModifier(scene, modifiersModule[enemyModifierData.className]); if (modifier) scene.addEnemyModifier(modifier); } diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 5c89fd5f781..5c768e02017 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -1,3 +1,4 @@ +import { BattleType } from "../battle"; import BattleScene from "../battle-scene"; import { Gender } from "../data/gender"; import { PokeballType } from "../data/pokeball"; @@ -69,10 +70,10 @@ export default class PokemonData { } } - toPokemon(scene: BattleScene): Pokemon { + toPokemon(scene: BattleScene, battleType?: BattleType): Pokemon { const species = getPokemonSpecies(this.species); if (this.player) return new PlayerPokemon(scene, species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this); - return new EnemyPokemon(scene, species, this.level, this); + return new EnemyPokemon(scene, species, this.level, battleType === BattleType.TRAINER, this); } } \ No newline at end of file diff --git a/src/trainer.ts b/src/trainer.ts index 62df6f4afee..a2e67412696 100644 --- a/src/trainer.ts +++ b/src/trainer.ts @@ -131,7 +131,7 @@ export default class Trainer extends Phaser.GameObjects.Container { ? getPokemonSpecies(battle.enemyParty[offset].species.getSpeciesForLevel(level)) : this.genNewPartyMemberSpecies(level); - ret = new EnemyPokemon(this.scene, species, level); + ret = new EnemyPokemon(this.scene, species, level, true); }, this.config.hasStaticParty ? this.config.getDerivedType() + ((index + 1) << 8) : this.scene.currentBattle.waveIndex + (this.config.getDerivedType() << 10) + ((index + 1) << 8)); return ret; @@ -151,7 +151,7 @@ export default class Trainer extends Phaser.GameObjects.Container { tier--; } const tierPool = this.config.speciesPools[tier]; - ret = getPokemonSpecies(getPokemonSpecies(Phaser.Math.RND.pick(tierPool)).getSpeciesForLevel(level)); + ret = getPokemonSpecies(getPokemonSpecies(Phaser.Math.RND.pick(tierPool)).getSpeciesForLevel(level, true)); } else ret = getPokemonSpecies(this.scene.randomSpecies(battle.waveIndex, level, this.config.speciesFilter).getSpeciesForLevel(level)); diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index bee1d7b4633..cab77166492 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -60,13 +60,13 @@ export default class BallUiHandler extends UiHandler { let success = false; - const pokeballTypeCount = Object.keys(this.scene.currentBattle.turnPokeballCounts).length; + const pokeballTypeCount = Object.keys(this.scene.pokeballCounts).length; if (button === Button.ACTION || button === Button.CANCEL) { const commandPhase = this.scene.getCurrentPhase() as CommandPhase; success = true; if (button === Button.ACTION && this.cursor < pokeballTypeCount) { - if (this.scene.currentBattle.turnPokeballCounts[this.cursor]) { + if (this.scene.pokeballCounts[this.cursor]) { if (commandPhase.handleCommand(Command.BALL, this.cursor)) { this.scene.ui.setMode(Mode.COMMAND, commandPhase.getFieldIndex()); this.scene.ui.setMode(Mode.MESSAGE); @@ -94,7 +94,7 @@ export default class BallUiHandler extends UiHandler { } updateCounts() { - this.countsText.setText(Object.values(this.scene.currentBattle.turnPokeballCounts).map(c => `x${c}`).join('\n')); + this.countsText.setText(Object.values(this.scene.pokeballCounts).map(c => `x${c}`).join('\n')); } setCursor(cursor: integer): boolean {