diff --git a/biome.jsonc b/biome.jsonc index 470885a543d..d2f7c711dc9 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -19,7 +19,6 @@ // and having to verify whether each individual file is ignored "includes": [ "**", - "!**/*.d.ts", "!**/dist/**/*", "!**/build/**/*", "!**/coverage/**/*", @@ -180,7 +179,7 @@ // Overrides to prevent unused import removal inside `overrides.ts` and enums files (for TSDoc linkcodes), // as well as in all TS files in `scripts/` (which are assumed to be boilerplate templates). { - "includes": ["**/src/overrides.ts", "**/src/enums/**/*", "**/scripts/**/*.ts"], + "includes": ["**/src/overrides.ts", "**/src/enums/**/*", "**/scripts/**/*.ts", "**/*.d.ts"], "linter": { "rules": { "correctness": { diff --git a/global.d.ts b/global.d.ts index 27e96a4d8b5..8b79d966e3c 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1,7 +1,6 @@ +import type { AnyFn } from "#types/type-helpers"; import type { SetupServerApi } from "msw/node"; -export {}; - declare global { /** * Only used in testing. @@ -11,4 +10,11 @@ declare global { * To set up your own server in a test see `game-data.test.ts` */ var server: SetupServerApi; + + // Overloads for `Function.apply` and `Function.call` to add type safety on matching argument types + interface Function { + apply(this: T, thisArg: ThisParameterType, argArray: Parameters): ReturnType; + + call(this: T, thisArg: ThisParameterType, ...argArray: Parameters): ReturnType; + } } diff --git a/package.json b/package.json index 71a8b1ae334..d3494da677c 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "typecheck": "tsc --noEmit", "eslint": "eslint --fix .", "eslint-ci": "eslint .", - "biome": "biome check --write --changed --no-errors-on-unmatched", + "biome": "biome check --write --changed --no-errors-on-unmatched --diagnostic-level=error", "biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched", "docs": "typedoc", "depcruise": "depcruise src test", diff --git a/public/exp-sprites.json b/public/exp-sprites.json index 7430bcf4dba..1903a6c7804 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -333,8 +333,6 @@ "671-yellow", "6713", "6713", - "672", - "672", "6724", "6724", "673", @@ -377,10 +375,6 @@ "690", "691", "691", - "692", - "692", - "693", - "693", "695", "695", "696", @@ -503,10 +497,6 @@ "751", "752", "752", - "753", - "753", - "754", - "754", "755", "755", "756", @@ -1459,8 +1449,6 @@ "671b-yellow", "6713b", "6713b", - "672b", - "672b", "6724b", "6724b", "673b", @@ -1503,10 +1491,6 @@ "690b", "691b", "691b", - "692b", - "692b", - "693b", - "693b", "695b", "695b", "696b", @@ -1629,10 +1613,6 @@ "751b", "752b", "752b", - "753b", - "753b", - "754b", - "754b", "755b", "755b", "756b", @@ -2585,8 +2565,6 @@ "671sb-yellow", "6713sb", "6713sb", - "672sb", - "672sb", "6724sb", "6724sb", "673sb", @@ -2629,10 +2607,6 @@ "690sb", "691sb", "691sb", - "692sb", - "692sb", - "693sb", - "693sb", "695sb", "695sb", "696sb", @@ -2755,10 +2729,6 @@ "751sb", "752sb", "752sb", - "753sb", - "753sb", - "754sb", - "754sb", "755sb", "755sb", "756sb", @@ -3716,8 +3686,6 @@ "671s-yellow", "6713s", "6713s", - "672s", - "672s", "6724s", "6724s", "673s", @@ -3760,10 +3728,6 @@ "690s", "691s", "691s", - "692s", - "692s", - "693s", - "693s", "695s", "695s", "696s", @@ -3886,10 +3850,6 @@ "751s", "752s", "752s", - "753s", - "753s", - "754s", - "754s", "755s", "755s", "756s", @@ -4625,8 +4585,6 @@ "730", "747", "748", - "753", - "754", "755", "756", "761", diff --git a/public/images/pokemon/672.json b/public/images/pokemon/672.json index eabec185e7a..f337bef7d29 100644 --- a/public/images/pokemon/672.json +++ b/public/images/pokemon/672.json @@ -1,41 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 42, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a5389856891adb93e4e47b311ec032fc:ff2b44df2ba78f8e713e7ecfbd8a40e8:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 42, "y": 100, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 83, "y": 101, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 170, "h": 193 }, + "scale": "1" + } } diff --git a/public/images/pokemon/672.png b/public/images/pokemon/672.png index 2fdd68acd32..ff319db5822 100644 Binary files a/public/images/pokemon/672.png and b/public/images/pokemon/672.png differ diff --git a/public/images/pokemon/692.json b/public/images/pokemon/692.json index 125642a01f1..86b535260ae 100644 --- a/public/images/pokemon/692.json +++ b/public/images/pokemon/692.json @@ -7,6 +7,780 @@ "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, "sourceSize": { "w": 63, "h": 35 }, "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 117, "y": 72, "w": 59, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 } ], "meta": { diff --git a/public/images/pokemon/693.json b/public/images/pokemon/693.json index 5e35ec822d2..c8f7763de1d 100644 --- a/public/images/pokemon/693.json +++ b/public/images/pokemon/693.json @@ -1,41 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 87, - "h": 87 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 87, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 87, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 87, - "h": 78 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:56529e9f35f7fe73552976d184900c50:cf9846d335c4b48dea98b7f53c4caa05:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 303, "y": 140, "w": 102, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 5, "w": 102, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 523, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 318, "y": 290, "w": 103, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 7, "w": 103, "h": 64 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 105, "y": 1, "w": 102, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 102, "h": 75 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 508, "y": 152, "w": 106, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 106, "h": 67 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 414, "y": 74, "w": 103, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 103, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 309, "y": 214, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 306, "y": 1, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 106, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 1, "y": 218, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 213, "y": 279, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 103, "y": 341, "w": 104, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 104, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 516, "y": 1, "w": 101, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 101, "h": 73 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 100, "y": 149, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 1, "y": 349, "w": 102, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 102, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 103, "y": 404, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 626, "h": 466 }, + "scale": "1" + } } diff --git a/public/images/pokemon/693.png b/public/images/pokemon/693.png index 848c881311a..28f3bd88282 100644 Binary files a/public/images/pokemon/693.png and b/public/images/pokemon/693.png differ diff --git a/public/images/pokemon/753.json b/public/images/pokemon/753.json index 95341485d9c..a1056b119b2 100644 --- a/public/images/pokemon/753.json +++ b/public/images/pokemon/753.json @@ -4,30 +4,2571 @@ "image": "753.png", "format": "RGBA8888", "size": { - "w": 45, - "h": 45 + "w": 137, + "h": 137 }, "scale": 1, "frames": [ { "filename": "0001.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 28, - "h": 45 + "w": 30, + "h": 52 }, "spriteSourceSize": { "x": 0, - "y": 0, - "w": 28, - "h": 45 + "y": 5, + "w": 30, + "h": 47 }, "frame": { "x": 0, "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0099.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0100.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0101.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0102.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0110.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0111.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0112.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0120.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0121.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0122.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0103.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0104.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0113.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0114.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0107.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0108.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0117.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0118.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0105.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0106.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0115.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0116.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0109.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 92, + "w": 30, + "h": 45 + } + }, + { + "filename": "0119.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 92, + "w": 30, + "h": 45 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 } } ] @@ -36,6 +2577,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:baa756b85b9e29dd287f11359ba84c8e:e7faac2fce21b45c820722ab57c0565d:16c1874bc814253ca78e52a99a340ff7$" + "smartupdate": "$TexturePacker:SmartUpdate:2ba4d00a53c1e7152a0bd73555d70dba:5086780147a4891c997ba1592c9a1508:16c1874bc814253ca78e52a99a340ff7$" } } diff --git a/public/images/pokemon/753.png b/public/images/pokemon/753.png index 3357ef01264..21a16f7861c 100644 Binary files a/public/images/pokemon/753.png and b/public/images/pokemon/753.png differ diff --git a/public/images/pokemon/754.json b/public/images/pokemon/754.json index 4dcfc088066..64490baa49f 100644 --- a/public/images/pokemon/754.json +++ b/public/images/pokemon/754.json @@ -4,29 +4,1121 @@ "image": "754.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 234, + "h": 234 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0036.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 46, + "w": 93, "h": 68 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 46, + "w": 93, "h": 68 }, "frame": { "x": 0, "y": 0, - "w": 46, + "w": 93, + "h": 68 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 93, + "h": 68 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 93, + "h": 68 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 68, + "w": 93, + "h": 68 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 85, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 85, + "h": 68 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 85, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 85, + "h": 68 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 181, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 181, + "y": 136, + "w": 48, "h": 68 } } @@ -36,6 +1128,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ceddf112e2007d3f4cfd18be932f4bea:d91e84a313a44dd4f7c06626c59dc5d6:f7cb0e9bb3adbe899317e6e2e306035d$" + "smartupdate": "$TexturePacker:SmartUpdate:f79fcee4451cea6aad915f561b31bf78:95fdb55190edb6ce0d5847a4e46b4d5c:f7cb0e9bb3adbe899317e6e2e306035d$" } } diff --git a/public/images/pokemon/754.png b/public/images/pokemon/754.png index 975490eb6a4..f6410e02a11 100644 Binary files a/public/images/pokemon/754.png and b/public/images/pokemon/754.png differ diff --git a/public/images/pokemon/back/672.json b/public/images/pokemon/back/672.json index 572cfc63cab..f877b9abc2e 100644 --- a/public/images/pokemon/back/672.json +++ b/public/images/pokemon/back/672.json @@ -1,41 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f1e3530f741a26e873c3fc51d143d47e:cf5c123cdad11dba2ff9baade57233bb:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 160, "h": 195 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/672.png b/public/images/pokemon/back/672.png index 360c79fef32..2201da3b627 100644 Binary files a/public/images/pokemon/back/672.png and b/public/images/pokemon/back/672.png differ diff --git a/public/images/pokemon/back/692.json b/public/images/pokemon/back/692.json index e83252f8486..801710c4861 100644 --- a/public/images/pokemon/back/692.json +++ b/public/images/pokemon/back/692.json @@ -7,6 +7,780 @@ "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, "sourceSize": { "w": 63, "h": 35 }, "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 119, "y": 72, "w": 56, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 } ], "meta": { diff --git a/public/images/pokemon/back/693.json b/public/images/pokemon/back/693.json index c9b4f798435..6358a8908f6 100644 --- a/public/images/pokemon/back/693.json +++ b/public/images/pokemon/back/693.json @@ -1,41 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 90, - "h": 90 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 70 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d6632bd48b7744ae3f1ffbbdeb6c73ca:0a9c6468e4ad2560c13c7880c39eaab2:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 565, "y": 196, "w": 90, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 6, "w": 90, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 278, "y": 266, "w": 90, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 90, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 189, "y": 199, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 193, "y": 1, "w": 98, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 98, "h": 68 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 95, "y": 72, "w": 96, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 96, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 381, "y": 1, "w": 97, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 97, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 191, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 95, "y": 135, "w": 96, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 96, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 572, "y": 67, "w": 99, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 99, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 284, "y": 205, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 1, "y": 199, "w": 91, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 91, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 259, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 193, "y": 69, "w": 95, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 95, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 285, "y": 141, "w": 92, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 8, "w": 92, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 96, "y": 318, "w": 89, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 14, "w": 89, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 564, "y": 261, "w": 92, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 14, "w": 92, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 672, "h": 377 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/693.png b/public/images/pokemon/back/693.png index 2386eb03683..1ff5db69b60 100644 Binary files a/public/images/pokemon/back/693.png and b/public/images/pokemon/back/693.png differ diff --git a/public/images/pokemon/back/753.json b/public/images/pokemon/back/753.json index 128b96a0337..dbd9fd7d635 100644 --- a/public/images/pokemon/back/753.json +++ b/public/images/pokemon/back/753.json @@ -4,29 +4,2570 @@ "image": "753.png", "format": "RGBA8888", "size": { - "w": 45, - "h": 45 + "w": 140, + "h": 140 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0019.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 28, - "h": 45 + "w": 31, + "h": 53 }, "spriteSourceSize": { "x": 0, - "y": 0, - "w": 28, - "h": 45 + "y": 5, + "w": 31, + "h": 47 }, "frame": { "x": 0, "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0099.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0100.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0101.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0102.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0110.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0111.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0112.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0120.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0121.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0122.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0109.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 30, + "h": 46 + }, + "frame": { + "x": 31, + "y": 94, + "w": 30, + "h": 46 + } + }, + { + "filename": "0119.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 30, + "h": 46 + }, + "frame": { + "x": 31, + "y": 94, + "w": 30, + "h": 46 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0103.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0104.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0113.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0114.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0107.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0108.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0117.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0118.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0105.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0106.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0115.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0116.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, "h": 45 } } @@ -36,6 +2577,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:36128f93c74cadc1ff97b730d6db648e:070937eb6d31e4dff84a2f739fd6c444:16c1874bc814253ca78e52a99a340ff7$" + "smartupdate": "$TexturePacker:SmartUpdate:4209223453e7dabb3758c23bb26a3f91:234fdcf4efd83f52e8b51f13ec19a55c:16c1874bc814253ca78e52a99a340ff7$" } } diff --git a/public/images/pokemon/back/753.png b/public/images/pokemon/back/753.png index 5c5218546e7..aa1fb706745 100644 Binary files a/public/images/pokemon/back/753.png and b/public/images/pokemon/back/753.png differ diff --git a/public/images/pokemon/back/754.json b/public/images/pokemon/back/754.json index 125ebed161c..86abaac1814 100644 --- a/public/images/pokemon/back/754.json +++ b/public/images/pokemon/back/754.json @@ -4,29 +4,1100 @@ "image": "754.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 222, + "h": 222 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0036.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 36, + "w": 92, "h": 68 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 36, + "w": 92, "h": 68 }, "frame": { "x": 0, "y": 0, - "w": 36, + "w": 92, + "h": 68 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 92, + "h": 68 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 92, + "h": 68 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 92, + "h": 68 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 92, + "h": 68 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 88, + "h": 68 + }, + "frame": { + "x": 92, + "y": 68, + "w": 88, + "h": 68 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 88, + "h": 68 + }, + "frame": { + "x": 92, + "y": 68, + "w": 88, + "h": 68 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 40, + "h": 68 + }, + "frame": { + "x": 180, + "y": 68, + "w": 40, + "h": 68 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 40, + "h": 68 + }, + "frame": { + "x": 180, + "y": 68, + "w": 40, + "h": 68 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, "h": 68 } } @@ -36,6 +1107,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2774f1d6c293a696177c371795e6ba38:d35951afed6391313aa94000563ae143:f7cb0e9bb3adbe899317e6e2e306035d$" + "smartupdate": "$TexturePacker:SmartUpdate:3adad944aac48ad53efa41f8c9916d1c:ea15b954875ad08814f50cbbf849c1b3:f7cb0e9bb3adbe899317e6e2e306035d$" } } diff --git a/public/images/pokemon/back/754.png b/public/images/pokemon/back/754.png index ec44dc63266..66bd6a1b975 100644 Binary files a/public/images/pokemon/back/754.png and b/public/images/pokemon/back/754.png differ diff --git a/public/images/pokemon/back/shiny/672.json b/public/images/pokemon/back/shiny/672.json index f22c49faf17..f877b9abc2e 100644 --- a/public/images/pokemon/back/shiny/672.json +++ b/public/images/pokemon/back/shiny/672.json @@ -1,41 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:22bc95f0eec19d78f006f79111de626a:2a6ccbfd4c6dd519c2d4695ab3ba6aa1:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 160, "h": 195 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/672.png b/public/images/pokemon/back/shiny/672.png index 470f36886d4..09d65dffbb2 100644 Binary files a/public/images/pokemon/back/shiny/672.png and b/public/images/pokemon/back/shiny/672.png differ diff --git a/public/images/pokemon/back/shiny/692.json b/public/images/pokemon/back/shiny/692.json index 2dec26a2616..801710c4861 100644 --- a/public/images/pokemon/back/shiny/692.json +++ b/public/images/pokemon/back/shiny/692.json @@ -1,41 +1,794 @@ -{ - "textures": [ - { - "image": "692.png", - "format": "RGBA8888", - "size": { - "w": 56, - "h": 56 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 56, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8b2c775abfa9b635f2149e201570e6ff:f327a0cd8d92fa087869ded83baa8e41:2880def858c84cd859bedf13b0b49a33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 119, "y": 72, "w": 56, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "692.png", + "format": "I8", + "size": { "w": 181, "h": 106 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/692.png b/public/images/pokemon/back/shiny/692.png index 7459aabd207..dfad01dd446 100644 Binary files a/public/images/pokemon/back/shiny/692.png and b/public/images/pokemon/back/shiny/692.png differ diff --git a/public/images/pokemon/back/shiny/693.json b/public/images/pokemon/back/shiny/693.json index 6c1d41485e9..6358a8908f6 100644 --- a/public/images/pokemon/back/shiny/693.json +++ b/public/images/pokemon/back/shiny/693.json @@ -1,41 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 90, - "h": 90 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 70 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e4bbb1dc7d71678d99aa6c088ee2dda6:9e2c014adc4489792adb3203513e62b4:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 565, "y": 196, "w": 90, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 6, "w": 90, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 278, "y": 266, "w": 90, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 90, "h": 59 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 189, "y": 199, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 193, "y": 1, "w": 98, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 98, "h": 68 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 95, "y": 72, "w": 96, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 96, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 381, "y": 1, "w": 97, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 97, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 191, "y": 136, "w": 94, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 95, "y": 135, "w": 96, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 96, "h": 62 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 572, "y": 67, "w": 99, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 99, "h": 65 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 284, "y": 205, "w": 95, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 95, "h": 61 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 1, "y": 199, "w": 91, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 91, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 259, "w": 95, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 12, "w": 95, "h": 60 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 193, "y": 69, "w": 95, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 95, "h": 67 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 285, "y": 141, "w": 92, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 8, "w": 92, "h": 64 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 96, "y": 318, "w": 89, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 14, "w": 89, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 564, "y": 261, "w": 92, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 14, "w": 92, "h": 58 }, + "sourceSize": { "w": 111, "h": 83 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 672, "h": 377 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/693.png b/public/images/pokemon/back/shiny/693.png index 47715b534bd..6884c2e28c7 100644 Binary files a/public/images/pokemon/back/shiny/693.png and b/public/images/pokemon/back/shiny/693.png differ diff --git a/public/images/pokemon/back/shiny/753.json b/public/images/pokemon/back/shiny/753.json index 70c1091b725..f1d1bc11bb0 100644 --- a/public/images/pokemon/back/shiny/753.json +++ b/public/images/pokemon/back/shiny/753.json @@ -4,29 +4,2570 @@ "image": "753.png", "format": "RGBA8888", "size": { - "w": 45, - "h": 45 + "w": 140, + "h": 140 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0019.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 28, - "h": 45 + "w": 31, + "h": 53 }, "spriteSourceSize": { "x": 0, - "y": 0, - "w": 28, - "h": 45 + "y": 5, + "w": 31, + "h": 47 }, "frame": { "x": 0, "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 47 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 31, + "h": 47 + }, + "frame": { + "x": 0, + "y": 47, + "w": 31, + "h": 47 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 31, + "h": 46 + }, + "frame": { + "x": 0, + "y": 94, + "w": 31, + "h": 46 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0099.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0100.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0101.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0102.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0110.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0111.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0112.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0120.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0121.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0122.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 31, + "y": 47, + "w": 30, + "h": 47 + } + }, + { + "filename": "0109.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 30, + "h": 46 + }, + "frame": { + "x": 31, + "y": 94, + "w": 30, + "h": 46 + } + }, + { + "filename": "0119.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 30, + "h": 46 + }, + "frame": { + "x": 31, + "y": 94, + "w": 30, + "h": 46 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 30, + "h": 47 + }, + "frame": { + "x": 61, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0103.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0104.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0113.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0114.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 29, + "h": 47 + }, + "frame": { + "x": 91, + "y": 0, + "w": 29, + "h": 47 + } + }, + { + "filename": "0107.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0108.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0117.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0118.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 29, + "h": 47 + }, + "frame": { + "x": 61, + "y": 47, + "w": 29, + "h": 47 + } + }, + { + "filename": "0105.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0106.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0115.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0116.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 28, + "h": 46 + }, + "frame": { + "x": 61, + "y": 94, + "w": 28, + "h": 46 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, + "h": 45 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 31, + "h": 53 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 45 + }, + "frame": { + "x": 89, + "y": 94, + "w": 29, "h": 45 } } @@ -36,6 +2577,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f2829e1ebd212cc5203393968a2efd5f:dd79bfe2b6a61007ace9092be7975ffe:16c1874bc814253ca78e52a99a340ff7$" + "smartupdate": "$TexturePacker:SmartUpdate:b6d27dc4e44833805071498f628d15c3:7ab61edae9d3eecb963334bb47dd5aa7:16c1874bc814253ca78e52a99a340ff7$" } } diff --git a/public/images/pokemon/back/shiny/753.png b/public/images/pokemon/back/shiny/753.png index aadcbe3fa04..14f23fc6bb9 100644 Binary files a/public/images/pokemon/back/shiny/753.png and b/public/images/pokemon/back/shiny/753.png differ diff --git a/public/images/pokemon/back/shiny/754.json b/public/images/pokemon/back/shiny/754.json index 10165ba4b4a..8b1a3d44a4d 100644 --- a/public/images/pokemon/back/shiny/754.json +++ b/public/images/pokemon/back/shiny/754.json @@ -4,29 +4,1121 @@ "image": "754.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 222, + "h": 222 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0036.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 36, + "w": 92, "h": 68 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 36, + "w": 92, "h": 68 }, "frame": { "x": 0, "y": 0, - "w": 36, + "w": 92, + "h": 68 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 92, + "y": 0, + "w": 92, + "h": 68 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 184, + "y": 0, + "w": 38, + "h": 68 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 92, + "h": 68 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 92, + "h": 68 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 92, + "h": 68 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 92, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 92, + "h": 68 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 88, + "h": 68 + }, + "frame": { + "x": 92, + "y": 68, + "w": 88, + "h": 68 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 88, + "h": 68 + }, + "frame": { + "x": 92, + "y": 68, + "w": 88, + "h": 68 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 40, + "h": 68 + }, + "frame": { + "x": 180, + "y": 68, + "w": 40, + "h": 68 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 40, + "h": 68 + }, + "frame": { + "x": 180, + "y": 68, + "w": 40, + "h": 68 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 39, + "h": 68 + }, + "frame": { + "x": 92, + "y": 136, + "w": 39, + "h": 68 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 131, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, + "h": 68 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 92, + "h": 68 + }, + "spriteSourceSize": { + "x": 25, + "y": 0, + "w": 38, + "h": 68 + }, + "frame": { + "x": 169, + "y": 136, + "w": 38, "h": 68 } } @@ -36,6 +1128,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fb4a59b5a68751679b02829509901f6d:d3641a5857a0273c94152df891d4cf5c:f7cb0e9bb3adbe899317e6e2e306035d$" + "smartupdate": "$TexturePacker:SmartUpdate:7651b73927071f2814265b66582a8d13:a2d1ef3cf0c2458640f77c2fbcc821a0:f7cb0e9bb3adbe899317e6e2e306035d$" } } diff --git a/public/images/pokemon/back/shiny/754.png b/public/images/pokemon/back/shiny/754.png index 47a582ff788..1f7346ed822 100644 Binary files a/public/images/pokemon/back/shiny/754.png and b/public/images/pokemon/back/shiny/754.png differ diff --git a/public/images/pokemon/exp/672.json b/public/images/pokemon/exp/672.json deleted file mode 100644 index f337bef7d29..00000000000 --- a/public/images/pokemon/exp/672.json +++ /dev/null @@ -1,479 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 42, "y": 100, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 83, "y": 101, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.11-x64", - "image": "672.png", - "format": "I8", - "size": { "w": 170, "h": 193 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/672.png b/public/images/pokemon/exp/672.png deleted file mode 100644 index f112522bea2..00000000000 Binary files a/public/images/pokemon/exp/672.png and /dev/null differ diff --git a/public/images/pokemon/exp/692.json b/public/images/pokemon/exp/692.json deleted file mode 100644 index 86b535260ae..00000000000 --- a/public/images/pokemon/exp/692.json +++ /dev/null @@ -1,794 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0002.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0003.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0004.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0005.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0006.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0007.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0008.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0009.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0010.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0011.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0012.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0013.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0014.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0015.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0016.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0017.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0018.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0019.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0020.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0021.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0022.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0023.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0024.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0025.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0026.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0027.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0028.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0029.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0030.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0031.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0032.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0033.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0034.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0035.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0036.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0037.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0038.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0039.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0040.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0041.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0042.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0043.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0044.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0045.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0046.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0047.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0048.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0049.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0050.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0051.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0052.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0053.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0054.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0055.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0056.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0057.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0058.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0059.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0060.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0061.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0062.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0063.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0064.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0065.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0066.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0067.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0068.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0069.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0070.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0071.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0072.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0073.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0074.png", - "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0075.png", - "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0076.png", - "frame": { "x": 117, "y": 72, "w": 59, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0077.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0078.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0079.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0080.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0081.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0082.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0084.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0085.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0086.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0087.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "692.png", - "format": "I8", - "size": { "w": 239, "h": 106 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/692.png b/public/images/pokemon/exp/692.png deleted file mode 100644 index daa9db0a203..00000000000 Binary files a/public/images/pokemon/exp/692.png and /dev/null differ diff --git a/public/images/pokemon/exp/693.json b/public/images/pokemon/exp/693.json deleted file mode 100644 index c8f7763de1d..00000000000 --- a/public/images/pokemon/exp/693.json +++ /dev/null @@ -1,902 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0053.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0054.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0055.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0056.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0057.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0058.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0059.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0060.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0061.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0062.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0063.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0064.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0065.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0066.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0067.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0068.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0069.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0070.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0071.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0072.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0073.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0074.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0075.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0076.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0077.png", - "frame": { "x": 303, "y": 140, "w": 102, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 5, "w": 102, "h": 70 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0078.png", - "frame": { "x": 523, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 11, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0079.png", - "frame": { "x": 318, "y": 290, "w": 103, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 7, "w": 103, "h": 64 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0080.png", - "frame": { "x": 105, "y": 1, "w": 102, "h": 75 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 0, "w": 102, "h": 75 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0081.png", - "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0082.png", - "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0084.png", - "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0085.png", - "frame": { "x": 508, "y": 152, "w": 106, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 15, "w": 106, "h": 67 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0086.png", - "frame": { "x": 414, "y": 74, "w": 103, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 8, "w": 103, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0087.png", - "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0088.png", - "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0089.png", - "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0090.png", - "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0091.png", - "frame": { "x": 309, "y": 214, "w": 107, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 14, "w": 107, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0092.png", - "frame": { "x": 306, "y": 1, "w": 106, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 9, "w": 106, "h": 70 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0093.png", - "frame": { "x": 1, "y": 218, "w": 107, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 14, "w": 107, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0094.png", - "frame": { "x": 213, "y": 279, "w": 105, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 14, "w": 105, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0095.png", - "frame": { "x": 103, "y": 341, "w": 104, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 15, "w": 104, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0096.png", - "frame": { "x": 516, "y": 1, "w": 101, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 101, "h": 73 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0097.png", - "frame": { "x": 100, "y": 149, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0098.png", - "frame": { "x": 1, "y": 349, "w": 102, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 16, "w": 102, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0099.png", - "frame": { "x": 103, "y": 404, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 16, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "693.png", - "format": "I8", - "size": { "w": 626, "h": 466 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/693.png b/public/images/pokemon/exp/693.png deleted file mode 100644 index 28f3bd88282..00000000000 Binary files a/public/images/pokemon/exp/693.png and /dev/null differ diff --git a/public/images/pokemon/exp/753.json b/public/images/pokemon/exp/753.json deleted file mode 100644 index a1056b119b2..00000000000 --- a/public/images/pokemon/exp/753.json +++ /dev/null @@ -1,2582 +0,0 @@ -{ - "textures": [ - { - "image": "753.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 92, - "w": 30, - "h": 45 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 92, - "w": 30, - "h": 45 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2ba4d00a53c1e7152a0bd73555d70dba:5086780147a4891c997ba1592c9a1508:16c1874bc814253ca78e52a99a340ff7$" - } -} diff --git a/public/images/pokemon/exp/753.png b/public/images/pokemon/exp/753.png deleted file mode 100644 index 21a16f7861c..00000000000 Binary files a/public/images/pokemon/exp/753.png and /dev/null differ diff --git a/public/images/pokemon/exp/754.json b/public/images/pokemon/exp/754.json deleted file mode 100644 index 64490baa49f..00000000000 --- a/public/images/pokemon/exp/754.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - "textures": [ - { - "image": "754.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f79fcee4451cea6aad915f561b31bf78:95fdb55190edb6ce0d5847a4e46b4d5c:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} diff --git a/public/images/pokemon/exp/754.png b/public/images/pokemon/exp/754.png deleted file mode 100644 index f6410e02a11..00000000000 Binary files a/public/images/pokemon/exp/754.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/672.json b/public/images/pokemon/exp/back/672.json deleted file mode 100644 index f877b9abc2e..00000000000 --- a/public/images/pokemon/exp/back/672.json +++ /dev/null @@ -1,479 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.11-x64", - "image": "672.png", - "format": "I8", - "size": { "w": 160, "h": 195 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/back/672.png b/public/images/pokemon/exp/back/672.png deleted file mode 100644 index 2201da3b627..00000000000 Binary files a/public/images/pokemon/exp/back/672.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/692.json b/public/images/pokemon/exp/back/692.json deleted file mode 100644 index 801710c4861..00000000000 --- a/public/images/pokemon/exp/back/692.json +++ /dev/null @@ -1,794 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0002.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0003.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0004.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0005.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0006.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0007.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0008.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0009.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0010.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0011.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0012.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0013.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0014.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0015.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0016.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0017.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0018.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0019.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0020.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0021.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0022.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0023.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0024.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0025.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0026.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0027.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0028.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0029.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0030.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0031.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0032.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0033.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0034.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0035.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0036.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0037.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0038.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0039.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0040.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0041.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0042.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0043.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0044.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0045.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0046.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0047.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0048.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0049.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0050.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0051.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0052.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0053.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0054.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0055.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0056.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0057.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0058.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0059.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0060.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0061.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0062.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0063.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0064.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0065.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0066.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0067.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0068.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0069.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0070.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0071.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0072.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0073.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0074.png", - "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0075.png", - "frame": { "x": 119, "y": 72, "w": 56, "h": 31 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 31 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0076.png", - "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0077.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0078.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0079.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0080.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0081.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0082.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0084.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0085.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0086.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0087.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "692.png", - "format": "I8", - "size": { "w": 181, "h": 106 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/back/692.png b/public/images/pokemon/exp/back/692.png deleted file mode 100644 index b1d83831d2b..00000000000 Binary files a/public/images/pokemon/exp/back/692.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/693.json b/public/images/pokemon/exp/back/693.json deleted file mode 100644 index 6358a8908f6..00000000000 --- a/public/images/pokemon/exp/back/693.json +++ /dev/null @@ -1,902 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0053.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0054.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0055.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0056.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0057.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0058.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0059.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0060.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0061.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0062.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0063.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0064.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0065.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0066.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0067.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0068.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0069.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0070.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0071.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0072.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0073.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0074.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0075.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0076.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0077.png", - "frame": { "x": 565, "y": 196, "w": 90, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 6, "w": 90, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0078.png", - "frame": { "x": 278, "y": 266, "w": 90, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 10, "w": 90, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0079.png", - "frame": { "x": 189, "y": 199, "w": 95, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 8, "w": 95, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0080.png", - "frame": { "x": 193, "y": 1, "w": 98, "h": 68 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 3, "w": 98, "h": 68 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0081.png", - "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0082.png", - "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0084.png", - "frame": { "x": 1, "y": 136, "w": 94, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0085.png", - "frame": { "x": 95, "y": 72, "w": 96, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 12, "w": 96, "h": 63 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0086.png", - "frame": { "x": 381, "y": 1, "w": 97, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 6, "w": 97, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0087.png", - "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0088.png", - "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0089.png", - "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0090.png", - "frame": { "x": 191, "y": 136, "w": 94, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0091.png", - "frame": { "x": 95, "y": 135, "w": 96, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 11, "w": 96, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0092.png", - "frame": { "x": 572, "y": 67, "w": 99, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 99, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0093.png", - "frame": { "x": 284, "y": 205, "w": 95, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 14, "y": 11, "w": 95, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0094.png", - "frame": { "x": 1, "y": 199, "w": 91, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 12, "w": 91, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0095.png", - "frame": { "x": 1, "y": 259, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 12, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0096.png", - "frame": { "x": 193, "y": 69, "w": 95, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 5, "w": 95, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0097.png", - "frame": { "x": 285, "y": 141, "w": 92, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 8, "w": 92, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0098.png", - "frame": { "x": 96, "y": 318, "w": 89, "h": 58 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 22, "y": 14, "w": 89, "h": 58 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0099.png", - "frame": { "x": 564, "y": 261, "w": 92, "h": 58 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 19, "y": 14, "w": 92, "h": 58 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "693.png", - "format": "I8", - "size": { "w": 672, "h": 377 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/back/693.png b/public/images/pokemon/exp/back/693.png deleted file mode 100644 index 1ff5db69b60..00000000000 Binary files a/public/images/pokemon/exp/back/693.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/753.json b/public/images/pokemon/exp/back/753.json deleted file mode 100644 index dbd9fd7d635..00000000000 --- a/public/images/pokemon/exp/back/753.json +++ /dev/null @@ -1,2582 +0,0 @@ -{ - "textures": [ - { - "image": "753.png", - "format": "RGBA8888", - "size": { - "w": 140, - "h": 140 - }, - "scale": 1, - "frames": [ - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 30, - "h": 46 - }, - "frame": { - "x": 31, - "y": 94, - "w": 30, - "h": 46 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 30, - "h": 46 - }, - "frame": { - "x": 31, - "y": 94, - "w": 30, - "h": 46 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4209223453e7dabb3758c23bb26a3f91:234fdcf4efd83f52e8b51f13ec19a55c:16c1874bc814253ca78e52a99a340ff7$" - } -} diff --git a/public/images/pokemon/exp/back/753.png b/public/images/pokemon/exp/back/753.png deleted file mode 100644 index aa1fb706745..00000000000 Binary files a/public/images/pokemon/exp/back/753.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/754.json b/public/images/pokemon/exp/back/754.json deleted file mode 100644 index 86abaac1814..00000000000 --- a/public/images/pokemon/exp/back/754.json +++ /dev/null @@ -1,1112 +0,0 @@ -{ - "textures": [ - { - "image": "754.png", - "format": "RGBA8888", - "size": { - "w": 222, - "h": 222 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3adad944aac48ad53efa41f8c9916d1c:ea15b954875ad08814f50cbbf849c1b3:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} diff --git a/public/images/pokemon/exp/back/754.png b/public/images/pokemon/exp/back/754.png deleted file mode 100644 index 66bd6a1b975..00000000000 Binary files a/public/images/pokemon/exp/back/754.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/672.json b/public/images/pokemon/exp/back/shiny/672.json deleted file mode 100644 index f877b9abc2e..00000000000 --- a/public/images/pokemon/exp/back/shiny/672.json +++ /dev/null @@ -1,479 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 118, "y": 97, "w": 40, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 41, "y": 98, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 78, "y": 0, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 118, "y": 50, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 0, "y": 56, "w": 41, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 10, "w": 41, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 0, "y": 104, "w": 40, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 10, "w": 40, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 40, "y": 146, "w": 39, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 9, "w": 39, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 78, "y": 48, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 39, "y": 0, "w": 39, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 5, "w": 39, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 0, "w": 39, "h": 56 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 79, "y": 146, "w": 40, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 9, "w": 40, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 119, "y": 146, "w": 38, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 8, "w": 38, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 120, "y": 0, "w": 40, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 8, "w": 40, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.11-x64", - "image": "672.png", - "format": "I8", - "size": { "w": 160, "h": 195 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/back/shiny/672.png b/public/images/pokemon/exp/back/shiny/672.png deleted file mode 100644 index 09d65dffbb2..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/672.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/692.json b/public/images/pokemon/exp/back/shiny/692.json deleted file mode 100644 index 801710c4861..00000000000 --- a/public/images/pokemon/exp/back/shiny/692.json +++ /dev/null @@ -1,794 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0002.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0003.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0004.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0005.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0006.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0007.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0008.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0009.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0010.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0011.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0012.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0013.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0014.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0015.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0016.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0017.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0018.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0019.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0020.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0021.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0022.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0023.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0024.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0025.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0026.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0027.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0028.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0029.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0030.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0031.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0032.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0033.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0034.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0035.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0036.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0037.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0038.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0039.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0040.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0041.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0042.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0043.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0044.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0045.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0046.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0047.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0048.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0049.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0050.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0051.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0052.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0053.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0054.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0055.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0056.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0057.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0058.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0059.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0060.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0061.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0062.png", - "frame": { "x": 1, "y": 36, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0063.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0064.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0065.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0066.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0067.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0068.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0069.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0070.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0071.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0072.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0073.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0074.png", - "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0075.png", - "frame": { "x": 119, "y": 72, "w": 56, "h": 31 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 4, "w": 56, "h": 31 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0076.png", - "frame": { "x": 60, "y": 72, "w": 58, "h": 31 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 4, "w": 58, "h": 31 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0077.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0078.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0079.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0080.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0081.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0082.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 72, "w": 58, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 58, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0084.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0085.png", - "frame": { "x": 59, "y": 37, "w": 57, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 57, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0086.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0087.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "692.png", - "format": "I8", - "size": { "w": 181, "h": 106 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/back/shiny/692.png b/public/images/pokemon/exp/back/shiny/692.png deleted file mode 100644 index dfad01dd446..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/692.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/693.json b/public/images/pokemon/exp/back/shiny/693.json deleted file mode 100644 index 6358a8908f6..00000000000 --- a/public/images/pokemon/exp/back/shiny/693.json +++ /dev/null @@ -1,902 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0053.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0054.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0055.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0056.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0057.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0058.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0059.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0060.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0061.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0062.png", - "frame": { "x": 472, "y": 70, "w": 88, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 0, "w": 88, "h": 72 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0063.png", - "frame": { "x": 378, "y": 138, "w": 91, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 8, "w": 91, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0064.png", - "frame": { "x": 187, "y": 260, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0065.png", - "frame": { "x": 379, "y": 257, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 16, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0066.png", - "frame": { "x": 572, "y": 1, "w": 98, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 12, "w": 98, "h": 66 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0067.png", - "frame": { "x": 478, "y": 1, "w": 94, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 11, "w": 94, "h": 69 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0068.png", - "frame": { "x": 560, "y": 132, "w": 93, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 19, "w": 93, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0069.png", - "frame": { "x": 474, "y": 257, "w": 90, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 22, "w": 90, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0070.png", - "frame": { "x": 95, "y": 197, "w": 94, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 21, "w": 94, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0071.png", - "frame": { "x": 99, "y": 1, "w": 94, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 71 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0072.png", - "frame": { "x": 291, "y": 1, "w": 90, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 6, "w": 90, "h": 73 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0073.png", - "frame": { "x": 288, "y": 74, "w": 90, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 21, "y": 11, "w": 90, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0074.png", - "frame": { "x": 368, "y": 317, "w": 88, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 23, "y": 17, "w": 88, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0075.png", - "frame": { "x": 96, "y": 259, "w": 91, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 15, "w": 91, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0076.png", - "frame": { "x": 381, "y": 68, "w": 91, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 20, "y": 3, "w": 91, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0077.png", - "frame": { "x": 565, "y": 196, "w": 90, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 16, "y": 6, "w": 90, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0078.png", - "frame": { "x": 278, "y": 266, "w": 90, "h": 59 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 10, "w": 90, "h": 59 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0079.png", - "frame": { "x": 189, "y": 199, "w": 95, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 8, "w": 95, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0080.png", - "frame": { "x": 193, "y": 1, "w": 98, "h": 68 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 3, "w": 98, "h": 68 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0081.png", - "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0082.png", - "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0084.png", - "frame": { "x": 1, "y": 136, "w": 94, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0085.png", - "frame": { "x": 95, "y": 72, "w": 96, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 12, "w": 96, "h": 63 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0086.png", - "frame": { "x": 381, "y": 1, "w": 97, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 6, "w": 97, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0087.png", - "frame": { "x": 1, "y": 71, "w": 94, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 17, "y": 10, "w": 94, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0088.png", - "frame": { "x": 469, "y": 196, "w": 96, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 96, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0089.png", - "frame": { "x": 1, "y": 1, "w": 98, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 5, "w": 98, "h": 70 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0090.png", - "frame": { "x": 191, "y": 136, "w": 94, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 14, "y": 10, "w": 94, "h": 63 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0091.png", - "frame": { "x": 95, "y": 135, "w": 96, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 11, "w": 96, "h": 62 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0092.png", - "frame": { "x": 572, "y": 67, "w": 99, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 99, "h": 65 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0093.png", - "frame": { "x": 284, "y": 205, "w": 95, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 14, "y": 11, "w": 95, "h": 61 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0094.png", - "frame": { "x": 1, "y": 199, "w": 91, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 12, "w": 91, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0095.png", - "frame": { "x": 1, "y": 259, "w": 95, "h": 60 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 12, "w": 95, "h": 60 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0096.png", - "frame": { "x": 193, "y": 69, "w": 95, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 5, "w": 95, "h": 67 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0097.png", - "frame": { "x": 285, "y": 141, "w": 92, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 18, "y": 8, "w": 92, "h": 64 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0098.png", - "frame": { "x": 96, "y": 318, "w": 89, "h": 58 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 22, "y": 14, "w": 89, "h": 58 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - }, - { - "filename": "0099.png", - "frame": { "x": 564, "y": 261, "w": 92, "h": 58 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 19, "y": 14, "w": 92, "h": 58 }, - "sourceSize": { "w": 111, "h": 83 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "693.png", - "format": "I8", - "size": { "w": 672, "h": 377 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/back/shiny/693.png b/public/images/pokemon/exp/back/shiny/693.png deleted file mode 100644 index 6884c2e28c7..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/693.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/753.json b/public/images/pokemon/exp/back/shiny/753.json deleted file mode 100644 index f1d1bc11bb0..00000000000 --- a/public/images/pokemon/exp/back/shiny/753.json +++ /dev/null @@ -1,2582 +0,0 @@ -{ - "textures": [ - { - "image": "753.png", - "format": "RGBA8888", - "size": { - "w": 140, - "h": 140 - }, - "scale": 1, - "frames": [ - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 31, - "h": 47 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 31, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 31, - "h": 47 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 31, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 31, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 31, - "y": 47, - "w": 30, - "h": 47 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 30, - "h": 46 - }, - "frame": { - "x": 31, - "y": 94, - "w": 30, - "h": 46 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 30, - "h": 46 - }, - "frame": { - "x": 31, - "y": 94, - "w": 30, - "h": 46 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 30, - "h": 47 - }, - "frame": { - "x": 61, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 29, - "h": 47 - }, - "frame": { - "x": 91, - "y": 0, - "w": 29, - "h": 47 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 29, - "h": 47 - }, - "frame": { - "x": 61, - "y": 47, - "w": 29, - "h": 47 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 28, - "h": 46 - }, - "frame": { - "x": 61, - "y": 94, - "w": 28, - "h": 46 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 31, - "h": 53 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 45 - }, - "frame": { - "x": 89, - "y": 94, - "w": 29, - "h": 45 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b6d27dc4e44833805071498f628d15c3:7ab61edae9d3eecb963334bb47dd5aa7:16c1874bc814253ca78e52a99a340ff7$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/753.png b/public/images/pokemon/exp/back/shiny/753.png deleted file mode 100644 index 14f23fc6bb9..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/753.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/shiny/754.json b/public/images/pokemon/exp/back/shiny/754.json deleted file mode 100644 index 8b1a3d44a4d..00000000000 --- a/public/images/pokemon/exp/back/shiny/754.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - "textures": [ - { - "image": "754.png", - "format": "RGBA8888", - "size": { - "w": 222, - "h": 222 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7651b73927071f2814265b66582a8d13:a2d1ef3cf0c2458640f77c2fbcc821a0:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/754.png b/public/images/pokemon/exp/back/shiny/754.png deleted file mode 100644 index 1f7346ed822..00000000000 Binary files a/public/images/pokemon/exp/back/shiny/754.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/672.json b/public/images/pokemon/exp/shiny/672.json deleted file mode 100644 index f337bef7d29..00000000000 --- a/public/images/pokemon/exp/shiny/672.json +++ /dev/null @@ -1,479 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 42, "y": 100, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 83, "y": 101, "w": 41, "h": 49 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, - "sourceSize": { "w": 44, "h": 58 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.11-x64", - "image": "672.png", - "format": "I8", - "size": { "w": 170, "h": 193 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/shiny/672.png b/public/images/pokemon/exp/shiny/672.png deleted file mode 100644 index 55badb6b2af..00000000000 Binary files a/public/images/pokemon/exp/shiny/672.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/692.json b/public/images/pokemon/exp/shiny/692.json deleted file mode 100644 index 86b535260ae..00000000000 --- a/public/images/pokemon/exp/shiny/692.json +++ /dev/null @@ -1,794 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0002.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0003.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0004.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0005.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0006.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0007.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0008.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0009.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0010.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0011.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0012.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0013.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0014.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0015.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0016.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0017.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0018.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0019.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0020.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0021.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0022.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0023.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0024.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0025.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0026.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0027.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0028.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0029.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0030.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0031.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0032.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0033.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0034.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0035.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0036.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0037.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0038.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0039.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0040.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0041.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0042.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0043.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0044.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0045.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0046.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0047.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0048.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0049.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0050.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0051.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0052.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0053.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0054.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0055.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0056.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0057.png", - "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0058.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0059.png", - "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0060.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0061.png", - "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0062.png", - "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0063.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0064.png", - "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0065.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0066.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0067.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0068.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0069.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0070.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0071.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0072.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0073.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0074.png", - "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0075.png", - "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0076.png", - "frame": { "x": 117, "y": 72, "w": 59, "h": 33 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 33 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0077.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0078.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0079.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0080.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0081.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0082.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0084.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0085.png", - "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0086.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - }, - { - "filename": "0087.png", - "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, - "sourceSize": { "w": 63, "h": 35 }, - "duration": 50 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "692.png", - "format": "I8", - "size": { "w": 239, "h": 106 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/shiny/692.png b/public/images/pokemon/exp/shiny/692.png deleted file mode 100644 index 86f8cf51e92..00000000000 Binary files a/public/images/pokemon/exp/shiny/692.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/693.json b/public/images/pokemon/exp/shiny/693.json deleted file mode 100644 index c8f7763de1d..00000000000 --- a/public/images/pokemon/exp/shiny/693.json +++ /dev/null @@ -1,902 +0,0 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0002.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0003.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0004.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0005.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0006.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0007.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0008.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0009.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0010.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0011.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0012.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0013.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0014.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0015.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0016.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0017.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0018.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0019.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0020.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0021.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0022.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0023.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0024.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0025.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0026.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0027.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0028.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0029.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0030.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0031.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0032.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0033.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0034.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0035.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0036.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0037.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0038.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0039.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0040.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0041.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0042.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0043.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0044.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0045.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0046.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0047.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0048.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0049.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0050.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0051.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0052.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0053.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0054.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0055.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0056.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0057.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0058.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0059.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0060.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0061.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0062.png", - "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0063.png", - "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0064.png", - "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0065.png", - "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0066.png", - "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0067.png", - "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0068.png", - "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0069.png", - "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0070.png", - "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0071.png", - "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0072.png", - "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0073.png", - "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0074.png", - "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0075.png", - "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0076.png", - "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0077.png", - "frame": { "x": 303, "y": 140, "w": 102, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 5, "w": 102, "h": 70 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0078.png", - "frame": { "x": 523, "y": 348, "w": 102, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 11, "w": 102, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0079.png", - "frame": { "x": 318, "y": 290, "w": 103, "h": 64 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 15, "y": 7, "w": 103, "h": 64 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0080.png", - "frame": { "x": 105, "y": 1, "w": 102, "h": 75 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 0, "w": 102, "h": 75 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0081.png", - "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0082.png", - "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0083.png", - "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0084.png", - "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0085.png", - "frame": { "x": 508, "y": 152, "w": 106, "h": 67 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 15, "w": 106, "h": 67 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0086.png", - "frame": { "x": 414, "y": 74, "w": 103, "h": 71 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 8, "w": 103, "h": 71 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0087.png", - "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0088.png", - "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0089.png", - "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0090.png", - "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0091.png", - "frame": { "x": 309, "y": 214, "w": 107, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 14, "w": 107, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0092.png", - "frame": { "x": 306, "y": 1, "w": 106, "h": 70 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 9, "w": 106, "h": 70 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0093.png", - "frame": { "x": 1, "y": 218, "w": 107, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 14, "w": 107, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0094.png", - "frame": { "x": 213, "y": 279, "w": 105, "h": 65 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 14, "w": 105, "h": 65 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0095.png", - "frame": { "x": 103, "y": 341, "w": 104, "h": 63 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 15, "w": 104, "h": 63 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0096.png", - "frame": { "x": 516, "y": 1, "w": 101, "h": 73 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 101, "h": 73 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0097.png", - "frame": { "x": 100, "y": 149, "w": 103, "h": 69 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0098.png", - "frame": { "x": 1, "y": 349, "w": 102, "h": 62 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 16, "w": 102, "h": 62 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - }, - { - "filename": "0099.png", - "frame": { "x": 103, "y": 404, "w": 100, "h": 61 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 16, "w": 100, "h": 61 }, - "sourceSize": { "w": 118, "h": 90 }, - "duration": 100 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.12-x64", - "image": "693.png", - "format": "I8", - "size": { "w": 626, "h": 466 }, - "scale": "1" - } -} diff --git a/public/images/pokemon/exp/shiny/693.png b/public/images/pokemon/exp/shiny/693.png deleted file mode 100644 index 3b995e1493d..00000000000 Binary files a/public/images/pokemon/exp/shiny/693.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/753.json b/public/images/pokemon/exp/shiny/753.json deleted file mode 100644 index 5b20ef749a0..00000000000 --- a/public/images/pokemon/exp/shiny/753.json +++ /dev/null @@ -1,2582 +0,0 @@ -{ - "textures": [ - { - "image": "753.png", - "format": "RGBA8888", - "size": { - "w": 137, - "h": 137 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 30, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 30, - "h": 47 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 28, - "h": 47 - }, - "frame": { - "x": 30, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 28, - "h": 47 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 47 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 0, - "w": 29, - "h": 46 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 29, - "h": 46 - }, - "frame": { - "x": 86, - "y": 46, - "w": 29, - "h": 46 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 47, - "w": 30, - "h": 45 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 27, - "h": 46 - }, - "frame": { - "x": 30, - "y": 47, - "w": 27, - "h": 46 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 92, - "w": 30, - "h": 45 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 30, - "h": 45 - }, - "frame": { - "x": 0, - "y": 92, - "w": 30, - "h": 45 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 29, - "h": 44 - }, - "frame": { - "x": 57, - "y": 47, - "w": 29, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 57, - "y": 91, - "w": 28, - "h": 44 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 30, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 28, - "h": 44 - }, - "frame": { - "x": 85, - "y": 92, - "w": 28, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0a066207f4eaa63438f1b44ba24dbced:1c3824600c00c692fd9dab4dbe03a2ed:16c1874bc814253ca78e52a99a340ff7$" - } -} diff --git a/public/images/pokemon/exp/shiny/753.png b/public/images/pokemon/exp/shiny/753.png deleted file mode 100644 index 12f0f7a090f..00000000000 Binary files a/public/images/pokemon/exp/shiny/753.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/754.json b/public/images/pokemon/exp/shiny/754.json deleted file mode 100644 index 18bb597aa75..00000000000 --- a/public/images/pokemon/exp/shiny/754.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - "textures": [ - { - "image": "754.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:05bdd50d4b0041ca84c3293ee7fdf36e:adfe2b6fb11cad37f71416b628cb08c7:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} diff --git a/public/images/pokemon/exp/shiny/754.png b/public/images/pokemon/exp/shiny/754.png deleted file mode 100644 index b1d4806163a..00000000000 Binary files a/public/images/pokemon/exp/shiny/754.png and /dev/null differ diff --git a/public/images/pokemon/shiny/672.json b/public/images/pokemon/shiny/672.json index dfd98acaf6b..f337bef7d29 100644 --- a/public/images/pokemon/shiny/672.json +++ b/public/images/pokemon/shiny/672.json @@ -1,41 +1,479 @@ -{ - "textures": [ - { - "image": "672.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 42, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b346b616fb3566e3bb64cdd6b14c5d59:fb0b72a9ea01a28cfcf7731d5cf359af:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 127, "y": 50, "w": 42, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 42, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 43, "y": 53, "w": 43, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 43, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 124, "y": 148, "w": 43, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 43, "h": 45 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 102, "w": 42, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 42, "h": 47 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 54, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 42, "h": 48 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 99, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 128, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 42, "y": 100, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 43, "y": 0, "w": 43, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 43, "h": 53 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 43, "h": 54 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 83, "y": 101, "w": 41, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 41, "h": 49 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 86, "y": 50, "w": 41, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 41, "h": 51 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 86, "y": 0, "w": 42, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 42, "h": 50 }, + "sourceSize": { "w": 44, "h": 58 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "672.png", + "format": "I8", + "size": { "w": 170, "h": 193 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/672.png b/public/images/pokemon/shiny/672.png index b25ec4f08d3..8602e7a026b 100644 Binary files a/public/images/pokemon/shiny/672.png and b/public/images/pokemon/shiny/672.png differ diff --git a/public/images/pokemon/shiny/692.json b/public/images/pokemon/shiny/692.json index fc36cdb3337..86b535260ae 100644 --- a/public/images/pokemon/shiny/692.json +++ b/public/images/pokemon/shiny/692.json @@ -1,41 +1,794 @@ -{ - "textures": [ - { - "image": "692.png", - "format": "RGBA8888", - "size": { - "w": 56, - "h": 56 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 56, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:19c1aa023d08bc22ccccf8bfeaa199e7:b92ea755c18e1ed1e6d509334c6f592e:2880def858c84cd859bedf13b0b49a33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 121, "y": 1, "w": 59, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 1, "y": 36, "w": 58, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 58, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 181, "y": 1, "w": 57, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 57, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 60, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 71, "w": 57, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 117, "y": 72, "w": 59, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 33 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 60, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 60, "h": 34 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 62, "y": 1, "w": 58, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 58, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 178, "y": 37, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "692.png", + "format": "I8", + "size": { "w": 239, "h": 106 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/692.png b/public/images/pokemon/shiny/692.png index 8dc8ee90534..86f8cf51e92 100644 Binary files a/public/images/pokemon/shiny/692.png and b/public/images/pokemon/shiny/692.png differ diff --git a/public/images/pokemon/shiny/693.json b/public/images/pokemon/shiny/693.json index fb6d81cf000..c8f7763de1d 100644 --- a/public/images/pokemon/shiny/693.json +++ b/public/images/pokemon/shiny/693.json @@ -1,41 +1,902 @@ -{ - "textures": [ - { - "image": "693.png", - "format": "RGBA8888", - "size": { - "w": 90, - "h": 90 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 90, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 90, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 90, - "h": 78 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7177ad3c831f1d08c39936f6412709e8:048bfa90b4b6f14b5462fefb528957ec:9c1f9147e693c05eb4655590e9099679$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 416, "y": 214, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 91, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 405, "y": 145, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 207, "y": 344, "w": 105, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 105, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 507, "y": 285, "w": 105, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 18, "w": 105, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 412, "y": 1, "w": 104, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 104, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 1, "y": 145, "w": 99, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 99, "h": 72 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 76, "w": 105, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 21, "w": 105, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 507, "y": 219, "w": 104, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 24, "w": 104, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 283, "w": 102, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 23, "w": 102, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 207, "y": 1, "w": 99, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 99, "h": 77 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 517, "y": 74, "w": 93, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 93, "h": 78 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 106, "y": 78, "w": 102, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 12, "w": 102, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 421, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 19, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 312, "y": 354, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 208, "y": 78, "w": 95, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 95, "h": 76 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 303, "y": 140, "w": 102, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 5, "w": 102, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 523, "y": 348, "w": 102, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 102, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 318, "y": 290, "w": 103, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 7, "w": 103, "h": 64 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 105, "y": 1, "w": 102, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 102, "h": 75 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 508, "y": 152, "w": 106, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 106, "h": 67 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 414, "y": 74, "w": 103, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 103, "h": 71 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 306, "y": 72, "w": 108, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 108, "h": 68 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 108, "y": 276, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 104, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 104, "h": 74 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 203, "y": 210, "w": 106, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 106, "h": 66 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 309, "y": 214, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 306, "y": 1, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 106, "h": 70 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 1, "y": 218, "w": 107, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 14, "w": 107, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 213, "y": 279, "w": 105, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 105, "h": 65 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 103, "y": 341, "w": 104, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 104, "h": 63 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 516, "y": 1, "w": 101, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 5, "w": 101, "h": 73 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 100, "y": 149, "w": 103, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 103, "h": 69 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 1, "y": 349, "w": 102, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 102, "h": 62 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 103, "y": 404, "w": 100, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 100, "h": 61 }, + "sourceSize": { "w": 118, "h": 90 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "693.png", + "format": "I8", + "size": { "w": 626, "h": 466 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/693.png b/public/images/pokemon/shiny/693.png index 7088c31377a..3b995e1493d 100644 Binary files a/public/images/pokemon/shiny/693.png and b/public/images/pokemon/shiny/693.png differ diff --git a/public/images/pokemon/shiny/753.json b/public/images/pokemon/shiny/753.json index 964519cb949..5b20ef749a0 100644 --- a/public/images/pokemon/shiny/753.json +++ b/public/images/pokemon/shiny/753.json @@ -4,30 +4,2571 @@ "image": "753.png", "format": "RGBA8888", "size": { - "w": 45, - "h": 45 + "w": 137, + "h": 137 }, "scale": 1, "frames": [ { "filename": "0001.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 28, - "h": 45 + "w": 30, + "h": 52 }, "spriteSourceSize": { "x": 0, - "y": 0, - "w": 28, - "h": 45 + "y": 5, + "w": 30, + "h": 47 }, "frame": { "x": 0, "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0099.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0100.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0101.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0102.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0110.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0111.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0112.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0120.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0121.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0122.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 30, + "h": 47 + }, + "frame": { + "x": 0, + "y": 0, + "w": 30, + "h": 47 + } + }, + { + "filename": "0103.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0104.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0113.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0114.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 28, + "h": 47 + }, + "frame": { + "x": 30, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0107.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0108.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0117.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0118.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 28, + "h": 47 + }, + "frame": { + "x": 58, + "y": 0, + "w": 28, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 0, + "w": 29, + "h": 46 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 29, + "h": 46 + }, + "frame": { + "x": 86, + "y": 46, + "w": 29, + "h": 46 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 47, + "w": 30, + "h": 45 + } + }, + { + "filename": "0105.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0106.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0115.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0116.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 27, + "h": 46 + }, + "frame": { + "x": 30, + "y": 47, + "w": 27, + "h": 46 + } + }, + { + "filename": "0109.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 92, + "w": 30, + "h": 45 + } + }, + { + "filename": "0119.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 30, + "h": 45 + }, + "frame": { + "x": 0, + "y": 92, + "w": 30, + "h": 45 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 29, + "h": 44 + }, + "frame": { + "x": 57, + "y": 47, + "w": 29, + "h": 44 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 57, + "y": 91, + "w": 28, + "h": 44 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 30, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 8, + "w": 28, + "h": 44 + }, + "frame": { + "x": 85, + "y": 92, + "w": 28, + "h": 44 } } ] @@ -36,6 +2577,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0dfeaaa8dc9e984b8345da123854713a:ca6cbb0693924b86228f2fe9ab294ec9:16c1874bc814253ca78e52a99a340ff7$" + "smartupdate": "$TexturePacker:SmartUpdate:0a066207f4eaa63438f1b44ba24dbced:1c3824600c00c692fd9dab4dbe03a2ed:16c1874bc814253ca78e52a99a340ff7$" } } diff --git a/public/images/pokemon/shiny/753.png b/public/images/pokemon/shiny/753.png index e13412f2a4f..12f0f7a090f 100644 Binary files a/public/images/pokemon/shiny/753.png and b/public/images/pokemon/shiny/753.png differ diff --git a/public/images/pokemon/shiny/754.json b/public/images/pokemon/shiny/754.json index ecb5b8a6779..18bb597aa75 100644 --- a/public/images/pokemon/shiny/754.json +++ b/public/images/pokemon/shiny/754.json @@ -4,29 +4,1121 @@ "image": "754.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 234, + "h": 234 }, "scale": 1, "frames": [ { - "filename": "0001.png", + "filename": "0036.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 46, + "w": 93, "h": 68 }, "spriteSourceSize": { "x": 0, "y": 0, - "w": 46, + "w": 93, "h": 68 }, "frame": { "x": 0, "y": 0, - "w": 46, + "w": 93, + "h": 68 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 0, + "w": 93, + "h": 68 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 0, + "w": 48, + "h": 68 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 93, + "h": 68 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 0, + "y": 68, + "w": 93, + "h": 68 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 93, + "h": 68 + }, + "frame": { + "x": 93, + "y": 68, + "w": 93, + "h": 68 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 186, + "y": 68, + "w": 48, + "h": 68 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 85, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 85, + "h": 68 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 85, + "h": 68 + }, + "frame": { + "x": 0, + "y": 136, + "w": 85, + "h": 68 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 85, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 133, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 181, + "y": 136, + "w": 48, + "h": 68 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 93, + "h": 68 + }, + "spriteSourceSize": { + "x": 23, + "y": 0, + "w": 48, + "h": 68 + }, + "frame": { + "x": 181, + "y": 136, + "w": 48, "h": 68 } } @@ -36,6 +1128,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f4866096a7f384feda7689540b5499f2:1c5d416a85ea018909e59a1eb9c84c3a:f7cb0e9bb3adbe899317e6e2e306035d$" + "smartupdate": "$TexturePacker:SmartUpdate:05bdd50d4b0041ca84c3293ee7fdf36e:adfe2b6fb11cad37f71416b628cb08c7:f7cb0e9bb3adbe899317e6e2e306035d$" } } diff --git a/public/images/pokemon/shiny/754.png b/public/images/pokemon/shiny/754.png index f50262ab10e..b1d4806163a 100644 Binary files a/public/images/pokemon/shiny/754.png and b/public/images/pokemon/shiny/754.png differ diff --git a/public/images/pokemon/variant/672.json b/public/images/pokemon/variant/672.json index 8ed15346d6f..5387ebf05ac 100644 --- a/public/images/pokemon/variant/672.json +++ b/public/images/pokemon/variant/672.json @@ -13,5 +13,20 @@ "268062": "d2af94", "99522e": "321512", "ff884c": "552d30" + }, + "2": { + "174d3b": "363e6c", + "4d4d4d": "6b4473", + "99522e": "612c6b", + "f8f8f8": "ffeffe", + "404040": "161526", + "ff884c": "9f5f9b", + "36b389": "96d5e3", + "737373": "2d2b40", + "268062": "6885b6", + "66594c": "4c7a68", + "998673": "72b692", + "b4b4b4": "d4b3d7", + "403830": "305a4f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/672_3.json b/public/images/pokemon/variant/672_3.json deleted file mode 100644 index e3f780eff59..00000000000 --- a/public/images/pokemon/variant/672_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "672_3.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 42, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 42, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a5389856891adb93e4e47b311ec032fc:ff2b44df2ba78f8e713e7ecfbd8a40e8:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/672_3.png b/public/images/pokemon/variant/672_3.png deleted file mode 100644 index f59d36c4ff6..00000000000 Binary files a/public/images/pokemon/variant/672_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/_exp_masterlist.json b/public/images/pokemon/variant/_exp_masterlist.json index 4bcbd3df1e8..e2fe24007ff 100644 --- a/public/images/pokemon/variant/_exp_masterlist.json +++ b/public/images/pokemon/variant/_exp_masterlist.json @@ -80,7 +80,6 @@ "671-yellow": [0, 1, 1], "671-white": [0, 1, 2], "671-orange": [0, 1, 2], - "672": [0, 1, 1], "673": [0, 1, 1], "676": [0, 1, 1], "677": [0, 1, 1], @@ -94,8 +93,6 @@ "689": [0, 1, 1], "690": [0, 1, 1], "691": [0, 1, 1], - "692": [0, 1, 1], - "693": [0, 1, 1], "696": [0, 1, 1], "697": [0, 1, 1], "699": [0, 1, 1], @@ -128,8 +125,6 @@ "748": [0, 1, 1], "751": [0, 1, 1], "752": [0, 1, 1], - "753": [0, 1, 1], - "754": [0, 2, 2], "755": [0, 1, 1], "756": [0, 1, 1], "761": [0, 1, 1], @@ -430,7 +425,6 @@ "671-yellow": [0, 1, 1], "671-white": [0, 1, 1], "671-orange": [0, 1, 1], - "672": [0, 1, 1], "673": [0, 1, 1], "676": [0, 1, 1], "677": [0, 1, 1], @@ -444,8 +438,6 @@ "689": [0, 1, 1], "690": [0, 1, 1], "691": [0, 1, 1], - "692": [0, 1, 1], - "693": [0, 1, 1], "696": [0, 1, 1], "697": [0, 1, 1], "699": [0, 2, 2], @@ -478,8 +470,6 @@ "748": [0, 1, 1], "751": [0, 1, 1], "752": [0, 1, 1], - "753": [0, 1, 1], - "754": [0, 2, 2], "755": [0, 1, 1], "756": [0, 1, 1], "761": [0, 1, 1], diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index ccb9228aa2c..8069cd354ef 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -621,7 +621,7 @@ "671-yellow": [0, 1, 2], "671-white": [0, 1, 2], "671-orange": [0, 1, 1], - "672": [0, 1, 2], + "672": [0, 1, 1], "673": [0, 1, 1], "676": [0, 1, 1], "676-dandy": [0, 1, 1], @@ -1689,7 +1689,7 @@ "751": [0, 1, 1], "752": [0, 1, 1], "753": [0, 1, 1], - "754": [0, 2, 2], + "754": [0, 1, 1], "755": [0, 1, 1], "756": [0, 1, 1], "761": [0, 1, 1], diff --git a/public/images/pokemon/variant/back/753.json b/public/images/pokemon/variant/back/753.json index 670cdc102c3..4dc68eb5923 100644 --- a/public/images/pokemon/variant/back/753.json +++ b/public/images/pokemon/variant/back/753.json @@ -1,24 +1,34 @@ { "1": { "234028": "2e1643", - "5ba668": "4e2c62", "468050": "3e2253", - "549977": "1b3822", + "5ba668": "4e2c62", "315945": "0e2616", "69bf94": "27452c", - "d98d9a": "a55c36", + "549977": "1b3822", + "98d9b8": "48644d", + "803340": "682c16", "ffbfca": "b47145", - "803340": "682c16" + "d98d9a": "a55c36", + "ff667f": "ffb862", + "bfbfbf": "c9d6b7", + "f8f8f8": "eff7e2", + "cc5266": "ee9143" }, "2": { - "234028": "531034", + "234028": "812255", + "468050": "ad3a87", "5ba668": "ce54b0", - "468050": "9b2d76", - "549977": "5a215a", "315945": "441342", "69bf94": "6e3472", - "d98d9a": "263b83", + "549977": "5a215a", + "98d9b8": "a061a0", + "803340": "0b1d4e", "ffbfca": "3454a5", - "803340": "0b1d4e" + "d98d9a": "263b83", + "ff667f": "62b4f6", + "bfbfbf": "feccff", + "f8f8f8": "ffe9ff", + "cc5266": "428ee1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/754.json b/public/images/pokemon/variant/back/754.json similarity index 100% rename from public/images/pokemon/variant/exp/754.json rename to public/images/pokemon/variant/back/754.json diff --git a/public/images/pokemon/variant/back/754_2.json b/public/images/pokemon/variant/back/754_2.json deleted file mode 100644 index 450a378cef6..00000000000 --- a/public/images/pokemon/variant/back/754_2.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "754_2.png", - "format": "RGBA8888", - "size": { - "w": 68, - "h": 68 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 36, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 36, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2774f1d6c293a696177c371795e6ba38:d35951afed6391313aa94000563ae143:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/754_2.png b/public/images/pokemon/variant/back/754_2.png deleted file mode 100644 index 254fd2413e1..00000000000 Binary files a/public/images/pokemon/variant/back/754_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/754_3.json b/public/images/pokemon/variant/back/754_3.json deleted file mode 100644 index 11e8a5a15e1..00000000000 --- a/public/images/pokemon/variant/back/754_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "754_3.png", - "format": "RGBA8888", - "size": { - "w": 68, - "h": 68 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 36, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 36, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2774f1d6c293a696177c371795e6ba38:d35951afed6391313aa94000563ae143:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/754_3.png b/public/images/pokemon/variant/back/754_3.png deleted file mode 100644 index e691523edb3..00000000000 Binary files a/public/images/pokemon/variant/back/754_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/672.json b/public/images/pokemon/variant/exp/672.json deleted file mode 100644 index c4e6dd98661..00000000000 --- a/public/images/pokemon/variant/exp/672.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "1": { - "3d3128": "642509", - "67615b": "9e2c3d", - "615140": "89431b", - "7e6d5a": "b3743e", - "554538": "642509", - "beb8b6": "e3a378", - "efeded": "f8e2b7", - "0e5d58": "8c6859", - "0d8374": "d2af94", - "09a77c": "f8f0e2", - "c16a3f": "321512", - "a8905c": "4b2525", - "c6b379": "552d30" - }, - "2": { - "3d3128": "161526", - "67615b": "2d2b40", - "615140": "4c7a68", - "7e6d5a": "72b692", - "554538": "305a4f", - "beb8b6": "d4b3d7", - "efeded": "ffeffe", - "0e5d58": "363e6c", - "0d8374": "6885b6", - "09a77c": "96d5e3", - "c16a3f": "612c6b", - "a8905c": "854d87", - "c6b379": "9f5f9b" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/692.json b/public/images/pokemon/variant/exp/692.json deleted file mode 100644 index 954dcffb3e9..00000000000 --- a/public/images/pokemon/variant/exp/692.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "1": { - "b3f2ff": "fada7f", - "44a2b4": "af6a37", - "2f7280": "783a1d", - "cd9d3a": "53be53", - "575757": "c85b5b", - "72561c": "20734c", - "60dbf2": "e1ac53", - "b4b4b4": "c8ba6d", - "3d3d3d": "7d182d", - "ffc549": "a9f076" - }, - "2": { - "b3f2ff": "faf8d7", - "44a2b4": "968144", - "2f7280": "5f3c23", - "cd9d3a": "7743be", - "575757": "88cd56", - "72561c": "371c72", - "60dbf2": "e1d6b6", - "b4b4b4": "68a7aa", - "3d3d3d": "1c873e", - "ffc549": "a36feb" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/693.json b/public/images/pokemon/variant/exp/693.json deleted file mode 100644 index 2e80795d2a0..00000000000 --- a/public/images/pokemon/variant/exp/693.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "1": { - "23a2c8": "c87a23", - "ffc859": "6ccd80", - "224b73": "552813", - "404040": "3c171b", - "262626": "230808", - "5f5f5f": "6e2e3b", - "cc9c3d": "1b3c17", - "61daf2": "f2bd61", - "735822": "08230e", - "3674b3": "7d3e21", - "ffc44c": "426e2e", - "4595e5": "aa6839" - }, - "2": { - "23a2c8": "beb099", - "ffc859": "f5b281", - "224b73": "5f463a", - "404040": "2a8c53", - "262626": "295a1c", - "5f5f5f": "51c85d", - "cc9c3d": "6259af", - "61daf2": "f0eadb", - "735822": "36235f", - "3674b3": "9b8265", - "ffc44c": "a39afa", - "4595e5": "c8b493" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/753.json b/public/images/pokemon/variant/exp/753.json deleted file mode 100644 index d6ffc97c2da..00000000000 --- a/public/images/pokemon/variant/exp/753.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "1": { - "234028": "2e1643", - "468050": "3e2253", - "5ba668": "4e2c62", - "315945": "0e2616", - "69bf94": "27452c", - "549977": "1b3822", - "98d9b8": "48644d", - "803340": "682c16", - "ffbfca": "b47145", - "d98d9a": "a55c36", - "ff667f": "ffb862", - "f8f8f8": "eff7e2", - "cc5266": "ee9143" - }, - "2": { - "234028": "812255", - "468050": "ad3a87", - "5ba668": "ce54b0", - "315945": "441342", - "69bf94": "6e3472", - "549977": "5a215a", - "98d9b8": "a061a0", - "803340": "0b1d4e", - "ffbfca": "3454a5", - "d98d9a": "263b83", - "ff667f": "62b4f6", - "f8f8f8": "ffe9ff", - "cc5266": "428ee1" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/754_2.json b/public/images/pokemon/variant/exp/754_2.json deleted file mode 100644 index 5fcde58d92d..00000000000 --- a/public/images/pokemon/variant/exp/754_2.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - "textures": [ - { - "image": "754_2.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f79fcee4451cea6aad915f561b31bf78:95fdb55190edb6ce0d5847a4e46b4d5c:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/754_2.png b/public/images/pokemon/variant/exp/754_2.png deleted file mode 100644 index 0022093945c..00000000000 Binary files a/public/images/pokemon/variant/exp/754_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/754_3.json b/public/images/pokemon/variant/exp/754_3.json deleted file mode 100644 index ce40f9a8231..00000000000 --- a/public/images/pokemon/variant/exp/754_3.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - "textures": [ - { - "image": "754_3.png", - "format": "RGBA8888", - "size": { - "w": 234, - "h": 234 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 0, - "w": 93, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 0, - "w": 48, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 68 - }, - "frame": { - "x": 93, - "y": 68, - "w": 93, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 186, - "y": 68, - "w": 48, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 85, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 85, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 85, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 133, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 93, - "h": 68 - }, - "spriteSourceSize": { - "x": 23, - "y": 0, - "w": 48, - "h": 68 - }, - "frame": { - "x": 181, - "y": 136, - "w": 48, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f79fcee4451cea6aad915f561b31bf78:95fdb55190edb6ce0d5847a4e46b4d5c:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/754_3.png b/public/images/pokemon/variant/exp/754_3.png deleted file mode 100644 index 5ad95aa743c..00000000000 Binary files a/public/images/pokemon/variant/exp/754_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/672.json b/public/images/pokemon/variant/exp/back/672.json deleted file mode 100644 index c118d603d57..00000000000 --- a/public/images/pokemon/variant/exp/back/672.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "1": { - "3d3128": "69112a", - "67615b": "9e2c3d", - "615140": "89431b", - "7e6d5a": "b3743e", - "554538": "642509", - "efeded": "f8e2b7", - "beb8b6": "e3a378", - "0e5d58": "8c6859", - "09a77c": "f8f0e2", - "0d8374": "d2af94", - "c16a3f": "321512", - "c6b379": "552d30", - "a8905c": "4b2525" - }, - "2": { - "3d3128": "161526", - "67615b": "2d2b40", - "615140": "4c7a68", - "7e6d5a": "72b692", - "554538": "305a4f", - "efeded": "ffeffe", - "beb8b6": "d4b3d7", - "0e5d58": "363e6c", - "09a77c": "96d5e3", - "0d8374": "6885b6", - "c16a3f": "612c6b", - "c6b379": "9f5f9b", - "a8905c": "854d87" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/692.json b/public/images/pokemon/variant/exp/back/692.json deleted file mode 100644 index d4c85f37c9d..00000000000 --- a/public/images/pokemon/variant/exp/back/692.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "1": { - "337380": "783a1d", - "b3b3b3": "c8ba6d", - "595959": "c85b5b", - "61daf2": "e1ac53", - "cc9c3d": "53be53", - "404040": "7d182d", - "ffc44c": "a9f076", - "b2f2ff": "fada7f", - "47a1b3": "af6a37", - "101010": "070707", - "735822": "20734c" - }, - "2": { - "337380": "5f3c23", - "b3b3b3": "68a7aa", - "595959": "88cd56", - "61daf2": "e1d6b6", - "cc9c3d": "7743be", - "404040": "1c873e", - "ffc44c": "a36feb", - "b2f2ff": "faf8d7", - "47a1b3": "968144", - "101010": "070707", - "735822": "371c72" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/693.json b/public/images/pokemon/variant/exp/back/693.json deleted file mode 100644 index 3187a81e0c0..00000000000 --- a/public/images/pokemon/variant/exp/back/693.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "1": { - "224b73": "552813", - "4595e5": "aa6839", - "23a2c8": "c87a23", - "262626": "230808", - "cc9c3d": "1b3c17", - "404040": "3c171b", - "5f5f5f": "6e2e3b", - "61daf2": "f2bd61", - "3674b3": "7d3e21", - "ffc44c": "426e2e", - "735822": "08230e" - }, - "2": { - "224b73": "5f463a", - "4595e5": "c8b493", - "23a2c8": "beb099", - "262626": "295a1c", - "cc9c3d": "6259af", - "404040": "2a8c53", - "5f5f5f": "51c85d", - "61daf2": "f0eadb", - "3674b3": "9b8265", - "ffc44c": "a39afa", - "735822": "36235f" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/753.json b/public/images/pokemon/variant/exp/back/753.json deleted file mode 100644 index 26e48f43509..00000000000 --- a/public/images/pokemon/variant/exp/back/753.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "1": { - "234028": "2e1643", - "5ba668": "4e2c62", - "468050": "3e2253", - "315945": "0e2616", - "549977": "1b3822", - "69bf94": "27452c", - "d98d9a": "a55c36", - "ffbfca": "b47145", - "803340": "682c16", - "cc5266": "a55c36" - }, - "2": { - "234028": "531034", - "5ba668": "ce54b0", - "468050": "9b2d76", - "315945": "441342", - "549977": "5a215a", - "69bf94": "6e3472", - "d98d9a": "263b83", - "ffbfca": "3454a5", - "803340": "0b1d4e", - "cc5266": "263b83" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/754.json b/public/images/pokemon/variant/exp/back/754.json deleted file mode 100644 index 5fb99ea57c9..00000000000 --- a/public/images/pokemon/variant/exp/back/754.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "1": { - "803340": "82180e", - "ff667f": "c95623", - "cc5266": "ac351f", - "ffbfca": "f48b49", - "d98d9a": "c95623", - "315945": "122a1a", - "69bf94": "314e36", - "bfbfbf": "c9d6b7", - "737373": "859970", - "f8f8f8": "eff7e2" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/754_2.json b/public/images/pokemon/variant/exp/back/754_2.json deleted file mode 100644 index f32f0133f99..00000000000 --- a/public/images/pokemon/variant/exp/back/754_2.json +++ /dev/null @@ -1,1112 +0,0 @@ -{ - "textures": [ - { - "image": "754_2.png", - "format": "RGBA8888", - "size": { - "w": 222, - "h": 222 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3adad944aac48ad53efa41f8c9916d1c:ea15b954875ad08814f50cbbf849c1b3:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/754_2.png b/public/images/pokemon/variant/exp/back/754_2.png deleted file mode 100644 index 85eadd7428f..00000000000 Binary files a/public/images/pokemon/variant/exp/back/754_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/754_3.json b/public/images/pokemon/variant/exp/back/754_3.json deleted file mode 100644 index 6ab4d1dad64..00000000000 --- a/public/images/pokemon/variant/exp/back/754_3.json +++ /dev/null @@ -1,1112 +0,0 @@ -{ - "textures": [ - { - "image": "754_3.png", - "format": "RGBA8888", - "size": { - "w": 222, - "h": 222 - }, - "scale": 1, - "frames": [ - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 92, - "y": 0, - "w": 92, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 184, - "y": 0, - "w": 38, - "h": 68 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 68, - "w": 92, - "h": 68 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 68 - }, - "frame": { - "x": 0, - "y": 136, - "w": 92, - "h": 68 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 88, - "h": 68 - }, - "frame": { - "x": 92, - "y": 68, - "w": 88, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 40, - "h": 68 - }, - "frame": { - "x": 180, - "y": 68, - "w": 40, - "h": 68 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 39, - "h": 68 - }, - "frame": { - "x": 92, - "y": 136, - "w": 39, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 131, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 92, - "h": 68 - }, - "spriteSourceSize": { - "x": 25, - "y": 0, - "w": 38, - "h": 68 - }, - "frame": { - "x": 169, - "y": 136, - "w": 38, - "h": 68 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3adad944aac48ad53efa41f8c9916d1c:ea15b954875ad08814f50cbbf849c1b3:f7cb0e9bb3adbe899317e6e2e306035d$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/754_3.png b/public/images/pokemon/variant/exp/back/754_3.png deleted file mode 100644 index 31d33eb0319..00000000000 Binary files a/public/images/pokemon/variant/exp/back/754_3.png and /dev/null differ diff --git a/public/images/statuses_tl.json b/public/images/statuses_tl.json new file mode 100644 index 00000000000..094b0188d69 --- /dev/null +++ b/public/images/statuses_tl.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_tl.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_tl.png b/public/images/statuses_tl.png new file mode 100644 index 00000000000..9f24c6a0810 Binary files /dev/null and b/public/images/statuses_tl.png differ diff --git a/public/images/types_tl.json b/public/images/types_tl.json new file mode 100644 index 00000000000..2706c6f49f3 --- /dev/null +++ b/public/images/types_tl.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_tl.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_tl.png b/public/images/types_tl.png new file mode 100644 index 00000000000..b9fdceba7da Binary files /dev/null and b/public/images/types_tl.png differ diff --git a/public/images/ui/legacy/party_bg_double_manage.png b/public/images/ui/legacy/party_bg_double_manage.png new file mode 100644 index 00000000000..2bf2d63c315 Binary files /dev/null and b/public/images/ui/legacy/party_bg_double_manage.png differ diff --git a/public/images/ui/legacy/party_discard.json b/public/images/ui/legacy/party_discard.json new file mode 100644 index 00000000000..4aa563fcd77 --- /dev/null +++ b/public/images/ui/legacy/party_discard.json @@ -0,0 +1,62 @@ +{ + "textures": [ + { + "image": "party_discard.png", + "format": "RGBA8888", + "size": { + "w": 75, + "h": 50 + }, + "scale": 1, + "frames": [ + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + } + }, + { + "filename": "selected", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 75, + "h": 25 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:17219773dfffd6b1204d988fea3f9462:1127ad21d64bc7ebb9df4fc28f3d2d39:7ad46e8fb4648c3d3d84a746ecb371ea$" + } +} diff --git a/public/images/ui/legacy/party_discard.png b/public/images/ui/legacy/party_discard.png new file mode 100644 index 00000000000..d95ba696015 Binary files /dev/null and b/public/images/ui/legacy/party_discard.png differ diff --git a/public/images/ui/legacy/party_transfer.json b/public/images/ui/legacy/party_transfer.json new file mode 100644 index 00000000000..7cfcf5ccc30 --- /dev/null +++ b/public/images/ui/legacy/party_transfer.json @@ -0,0 +1,62 @@ +{ + "textures": [ + { + "image": "party_transfer.png", + "format": "RGBA8888", + "size": { + "w": 75, + "h": 50 + }, + "scale": 1, + "frames": [ + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + } + }, + { + "filename": "selected", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 75, + "h": 25 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:17219773dfffd6b1204d988fea3f9462:1127ad21d64bc7ebb9df4fc28f3d2d39:7ad46e8fb4648c3d3d84a746ecb371ea$" + } +} diff --git a/public/images/ui/legacy/party_transfer.png b/public/images/ui/legacy/party_transfer.png new file mode 100644 index 00000000000..36879547676 Binary files /dev/null and b/public/images/ui/legacy/party_transfer.png differ diff --git a/public/images/ui/party_bg_double_manage.png b/public/images/ui/party_bg_double_manage.png new file mode 100644 index 00000000000..e85413b5fb5 Binary files /dev/null and b/public/images/ui/party_bg_double_manage.png differ diff --git a/public/images/ui/party_discard.json b/public/images/ui/party_discard.json new file mode 100644 index 00000000000..4aa563fcd77 --- /dev/null +++ b/public/images/ui/party_discard.json @@ -0,0 +1,62 @@ +{ + "textures": [ + { + "image": "party_discard.png", + "format": "RGBA8888", + "size": { + "w": 75, + "h": 50 + }, + "scale": 1, + "frames": [ + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + } + }, + { + "filename": "selected", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 75, + "h": 25 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:17219773dfffd6b1204d988fea3f9462:1127ad21d64bc7ebb9df4fc28f3d2d39:7ad46e8fb4648c3d3d84a746ecb371ea$" + } +} diff --git a/public/images/ui/party_discard.png b/public/images/ui/party_discard.png new file mode 100644 index 00000000000..e56c845eadc Binary files /dev/null and b/public/images/ui/party_discard.png differ diff --git a/public/images/ui/party_transfer.json b/public/images/ui/party_transfer.json new file mode 100644 index 00000000000..7cfcf5ccc30 --- /dev/null +++ b/public/images/ui/party_transfer.json @@ -0,0 +1,62 @@ +{ + "textures": [ + { + "image": "party_transfer.png", + "format": "RGBA8888", + "size": { + "w": 75, + "h": 50 + }, + "scale": 1, + "frames": [ + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + } + }, + { + "filename": "selected", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 75, + "h": 25 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 75, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 75, + "h": 25 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:17219773dfffd6b1204d988fea3f9462:1127ad21d64bc7ebb9df4fc28f3d2d39:7ad46e8fb4648c3d3d84a746ecb371ea$" + } +} diff --git a/public/images/ui/party_transfer.png b/public/images/ui/party_transfer.png new file mode 100644 index 00000000000..45815a156b5 Binary files /dev/null and b/public/images/ui/party_transfer.png differ diff --git a/public/locales b/public/locales index e2fbba17ea7..fa35780fed7 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit e2fbba17ea7a96068970ea98a8a84ed3e25b6f07 +Subproject commit fa35780fed762017c89d1e9ece8a2779dff56c4d diff --git a/src/@types/api/pokerogue-account-api.ts b/src/@types/api/pokerogue-account-api.ts index 7bcdc766664..779592483fb 100644 --- a/src/@types/api/pokerogue-account-api.ts +++ b/src/@types/api/pokerogue-account-api.ts @@ -15,3 +15,10 @@ export interface AccountRegisterRequest { username: string; password: string; } + +export interface AccountChangePwRequest { + password: string; +} +export interface AccountChangePwResponse { + success: boolean; +} diff --git a/src/@types/battler-tags.ts b/src/@types/battler-tags.ts index 0057280e4e5..211eb25113d 100644 --- a/src/@types/battler-tags.ts +++ b/src/@types/battler-tags.ts @@ -88,6 +88,15 @@ export type AbilityBattlerTagType = | BattlerTagType.SLOW_START | BattlerTagType.TRUANT; +/** Subset of {@linkcode BattlerTagType}s that provide type boosts */ +export type TypeBoostTagType = BattlerTagType.FIRE_BOOST | BattlerTagType.CHARGED; + +/** Subset of {@linkcode BattlerTagType}s that boost the user's critical stage */ +export type CritStageBoostTagType = BattlerTagType.CRIT_BOOST | BattlerTagType.DRAGON_CHEER; + +/** Subset of {@linkcode BattlerTagType}s that remove one of the users' types */ +export type RemovedTypeTagType = BattlerTagType.DOUBLE_SHOCKED | BattlerTagType.BURNED_UP; + /** * Subset of {@linkcode BattlerTagType}s related to abilities that boost the highest stat. */ diff --git a/src/@types/helpers/type-helpers.ts b/src/@types/helpers/type-helpers.ts index 37f97fcf08c..7ad20b88956 100644 --- a/src/@types/helpers/type-helpers.ts +++ b/src/@types/helpers/type-helpers.ts @@ -94,3 +94,12 @@ export type AbstractConstructor = abstract new (...args: any[]) => T; export type CoerceNullPropertiesToUndefined = { [K in keyof T]: null extends T[K] ? Exclude | undefined : T[K]; }; + +/** + * Type helper to mark all properties in `T` as optional, while still mandating that at least 1 + * of its properties be present. + * + * Distinct from {@linkcode Partial} as this requires at least 1 property to _not_ be undefined. + * @typeParam T - The type to render partial + */ +export type AtLeastOne = Partial & ObjectValues<{ [K in keyof T]: Pick, K> }>; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 9af954c3852..8c8906be2b0 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -380,9 +380,21 @@ export class BattleScene extends SceneBase { }; } - populateAnims(); + /** + * These moves serve as fallback animations for other moves without loaded animations, and + * must be loaded prior to game start. + */ + const defaultMoves = [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE]; - await this.initVariantData(); + await Promise.all([ + populateAnims(), + this.initVariantData(), + initCommonAnims().then(() => loadCommonAnimAssets(true)), + Promise.all(defaultMoves.map(m => initMoveAnim(m))).then(() => loadMoveAnimAssets(defaultMoves, true)), + this.initStarterColors(), + ]).catch(reason => { + throw new Error(`Unexpected error during BattleScene preLoad!\nReason: ${reason}`); + }); } create() { @@ -584,8 +596,6 @@ export class BattleScene extends SceneBase { this.party = []; - const loadPokemonAssets = []; - this.arenaPlayer = new ArenaBase(true); this.arenaPlayer.setName("arena-player"); this.arenaPlayerTransition = new ArenaBase(true); @@ -640,26 +650,14 @@ export class BattleScene extends SceneBase { this.reset(false, false, true); + // Initialize UI-related aspects and then start the login phase. const ui = new UI(); this.uiContainer.add(ui); - this.ui = ui; - ui.setup(); - const defaultMoves = [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE]; - - Promise.all([ - Promise.all(loadPokemonAssets), - initCommonAnims().then(() => loadCommonAnimAssets(true)), - Promise.all( - [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE].map(m => initMoveAnim(m)), - ).then(() => loadMoveAnimAssets(defaultMoves, true)), - this.initStarterColors(), - ]).then(() => { - this.phaseManager.toTitleScreen(true); - this.phaseManager.shiftPhase(); - }); + this.phaseManager.toTitleScreen(true); + this.phaseManager.shiftPhase(); } initSession(): void { @@ -2845,6 +2843,23 @@ export class BattleScene extends SceneBase { } return false; } + /** + * Attempt to discard one or more copies of a held item. + * @param itemModifier - The {@linkcode PokemonHeldItemModifier} being discarded + * @param discardQuantity - The number of copies to remove (up to the amount currently held); default `1` + * @returns Whether the item was successfully discarded. + * Removing fewer items than requested is still considered a success. + */ + tryDiscardHeldItemModifier(itemModifier: PokemonHeldItemModifier, discardQuantity = 1): boolean { + const countTaken = Math.min(discardQuantity, itemModifier.stackCount); + itemModifier.stackCount -= countTaken; + + if (itemModifier.stackCount > 0) { + return true; + } + + return this.removeModifier(itemModifier); + } canTransferHeldItemModifier(itemModifier: PokemonHeldItemModifier, target: Pokemon, transferQuantity = 1): boolean { const mod = itemModifier.clone() as PokemonHeldItemModifier; @@ -3513,6 +3528,7 @@ export class BattleScene extends SceneBase { this.gameMode.hasMysteryEncounters && battleType === BattleType.WILD && !this.gameMode.isBoss(waveIndex) && + waveIndex % 10 !== 1 && waveIndex < highestMysteryEncounterWave && waveIndex > lowestMysteryEncounterWave ); diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 0ee1a51a78e..2f57df4a551 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -1768,7 +1768,7 @@ export interface AddSecondStrikeAbAttrParams extends Omit(source: BaseArenaTag & Pick): void; - * public override loadTag(source: NonFunctionProperties): void; * } * ``` * Notes * - If the class has any subclasses, then the second form of `loadTag` *must* be used. - * - The third form *must not* be used if the class has any getters, as typescript would expect such fields to be - * present in `source`. */ /** Interface containing the serializable fields of ArenaTagData. */ @@ -1659,7 +1656,10 @@ export function getArenaTag( * @param source - An arena tag * @returns The valid arena tag */ -export function loadArenaTag(source: ArenaTag | ArenaTagTypeData): ArenaTag { +export function loadArenaTag(source: ArenaTag | ArenaTagTypeData | { tagType: ArenaTagType.NONE }): ArenaTag { + if (source.tagType === ArenaTagType.NONE) { + return new NoneTag(); + } const tag = getArenaTag(source.tagType, source.turnCount, source.sourceMove, source.sourceId, source.side) ?? new NoneTag(); tag.loadTag(source); diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index f84a518fb65..d8297636393 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -1291,11 +1291,11 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ SpeciesId.BELDUM ], 20: [ SpeciesId.METANG ], 45: [ SpeciesId.METAGROSS ] }, SpeciesId.SIGILYPH, { 1: [ SpeciesId.SOLOSIS ], 32: [ SpeciesId.DUOSION ], 41: [ SpeciesId.REUNICLUS ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ SpeciesId.PORYGON ], 30: [ SpeciesId.PORYGON2 ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ SpeciesId.COSMOG ], 23: [ SpeciesId.COSMOEM ] }, SpeciesId.CELESTEELA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ SpeciesId.COSMOG ], 60: [ SpeciesId.COSMOEM ] }, SpeciesId.CELESTEELA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ SpeciesId.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ SpeciesId.LUNATONE ], [TimeOfDay.ALL]: [ SpeciesId.CLEFABLE, SpeciesId.BRONZONG, SpeciesId.MUSHARNA, SpeciesId.REUNICLUS, SpeciesId.MINIOR ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.METAGROSS, SpeciesId.PORYGON_Z ] }, [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CELESTEELA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ SpeciesId.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ SpeciesId.LUNALA ], [TimeOfDay.ALL]: [ SpeciesId.RAYQUAZA, SpeciesId.NECROZMA ] } + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ { 1: [ SpeciesId.COSMOG ], 60: [ SpeciesId.COSMOEM ], 80: [ SpeciesId.SOLGALEO ] } ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ { 1: [ SpeciesId.COSMOG ], 60: [ SpeciesId.COSMOEM ], 80: [ SpeciesId.LUNALA ] } ], [TimeOfDay.ALL]: [ SpeciesId.RAYQUAZA, SpeciesId.NECROZMA ] } }, [BiomeId.CONSTRUCTION_SITE]: { [BiomePoolTier.COMMON]: { @@ -1641,10 +1641,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [] }, [BiomeId.PLAINS]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.TWINS ], @@ -1652,10 +1649,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.CILAN, TrainerType.CHILI, TrainerType.CRESS, TrainerType.CHEREN ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.CILAN, TrainerType.CHILI, TrainerType.CRESS, TrainerType.CHEREN ] }, [BiomeId.GRASS]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.SCHOOL_KID ], @@ -1663,10 +1657,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.ERIKA ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.ERIKA ] }, [BiomeId.TALL_GRASS]: { [BiomePoolTier.COMMON]: [], @@ -1674,10 +1665,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.GARDENIA, TrainerType.VIOLA, TrainerType.BRASSIUS ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.GARDENIA, TrainerType.VIOLA, TrainerType.BRASSIUS ] }, [BiomeId.METROPOLIS]: { [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY, TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER ], @@ -1685,10 +1673,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.ARTIST, TrainerType.RICH_KID ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.WHITNEY, TrainerType.NORMAN, TrainerType.IONO, TrainerType.LARRY ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.WHITNEY, TrainerType.NORMAN, TrainerType.IONO, TrainerType.LARRY ] }, [BiomeId.FOREST]: { [BiomePoolTier.COMMON]: [ TrainerType.RANGER ], @@ -1696,10 +1681,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.BUGSY, TrainerType.BURGH, TrainerType.KATY ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.BUGSY, TrainerType.BURGH, TrainerType.KATY ] }, [BiomeId.SEA]: { [BiomePoolTier.COMMON]: [ TrainerType.SAILOR, TrainerType.SWIMMER ], @@ -1707,10 +1689,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.MARLON ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.MARLON ] }, [BiomeId.SWAMP]: { [BiomePoolTier.COMMON]: [ TrainerType.PARASOL_LADY ], @@ -1718,10 +1697,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.JANINE, TrainerType.ROXIE ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.JANINE, TrainerType.ROXIE ] }, [BiomeId.BEACH]: { [BiomePoolTier.COMMON]: [ TrainerType.FISHERMAN, TrainerType.SAILOR ], @@ -1729,10 +1705,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.MISTY, TrainerType.KOFU ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.MISTY, TrainerType.KOFU ] }, [BiomeId.LAKE]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.FISHERMAN, TrainerType.PARASOL_LADY ], @@ -1740,21 +1713,15 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.CRASHER_WAKE ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.CRASHER_WAKE ] }, [BiomeId.SEABED]: { - [BiomePoolTier.COMMON]: [], + [BiomePoolTier.COMMON]: [ TrainerType.SWIMMER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.JUAN ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.JUAN ] }, [BiomeId.MOUNTAIN]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.BLACK_BELT, TrainerType.HIKER ], @@ -1762,10 +1729,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.FALKNER, TrainerType.WINONA, TrainerType.SKYLA ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.FALKNER, TrainerType.WINONA, TrainerType.SKYLA ] }, [BiomeId.BADLANDS]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.HIKER ], @@ -1773,10 +1737,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.CLAY, TrainerType.GRANT ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.CLAY, TrainerType.GRANT ] }, [BiomeId.CAVE]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.HIKER ], @@ -1784,10 +1745,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.BROCK, TrainerType.ROXANNE, TrainerType.ROARK ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.BROCK, TrainerType.ROXANNE, TrainerType.ROARK ] }, [BiomeId.DESERT]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.SCIENTIST ], @@ -1795,10 +1753,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.GORDIE ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.GORDIE ] }, [BiomeId.ICE_CAVE]: { [BiomePoolTier.COMMON]: [ TrainerType.SNOW_WORKER ], @@ -1806,10 +1761,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.PRYCE, TrainerType.BRYCEN, TrainerType.WULFRIC, TrainerType.GRUSHA ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.PRYCE, TrainerType.BRYCEN, TrainerType.WULFRIC, TrainerType.GRUSHA ] }, [BiomeId.MEADOW]: { [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY, TrainerType.MUSICIAN, TrainerType.PARASOL_LADY ], @@ -1817,10 +1769,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.LENORA, TrainerType.MILO ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.LENORA, TrainerType.MILO ] }, [BiomeId.POWER_PLANT]: { [BiomePoolTier.COMMON]: [ TrainerType.GUITARIST, TrainerType.WORKER ], @@ -1828,10 +1777,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.VOLKNER, TrainerType.ELESA, TrainerType.CLEMONT ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.VOLKNER, TrainerType.ELESA, TrainerType.CLEMONT ] }, [BiomeId.VOLCANO]: { [BiomePoolTier.COMMON]: [ TrainerType.FIREBREATHER ], @@ -1839,10 +1785,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.BLAINE, TrainerType.FLANNERY, TrainerType.KABU ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.BLAINE, TrainerType.FLANNERY, TrainerType.KABU ] }, [BiomeId.GRAVEYARD]: { [BiomePoolTier.COMMON]: [ TrainerType.PSYCHIC ], @@ -1850,10 +1793,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.MORTY, TrainerType.ALLISTER, TrainerType.RYME ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.MORTY, TrainerType.ALLISTER, TrainerType.RYME ] }, [BiomeId.DOJO]: { [BiomePoolTier.COMMON]: [ TrainerType.BLACK_BELT ], @@ -1861,10 +1801,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.BRAWLY, TrainerType.MAYLENE, TrainerType.KORRINA, TrainerType.BEA ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.BRAWLY, TrainerType.MAYLENE, TrainerType.KORRINA, TrainerType.BEA ] }, [BiomeId.FACTORY]: { [BiomePoolTier.COMMON]: [ TrainerType.WORKER ], @@ -1872,10 +1809,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.JASMINE, TrainerType.BYRON ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.JASMINE, TrainerType.BYRON ] }, [BiomeId.RUINS]: { [BiomePoolTier.COMMON]: [ TrainerType.PSYCHIC, TrainerType.SCIENTIST ], @@ -1883,10 +1817,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.SABRINA, TrainerType.TATE, TrainerType.LIZA, TrainerType.TULIP ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.SABRINA, TrainerType.TATE, TrainerType.LIZA, TrainerType.TULIP ] }, [BiomeId.WASTELAND]: { [BiomePoolTier.COMMON]: [ TrainerType.VETERAN ], @@ -1894,10 +1825,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.CLAIR, TrainerType.DRAYDEN, TrainerType.RAIHAN ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.CLAIR, TrainerType.DRAYDEN, TrainerType.RAIHAN ] }, [BiomeId.ABYSS]: { [BiomePoolTier.COMMON]: [], @@ -1905,10 +1833,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.MARNIE ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.MARNIE ] }, [BiomeId.SPACE]: { [BiomePoolTier.COMMON]: [], @@ -1916,10 +1841,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.OLYMPIA ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.OLYMPIA ] }, [BiomeId.CONSTRUCTION_SITE]: { [BiomePoolTier.COMMON]: [ TrainerType.OFFICER, TrainerType.WORKER ], @@ -1927,10 +1849,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.LT_SURGE, TrainerType.CHUCK, TrainerType.WATTSON ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.LT_SURGE, TrainerType.CHUCK, TrainerType.WATTSON ] }, [BiomeId.JUNGLE]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.RANGER ], @@ -1938,10 +1857,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.RAMOS ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.RAMOS ] }, [BiomeId.FAIRY_CAVE]: { [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY ], @@ -1949,10 +1865,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.VALERIE, TrainerType.OPAL, TrainerType.BEDE ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.VALERIE, TrainerType.OPAL, TrainerType.BEDE ] }, [BiomeId.TEMPLE]: { [BiomePoolTier.COMMON]: [], @@ -1960,10 +1873,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.FANTINA ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.FANTINA ] }, [BiomeId.SLUM]: { [BiomePoolTier.COMMON]: [ TrainerType.BIKER, TrainerType.OFFICER, TrainerType.ROUGHNECK ], @@ -1971,10 +1881,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.PIERS ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.PIERS ] }, [BiomeId.SNOWY_FOREST]: { [BiomePoolTier.COMMON]: [ TrainerType.SNOW_WORKER ], @@ -1982,10 +1889,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.CANDICE, TrainerType.MELONY ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.CANDICE, TrainerType.MELONY ] }, [BiomeId.ISLAND]: { [BiomePoolTier.COMMON]: [ TrainerType.RICH_KID ], @@ -1993,21 +1897,15 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.NESSA ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.NESSA ] }, [BiomeId.LABORATORY]: { - [BiomePoolTier.COMMON]: [], + [BiomePoolTier.COMMON]: [ TrainerType.SCIENTIST ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.GIOVANNI ], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [ TrainerType.GIOVANNI ] }, [BiomeId.END]: { [BiomePoolTier.COMMON]: [], @@ -2015,13 +1913,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [], - [BiomePoolTier.BOSS_RARE]: [], - [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [] + [BiomePoolTier.BOSS]: [] } }; - export function initBiomes() { const pokemonBiomes = [ [ SpeciesId.BULBASAUR, PokemonType.GRASS, PokemonType.POISON, [ diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index c632889326d..ab535682e86 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -1191,11 +1191,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.KOMMO_O, 45, null, null) ], [SpeciesId.COSMOG]: [ - new SpeciesEvolution(SpeciesId.COSMOEM, 23, null, null) + new SpeciesEvolution(SpeciesId.COSMOEM, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 43}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.COSMOEM]: [ - new SpeciesEvolution(SpeciesId.SOLGALEO, 1, EvolutionItem.SUN_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(SpeciesId.LUNALA, 1, EvolutionItem.MOON_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.SOLGALEO, 13, EvolutionItem.SUN_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.LUNALA, 13, EvolutionItem.MOON_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.MELTAN]: [ new SpeciesEvolution(SpeciesId.MELMETAL, 48, null, null) @@ -1824,7 +1824,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.ROSELIA, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 70}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.SHORT) ], [SpeciesId.BUNEARY]: [ - new SpeciesEvolution(SpeciesId.LOPUNNY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.LOPUNNY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 50}, SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.CHINGLING]: [ new SpeciesEvolution(SpeciesId.CHIMECHO, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 90}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.MEDIUM) diff --git a/src/data/balance/pokemon-species.ts b/src/data/balance/pokemon-species.ts new file mode 100644 index 00000000000..5e9d352f437 --- /dev/null +++ b/src/data/balance/pokemon-species.ts @@ -0,0 +1,1784 @@ +import { allSpecies } from "#data/data-lists"; +import { GrowthRate } from "#data/exp"; +import { PokemonForm, PokemonSpecies } from "#data/pokemon-species"; +import { AbilityId } from "#enums/ability-id"; +import { PokemonType } from "#enums/pokemon-type"; +import { SpeciesFormKey } from "#enums/species-form-key"; +import { SpeciesId } from "#enums/species-id"; + +// biome-ignore format: manually formatted +export function initSpecies() { + allSpecies.push( + new PokemonSpecies(SpeciesId.BULBASAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 6.9, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 318, 45, 49, 49, 65, 65, 45, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.IVYSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 13, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 405, 60, 62, 63, 80, 80, 60, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.VENUSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 2, 100, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, GrowthRate.MEDIUM_SLOW, 87.5, true, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.POISON, 2, 100, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.POISON, 2.4, 155.5, AbilityId.THICK_FAT, AbilityId.THICK_FAT, AbilityId.THICK_FAT, 625, 80, 100, 123, 122, 120, 80, 45, 50, 263, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.POISON, 24, 999.9, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.EFFECT_SPORE, 625, 120, 122, 90, 108, 105, 80, 45, 50, 263, true) + ), + new PokemonSpecies(SpeciesId.CHARMANDER, 1, false, false, false, "Lizard Pokémon", PokemonType.FIRE, null, 0.6, 8.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 309, 39, 52, 43, 60, 50, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHARMELEON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 1.1, 19, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 405, 58, 64, 58, 80, 65, 80, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHARIZARD, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, false, null, true), + new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.FIRE, PokemonType.DRAGON, 1.7, 110.5, AbilityId.TOUGH_CLAWS, AbilityId.NONE, AbilityId.TOUGH_CLAWS, 634, 78, 130, 111, 130, 85, 100, 45, 50, 267), + new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.FIRE, PokemonType.FLYING, 1.7, 100.5, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.DROUGHT, 634, 78, 104, 78, 159, 115, 100, 45, 50, 267), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.FLYING, 28, 999.9, AbilityId.BERSERK, AbilityId.NONE, AbilityId.BERSERK, 634, 118, 99, 88, 134, 95, 100, 45, 50, 267) + ), + new PokemonSpecies(SpeciesId.SQUIRTLE, 1, false, false, false, "Tiny Turtle Pokémon", PokemonType.WATER, null, 0.5, 9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 314, 44, 48, 65, 50, 64, 43, 45, 50, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.WARTORTLE, 1, false, false, false, "Turtle Pokémon", PokemonType.WATER, null, 1, 22.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 405, 59, 63, 80, 65, 80, 58, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BLASTOISE, 1, false, false, false, "Shellfish Pokémon", PokemonType.WATER, null, 1.6, 85.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 1.6, 85.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, null, 1.6, 101.1, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.MEGA_LAUNCHER, 630, 79, 103, 120, 135, 115, 78, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.STEEL, 25, 999.9, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.SHELL_ARMOR, 630, 119, 108, 125, 105, 110, 63, 45, 50, 265) + ), + new PokemonSpecies(SpeciesId.CATERPIE, 1, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 2.9, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 45, 30, 35, 20, 20, 45, 255, 50, 39, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.METAPOD, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 9.9, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 20, 55, 25, 25, 30, 120, 50, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BUTTERFREE, 1, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, true, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.FLYING, 17, 999.9, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.COMPOUND_EYES, 495, 80, 40, 75, 120, 95, 85, 45, 50, 198, true) + ), + new PokemonSpecies(SpeciesId.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", PokemonType.BUG, PokemonType.POISON, 0.3, 3.2, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KAKUNA, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, PokemonType.POISON, 0.6, 10, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEEDRILL, 1, false, false, false, "Poison Bee Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 29.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.POISON, 1, 29.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.POISON, 1.4, 40.5, AbilityId.ADAPTABILITY, AbilityId.NONE, AbilityId.ADAPTABILITY, 495, 65, 150, 40, 15, 80, 145, 45, 70, 198) + ), + new PokemonSpecies(SpeciesId.PIDGEY, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.8, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 251, 40, 45, 40, 35, 35, 56, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PIDGEOTTO, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 30, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 349, 63, 60, 55, 50, 50, 71, 120, 70, 122, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PIDGEOT, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FLYING, 2.2, 50.5, AbilityId.NO_GUARD, AbilityId.NO_GUARD, AbilityId.NO_GUARD, 579, 83, 80, 80, 135, 80, 121, 45, 70, 240) + ), + new PokemonSpecies(SpeciesId.RATTATA, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.3, 3.5, AbilityId.RUN_AWAY, AbilityId.GUTS, AbilityId.HUSTLE, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.RATICATE, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.7, 18.5, AbilityId.RUN_AWAY, AbilityId.GUTS, AbilityId.HUSTLE, 413, 55, 81, 60, 50, 70, 97, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SPEAROW, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.SNIPER, 262, 40, 60, 30, 31, 31, 70, 255, 70, 52, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FEAROW, 1, false, false, false, "Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 38, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.SNIPER, 442, 65, 90, 65, 61, 61, 100, 90, 70, 155, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.EKANS, 1, false, false, false, "Snake Pokémon", PokemonType.POISON, null, 2, 6.9, AbilityId.INTIMIDATE, AbilityId.SHED_SKIN, AbilityId.UNNERVE, 288, 35, 60, 44, 40, 54, 55, 255, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ARBOK, 1, false, false, false, "Cobra Pokémon", PokemonType.POISON, null, 3.5, 65, AbilityId.INTIMIDATE, AbilityId.SHED_SKIN, AbilityId.UNNERVE, 448, 60, 95, 69, 65, 79, 80, 90, 70, 157, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PIKACHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true), + new PokemonForm("Partner", "partner", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), + new PokemonForm("Cosplay", "cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Cool Cosplay", "cool-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Beauty Cosplay", "beauty-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Cute Cosplay", "cute-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Smart Cosplay", "smart-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Tough Cosplay", "tough-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, null, 21, 999.9, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 530, 125, 95, 60, 90, 70, 90, 190, 50, 112) + ), + new PokemonSpecies(SpeciesId.RAICHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.8, 30, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SANDSHREW, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 0.6, 12, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.SAND_RUSH, 300, 50, 75, 85, 20, 30, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SANDSLASH, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 1, 29.5, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.SAND_RUSH, 450, 75, 100, 110, 45, 55, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NIDORAN_F, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.4, 7, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 275, 55, 47, 52, 40, 40, 41, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.NIDORINA, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.8, 20, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 365, 70, 62, 67, 55, 55, 56, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.NIDOQUEEN, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.3, 60, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.SHEER_FORCE, 505, 90, 92, 87, 75, 85, 76, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.NIDORAN_M, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.5, 9, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 273, 46, 57, 40, 40, 40, 50, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 100, false), + new PokemonSpecies(SpeciesId.NIDORINO, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.9, 19.5, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 365, 61, 72, 57, 55, 55, 65, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 100, false), + new PokemonSpecies(SpeciesId.NIDOKING, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.4, 62, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.SHEER_FORCE, 505, 81, 102, 77, 85, 75, 85, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 100, false), + new PokemonSpecies(SpeciesId.CLEFAIRY, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.5, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.FRIEND_GUARD, 323, 70, 45, 48, 60, 65, 35, 150, 140, 113, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.CLEFABLE, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.3, 40, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.UNAWARE, 483, 95, 70, 73, 95, 90, 60, 25, 140, 242, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.VULPIX, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.6, 9.9, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.DROUGHT, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.NINETALES, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1.1, 19.9, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.DROUGHT, 505, 73, 76, 75, 81, 100, 100, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.JIGGLYPUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.5, 5.5, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRIEND_GUARD, 270, 115, 45, 20, 45, 25, 20, 170, 50, 95, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.WIGGLYTUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 1, 12, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRISK, 435, 140, 70, 45, 85, 50, 45, 50, 50, 218, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.ZUBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 0.8, 7.5, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 245, 40, 45, 35, 30, 40, 55, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.GOLBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.6, 55, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 455, 75, 80, 70, 65, 75, 90, 90, 50, 159, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ODDISH, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.5, 5.4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.RUN_AWAY, 320, 45, 50, 55, 75, 65, 30, 255, 50, 64, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLOOM, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.8, 8.6, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.STENCH, 395, 60, 65, 70, 85, 75, 40, 120, 50, 138, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.VILEPLUME, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.2, 18.6, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.EFFECT_SPORE, 490, 75, 80, 85, 110, 90, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.PARAS, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 5.4, AbilityId.EFFECT_SPORE, AbilityId.DRY_SKIN, AbilityId.DAMP, 285, 35, 70, 55, 45, 55, 25, 190, 70, 57, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PARASECT, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 1, 29.5, AbilityId.EFFECT_SPORE, AbilityId.DRY_SKIN, AbilityId.DAMP, 405, 60, 95, 80, 60, 80, 30, 75, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VENONAT, 1, false, false, false, "Insect Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 30, AbilityId.COMPOUND_EYES, AbilityId.TINTED_LENS, AbilityId.RUN_AWAY, 305, 60, 55, 50, 40, 55, 45, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VENOMOTH, 1, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.5, 12.5, AbilityId.SHIELD_DUST, AbilityId.TINTED_LENS, AbilityId.WONDER_SKIN, 450, 70, 65, 60, 90, 75, 90, 75, 70, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DIGLETT, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.2, 0.8, AbilityId.SAND_VEIL, AbilityId.ARENA_TRAP, AbilityId.SAND_FORCE, 265, 10, 55, 25, 35, 45, 95, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUGTRIO, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.7, 33.3, AbilityId.SAND_VEIL, AbilityId.ARENA_TRAP, AbilityId.SAND_FORCE, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MEOWTH, 1, false, false, false, "Scratch Cat Pokémon", PokemonType.NORMAL, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 33, 999.9, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, 540, 115, 110, 65, 65, 70, 115, 255, 50, 58) + ), + new PokemonSpecies(SpeciesId.PERSIAN, 1, false, false, false, "Classy Cat Pokémon", PokemonType.NORMAL, null, 1, 32, AbilityId.LIMBER, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 440, 65, 70, 60, 65, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PSYDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 0.8, 19.6, AbilityId.DAMP, AbilityId.CLOUD_NINE, AbilityId.SWIFT_SWIM, 320, 50, 52, 48, 65, 50, 55, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOLDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 1.7, 76.6, AbilityId.DAMP, AbilityId.CLOUD_NINE, AbilityId.SWIFT_SWIM, 500, 80, 82, 78, 95, 80, 85, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MANKEY, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 0.5, 28, AbilityId.VITAL_SPIRIT, AbilityId.ANGER_POINT, AbilityId.DEFIANT, 305, 40, 80, 35, 35, 45, 70, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PRIMEAPE, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 1, 32, AbilityId.VITAL_SPIRIT, AbilityId.ANGER_POINT, AbilityId.DEFIANT, 455, 65, 105, 60, 60, 70, 95, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GROWLITHE, 1, false, false, false, "Puppy Pokémon", PokemonType.FIRE, null, 0.7, 19, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.JUSTIFIED, 350, 55, 70, 45, 70, 50, 60, 190, 50, 70, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.ARCANINE, 1, false, false, false, "Legendary Pokémon", PokemonType.FIRE, null, 1.9, 155, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.JUSTIFIED, 555, 90, 110, 80, 100, 80, 95, 75, 50, 194, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.POLIWAG, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.6, 12.4, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 300, 40, 50, 40, 40, 40, 90, 255, 50, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.POLIWHIRL, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 1, 20, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 385, 65, 65, 65, 50, 50, 90, 120, 50, 135, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.POLIWRATH, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.3, 54, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 510, 90, 95, 95, 70, 90, 70, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 0.9, 19.5, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 310, 25, 20, 15, 105, 55, 90, 200, 50, 62, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.KADABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.3, 56.5, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 400, 40, 35, 30, 120, 70, 105, 100, 50, 140, GrowthRate.MEDIUM_SLOW, 75, true), + new PokemonSpecies(SpeciesId.ALAKAZAM, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.5, 48, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, GrowthRate.MEDIUM_SLOW, 75, true, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 1.5, 48, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, null, 1.2, 48, AbilityId.TRACE, AbilityId.TRACE, AbilityId.TRACE, 600, 55, 50, 65, 175, 105, 150, 50, 50, 250, true) + ), + new PokemonSpecies(SpeciesId.MACHOP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 0.8, 19.5, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 305, 70, 80, 50, 35, 35, 35, 180, 50, 61, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.MACHOKE, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.5, 70.5, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 405, 80, 100, 70, 50, 60, 45, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.MACHAMP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.6, 130, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, null, 1.6, 130, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIGHTING, null, 25, 999.9, AbilityId.GUTS, AbilityId.GUTS, AbilityId.GUTS, 605, 120, 170, 85, 75, 90, 65, 45, 50, 253) + ), + new PokemonSpecies(SpeciesId.BELLSPROUT, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 300, 50, 75, 35, 70, 30, 40, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WEEPINBELL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 6.4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 390, 65, 90, 50, 85, 45, 55, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VICTREEBEL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.7, 15.5, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 490, 80, 105, 65, 100, 70, 70, 45, 70, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TENTACOOL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 0.9, 45.5, AbilityId.CLEAR_BODY, AbilityId.LIQUID_OOZE, AbilityId.RAIN_DISH, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TENTACRUEL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 1.6, 55, AbilityId.CLEAR_BODY, AbilityId.LIQUID_OOZE, AbilityId.RAIN_DISH, 515, 80, 70, 65, 80, 120, 100, 60, 50, 180, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GEODUDE, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.4, 20, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GRAVELER, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1, 105, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GOLEM, 1, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.4, 300, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 495, 80, 120, 130, 55, 65, 45, 45, 70, 248, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PONYTA, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1, 30, AbilityId.RUN_AWAY, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RAPIDASH, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1.7, 95, AbilityId.RUN_AWAY, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SLOWPOKE, 1, false, false, false, "Dopey Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.2, 36, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SLOWBRO, 1, false, false, false, "Hermit Crab Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.PSYCHIC, 2, 120, AbilityId.SHELL_ARMOR, AbilityId.SHELL_ARMOR, AbilityId.SHELL_ARMOR, 590, 95, 75, 180, 130, 80, 30, 75, 50, 172) + ), + new PokemonSpecies(SpeciesId.MAGNEMITE, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 6, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 325, 25, 35, 70, 95, 55, 45, 190, 50, 65, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.MAGNETON, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1, 60, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 465, 50, 60, 95, 120, 70, 70, 60, 50, 163, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.FARFETCHD, 1, false, false, false, "Wild Duck Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.8, 15, AbilityId.KEEN_EYE, AbilityId.INNER_FOCUS, AbilityId.DEFIANT, 377, 52, 90, 55, 58, 62, 60, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DODUO, 1, false, false, false, "Twin Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.4, 39.2, AbilityId.RUN_AWAY, AbilityId.EARLY_BIRD, AbilityId.TANGLED_FEET, 310, 35, 85, 45, 35, 35, 75, 190, 70, 62, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.DODRIO, 1, false, false, false, "Triple Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.8, 85.2, AbilityId.RUN_AWAY, AbilityId.EARLY_BIRD, AbilityId.TANGLED_FEET, 470, 60, 110, 70, 60, 60, 110, 45, 70, 165, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SEEL, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 1.1, 90, AbilityId.THICK_FAT, AbilityId.HYDRATION, AbilityId.ICE_BODY, 325, 65, 45, 55, 45, 70, 45, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEWGONG, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, PokemonType.ICE, 1.7, 120, AbilityId.THICK_FAT, AbilityId.HYDRATION, AbilityId.ICE_BODY, 475, 90, 70, 80, 70, 95, 70, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GRIMER, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 0.9, 30, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.POISON_TOUCH, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MUK, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 1.2, 30, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.POISON_TOUCH, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SHELLDER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.3, 4, AbilityId.SHELL_ARMOR, AbilityId.SKILL_LINK, AbilityId.OVERCOAT, 305, 30, 65, 100, 45, 25, 40, 190, 50, 61, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CLOYSTER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, PokemonType.ICE, 1.5, 132.5, AbilityId.SHELL_ARMOR, AbilityId.SKILL_LINK, AbilityId.OVERCOAT, 525, 50, 95, 180, 85, 45, 70, 60, 50, 184, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GASTLY, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.3, 0.1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 310, 30, 35, 30, 100, 35, 80, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HAUNTER, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.6, 0.1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 405, 45, 50, 45, 115, 55, 95, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GENGAR, 1, false, false, false, "Shadow Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, PokemonType.POISON, 1.4, 40.5, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.NONE, 600, 60, 65, 80, 170, 95, 130, 45, 50, 250), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GHOST, PokemonType.POISON, 20, 999.9, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 600, 140, 65, 70, 140, 85, 100, 45, 50, 250) + ), + new PokemonSpecies(SpeciesId.ONIX, 1, false, false, false, "Rock Snake Pokémon", PokemonType.ROCK, PokemonType.GROUND, 8.8, 210, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.WEAK_ARMOR, 385, 35, 45, 160, 30, 45, 70, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DROWZEE, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1, 32.4, AbilityId.INSOMNIA, AbilityId.FOREWARN, AbilityId.INNER_FOCUS, 328, 60, 48, 45, 43, 90, 42, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HYPNO, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1.6, 75.6, AbilityId.INSOMNIA, AbilityId.FOREWARN, AbilityId.INNER_FOCUS, 483, 85, 73, 70, 73, 115, 67, 75, 70, 169, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.KRABBY, 1, false, false, false, "River Crab Pokémon", PokemonType.WATER, null, 0.4, 6.5, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 325, 30, 105, 90, 25, 25, 50, 225, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KINGLER, 1, false, false, false, "Pincer Pokémon", PokemonType.WATER, null, 1.3, 60, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 1.3, 60, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 19, 999.9, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 575, 92, 145, 140, 60, 65, 73, 60, 50, 166) + ), + new PokemonSpecies(SpeciesId.VOLTORB, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 0.5, 10.4, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 70, 66, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.ELECTRODE, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 1.2, 66.6, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.EXEGGCUTE, 1, false, false, false, "Egg Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 0.4, 2.5, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HARVEST, 325, 60, 40, 80, 60, 45, 40, 90, 50, 65, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EXEGGUTOR, 1, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 2, 120, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HARVEST, 530, 95, 95, 85, 125, 75, 55, 45, 50, 186, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CUBONE, 1, false, false, false, "Lonely Pokémon", PokemonType.GROUND, null, 0.4, 6.5, AbilityId.ROCK_HEAD, AbilityId.LIGHTNING_ROD, AbilityId.BATTLE_ARMOR, 320, 50, 50, 95, 40, 50, 35, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MAROWAK, 1, false, false, false, "Bone Keeper Pokémon", PokemonType.GROUND, null, 1, 45, AbilityId.ROCK_HEAD, AbilityId.LIGHTNING_ROD, AbilityId.BATTLE_ARMOR, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HITMONLEE, 1, false, false, false, "Kicking Pokémon", PokemonType.FIGHTING, null, 1.5, 49.8, AbilityId.LIMBER, AbilityId.RECKLESS, AbilityId.UNBURDEN, 455, 50, 120, 53, 35, 110, 87, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.HITMONCHAN, 1, false, false, false, "Punching Pokémon", PokemonType.FIGHTING, null, 1.4, 50.2, AbilityId.KEEN_EYE, AbilityId.IRON_FIST, AbilityId.INNER_FOCUS, 455, 50, 105, 79, 35, 110, 76, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.LICKITUNG, 1, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.2, 65.5, AbilityId.OWN_TEMPO, AbilityId.OBLIVIOUS, AbilityId.CLOUD_NINE, 385, 90, 55, 75, 60, 75, 30, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KOFFING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 0.6, 1, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.STENCH, 340, 40, 65, 95, 60, 45, 35, 190, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WEEZING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 1.2, 9.5, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.STENCH, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RHYHORN, 1, false, false, false, "Spikes Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1, 115, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, AbilityId.RECKLESS, 345, 80, 85, 95, 30, 30, 25, 120, 50, 69, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.RHYDON, 1, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1.9, 120, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, AbilityId.RECKLESS, 485, 105, 130, 120, 45, 45, 40, 60, 50, 170, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.CHANSEY, 1, false, false, false, "Egg Pokémon", PokemonType.NORMAL, null, 1.1, 34.6, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.HEALER, 450, 250, 5, 5, 35, 105, 50, 30, 140, 395, GrowthRate.FAST, 0, false), + new PokemonSpecies(SpeciesId.TANGELA, 1, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 1, 35, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.REGENERATOR, 435, 65, 55, 115, 100, 40, 60, 45, 50, 87, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KANGASKHAN, 1, false, false, false, "Parent Pokémon", PokemonType.NORMAL, null, 2.2, 80, AbilityId.EARLY_BIRD, AbilityId.SCRAPPY, AbilityId.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, GrowthRate.MEDIUM_FAST, 0, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.2, 80, AbilityId.EARLY_BIRD, AbilityId.SCRAPPY, AbilityId.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, null, 2.2, 100, AbilityId.PARENTAL_BOND, AbilityId.PARENTAL_BOND, AbilityId.PARENTAL_BOND, 590, 105, 125, 100, 60, 100, 100, 45, 50, 172) + ), + new PokemonSpecies(SpeciesId.HORSEA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 0.4, 8, AbilityId.SWIFT_SWIM, AbilityId.SNIPER, AbilityId.DAMP, 295, 30, 40, 70, 70, 25, 60, 225, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SEADRA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 1.2, 25, AbilityId.POISON_POINT, AbilityId.SNIPER, AbilityId.DAMP, 440, 55, 65, 95, 95, 45, 85, 75, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOLDEEN, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 0.6, 15, AbilityId.SWIFT_SWIM, AbilityId.WATER_VEIL, AbilityId.LIGHTNING_ROD, 320, 45, 67, 60, 35, 50, 63, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SEAKING, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 1.3, 39, AbilityId.SWIFT_SWIM, AbilityId.WATER_VEIL, AbilityId.LIGHTNING_ROD, 450, 80, 92, 65, 65, 80, 68, 60, 50, 158, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.STARYU, 1, false, false, false, "Star Shape Pokémon", PokemonType.WATER, null, 0.8, 34.5, AbilityId.ILLUMINATE, AbilityId.NATURAL_CURE, AbilityId.ANALYTIC, 340, 30, 45, 55, 70, 55, 85, 225, 50, 68, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.STARMIE, 1, false, false, false, "Mysterious Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.1, 80, AbilityId.ILLUMINATE, AbilityId.NATURAL_CURE, AbilityId.ANALYTIC, 520, 60, 75, 85, 100, 85, 115, 60, 50, 182, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MR_MIME, 1, false, false, false, "Barrier Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.3, 54.5, AbilityId.SOUNDPROOF, AbilityId.FILTER, AbilityId.TECHNICIAN, 460, 40, 45, 65, 100, 120, 90, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCYTHER, 1, false, false, false, "Mantis Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.5, 56, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.STEADFAST, 500, 70, 110, 80, 55, 80, 105, 45, 50, 100, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.JYNX, 1, false, false, false, "Human Shape Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 40.6, AbilityId.OBLIVIOUS, AbilityId.FOREWARN, AbilityId.DRY_SKIN, 455, 65, 50, 35, 115, 95, 95, 45, 50, 159, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ELECTABUZZ, 1, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 1.1, 30, AbilityId.STATIC, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 490, 65, 83, 57, 95, 85, 105, 45, 50, 172, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MAGMAR, 1, false, false, false, "Spitfire Pokémon", PokemonType.FIRE, null, 1.3, 44.5, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 495, 65, 95, 57, 100, 85, 93, 45, 50, 173, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.PINSIR, 1, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, null, 1.5, 55, AbilityId.HYPER_CUTTER, AbilityId.MOLD_BREAKER, AbilityId.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, null, 1.5, 55, AbilityId.HYPER_CUTTER, AbilityId.MOLD_BREAKER, AbilityId.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FLYING, 1.7, 59, AbilityId.AERILATE, AbilityId.AERILATE, AbilityId.AERILATE, 600, 65, 155, 120, 65, 90, 105, 45, 50, 175) + ), + new PokemonSpecies(SpeciesId.TAUROS, 1, false, false, false, "Wild Bull Pokémon", PokemonType.NORMAL, null, 1.4, 88.4, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.SHEER_FORCE, 490, 75, 100, 95, 40, 70, 110, 45, 50, 172, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.MAGIKARP, 1, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.9, 10, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.RATTLED, 200, 20, 10, 55, 15, 20, 80, 255, 50, 40, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.GYARADOS, 1, false, false, false, "Atrocious Pokémon", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 6.5, 305, AbilityId.MOLD_BREAKER, AbilityId.MOLD_BREAKER, AbilityId.MOLD_BREAKER, 640, 95, 155, 109, 70, 130, 81, 45, 50, 189, true) + ), + new PokemonSpecies(SpeciesId.LAPRAS, 1, false, false, false, "Transport Pokémon", PokemonType.WATER, PokemonType.ICE, 2.5, 220, AbilityId.WATER_ABSORB, AbilityId.SHELL_ARMOR, AbilityId.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ICE, 2.5, 220, AbilityId.WATER_ABSORB, AbilityId.SHELL_ARMOR, AbilityId.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ICE, 24, 999.9, AbilityId.SHIELD_DUST, AbilityId.SHIELD_DUST, AbilityId.SHIELD_DUST, 635, 170, 97, 85, 107, 111, 65, 45, 50, 187) + ), + new PokemonSpecies(SpeciesId.DITTO, 1, false, false, false, "Transform Pokémon", PokemonType.NORMAL, null, 0.3, 4, AbilityId.LIMBER, AbilityId.NONE, AbilityId.IMPOSTER, 288, 48, 48, 48, 48, 48, 48, 35, 50, 101, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.EEVEE, 1, false, false, false, "Evolution Pokémon", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, GrowthRate.MEDIUM_FAST, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, false, null, true), + new PokemonForm("Partner", "partner", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 435, 65, 75, 70, 65, 85, 75, 45, 50, 65, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 18, 999.9, AbilityId.PROTEAN, AbilityId.PROTEAN, AbilityId.PROTEAN, 535, 110, 95, 70, 90, 85, 85, 45, 50, 65) + ), + new PokemonSpecies(SpeciesId.VAPOREON, 1, false, false, false, "Bubble Jet Pokémon", PokemonType.WATER, null, 1, 29, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.HYDRATION, 525, 130, 65, 60, 110, 95, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.JOLTEON, 1, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.8, 24.5, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.QUICK_FEET, 525, 65, 65, 60, 110, 95, 130, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.FLAREON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 0.9, 25, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.GUTS, 525, 65, 130, 60, 95, 110, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.PORYGON, 1, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.8, 36.5, AbilityId.TRACE, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 395, 65, 60, 70, 85, 75, 40, 45, 50, 79, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.OMANYTE, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.4, 7.5, AbilityId.SWIFT_SWIM, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 355, 35, 40, 100, 90, 55, 35, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.OMASTAR, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 1, 35, AbilityId.SWIFT_SWIM, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 495, 70, 60, 125, 115, 70, 55, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.KABUTO, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 11.5, AbilityId.SWIFT_SWIM, AbilityId.BATTLE_ARMOR, AbilityId.WEAK_ARMOR, 355, 30, 80, 90, 55, 45, 55, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.KABUTOPS, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 40.5, AbilityId.SWIFT_SWIM, AbilityId.BATTLE_ARMOR, AbilityId.WEAK_ARMOR, 495, 60, 115, 105, 65, 70, 80, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.AERODACTYL, 1, false, false, false, "Fossil Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, AbilityId.ROCK_HEAD, AbilityId.PRESSURE, AbilityId.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, GrowthRate.SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, AbilityId.ROCK_HEAD, AbilityId.PRESSURE, AbilityId.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FLYING, 2.1, 79, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 615, 80, 135, 85, 70, 95, 150, 45, 50, 180) + ), + new PokemonSpecies(SpeciesId.SNORLAX, 1, false, false, false, "Sleeping Pokémon", PokemonType.NORMAL, null, 2.1, 460, AbilityId.IMMUNITY, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.1, 460, AbilityId.IMMUNITY, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 35, 999.9, AbilityId.HARVEST, AbilityId.HARVEST, AbilityId.HARVEST, 640, 210, 135, 70, 90, 115, 20, 25, 50, 189) + ), + new PokemonSpecies(SpeciesId.ARTICUNO, 1, true, false, false, "Freeze Pokémon", PokemonType.ICE, PokemonType.FLYING, 1.7, 55.4, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZAPDOS, 1, true, false, false, "Electric Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.6, 52.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MOLTRES, 1, true, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 2, 60, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FLAME_BODY, 580, 90, 100, 90, 125, 85, 90, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DRATINI, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 1.8, 3.3, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.MARVEL_SCALE, 300, 41, 64, 45, 50, 50, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAGONAIR, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 4, 16.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.MARVEL_SCALE, 420, 61, 84, 65, 70, 70, 70, 45, 35, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAGONITE, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 2.2, 210, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.MULTISCALE, 600, 91, 134, 95, 100, 100, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.MEWTWO, 1, false, true, false, "Genetic Pokémon", PokemonType.PSYCHIC, null, 2, 122, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2, 122, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, false, null, true), + new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.PSYCHIC, PokemonType.FIGHTING, 2.3, 127, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.STEADFAST, 780, 106, 190, 100, 154, 100, 130, 3, 0, 340), + new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.PSYCHIC, null, 1.5, 33, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.INSOMNIA, 780, 106, 150, 70, 194, 120, 140, 3, 0, 340) + ), + new PokemonSpecies(SpeciesId.MEW, 1, false, false, true, "New Species Pokémon", PokemonType.PSYCHIC, null, 0.4, 4, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.CHIKORITA, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 0.9, 6.4, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 318, 45, 49, 65, 49, 65, 45, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BAYLEEF, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 1.2, 15.8, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 405, 60, 62, 80, 63, 80, 60, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MEGANIUM, 2, false, false, false, "Herb Pokémon", PokemonType.GRASS, null, 1.8, 100.5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 525, 80, 82, 100, 83, 100, 80, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.CYNDAQUIL, 2, false, false, false, "Fire Mouse Pokémon", PokemonType.FIRE, null, 0.5, 7.9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 309, 39, 52, 43, 60, 50, 65, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUILAVA, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 0.9, 19, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 405, 58, 64, 58, 80, 65, 80, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TYPHLOSION, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 1.7, 79.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 534, 78, 84, 78, 109, 85, 100, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TOTODILE, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 0.6, 9.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 314, 50, 65, 64, 44, 48, 43, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CROCONAW, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 1.1, 25, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 405, 65, 80, 80, 59, 63, 58, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FERALIGATR, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 2.3, 88.8, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 530, 85, 105, 100, 79, 83, 78, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SENTRET, 2, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.8, 6, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.FRISK, 215, 35, 46, 34, 35, 45, 20, 255, 70, 43, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FURRET, 2, false, false, false, "Long Body Pokémon", PokemonType.NORMAL, null, 1.8, 32.5, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.FRISK, 415, 85, 76, 64, 45, 55, 90, 90, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HOOTHOOT, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 21.2, AbilityId.INSOMNIA, AbilityId.KEEN_EYE, AbilityId.TINTED_LENS, 262, 60, 30, 30, 36, 56, 50, 255, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NOCTOWL, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.6, 40.8, AbilityId.INSOMNIA, AbilityId.KEEN_EYE, AbilityId.TINTED_LENS, 452, 100, 50, 50, 86, 96, 70, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LEDYBA, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 10.8, AbilityId.SWARM, AbilityId.EARLY_BIRD, AbilityId.RATTLED, 265, 40, 20, 30, 40, 80, 55, 255, 70, 53, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.LEDIAN, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.4, 35.6, AbilityId.SWARM, AbilityId.EARLY_BIRD, AbilityId.IRON_FIST, 390, 55, 35, 50, 55, 110, 85, 90, 70, 137, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.SPINARAK, 2, false, false, false, "String Spit Pokémon", PokemonType.BUG, PokemonType.POISON, 0.5, 8.5, AbilityId.SWARM, AbilityId.INSOMNIA, AbilityId.SNIPER, 250, 40, 60, 40, 40, 40, 30, 255, 70, 50, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.ARIADOS, 2, false, false, false, "Long Leg Pokémon", PokemonType.BUG, PokemonType.POISON, 1.1, 33.5, AbilityId.SWARM, AbilityId.INSOMNIA, AbilityId.SNIPER, 400, 70, 90, 70, 60, 70, 40, 90, 70, 140, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.CROBAT, 2, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.8, 75, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 535, 85, 90, 80, 70, 80, 130, 90, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHINCHOU, 2, false, false, false, "Angler Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 0.5, 12, AbilityId.VOLT_ABSORB, AbilityId.ILLUMINATE, AbilityId.WATER_ABSORB, 330, 75, 38, 38, 56, 56, 67, 190, 50, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.LANTURN, 2, false, false, false, "Light Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 1.2, 22.5, AbilityId.VOLT_ABSORB, AbilityId.ILLUMINATE, AbilityId.WATER_ABSORB, 460, 125, 58, 58, 76, 76, 67, 75, 50, 161, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PICHU, 2, false, false, false, "Tiny Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), + new PokemonForm("Spiky-Eared", "spiky", PokemonType.ELECTRIC, null, 1.4, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true) + ), + new PokemonSpecies(SpeciesId.CLEFFA, 2, false, false, false, "Star Shape Pokémon", PokemonType.FAIRY, null, 0.3, 3, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.FRIEND_GUARD, 218, 50, 25, 28, 45, 55, 15, 150, 140, 44, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.IGGLYBUFF, 2, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.3, 1, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRIEND_GUARD, 210, 90, 30, 15, 40, 20, 15, 170, 50, 42, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.TOGEPI, 2, false, false, false, "Spike Ball Pokémon", PokemonType.FAIRY, null, 0.3, 1.5, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 245, 35, 20, 65, 40, 65, 20, 190, 50, 49, GrowthRate.FAST, 87.5, false), + new PokemonSpecies(SpeciesId.TOGETIC, 2, false, false, false, "Happiness Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 0.6, 3.2, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 405, 55, 40, 85, 80, 105, 40, 75, 50, 142, GrowthRate.FAST, 87.5, false), + new PokemonSpecies(SpeciesId.NATU, 2, false, false, false, "Tiny Bird Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.2, 2, AbilityId.SYNCHRONIZE, AbilityId.EARLY_BIRD, AbilityId.MAGIC_BOUNCE, 320, 40, 50, 45, 70, 45, 70, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.XATU, 2, false, false, false, "Mystic Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.5, 15, AbilityId.SYNCHRONIZE, AbilityId.EARLY_BIRD, AbilityId.MAGIC_BOUNCE, 470, 65, 75, 70, 95, 70, 95, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.MAREEP, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.6, 7.8, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 280, 55, 40, 40, 65, 45, 35, 235, 70, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLAAFFY, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.8, 13.3, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 365, 70, 55, 55, 80, 60, 45, 120, 70, 128, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.AMPHAROS, 2, false, false, false, "Light Pokémon", PokemonType.ELECTRIC, null, 1.4, 61.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 61.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, PokemonType.DRAGON, 1.4, 61.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.MOLD_BREAKER, 610, 90, 95, 105, 165, 110, 45, 45, 70, 255) + ), + new PokemonSpecies(SpeciesId.BELLOSSOM, 2, false, false, false, "Flower Pokémon", PokemonType.GRASS, null, 0.4, 5.8, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HEALER, 490, 75, 80, 95, 90, 100, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MARILL, 2, false, false, false, "Aqua Mouse Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.4, 8.5, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 250, 70, 20, 50, 20, 50, 40, 190, 50, 88, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.AZUMARILL, 2, false, false, false, "Aqua Rabbit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.8, 28.5, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 420, 100, 50, 80, 60, 80, 50, 75, 50, 210, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.SUDOWOODO, 2, false, false, false, "Imitation Pokémon", PokemonType.ROCK, null, 1.2, 38, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.RATTLED, 410, 70, 100, 115, 30, 65, 30, 65, 50, 144, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.POLITOED, 2, false, false, false, "Frog Pokémon", PokemonType.WATER, null, 1.1, 33.9, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.DRIZZLE, 500, 90, 75, 75, 90, 100, 70, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.HOPPIP, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.4, 0.5, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 250, 35, 35, 40, 35, 55, 50, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SKIPLOOM, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.6, 1, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 340, 55, 45, 50, 45, 65, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.JUMPLUFF, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.8, 3, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 460, 75, 55, 70, 55, 95, 110, 45, 70, 230, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.AIPOM, 2, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 0.8, 11.5, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.SKILL_LINK, 360, 55, 70, 55, 40, 55, 85, 45, 70, 72, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.SUNKERN, 2, false, false, false, "Seed Pokémon", PokemonType.GRASS, null, 0.3, 1.8, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.EARLY_BIRD, 180, 30, 30, 30, 30, 30, 30, 235, 70, 36, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SUNFLORA, 2, false, false, false, "Sun Pokémon", PokemonType.GRASS, null, 0.8, 8.5, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.EARLY_BIRD, 425, 75, 75, 55, 105, 85, 30, 120, 70, 149, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.YANMA, 2, false, false, false, "Clear Wing Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38, AbilityId.SPEED_BOOST, AbilityId.COMPOUND_EYES, AbilityId.FRISK, 390, 65, 65, 45, 75, 45, 95, 75, 70, 78, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WOOPER, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 8.5, AbilityId.DAMP, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.QUAGSIRE, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.4, 75, AbilityId.DAMP, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 430, 95, 85, 85, 65, 65, 35, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ESPEON, 2, false, false, false, "Sun Pokémon", PokemonType.PSYCHIC, null, 0.9, 26.5, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.MAGIC_BOUNCE, 525, 65, 65, 60, 130, 95, 110, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.UMBREON, 2, false, false, false, "Moonlight Pokémon", PokemonType.DARK, null, 1, 27, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.INNER_FOCUS, 525, 95, 65, 110, 60, 130, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.MURKROW, 2, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 2.1, AbilityId.INSOMNIA, AbilityId.SUPER_LUCK, AbilityId.PRANKSTER, 405, 60, 85, 42, 85, 42, 91, 30, 35, 81, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SLOWKING, 2, false, false, false, "Royal Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2, 79.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 80, 100, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MISDREAVUS, 2, false, false, false, "Screech Pokémon", PokemonType.GHOST, null, 0.7, 1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 435, 60, 60, 60, 85, 85, 85, 45, 35, 87, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.UNOWN, 2, false, false, false, "Symbol Pokémon", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("A", "a", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("B", "b", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("C", "c", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("D", "d", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("E", "e", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("F", "f", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("G", "g", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("H", "h", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("I", "i", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("J", "j", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("K", "k", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("L", "l", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("M", "m", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("N", "n", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("O", "o", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("P", "p", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("Q", "q", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("R", "r", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("S", "s", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("T", "t", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("U", "u", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("V", "v", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("W", "w", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("X", "x", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("Y", "y", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("Z", "z", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("!", "exclamation", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("?", "question", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true) + ), + new PokemonSpecies(SpeciesId.WOBBUFFET, 2, false, false, false, "Patient Pokémon", PokemonType.PSYCHIC, null, 1.3, 28.5, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.TELEPATHY, 405, 190, 33, 58, 33, 58, 33, 45, 50, 142, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.GIRAFARIG, 2, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 41.5, AbilityId.INNER_FOCUS, AbilityId.EARLY_BIRD, AbilityId.SAP_SIPPER, 455, 70, 80, 65, 90, 65, 85, 60, 70, 159, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.PINECO, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.6, 7.2, AbilityId.STURDY, AbilityId.NONE, AbilityId.OVERCOAT, 290, 50, 65, 90, 35, 35, 15, 190, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FORRETRESS, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.2, 125.8, AbilityId.STURDY, AbilityId.NONE, AbilityId.OVERCOAT, 465, 75, 90, 140, 60, 60, 40, 75, 70, 163, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUNSPARCE, 2, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 1.5, 14, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 415, 100, 70, 70, 65, 65, 45, 190, 50, 145, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GLIGAR, 2, false, false, false, "Fly Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.1, 64.8, AbilityId.HYPER_CUTTER, AbilityId.SAND_VEIL, AbilityId.IMMUNITY, 430, 65, 75, 105, 35, 65, 85, 60, 70, 86, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.STEELIX, 2, false, false, false, "Iron Snake Pokémon", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.GROUND, 10.5, 740, AbilityId.SAND_FORCE, AbilityId.SAND_FORCE, AbilityId.SAND_FORCE, 610, 75, 125, 230, 55, 95, 30, 25, 50, 179, true) + ), + new PokemonSpecies(SpeciesId.SNUBBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.8, AbilityId.INTIMIDATE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 300, 60, 80, 50, 40, 40, 30, 190, 70, 60, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.GRANBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.4, 48.7, AbilityId.INTIMIDATE, AbilityId.QUICK_FEET, AbilityId.RATTLED, 450, 90, 120, 75, 60, 60, 45, 75, 70, 158, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.QWILFISH, 2, false, false, false, "Balloon Pokémon", PokemonType.WATER, PokemonType.POISON, 0.5, 3.9, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCIZOR, 2, false, false, false, "Pincer Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.STEEL, 2, 125, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, 600, 70, 150, 140, 65, 100, 75, 25, 50, 175, true) + ), + new PokemonSpecies(SpeciesId.SHUCKLE, 2, false, false, false, "Mold Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.6, 20.5, AbilityId.STURDY, AbilityId.GLUTTONY, AbilityId.CONTRARY, 505, 20, 10, 230, 10, 230, 5, 190, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HERACROSS, 2, false, false, false, "Single Horn Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, AbilityId.SWARM, AbilityId.GUTS, AbilityId.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, AbilityId.SWARM, AbilityId.GUTS, AbilityId.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FIGHTING, 1.7, 62.5, AbilityId.SKILL_LINK, AbilityId.SKILL_LINK, AbilityId.SKILL_LINK, 600, 80, 185, 115, 40, 105, 75, 45, 50, 175, true) + ), + new PokemonSpecies(SpeciesId.SNEASEL, 2, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.KEEN_EYE, AbilityId.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.TEDDIURSA, 2, false, false, false, "Little Bear Pokémon", PokemonType.NORMAL, null, 0.6, 8.8, AbilityId.PICKUP, AbilityId.QUICK_FEET, AbilityId.HONEY_GATHER, 330, 60, 80, 50, 50, 50, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.URSARING, 2, false, false, false, "Hibernator Pokémon", PokemonType.NORMAL, null, 1.8, 125.8, AbilityId.GUTS, AbilityId.QUICK_FEET, AbilityId.UNNERVE, 500, 90, 130, 75, 75, 75, 55, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SLUGMA, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, null, 0.7, 35, AbilityId.MAGMA_ARMOR, AbilityId.FLAME_BODY, AbilityId.WEAK_ARMOR, 250, 40, 40, 40, 70, 40, 20, 190, 70, 50, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MAGCARGO, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 55, AbilityId.MAGMA_ARMOR, AbilityId.FLAME_BODY, AbilityId.WEAK_ARMOR, 430, 60, 50, 120, 90, 80, 30, 75, 70, 151, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWINUB, 2, false, false, false, "Pig Pokémon", PokemonType.ICE, PokemonType.GROUND, 0.4, 6.5, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 250, 50, 50, 40, 30, 30, 50, 225, 50, 50, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PILOSWINE, 2, false, false, false, "Swine Pokémon", PokemonType.ICE, PokemonType.GROUND, 1.1, 55.8, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 450, 100, 100, 80, 60, 60, 50, 75, 50, 158, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.CORSOLA, 2, false, false, false, "Coral Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.6, 5, AbilityId.HUSTLE, AbilityId.NATURAL_CURE, AbilityId.REGENERATOR, 410, 65, 55, 95, 65, 95, 35, 60, 50, 144, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.REMORAID, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.6, 12, AbilityId.HUSTLE, AbilityId.SNIPER, AbilityId.MOODY, 300, 35, 65, 35, 65, 35, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.OCTILLERY, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.9, 28.5, AbilityId.SUCTION_CUPS, AbilityId.SNIPER, AbilityId.MOODY, 480, 75, 105, 75, 105, 75, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.DELIBIRD, 2, false, false, false, "Delivery Pokémon", PokemonType.ICE, PokemonType.FLYING, 0.9, 16, AbilityId.VITAL_SPIRIT, AbilityId.HUSTLE, AbilityId.INSOMNIA, 330, 45, 55, 45, 65, 45, 75, 45, 50, 116, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.MANTINE, 2, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 2.1, 220, AbilityId.SWIFT_SWIM, AbilityId.WATER_ABSORB, AbilityId.WATER_VEIL, 485, 85, 40, 70, 80, 140, 70, 25, 50, 170, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SKARMORY, 2, false, false, false, "Armor Bird Pokémon", PokemonType.STEEL, PokemonType.FLYING, 1.7, 50.5, AbilityId.KEEN_EYE, AbilityId.STURDY, AbilityId.WEAK_ARMOR, 465, 65, 80, 140, 40, 70, 70, 25, 50, 163, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HOUNDOUR, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.6, 10.8, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 330, 45, 60, 30, 80, 50, 65, 120, 35, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HOUNDOOM, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.FIRE, 1.9, 49.5, AbilityId.SOLAR_POWER, AbilityId.SOLAR_POWER, AbilityId.SOLAR_POWER, 600, 75, 90, 90, 140, 90, 115, 45, 35, 175, true) + ), + new PokemonSpecies(SpeciesId.KINGDRA, 2, false, false, false, "Dragon Pokémon", PokemonType.WATER, PokemonType.DRAGON, 1.8, 152, AbilityId.SWIFT_SWIM, AbilityId.SNIPER, AbilityId.DAMP, 540, 75, 95, 95, 95, 95, 85, 45, 50, 270, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PHANPY, 2, false, false, false, "Long Nose Pokémon", PokemonType.GROUND, null, 0.5, 33.5, AbilityId.PICKUP, AbilityId.NONE, AbilityId.SAND_VEIL, 330, 90, 60, 60, 40, 40, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DONPHAN, 2, false, false, false, "Armor Pokémon", PokemonType.GROUND, null, 1.1, 120, AbilityId.STURDY, AbilityId.NONE, AbilityId.SAND_VEIL, 500, 90, 120, 120, 60, 60, 50, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.PORYGON2, 2, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.6, 32.5, AbilityId.TRACE, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 515, 85, 80, 90, 105, 95, 60, 45, 50, 180, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.STANTLER, 2, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, null, 1.4, 71.2, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 465, 73, 95, 62, 85, 65, 85, 45, 70, 163, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SMEARGLE, 2, false, false, false, "Painter Pokémon", PokemonType.NORMAL, null, 1.2, 58, AbilityId.OWN_TEMPO, AbilityId.TECHNICIAN, AbilityId.MOODY, 250, 55, 20, 35, 20, 45, 75, 45, 70, 88, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TYROGUE, 2, false, false, false, "Scuffle Pokémon", PokemonType.FIGHTING, null, 0.7, 21, AbilityId.GUTS, AbilityId.STEADFAST, AbilityId.VITAL_SPIRIT, 210, 35, 35, 35, 35, 35, 35, 75, 50, 42, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.HITMONTOP, 2, false, false, false, "Handstand Pokémon", PokemonType.FIGHTING, null, 1.4, 48, AbilityId.INTIMIDATE, AbilityId.TECHNICIAN, AbilityId.STEADFAST, 455, 50, 95, 95, 35, 110, 70, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.SMOOCHUM, 2, false, false, false, "Kiss Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 0.4, 6, AbilityId.OBLIVIOUS, AbilityId.FOREWARN, AbilityId.HYDRATION, 305, 45, 30, 15, 85, 65, 65, 45, 50, 61, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ELEKID, 2, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 0.6, 23.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 360, 45, 63, 37, 65, 55, 95, 45, 50, 72, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MAGBY, 2, false, false, false, "Live Coal Pokémon", PokemonType.FIRE, null, 0.7, 21.4, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 365, 45, 75, 37, 70, 55, 83, 45, 50, 73, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MILTANK, 2, false, false, false, "Milk Cow Pokémon", PokemonType.NORMAL, null, 1.2, 75.5, AbilityId.THICK_FAT, AbilityId.SCRAPPY, AbilityId.SAP_SIPPER, 490, 95, 80, 105, 40, 70, 100, 45, 50, 172, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.BLISSEY, 2, false, false, false, "Happiness Pokémon", PokemonType.NORMAL, null, 1.5, 46.8, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.HEALER, 540, 255, 10, 10, 75, 135, 55, 30, 140, 608, GrowthRate.FAST, 0, false), + new PokemonSpecies(SpeciesId.RAIKOU, 2, true, false, false, "Thunder Pokémon", PokemonType.ELECTRIC, null, 1.9, 178, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 90, 85, 75, 115, 100, 115, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ENTEI, 2, true, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 2.1, 198, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 115, 115, 85, 90, 75, 100, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SUICUNE, 2, true, false, false, "Aurora Pokémon", PokemonType.WATER, null, 2, 187, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 100, 75, 115, 90, 115, 85, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LARVITAR, 2, false, false, false, "Rock Skin Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.6, 72, AbilityId.GUTS, AbilityId.NONE, AbilityId.SAND_VEIL, 300, 50, 64, 50, 45, 50, 41, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PUPITAR, 2, false, false, false, "Hard Shell Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.2, 152, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 410, 70, 84, 70, 65, 70, 51, 45, 35, 144, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TYRANITAR, 2, false, false, false, "Armor Pokémon", PokemonType.ROCK, PokemonType.DARK, 2, 202, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.DARK, 2, 202, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.DARK, 2.5, 255, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_STREAM, 700, 100, 164, 150, 95, 120, 71, 45, 35, 300) + ), + new PokemonSpecies(SpeciesId.LUGIA, 2, false, true, false, "Diving Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 5.2, 216, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.MULTISCALE, 680, 106, 90, 130, 90, 154, 110, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.HO_OH, 2, false, true, false, "Rainbow Pokémon", PokemonType.FIRE, PokemonType.FLYING, 3.8, 199, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.REGENERATOR, 680, 106, 130, 90, 110, 154, 90, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CELEBI, 2, false, false, true, "Time Travel Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 0.6, 5, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.TREECKO, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.5, 5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 310, 40, 45, 35, 65, 55, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.GROVYLE, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.9, 21.6, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 405, 50, 65, 45, 85, 65, 95, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SCEPTILE, 3, false, false, false, "Forest Pokémon", PokemonType.GRASS, null, 1.7, 52.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, null, 1.7, 52.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.DRAGON, 1.9, 55.2, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 630, 70, 110, 75, 145, 85, 145, 45, 50, 265) + ), + new PokemonSpecies(SpeciesId.TORCHIC, 3, false, false, false, "Chick Pokémon", PokemonType.FIRE, null, 0.4, 2.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 310, 45, 60, 40, 70, 50, 45, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.COMBUSKEN, 3, false, false, false, "Young Fowl Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 19.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 405, 60, 85, 60, 85, 60, 55, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.BLAZIKEN, 3, false, false, false, "Blaze Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, true, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.SPEED_BOOST, 630, 80, 160, 80, 130, 80, 100, 45, 50, 265, true) + ), + new PokemonSpecies(SpeciesId.MUDKIP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, null, 0.4, 7.6, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 310, 50, 70, 50, 50, 50, 40, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MARSHTOMP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.7, 28, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 405, 70, 85, 70, 60, 70, 50, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SWAMPERT, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.GROUND, 1.9, 102, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.SWIFT_SWIM, 635, 100, 150, 110, 95, 110, 70, 45, 50, 268) + ), + new PokemonSpecies(SpeciesId.POOCHYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 0.5, 13.6, AbilityId.RUN_AWAY, AbilityId.QUICK_FEET, AbilityId.RATTLED, 220, 35, 55, 35, 30, 30, 35, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIGHTYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 1, 37, AbilityId.INTIMIDATE, AbilityId.QUICK_FEET, AbilityId.MOXIE, 420, 70, 90, 70, 60, 60, 70, 127, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ZIGZAGOON, 3, false, false, false, "Tiny Raccoon Pokémon", PokemonType.NORMAL, null, 0.4, 17.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LINOONE, 3, false, false, false, "Rushing Pokémon", PokemonType.NORMAL, null, 0.5, 32.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WURMPLE, 3, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 3.6, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 45, 45, 35, 20, 30, 20, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SILCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.6, 10, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEAUTIFLY, 3, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 28.4, AbilityId.SWARM, AbilityId.NONE, AbilityId.RIVALRY, 395, 60, 70, 50, 100, 50, 65, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CASCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 11.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUSTOX, 3, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 31.6, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.COMPOUND_EYES, 385, 60, 50, 70, 50, 90, 65, 45, 70, 193, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.LOTAD, 3, false, false, false, "Water Weed Pokémon", PokemonType.WATER, PokemonType.GRASS, 0.5, 2.6, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 220, 40, 30, 30, 40, 50, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LOMBRE, 3, false, false, false, "Jolly Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.2, 32.5, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 340, 60, 50, 50, 60, 70, 50, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LUDICOLO, 3, false, false, false, "Carefree Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.5, 55, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 480, 80, 70, 70, 90, 100, 70, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SEEDOT, 3, false, false, false, "Acorn Pokémon", PokemonType.GRASS, null, 0.5, 4, AbilityId.CHLOROPHYLL, AbilityId.EARLY_BIRD, AbilityId.PICKPOCKET, 220, 40, 40, 50, 30, 30, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.NUZLEAF, 3, false, false, false, "Wily Pokémon", PokemonType.GRASS, PokemonType.DARK, 1, 28, AbilityId.CHLOROPHYLL, AbilityId.EARLY_BIRD, AbilityId.PICKPOCKET, 340, 70, 70, 40, 60, 40, 60, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SHIFTRY, 3, false, false, false, "Wicked Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 59.6, AbilityId.CHLOROPHYLL, AbilityId.WIND_RIDER, AbilityId.PICKPOCKET, 480, 90, 100, 60, 90, 60, 80, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.TAILLOW, 3, false, false, false, "Tiny Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.3, AbilityId.GUTS, AbilityId.NONE, AbilityId.SCRAPPY, 270, 40, 55, 30, 30, 30, 85, 200, 70, 54, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SWELLOW, 3, false, false, false, "Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 19.8, AbilityId.GUTS, AbilityId.NONE, AbilityId.SCRAPPY, 455, 60, 85, 60, 75, 50, 125, 45, 70, 159, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WINGULL, 3, false, false, false, "Seagull Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.6, 9.5, AbilityId.KEEN_EYE, AbilityId.HYDRATION, AbilityId.RAIN_DISH, 270, 40, 30, 30, 55, 30, 85, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PELIPPER, 3, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.2, 28, AbilityId.KEEN_EYE, AbilityId.DRIZZLE, AbilityId.RAIN_DISH, 440, 60, 50, 100, 95, 70, 65, 45, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RALTS, 3, false, false, false, "Feeling Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.4, 6.6, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 198, 28, 25, 25, 45, 35, 40, 235, 35, 40, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KIRLIA, 3, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.8, 20.2, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 278, 38, 35, 35, 65, 55, 50, 120, 35, 97, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GARDEVOIR, 3, false, false, false, "Embrace Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.PIXILATE, AbilityId.PIXILATE, AbilityId.PIXILATE, 618, 68, 85, 65, 165, 135, 100, 45, 35, 259) + ), + new PokemonSpecies(SpeciesId.SURSKIT, 3, false, false, false, "Pond Skater Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 1.7, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.RAIN_DISH, 269, 40, 30, 32, 50, 52, 65, 200, 70, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MASQUERAIN, 3, false, false, false, "Eyeball Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 3.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.UNNERVE, 454, 70, 60, 62, 100, 82, 80, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SHROOMISH, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, null, 0.4, 4.5, AbilityId.EFFECT_SPORE, AbilityId.POISON_HEAL, AbilityId.QUICK_FEET, 295, 60, 40, 60, 40, 60, 35, 255, 70, 59, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.BRELOOM, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 39.2, AbilityId.EFFECT_SPORE, AbilityId.POISON_HEAL, AbilityId.TECHNICIAN, 460, 60, 130, 80, 60, 60, 70, 90, 70, 161, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.SLAKOTH, 3, false, false, false, "Slacker Pokémon", PokemonType.NORMAL, null, 0.8, 24, AbilityId.TRUANT, AbilityId.NONE, AbilityId.STALL, 280, 60, 60, 60, 35, 35, 30, 255, 70, 56, GrowthRate.SLOW, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.VIGOROTH, 3, false, false, false, "Wild Monkey Pokémon", PokemonType.NORMAL, null, 1.4, 46.5, AbilityId.VITAL_SPIRIT, AbilityId.NONE, AbilityId.INSOMNIA, 440, 80, 80, 80, 55, 55, 90, 120, 70, 154, GrowthRate.SLOW, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.SLAKING, 3, false, false, false, "Lazy Pokémon", PokemonType.NORMAL, null, 2, 130.5, AbilityId.TRUANT, AbilityId.NONE, AbilityId.STALL, 670, 150, 160, 100, 95, 65, 100, 45, 70, 285, GrowthRate.SLOW, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.NINCADA, 3, false, false, false, "Trainee Pokémon", PokemonType.BUG, PokemonType.GROUND, 0.5, 5.5, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.RUN_AWAY, 266, 31, 45, 90, 30, 30, 40, 255, 50, 53, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.NINJASK, 3, false, false, false, "Ninja Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 12, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.INFILTRATOR, 456, 61, 90, 45, 50, 50, 160, 120, 50, 160, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.SHEDINJA, 3, false, false, false, "Shed Pokémon", PokemonType.BUG, PokemonType.GHOST, 0.8, 1.2, AbilityId.WONDER_GUARD, AbilityId.NONE, AbilityId.NONE, 236, 1, 90, 45, 30, 30, 40, 45, 50, 83, GrowthRate.ERRATIC, null, false), + new PokemonSpecies(SpeciesId.WHISMUR, 3, false, false, false, "Whisper Pokémon", PokemonType.NORMAL, null, 0.6, 16.3, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.RATTLED, 240, 64, 51, 23, 51, 23, 28, 190, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LOUDRED, 3, false, false, false, "Big Voice Pokémon", PokemonType.NORMAL, null, 1, 40.5, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.SCRAPPY, 360, 84, 71, 43, 71, 43, 48, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.EXPLOUD, 3, false, false, false, "Loud Noise Pokémon", PokemonType.NORMAL, null, 1.5, 84, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.SCRAPPY, 490, 104, 91, 63, 91, 73, 68, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MAKUHITA, 3, false, false, false, "Guts Pokémon", PokemonType.FIGHTING, null, 1, 86.4, AbilityId.THICK_FAT, AbilityId.GUTS, AbilityId.SHEER_FORCE, 237, 72, 60, 30, 20, 30, 25, 180, 70, 47, GrowthRate.FLUCTUATING, 75, false), + new PokemonSpecies(SpeciesId.HARIYAMA, 3, false, false, false, "Arm Thrust Pokémon", PokemonType.FIGHTING, null, 2.3, 253.8, AbilityId.THICK_FAT, AbilityId.GUTS, AbilityId.SHEER_FORCE, 474, 144, 120, 60, 40, 60, 50, 200, 70, 166, GrowthRate.FLUCTUATING, 75, false), + new PokemonSpecies(SpeciesId.AZURILL, 3, false, false, false, "Polka Dot Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.2, 2, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 190, 50, 20, 40, 20, 40, 20, 150, 50, 38, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.NOSEPASS, 3, false, false, false, "Compass Pokémon", PokemonType.ROCK, null, 1, 97, AbilityId.STURDY, AbilityId.MAGNET_PULL, AbilityId.SAND_FORCE, 375, 30, 45, 135, 45, 90, 30, 255, 70, 75, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SKITTY, 3, false, false, false, "Kitten Pokémon", PokemonType.NORMAL, null, 0.6, 11, AbilityId.CUTE_CHARM, AbilityId.NORMALIZE, AbilityId.WONDER_SKIN, 260, 50, 45, 45, 35, 35, 50, 255, 70, 52, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.DELCATTY, 3, false, false, false, "Prim Pokémon", PokemonType.NORMAL, null, 1.1, 32.6, AbilityId.CUTE_CHARM, AbilityId.NORMALIZE, AbilityId.WONDER_SKIN, 400, 70, 65, 65, 55, 55, 90, 60, 70, 140, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.SABLEYE, 3, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, AbilityId.KEEN_EYE, AbilityId.STALL, AbilityId.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, AbilityId.KEEN_EYE, AbilityId.STALL, AbilityId.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.GHOST, 0.5, 161, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 480, 50, 85, 125, 85, 115, 20, 45, 35, 133) + ), + new PokemonSpecies(SpeciesId.MAWILE, 3, false, false, false, "Deceiver Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.INTIMIDATE, AbilityId.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, GrowthRate.FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.INTIMIDATE, AbilityId.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.FAIRY, 1, 23.5, AbilityId.HUGE_POWER, AbilityId.HUGE_POWER, AbilityId.HUGE_POWER, 480, 50, 105, 125, 55, 95, 50, 45, 50, 133) + ), + new PokemonSpecies(SpeciesId.ARON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.4, 60, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 330, 50, 70, 100, 40, 40, 30, 180, 35, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.LAIRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.9, 120, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 430, 60, 90, 140, 50, 50, 40, 90, 35, 151, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.AGGRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, null, 2.2, 395, AbilityId.FILTER, AbilityId.FILTER, AbilityId.FILTER, 630, 70, 140, 230, 60, 80, 50, 45, 35, 265) + ), + new PokemonSpecies(SpeciesId.MEDITITE, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 0.6, 11.2, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 280, 30, 40, 55, 40, 55, 60, 180, 70, 56, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.MEDICHAM, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.PURE_POWER, 510, 60, 100, 85, 80, 85, 100, 90, 70, 144, true) + ), + new PokemonSpecies(SpeciesId.ELECTRIKE, 3, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.6, 15.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 295, 40, 45, 40, 65, 40, 65, 120, 50, 59, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.MANECTRIC, 3, false, false, false, "Discharge Pokémon", PokemonType.ELECTRIC, null, 1.5, 40.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.5, 40.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, null, 1.8, 44, AbilityId.INTIMIDATE, AbilityId.INTIMIDATE, AbilityId.INTIMIDATE, 575, 70, 75, 80, 135, 80, 135, 45, 50, 166) + ), + new PokemonSpecies(SpeciesId.PLUSLE, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, AbilityId.PLUS, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 405, 60, 50, 40, 85, 75, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MINUN, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, AbilityId.MINUS, AbilityId.NONE, AbilityId.VOLT_ABSORB, 405, 60, 40, 50, 75, 85, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VOLBEAT, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.7, 17.7, AbilityId.ILLUMINATE, AbilityId.SWARM, AbilityId.PRANKSTER, 430, 65, 73, 75, 47, 85, 85, 150, 70, 151, GrowthRate.ERRATIC, 100, false), + new PokemonSpecies(SpeciesId.ILLUMISE, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.6, 17.7, AbilityId.OBLIVIOUS, AbilityId.TINTED_LENS, AbilityId.PRANKSTER, 430, 65, 47, 75, 73, 85, 85, 150, 70, 151, GrowthRate.FLUCTUATING, 0, false), + new PokemonSpecies(SpeciesId.ROSELIA, 3, false, false, false, "Thorn Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.3, 2, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.LEAF_GUARD, 400, 50, 60, 45, 100, 80, 65, 150, 50, 140, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.GULPIN, 3, false, false, false, "Stomach Pokémon", PokemonType.POISON, null, 0.4, 10.3, AbilityId.LIQUID_OOZE, AbilityId.STICKY_HOLD, AbilityId.GLUTTONY, 302, 70, 43, 53, 43, 53, 40, 225, 70, 60, GrowthRate.FLUCTUATING, 50, true), + new PokemonSpecies(SpeciesId.SWALOT, 3, false, false, false, "Poison Bag Pokémon", PokemonType.POISON, null, 1.7, 80, AbilityId.LIQUID_OOZE, AbilityId.STICKY_HOLD, AbilityId.GLUTTONY, 467, 100, 73, 83, 73, 83, 55, 75, 70, 163, GrowthRate.FLUCTUATING, 50, true), + new PokemonSpecies(SpeciesId.CARVANHA, 3, false, false, false, "Savage Pokémon", PokemonType.WATER, PokemonType.DARK, 0.8, 20.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 305, 45, 90, 20, 65, 20, 65, 225, 35, 61, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHARPEDO, 3, false, false, false, "Brutal Pokémon", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 2.5, 130.3, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.STRONG_JAW, 560, 70, 140, 70, 110, 65, 105, 60, 35, 161) + ), + new PokemonSpecies(SpeciesId.WAILMER, 3, false, false, false, "Ball Whale Pokémon", PokemonType.WATER, null, 2, 130, AbilityId.WATER_VEIL, AbilityId.OBLIVIOUS, AbilityId.PRESSURE, 400, 130, 70, 35, 70, 35, 60, 125, 50, 80, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.WAILORD, 3, false, false, false, "Float Whale Pokémon", PokemonType.WATER, null, 14.5, 398, AbilityId.WATER_VEIL, AbilityId.OBLIVIOUS, AbilityId.PRESSURE, 500, 170, 90, 45, 90, 45, 60, 60, 50, 175, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.NUMEL, 3, false, false, false, "Numb Pokémon", PokemonType.FIRE, PokemonType.GROUND, 0.7, 24, AbilityId.OBLIVIOUS, AbilityId.SIMPLE, AbilityId.OWN_TEMPO, 305, 60, 60, 40, 65, 45, 35, 255, 70, 61, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CAMERUPT, 3, false, false, false, "Eruption Pokémon", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, AbilityId.MAGMA_ARMOR, AbilityId.SOLID_ROCK, AbilityId.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, AbilityId.MAGMA_ARMOR, AbilityId.SOLID_ROCK, AbilityId.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.GROUND, 2.5, 320.5, AbilityId.SHEER_FORCE, AbilityId.SHEER_FORCE, AbilityId.SHEER_FORCE, 560, 70, 120, 100, 145, 105, 20, 150, 70, 161) + ), + new PokemonSpecies(SpeciesId.TORKOAL, 3, false, false, false, "Coal Pokémon", PokemonType.FIRE, null, 0.5, 80.4, AbilityId.WHITE_SMOKE, AbilityId.DROUGHT, AbilityId.SHELL_ARMOR, 470, 70, 85, 140, 85, 70, 20, 90, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SPOINK, 3, false, false, false, "Bounce Pokémon", PokemonType.PSYCHIC, null, 0.7, 30.6, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.GLUTTONY, 330, 60, 25, 35, 70, 80, 60, 255, 70, 66, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.GRUMPIG, 3, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.9, 71.5, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.GLUTTONY, 470, 80, 45, 65, 90, 110, 80, 60, 70, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.SPINDA, 3, false, false, false, "Spot Panda Pokémon", PokemonType.NORMAL, null, 1.1, 5, AbilityId.OWN_TEMPO, AbilityId.TANGLED_FEET, AbilityId.CONTRARY, 360, 60, 60, 60, 60, 60, 60, 255, 70, 126, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TRAPINCH, 3, false, false, false, "Ant Pit Pokémon", PokemonType.GROUND, null, 0.7, 15, AbilityId.HYPER_CUTTER, AbilityId.ARENA_TRAP, AbilityId.SHEER_FORCE, 290, 45, 100, 45, 45, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VIBRAVA, 3, false, false, false, "Vibration Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 1.1, 15.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 340, 50, 70, 50, 50, 50, 70, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLYGON, 3, false, false, false, "Mystic Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 2, 82, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 80, 100, 80, 80, 80, 100, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CACNEA, 3, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 0.4, 51.3, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.WATER_ABSORB, 335, 50, 85, 40, 85, 40, 35, 190, 35, 67, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CACTURNE, 3, false, false, false, "Scarecrow Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 77.4, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.WATER_ABSORB, 475, 70, 115, 60, 115, 60, 55, 60, 35, 166, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SWABLU, 3, false, false, false, "Cotton Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.4, 1.2, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 310, 45, 40, 60, 40, 75, 50, 255, 50, 62, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.ALTARIA, 3, false, false, false, "Humming Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, GrowthRate.ERRATIC, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FAIRY, 1.5, 20.6, AbilityId.PIXILATE, AbilityId.NONE, AbilityId.PIXILATE, 590, 75, 110, 110, 110, 105, 80, 45, 50, 172) + ), + new PokemonSpecies(SpeciesId.ZANGOOSE, 3, false, false, false, "Cat Ferret Pokémon", PokemonType.NORMAL, null, 1.3, 40.3, AbilityId.IMMUNITY, AbilityId.NONE, AbilityId.TOXIC_BOOST, 458, 73, 115, 60, 60, 60, 90, 90, 70, 160, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.SEVIPER, 3, false, false, false, "Fang Snake Pokémon", PokemonType.POISON, null, 2.7, 52.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.INFILTRATOR, 458, 73, 100, 60, 100, 60, 65, 90, 70, 160, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.LUNATONE, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1, 168, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 460, 90, 55, 65, 95, 85, 70, 45, 50, 161, GrowthRate.FAST, null, false), + new PokemonSpecies(SpeciesId.SOLROCK, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.2, 154, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 460, 90, 95, 85, 55, 65, 70, 45, 50, 161, GrowthRate.FAST, null, false), + new PokemonSpecies(SpeciesId.BARBOACH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 1.9, AbilityId.OBLIVIOUS, AbilityId.ANTICIPATION, AbilityId.HYDRATION, 288, 50, 48, 43, 46, 41, 60, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WHISCASH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 23.6, AbilityId.OBLIVIOUS, AbilityId.ANTICIPATION, AbilityId.HYDRATION, 468, 110, 78, 73, 76, 71, 60, 75, 50, 164, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CORPHISH, 3, false, false, false, "Ruffian Pokémon", PokemonType.WATER, null, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.ADAPTABILITY, 308, 43, 80, 65, 50, 35, 35, 205, 50, 62, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.CRAWDAUNT, 3, false, false, false, "Rogue Pokémon", PokemonType.WATER, PokemonType.DARK, 1.1, 32.8, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.ADAPTABILITY, 468, 63, 120, 85, 90, 55, 55, 155, 50, 164, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.BALTOY, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 0.5, 21.5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 300, 40, 40, 55, 40, 70, 55, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.CLAYDOL, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 1.5, 108, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 500, 60, 70, 105, 70, 120, 75, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.LILEEP, 3, false, false, false, "Sea Lily Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1, 23.8, AbilityId.SUCTION_CUPS, AbilityId.NONE, AbilityId.STORM_DRAIN, 355, 66, 41, 77, 61, 87, 23, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.CRADILY, 3, false, false, false, "Barnacle Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1.5, 60.4, AbilityId.SUCTION_CUPS, AbilityId.NONE, AbilityId.STORM_DRAIN, 495, 86, 81, 97, 81, 107, 43, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.ANORITH, 3, false, false, false, "Old Shrimp Pokémon", PokemonType.ROCK, PokemonType.BUG, 0.7, 12.5, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.SWIFT_SWIM, 355, 45, 95, 50, 40, 50, 75, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.ARMALDO, 3, false, false, false, "Plate Pokémon", PokemonType.ROCK, PokemonType.BUG, 1.5, 68.2, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.SWIFT_SWIM, 495, 75, 125, 100, 70, 80, 45, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.FEEBAS, 3, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.6, 7.4, AbilityId.SWIFT_SWIM, AbilityId.OBLIVIOUS, AbilityId.ADAPTABILITY, 200, 20, 15, 20, 10, 55, 80, 255, 50, 40, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.MILOTIC, 3, false, false, false, "Tender Pokémon", PokemonType.WATER, null, 6.2, 162, AbilityId.MARVEL_SCALE, AbilityId.COMPETITIVE, AbilityId.CUTE_CHARM, 540, 95, 60, 79, 100, 125, 81, 60, 50, 189, GrowthRate.ERRATIC, 50, true), + new PokemonSpecies(SpeciesId.CASTFORM, 3, false, false, false, "Weather Pokémon", PokemonType.NORMAL, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, false, null, true), + new PokemonForm("Sunny Form", "sunny", PokemonType.FIRE, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), + new PokemonForm("Rainy Form", "rainy", PokemonType.WATER, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), + new PokemonForm("Snowy Form", "snowy", PokemonType.ICE, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147) + ), + new PokemonSpecies(SpeciesId.KECLEON, 3, false, false, false, "Color Swap Pokémon", PokemonType.NORMAL, null, 1, 22, AbilityId.COLOR_CHANGE, AbilityId.NONE, AbilityId.PROTEAN, 440, 60, 90, 70, 60, 120, 40, 200, 70, 154, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHUPPET, 3, false, false, false, "Puppet Pokémon", PokemonType.GHOST, null, 0.6, 2.3, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 295, 44, 75, 35, 63, 33, 45, 225, 35, 59, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.BANETTE, 3, false, false, false, "Marionette Pokémon", PokemonType.GHOST, null, 1.1, 12.5, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, GrowthRate.FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GHOST, null, 1.1, 12.5, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, null, 1.2, 13, AbilityId.PRANKSTER, AbilityId.PRANKSTER, AbilityId.PRANKSTER, 555, 64, 165, 75, 93, 83, 75, 45, 35, 159) + ), + new PokemonSpecies(SpeciesId.DUSKULL, 3, false, false, false, "Requiem Pokémon", PokemonType.GHOST, null, 0.8, 15, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.FRISK, 295, 20, 40, 90, 30, 90, 25, 190, 35, 59, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.DUSCLOPS, 3, false, false, false, "Beckon Pokémon", PokemonType.GHOST, null, 1.6, 30.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FRISK, 455, 40, 70, 130, 60, 130, 25, 90, 35, 159, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TROPIUS, 3, false, false, false, "Fruit Pokémon", PokemonType.GRASS, PokemonType.FLYING, 2, 100, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.HARVEST, 460, 99, 68, 83, 72, 87, 51, 200, 70, 161, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CHIMECHO, 3, false, false, false, "Wind Chime Pokémon", PokemonType.PSYCHIC, null, 0.6, 1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 455, 75, 50, 80, 95, 90, 65, 45, 70, 159, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.ABSOL, 3, false, false, false, "Disaster Pokémon", PokemonType.DARK, null, 1.2, 47, AbilityId.PRESSURE, AbilityId.SUPER_LUCK, AbilityId.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DARK, null, 1.2, 47, AbilityId.PRESSURE, AbilityId.SUPER_LUCK, AbilityId.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, null, 1.2, 49, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 565, 65, 150, 60, 115, 60, 115, 30, 35, 163) + ), + new PokemonSpecies(SpeciesId.WYNAUT, 3, false, false, false, "Bright Pokémon", PokemonType.PSYCHIC, null, 0.6, 14, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.TELEPATHY, 260, 95, 23, 48, 23, 48, 23, 125, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SNORUNT, 3, false, false, false, "Snow Hat Pokémon", PokemonType.ICE, null, 0.7, 16.8, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 300, 50, 50, 50, 50, 50, 50, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GLALIE, 3, false, false, false, "Face Pokémon", PokemonType.ICE, null, 1.5, 256.5, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ICE, null, 1.5, 256.5, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ICE, null, 2.1, 350.2, AbilityId.REFRIGERATE, AbilityId.REFRIGERATE, AbilityId.REFRIGERATE, 580, 80, 120, 80, 120, 80, 100, 75, 50, 168) + ), + new PokemonSpecies(SpeciesId.SPHEAL, 3, false, false, false, "Clap Pokémon", PokemonType.ICE, PokemonType.WATER, 0.8, 39.5, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 290, 70, 40, 50, 55, 50, 25, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SEALEO, 3, false, false, false, "Ball Roll Pokémon", PokemonType.ICE, PokemonType.WATER, 1.1, 87.6, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 410, 90, 60, 70, 75, 70, 45, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WALREIN, 3, false, false, false, "Ice Break Pokémon", PokemonType.ICE, PokemonType.WATER, 1.4, 150.6, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 530, 110, 80, 90, 95, 90, 65, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CLAMPERL, 3, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.4, 52.5, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.RATTLED, 345, 35, 64, 85, 74, 55, 32, 255, 70, 69, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.HUNTAIL, 3, false, false, false, "Deep Sea Pokémon", PokemonType.WATER, null, 1.7, 27, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 485, 55, 104, 105, 94, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.GOREBYSS, 3, false, false, false, "South Sea Pokémon", PokemonType.WATER, null, 1.8, 22.6, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.HYDRATION, 485, 55, 84, 105, 114, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.RELICANTH, 3, false, false, false, "Longevity Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 23.4, AbilityId.SWIFT_SWIM, AbilityId.ROCK_HEAD, AbilityId.STURDY, 485, 100, 90, 130, 45, 65, 55, 25, 50, 170, GrowthRate.SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.LUVDISC, 3, false, false, false, "Rendezvous Pokémon", PokemonType.WATER, null, 0.6, 8.7, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.HYDRATION, 330, 43, 30, 55, 40, 65, 97, 225, 70, 116, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.BAGON, 3, false, false, false, "Rock Head Pokémon", PokemonType.DRAGON, null, 0.6, 42.1, AbilityId.ROCK_HEAD, AbilityId.NONE, AbilityId.SHEER_FORCE, 300, 45, 75, 60, 40, 30, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHELGON, 3, false, false, false, "Endurance Pokémon", PokemonType.DRAGON, null, 1.1, 110.5, AbilityId.ROCK_HEAD, AbilityId.NONE, AbilityId.OVERCOAT, 420, 65, 95, 100, 60, 50, 50, 45, 35, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SALAMENCE, 3, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 1.8, 112.6, AbilityId.AERILATE, AbilityId.NONE, AbilityId.AERILATE, 700, 95, 145, 130, 120, 90, 120, 45, 35, 300) + ), + new PokemonSpecies(SpeciesId.BELDUM, 3, false, false, false, "Iron Ball Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.6, 95.2, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 300, 40, 55, 80, 35, 60, 30, 45, 35, 60, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Frigibax + new PokemonSpecies(SpeciesId.METANG, 3, false, false, false, "Iron Claw Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.2, 202.5, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 420, 60, 75, 100, 55, 80, 50, 25, 35, 147, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Arctibax + new PokemonSpecies(SpeciesId.METAGROSS, 3, false, false, false, "Iron Leg Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 10, 35, 300, GrowthRate.SLOW, null, false, true, //Custom Catchrate, matching Baxcalibur + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 3, 35, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.PSYCHIC, 2.5, 942.9, AbilityId.TOUGH_CLAWS, AbilityId.NONE, AbilityId.TOUGH_CLAWS, 700, 80, 145, 150, 105, 110, 110, 3, 35, 300) + ), + new PokemonSpecies(SpeciesId.REGIROCK, 3, true, false, false, "Rock Peak Pokémon", PokemonType.ROCK, null, 1.7, 230, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.STURDY, 580, 80, 100, 200, 50, 100, 50, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.REGICE, 3, true, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 1.8, 175, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.ICE_BODY, 580, 80, 50, 100, 100, 200, 50, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.REGISTEEL, 3, true, false, false, "Iron Pokémon", PokemonType.STEEL, null, 1.9, 205, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 580, 80, 75, 150, 75, 150, 50, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LATIAS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, GrowthRate.SLOW, 0, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 1.8, 52, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 700, 80, 100, 120, 140, 150, 110, 3, 90, 300) + ), + new PokemonSpecies(SpeciesId.LATIOS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 2.3, 70, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 700, 80, 130, 100, 160, 120, 110, 3, 90, 300) + ), + new PokemonSpecies(SpeciesId.KYOGRE, 3, false, true, false, "Sea Basin Pokémon", PokemonType.WATER, null, 4.5, 352, AbilityId.DRIZZLE, AbilityId.NONE, AbilityId.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 4.5, 352, AbilityId.DRIZZLE, AbilityId.NONE, AbilityId.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, false, null, true), + new PokemonForm("Primal", "primal", PokemonType.WATER, null, 9.8, 430, AbilityId.PRIMORDIAL_SEA, AbilityId.NONE, AbilityId.NONE, 770, 100, 150, 90, 180, 160, 90, 3, 0, 335) + ), + new PokemonSpecies(SpeciesId.GROUDON, 3, false, true, false, "Continent Pokémon", PokemonType.GROUND, null, 3.5, 950, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.5, 950, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, false, null, true), + new PokemonForm("Primal", "primal", PokemonType.GROUND, PokemonType.FIRE, 5, 999.7, AbilityId.DESOLATE_LAND, AbilityId.NONE, AbilityId.NONE, 770, 100, 180, 160, 150, 90, 90, 3, 0, 335) + ), + new PokemonSpecies(SpeciesId.RAYQUAZA, 3, false, true, false, "Sky High Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 3, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 3, 0, 340, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 10.8, 392, AbilityId.DELTA_STREAM, AbilityId.NONE, AbilityId.NONE, 780, 105, 180, 100, 180, 100, 115, 3, 0, 340) + ), + new PokemonSpecies(SpeciesId.JIRACHI, 3, false, false, true, "Wish Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.3, 1.1, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DEOXYS, 3, false, false, true, "DNA Pokémon", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal Forme", "normal", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, false, "", true), + new PokemonForm("Attack Forme", "attack", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 180, 20, 180, 20, 150, 3, 0, 300), + new PokemonForm("Defense Forme", "defense", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 70, 160, 70, 160, 90, 3, 0, 300), + new PokemonForm("Speed Forme", "speed", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 95, 90, 95, 90, 180, 3, 0, 300) + ), + new PokemonSpecies(SpeciesId.TURTWIG, 4, false, false, false, "Tiny Leaf Pokémon", PokemonType.GRASS, null, 0.4, 10.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 318, 55, 68, 64, 45, 55, 31, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.GROTLE, 4, false, false, false, "Grove Pokémon", PokemonType.GRASS, null, 1.1, 97, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 405, 75, 89, 85, 55, 65, 36, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TORTERRA, 4, false, false, false, "Continent Pokémon", PokemonType.GRASS, PokemonType.GROUND, 2.2, 310, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 525, 95, 109, 105, 75, 85, 56, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHIMCHAR, 4, false, false, false, "Chimp Pokémon", PokemonType.FIRE, null, 0.5, 6.2, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 309, 44, 58, 44, 58, 44, 61, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MONFERNO, 4, false, false, false, "Playful Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 22, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 405, 64, 78, 52, 78, 52, 81, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.INFERNAPE, 4, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.2, 55, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 534, 76, 104, 71, 104, 71, 108, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PIPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.4, 5.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 314, 53, 51, 53, 61, 56, 40, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PRINPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.8, 23, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 405, 64, 66, 68, 81, 76, 50, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.EMPOLEON, 4, false, false, false, "Emperor Pokémon", PokemonType.WATER, PokemonType.STEEL, 1.7, 84.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 530, 84, 86, 88, 111, 101, 60, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.STARLY, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.RECKLESS, 245, 40, 55, 30, 30, 30, 60, 255, 70, 49, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.STARAVIA, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15.5, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.RECKLESS, 340, 55, 75, 50, 40, 40, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.STARAPTOR, 4, false, false, false, "Predator Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 24.9, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.RECKLESS, 485, 85, 120, 70, 50, 60, 100, 45, 70, 243, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.BIDOOF, 4, false, false, false, "Plump Mouse Pokémon", PokemonType.NORMAL, null, 0.5, 20, AbilityId.SIMPLE, AbilityId.UNAWARE, AbilityId.MOODY, 250, 59, 45, 40, 35, 40, 31, 255, 70, 50, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.BIBAREL, 4, false, false, false, "Beaver Pokémon", PokemonType.NORMAL, PokemonType.WATER, 1, 31.5, AbilityId.SIMPLE, AbilityId.UNAWARE, AbilityId.MOODY, 410, 79, 85, 60, 55, 60, 71, 127, 70, 144, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.KRICKETOT, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 0.3, 2.2, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.RUN_AWAY, 194, 37, 25, 41, 25, 41, 25, 255, 70, 39, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.KRICKETUNE, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 1, 25.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.TECHNICIAN, 384, 77, 85, 51, 55, 51, 65, 45, 70, 134, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SHINX, 4, false, false, false, "Flash Pokémon", PokemonType.ELECTRIC, null, 0.5, 9.5, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 263, 45, 65, 34, 40, 34, 45, 235, 50, 53, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.LUXIO, 4, false, false, false, "Spark Pokémon", PokemonType.ELECTRIC, null, 0.9, 30.5, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 363, 60, 85, 49, 60, 49, 60, 120, 100, 127, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.LUXRAY, 4, false, false, false, "Gleam Eyes Pokémon", PokemonType.ELECTRIC, null, 1.4, 42, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 523, 80, 120, 79, 95, 79, 70, 45, 50, 262, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.BUDEW, 4, false, false, false, "Bud Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1.2, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.LEAF_GUARD, 280, 40, 30, 35, 50, 70, 55, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ROSERADE, 4, false, false, false, "Bouquet Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.9, 14.5, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.TECHNICIAN, 515, 60, 70, 65, 125, 105, 90, 75, 50, 258, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.CRANIDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 0.9, 31.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHEER_FORCE, 350, 67, 125, 40, 30, 30, 58, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.RAMPARDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 1.6, 102.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHEER_FORCE, 495, 97, 165, 60, 65, 50, 58, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.SHIELDON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 0.5, 57, AbilityId.STURDY, AbilityId.NONE, AbilityId.SOUNDPROOF, 350, 30, 42, 118, 42, 88, 30, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.BASTIODON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.3, 149.5, AbilityId.STURDY, AbilityId.NONE, AbilityId.SOUNDPROOF, 495, 60, 52, 168, 47, 138, 30, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.BURMY, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), + new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), + new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true) + ), + new PokemonSpecies(SpeciesId.WORMADAM, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, false, null, true), + new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, PokemonType.GROUND, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 79, 105, 59, 85, 36, 45, 70, 148, false, null, true), + new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, PokemonType.STEEL, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 69, 95, 69, 95, 36, 45, 70, 148, false, null, true) + ), + new PokemonSpecies(SpeciesId.MOTHIM, 4, false, false, false, "Moth Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.9, 23.3, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 424, 70, 94, 50, 94, 50, 66, 45, 70, 148, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.COMBEE, 4, false, false, false, "Tiny Bee Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.3, 5.5, AbilityId.HONEY_GATHER, AbilityId.NONE, AbilityId.HUSTLE, 244, 30, 30, 42, 30, 42, 70, 120, 50, 49, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.VESPIQUEN, 4, false, false, false, "Beehive Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38.5, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 474, 70, 80, 102, 80, 102, 40, 45, 50, 166, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.PACHIRISU, 4, false, false, false, "EleSquirrel Pokémon", PokemonType.ELECTRIC, null, 0.4, 3.9, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.VOLT_ABSORB, 405, 60, 45, 70, 45, 90, 95, 200, 100, 142, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.BUIZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 0.7, 29.5, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 330, 55, 65, 35, 60, 30, 85, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.FLOATZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 1.1, 33.5, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 495, 85, 105, 55, 85, 50, 115, 75, 70, 173, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CHERUBI, 4, false, false, false, "Cherry Pokémon", PokemonType.GRASS, null, 0.4, 3.3, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.NONE, 275, 45, 35, 45, 62, 53, 35, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHERRIM, 4, false, false, false, "Blossom Pokémon", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Overcast Form", "overcast", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, false, null, true), + new PokemonForm("Sunshine Form", "sunshine", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158) + ), + new PokemonSpecies(SpeciesId.SHELLOS, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("East Sea", "east", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true), + new PokemonForm("West Sea", "west", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true) + ), + new PokemonSpecies(SpeciesId.GASTRODON, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("East Sea", "east", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true), + new PokemonForm("West Sea", "west", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true) + ), + new PokemonSpecies(SpeciesId.AMBIPOM, 4, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 1.2, 20.3, AbilityId.TECHNICIAN, AbilityId.PICKUP, AbilityId.SKILL_LINK, 482, 75, 100, 66, 60, 66, 115, 45, 100, 169, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.DRIFLOON, 4, false, false, false, "Balloon Pokémon", PokemonType.GHOST, PokemonType.FLYING, 0.4, 1.2, AbilityId.AFTERMATH, AbilityId.UNBURDEN, AbilityId.FLARE_BOOST, 348, 90, 50, 34, 60, 44, 70, 125, 50, 70, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.DRIFBLIM, 4, false, false, false, "Blimp Pokémon", PokemonType.GHOST, PokemonType.FLYING, 1.2, 15, AbilityId.AFTERMATH, AbilityId.UNBURDEN, AbilityId.FLARE_BOOST, 498, 150, 80, 44, 90, 54, 80, 60, 50, 174, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.BUNEARY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 0.4, 5.5, AbilityId.RUN_AWAY, AbilityId.KLUTZ, AbilityId.LIMBER, 350, 55, 66, 44, 44, 56, 85, 190, 0, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LOPUNNY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 1.2, 33.3, AbilityId.CUTE_CHARM, AbilityId.KLUTZ, AbilityId.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.2, 33.3, AbilityId.CUTE_CHARM, AbilityId.KLUTZ, AbilityId.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FIGHTING, 1.3, 28.3, AbilityId.SCRAPPY, AbilityId.SCRAPPY, AbilityId.SCRAPPY, 580, 65, 136, 94, 54, 96, 135, 60, 140, 168) + ), + new PokemonSpecies(SpeciesId.MISMAGIUS, 4, false, false, false, "Magical Pokémon", PokemonType.GHOST, null, 0.9, 4.4, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 495, 60, 60, 60, 105, 105, 105, 45, 35, 173, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.HONCHKROW, 4, false, false, false, "Big Boss Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.9, 27.3, AbilityId.INSOMNIA, AbilityId.SUPER_LUCK, AbilityId.MOXIE, 505, 100, 125, 52, 105, 52, 71, 30, 35, 177, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLAMEOW, 4, false, false, false, "Catty Pokémon", PokemonType.NORMAL, null, 0.5, 3.9, AbilityId.LIMBER, AbilityId.OWN_TEMPO, AbilityId.KEEN_EYE, 310, 49, 55, 42, 42, 37, 85, 190, 70, 62, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.PURUGLY, 4, false, false, false, "Tiger Cat Pokémon", PokemonType.NORMAL, null, 1, 43.8, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.DEFIANT, 452, 71, 82, 64, 64, 59, 112, 75, 70, 158, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.CHINGLING, 4, false, false, false, "Bell Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.6, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 285, 45, 30, 50, 65, 50, 45, 120, 70, 57, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.STUNKY, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 0.4, 19.2, AbilityId.STENCH, AbilityId.AFTERMATH, AbilityId.KEEN_EYE, 329, 63, 63, 47, 41, 41, 74, 225, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SKUNTANK, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 38, AbilityId.STENCH, AbilityId.AFTERMATH, AbilityId.KEEN_EYE, 479, 103, 93, 67, 71, 61, 84, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BRONZOR, 4, false, false, false, "Bronze Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.5, 60.5, AbilityId.LEVITATE, AbilityId.HEATPROOF, AbilityId.HEAVY_METAL, 300, 57, 24, 86, 24, 86, 23, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.BRONZONG, 4, false, false, false, "Bronze Bell Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.3, 187, AbilityId.LEVITATE, AbilityId.HEATPROOF, AbilityId.HEAVY_METAL, 500, 67, 89, 116, 79, 116, 33, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.BONSLY, 4, false, false, false, "Bonsai Pokémon", PokemonType.ROCK, null, 0.5, 15, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.RATTLED, 290, 50, 80, 95, 10, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIME_JR, 4, false, false, false, "Mime Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.6, 13, AbilityId.SOUNDPROOF, AbilityId.FILTER, AbilityId.TECHNICIAN, 310, 20, 25, 45, 70, 90, 60, 145, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HAPPINY, 4, false, false, false, "Playhouse Pokémon", PokemonType.NORMAL, null, 0.6, 24.4, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.FRIEND_GUARD, 220, 100, 5, 5, 15, 65, 30, 130, 140, 110, GrowthRate.FAST, 0, false), + new PokemonSpecies(SpeciesId.CHATOT, 4, false, false, false, "Music Note Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 1.9, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 411, 76, 65, 45, 92, 42, 91, 30, 35, 144, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SPIRITOMB, 4, false, false, false, "Forbidden Pokémon", PokemonType.GHOST, PokemonType.DARK, 1, 108, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INFILTRATOR, 485, 50, 92, 108, 92, 108, 35, 100, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GIBLE, 4, false, false, false, "Land Shark Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 0.7, 20.5, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 300, 58, 70, 45, 40, 45, 42, 45, 50, 60, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.GABITE, 4, false, false, false, "Cave Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.4, 56, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 410, 68, 90, 65, 50, 55, 82, 45, 50, 144, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.GARCHOMP, 4, false, false, false, "Mach Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SAND_FORCE, 700, 108, 170, 115, 120, 95, 92, 45, 50, 300, true) + ), + new PokemonSpecies(SpeciesId.MUNCHLAX, 4, false, false, false, "Big Eater Pokémon", PokemonType.NORMAL, null, 0.6, 105, AbilityId.PICKUP, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 390, 135, 85, 40, 40, 85, 5, 50, 50, 78, GrowthRate.SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.RIOLU, 4, false, false, false, "Emanation Pokémon", PokemonType.FIGHTING, null, 0.7, 20.2, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.PRANKSTER, 285, 40, 70, 40, 35, 40, 60, 75, 50, 57, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.LUCARIO, 4, false, false, false, "Aura Pokémon", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.STEEL, 1.3, 57.5, AbilityId.ADAPTABILITY, AbilityId.ADAPTABILITY, AbilityId.ADAPTABILITY, 625, 70, 145, 88, 140, 70, 112, 45, 50, 184) + ), + new PokemonSpecies(SpeciesId.HIPPOPOTAS, 4, false, false, false, "Hippo Pokémon", PokemonType.GROUND, null, 0.8, 49.5, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_FORCE, 330, 68, 72, 78, 38, 42, 32, 140, 50, 66, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.HIPPOWDON, 4, false, false, false, "Heavyweight Pokémon", PokemonType.GROUND, null, 2, 300, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_FORCE, 525, 108, 112, 118, 68, 72, 47, 60, 50, 184, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.SKORUPI, 4, false, false, false, "Scorpion Pokémon", PokemonType.POISON, PokemonType.BUG, 0.8, 12, AbilityId.BATTLE_ARMOR, AbilityId.SNIPER, AbilityId.KEEN_EYE, 330, 40, 50, 90, 30, 55, 65, 120, 50, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAPION, 4, false, false, false, "Ogre Scorpion Pokémon", PokemonType.POISON, PokemonType.DARK, 1.3, 61.5, AbilityId.BATTLE_ARMOR, AbilityId.SNIPER, AbilityId.KEEN_EYE, 500, 70, 90, 110, 60, 75, 95, 45, 50, 175, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CROAGUNK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 0.7, 23, AbilityId.ANTICIPATION, AbilityId.DRY_SKIN, AbilityId.POISON_TOUCH, 300, 48, 61, 40, 61, 40, 50, 140, 100, 60, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.TOXICROAK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.3, 44.4, AbilityId.ANTICIPATION, AbilityId.DRY_SKIN, AbilityId.POISON_TOUCH, 490, 83, 106, 65, 86, 65, 85, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CARNIVINE, 4, false, false, false, "Bug Catcher Pokémon", PokemonType.GRASS, null, 1.4, 27, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 454, 74, 100, 72, 90, 72, 46, 200, 70, 159, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.FINNEON, 4, false, false, false, "Wing Fish Pokémon", PokemonType.WATER, null, 0.4, 7, AbilityId.SWIFT_SWIM, AbilityId.STORM_DRAIN, AbilityId.WATER_VEIL, 330, 49, 49, 56, 49, 61, 66, 190, 70, 66, GrowthRate.ERRATIC, 50, true), + new PokemonSpecies(SpeciesId.LUMINEON, 4, false, false, false, "Neon Pokémon", PokemonType.WATER, null, 1.2, 24, AbilityId.SWIFT_SWIM, AbilityId.STORM_DRAIN, AbilityId.WATER_VEIL, 460, 69, 69, 76, 69, 86, 91, 75, 70, 161, GrowthRate.ERRATIC, 50, true), + new PokemonSpecies(SpeciesId.MANTYKE, 4, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 1, 65, AbilityId.SWIFT_SWIM, AbilityId.WATER_ABSORB, AbilityId.WATER_VEIL, 345, 45, 20, 50, 60, 120, 50, 25, 50, 69, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SNOVER, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 1, 50.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 334, 60, 62, 50, 62, 60, 40, 120, 50, 67, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.ABOMASNOW, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.ICE, 2.7, 185, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SNOW_WARNING, 594, 90, 132, 105, 132, 105, 30, 60, 50, 173, true) + ), + new PokemonSpecies(SpeciesId.WEAVILE, 4, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 1.1, 34, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.PICKPOCKET, 510, 70, 120, 65, 45, 85, 125, 45, 35, 179, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.MAGNEZONE, 4, false, false, false, "Magnet Area Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1.2, 180, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 535, 70, 70, 115, 130, 90, 60, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.LICKILICKY, 4, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.7, 140, AbilityId.OWN_TEMPO, AbilityId.OBLIVIOUS, AbilityId.CLOUD_NINE, 515, 110, 85, 95, 80, 95, 50, 30, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RHYPERIOR, 4, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 2.4, 282.8, AbilityId.LIGHTNING_ROD, AbilityId.SOLID_ROCK, AbilityId.RECKLESS, 535, 115, 140, 130, 55, 55, 40, 30, 50, 268, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.TANGROWTH, 4, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 2, 128.6, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.REGENERATOR, 535, 100, 100, 125, 110, 50, 50, 30, 50, 187, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ELECTIVIRE, 4, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.8, 138.6, AbilityId.MOTOR_DRIVE, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 540, 75, 123, 67, 95, 85, 95, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MAGMORTAR, 4, false, false, false, "Blast Pokémon", PokemonType.FIRE, null, 1.6, 68, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 540, 75, 95, 67, 125, 95, 83, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.TOGEKISS, 4, false, false, false, "Jubilee Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.5, 38, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 545, 85, 50, 95, 120, 115, 80, 30, 50, 273, GrowthRate.FAST, 87.5, false), + new PokemonSpecies(SpeciesId.YANMEGA, 4, false, false, false, "Ogre Darner Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.9, 51.5, AbilityId.SPEED_BOOST, AbilityId.TINTED_LENS, AbilityId.FRISK, 515, 86, 76, 86, 116, 56, 95, 30, 70, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LEAFEON, 4, false, false, false, "Verdant Pokémon", PokemonType.GRASS, null, 1, 25.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 65, 110, 130, 60, 65, 95, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.GLACEON, 4, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.8, 25.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.ICE_BODY, 525, 65, 60, 110, 130, 95, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.GLISCOR, 4, false, false, false, "Fang Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 2, 42.5, AbilityId.HYPER_CUTTER, AbilityId.SAND_VEIL, AbilityId.POISON_HEAL, 510, 75, 95, 125, 45, 75, 95, 30, 70, 179, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MAMOSWINE, 4, false, false, false, "Twin Tusk Pokémon", PokemonType.ICE, PokemonType.GROUND, 2.5, 291, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 530, 110, 130, 80, 70, 60, 80, 50, 50, 265, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.PORYGON_Z, 4, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.9, 34, AbilityId.ADAPTABILITY, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 535, 85, 80, 70, 135, 75, 90, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.GALLADE, 4, false, false, false, "Blade Pokémon", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, AbilityId.STEADFAST, AbilityId.SHARPNESS, AbilityId.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, AbilityId.STEADFAST, AbilityId.SHARPNESS, AbilityId.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 56.4, AbilityId.INNER_FOCUS, AbilityId.INNER_FOCUS, AbilityId.INNER_FOCUS, 618, 68, 165, 95, 65, 115, 110, 45, 35, 259) + ), + new PokemonSpecies(SpeciesId.PROBOPASS, 4, false, false, false, "Compass Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.4, 340, AbilityId.STURDY, AbilityId.MAGNET_PULL, AbilityId.SAND_FORCE, 525, 60, 55, 145, 75, 150, 40, 60, 70, 184, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUSKNOIR, 4, false, false, false, "Gripper Pokémon", PokemonType.GHOST, null, 2.2, 106.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FRISK, 525, 45, 100, 135, 65, 135, 45, 45, 35, 263, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.FROSLASS, 4, false, false, false, "Snow Land Pokémon", PokemonType.ICE, PokemonType.GHOST, 1.3, 26.6, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.CURSED_BODY, 480, 70, 80, 70, 80, 70, 110, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ROTOM, 4, false, false, false, "Plasma Pokémon", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, false, null, true), + new PokemonForm("Heat", "heat", PokemonType.ELECTRIC, PokemonType.FIRE, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Wash", "wash", PokemonType.ELECTRIC, PokemonType.WATER, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Frost", "frost", PokemonType.ELECTRIC, PokemonType.ICE, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Fan", "fan", PokemonType.ELECTRIC, PokemonType.FLYING, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Mow", "mow", PokemonType.ELECTRIC, PokemonType.GRASS, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true) + ), + new PokemonSpecies(SpeciesId.UXIE, 4, true, false, false, "Knowledge Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 75, 75, 130, 75, 130, 95, 3, 140, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MESPRIT, 4, true, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 80, 105, 105, 105, 105, 80, 3, 140, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.AZELF, 4, true, false, false, "Willpower Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 75, 125, 70, 125, 70, 115, 3, 140, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DIALGA, 4, false, true, false, "Temporal Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, false, null, true), + new PokemonForm("Origin Forme", "origin", PokemonType.STEEL, PokemonType.DRAGON, 7, 848.7, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 100, 120, 150, 120, 90, 3, 0, 340) + ), + new PokemonSpecies(SpeciesId.PALKIA, 4, false, true, false, "Spatial Pokémon", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, false, null, true), + new PokemonForm("Origin Forme", "origin", PokemonType.WATER, PokemonType.DRAGON, 6.3, 659, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 100, 100, 150, 120, 120, 3, 0, 340) + ), + new PokemonSpecies(SpeciesId.HEATRAN, 4, true, false, false, "Lava Dome Pokémon", PokemonType.FIRE, PokemonType.STEEL, 1.7, 430, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.FLAME_BODY, 600, 91, 90, 106, 130, 106, 77, 3, 100, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.REGIGIGAS, 4, true, false, false, "Colossal Pokémon", PokemonType.NORMAL, null, 3.7, 420, AbilityId.SLOW_START, AbilityId.NONE, AbilityId.NORMALIZE, 670, 110, 160, 110, 80, 110, 100, 3, 0, 335, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GIRATINA, 4, false, true, false, "Renegade Pokémon", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Altered Forme", "altered", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, false, null, true), + new PokemonForm("Origin Forme", "origin", PokemonType.GHOST, PokemonType.DRAGON, 6.9, 650, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.LEVITATE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340) + ), + new PokemonSpecies(SpeciesId.CRESSELIA, 4, true, false, false, "Lunar Pokémon", PokemonType.PSYCHIC, null, 1.5, 85.6, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 120, 70, 110, 75, 120, 85, 3, 100, 300, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.PHIONE, 4, false, false, true, "Sea Drifter Pokémon", PokemonType.WATER, null, 0.4, 3.1, AbilityId.HYDRATION, AbilityId.NONE, AbilityId.NONE, 480, 80, 80, 80, 80, 80, 80, 30, 70, 240, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MANAPHY, 4, false, false, true, "Seafaring Pokémon", PokemonType.WATER, null, 0.3, 1.4, AbilityId.HYDRATION, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 70, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DARKRAI, 4, false, false, true, "Pitch-Black Pokémon", PokemonType.DARK, null, 1.5, 50.5, AbilityId.BAD_DREAMS, AbilityId.NONE, AbilityId.NONE, 600, 70, 90, 90, 135, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SHAYMIN, 4, false, false, true, "Gratitude Pokémon", PokemonType.GRASS, null, 0.2, 2.1, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false, true, + new PokemonForm("Land Forme", "land", PokemonType.GRASS, null, 0.2, 2.1, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, false, null, true), + new PokemonForm("Sky Forme", "sky", PokemonType.GRASS, PokemonType.FLYING, 0.4, 5.2, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 103, 75, 120, 75, 127, 45, 100, 300) + ), + new PokemonSpecies(SpeciesId.ARCEUS, 4, false, false, true, "Alpha Pokémon", PokemonType.NORMAL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "normal", PokemonType.NORMAL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, true), + new PokemonForm("Fighting", "fighting", PokemonType.FIGHTING, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Flying", "flying", PokemonType.FLYING, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Poison", "poison", PokemonType.POISON, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ground", "ground", PokemonType.GROUND, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Rock", "rock", PokemonType.ROCK, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Bug", "bug", PokemonType.BUG, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ghost", "ghost", PokemonType.GHOST, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Steel", "steel", PokemonType.STEEL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Fire", "fire", PokemonType.FIRE, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Water", "water", PokemonType.WATER, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Grass", "grass", PokemonType.GRASS, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Electric", "electric", PokemonType.ELECTRIC, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Psychic", "psychic", PokemonType.PSYCHIC, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ice", "ice", PokemonType.ICE, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Dragon", "dragon", PokemonType.DRAGON, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Dark", "dark", PokemonType.DARK, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Fairy", "fairy", PokemonType.FAIRY, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("???", "unknown", PokemonType.UNKNOWN, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, false, true) + ), + new PokemonSpecies(SpeciesId.VICTINI, 5, false, false, true, "Victory Pokémon", PokemonType.PSYCHIC, PokemonType.FIRE, 0.4, 4, AbilityId.VICTORY_STAR, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SNIVY, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.6, 8.1, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SERVINE, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.8, 16, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 413, 60, 60, 75, 60, 75, 83, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SERPERIOR, 5, false, false, false, "Regal Pokémon", PokemonType.GRASS, null, 3.3, 63, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TEPIG, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, null, 0.5, 9.9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.THICK_FAT, 308, 65, 63, 45, 45, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PIGNITE, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1, 55.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.THICK_FAT, 418, 90, 93, 55, 70, 55, 55, 45, 70, 146, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.EMBOAR, 5, false, false, false, "Mega Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.6, 150, AbilityId.BLAZE, AbilityId.NONE, AbilityId.RECKLESS, 528, 110, 123, 65, 100, 65, 65, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.OSHAWOTT, 5, false, false, false, "Sea Otter Pokémon", PokemonType.WATER, null, 0.5, 5.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 308, 55, 55, 45, 63, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DEWOTT, 5, false, false, false, "Discipline Pokémon", PokemonType.WATER, null, 0.8, 24.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 413, 75, 75, 60, 83, 60, 60, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SAMUROTT, 5, false, false, false, "Formidable Pokémon", PokemonType.WATER, null, 1.5, 94.6, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 528, 95, 100, 85, 108, 70, 70, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PATRAT, 5, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.5, 11.6, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.ANALYTIC, 255, 45, 55, 39, 35, 39, 42, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WATCHOG, 5, false, false, false, "Lookout Pokémon", PokemonType.NORMAL, null, 1.1, 27, AbilityId.ILLUMINATE, AbilityId.KEEN_EYE, AbilityId.ANALYTIC, 420, 60, 85, 69, 60, 69, 77, 255, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LILLIPUP, 5, false, false, false, "Puppy Pokémon", PokemonType.NORMAL, null, 0.4, 4.1, AbilityId.VITAL_SPIRIT, AbilityId.PICKUP, AbilityId.RUN_AWAY, 275, 45, 60, 45, 25, 45, 55, 255, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HERDIER, 5, false, false, false, "Loyal Dog Pokémon", PokemonType.NORMAL, null, 0.9, 14.7, AbilityId.INTIMIDATE, AbilityId.SAND_RUSH, AbilityId.SCRAPPY, 370, 65, 80, 65, 35, 65, 60, 120, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.STOUTLAND, 5, false, false, false, "Big-Hearted Pokémon", PokemonType.NORMAL, null, 1.2, 61, AbilityId.INTIMIDATE, AbilityId.SAND_RUSH, AbilityId.SCRAPPY, 500, 85, 110, 90, 45, 90, 80, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PURRLOIN, 5, false, false, false, "Devious Pokémon", PokemonType.DARK, null, 0.4, 10.1, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.PRANKSTER, 281, 41, 50, 37, 50, 37, 66, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LIEPARD, 5, false, false, false, "Cruel Pokémon", PokemonType.DARK, null, 1.1, 37.5, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.PRANKSTER, 446, 64, 88, 50, 88, 50, 106, 90, 50, 156, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PANSAGE, 5, false, false, false, "Grass Monkey Pokémon", PokemonType.GRASS, null, 0.6, 10.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.OVERGROW, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SIMISAGE, 5, false, false, false, "Thorn Monkey Pokémon", PokemonType.GRASS, null, 1.1, 30.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.OVERGROW, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.PANSEAR, 5, false, false, false, "High Temp Pokémon", PokemonType.FIRE, null, 0.6, 11, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.BLAZE, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SIMISEAR, 5, false, false, false, "Ember Pokémon", PokemonType.FIRE, null, 1, 28, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.BLAZE, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.PANPOUR, 5, false, false, false, "Spray Pokémon", PokemonType.WATER, null, 0.6, 13.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.TORRENT, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SIMIPOUR, 5, false, false, false, "Geyser Pokémon", PokemonType.WATER, null, 1, 29, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.TORRENT, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.MUNNA, 5, false, false, false, "Dream Eater Pokémon", PokemonType.PSYCHIC, null, 0.6, 23.3, AbilityId.FOREWARN, AbilityId.SYNCHRONIZE, AbilityId.TELEPATHY, 292, 76, 25, 45, 67, 55, 24, 190, 50, 58, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.MUSHARNA, 5, false, false, false, "Drowsing Pokémon", PokemonType.PSYCHIC, null, 1.1, 60.5, AbilityId.FOREWARN, AbilityId.SYNCHRONIZE, AbilityId.TELEPATHY, 487, 116, 55, 85, 107, 95, 29, 75, 50, 170, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.PIDOVE, 5, false, false, false, "Tiny Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.1, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 264, 50, 55, 50, 36, 30, 43, 255, 50, 53, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TRANQUILL, 5, false, false, false, "Wild Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 358, 62, 77, 62, 50, 42, 65, 120, 50, 125, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.UNFEZANT, 5, false, false, false, "Proud Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 29, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 488, 80, 115, 80, 65, 55, 93, 45, 50, 244, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.BLITZLE, 5, false, false, false, "Electrified Pokémon", PokemonType.ELECTRIC, null, 0.8, 29.8, AbilityId.LIGHTNING_ROD, AbilityId.MOTOR_DRIVE, AbilityId.SAP_SIPPER, 295, 45, 60, 32, 50, 32, 76, 190, 70, 59, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ZEBSTRIKA, 5, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.6, 79.5, AbilityId.LIGHTNING_ROD, AbilityId.MOTOR_DRIVE, AbilityId.SAP_SIPPER, 497, 75, 100, 63, 80, 63, 116, 75, 70, 174, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ROGGENROLA, 5, false, false, false, "Mantle Pokémon", PokemonType.ROCK, null, 0.4, 18, AbilityId.STURDY, AbilityId.WEAK_ARMOR, AbilityId.SAND_FORCE, 280, 55, 75, 85, 25, 25, 15, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.BOLDORE, 5, false, false, false, "Ore Pokémon", PokemonType.ROCK, null, 0.9, 102, AbilityId.STURDY, AbilityId.WEAK_ARMOR, AbilityId.SAND_FORCE, 390, 70, 105, 105, 50, 40, 20, 120, 50, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GIGALITH, 5, false, false, false, "Compressed Pokémon", PokemonType.ROCK, null, 1.7, 260, AbilityId.STURDY, AbilityId.SAND_STREAM, AbilityId.SAND_FORCE, 515, 85, 135, 130, 60, 80, 25, 45, 50, 258, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WOOBAT, 5, false, false, false, "Bat Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.4, 2.1, AbilityId.UNAWARE, AbilityId.KLUTZ, AbilityId.SIMPLE, 323, 65, 45, 43, 55, 43, 72, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWOOBAT, 5, false, false, false, "Courting Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.9, 10.5, AbilityId.UNAWARE, AbilityId.KLUTZ, AbilityId.SIMPLE, 425, 67, 57, 55, 77, 55, 114, 45, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DRILBUR, 5, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.3, 8.5, AbilityId.SAND_RUSH, AbilityId.SAND_FORCE, AbilityId.MOLD_BREAKER, 328, 60, 85, 40, 30, 45, 68, 120, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.EXCADRILL, 5, false, false, false, "Subterrene Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 40.4, AbilityId.SAND_RUSH, AbilityId.SAND_FORCE, AbilityId.MOLD_BREAKER, 508, 110, 135, 60, 50, 65, 88, 60, 50, 178, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AUDINO, 5, false, false, false, "Hearing Pokémon", PokemonType.NORMAL, null, 1.1, 31, AbilityId.HEALER, AbilityId.REGENERATOR, AbilityId.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, GrowthRate.FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.1, 31, AbilityId.HEALER, AbilityId.REGENERATOR, AbilityId.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FAIRY, 1.5, 32, AbilityId.REGENERATOR, AbilityId.REGENERATOR, AbilityId.REGENERATOR, 545, 103, 60, 126, 80, 126, 50, 255, 50, 390) + ), + new PokemonSpecies(SpeciesId.TIMBURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 0.6, 12.5, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 305, 75, 80, 55, 25, 35, 35, 180, 70, 61, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.GURDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.2, 40, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 405, 85, 105, 85, 40, 50, 40, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.CONKELDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.4, 87, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 505, 105, 140, 95, 55, 65, 45, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.TYMPOLE, 5, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.5, 4.5, AbilityId.SWIFT_SWIM, AbilityId.HYDRATION, AbilityId.WATER_ABSORB, 294, 50, 50, 40, 50, 40, 64, 255, 50, 59, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PALPITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.8, 17, AbilityId.SWIFT_SWIM, AbilityId.HYDRATION, AbilityId.WATER_ABSORB, 384, 75, 65, 55, 65, 55, 69, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SEISMITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 62, AbilityId.SWIFT_SWIM, AbilityId.POISON_TOUCH, AbilityId.WATER_ABSORB, 509, 105, 95, 75, 85, 75, 74, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.THROH, 5, false, false, false, "Judo Pokémon", PokemonType.FIGHTING, null, 1.3, 55.5, AbilityId.GUTS, AbilityId.INNER_FOCUS, AbilityId.MOLD_BREAKER, 465, 120, 100, 85, 30, 85, 45, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.SAWK, 5, false, false, false, "Karate Pokémon", PokemonType.FIGHTING, null, 1.4, 51, AbilityId.STURDY, AbilityId.INNER_FOCUS, AbilityId.MOLD_BREAKER, 465, 75, 125, 75, 30, 75, 85, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.SEWADDLE, 5, false, false, false, "Sewing Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 2.5, AbilityId.SWARM, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 310, 45, 53, 70, 40, 60, 42, 255, 70, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SWADLOON, 5, false, false, false, "Leaf-Wrapped Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 7.3, AbilityId.LEAF_GUARD, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 380, 55, 63, 90, 50, 80, 42, 120, 70, 133, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LEAVANNY, 5, false, false, false, "Nurturing Pokémon", PokemonType.BUG, PokemonType.GRASS, 1.2, 20.5, AbilityId.SWARM, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 500, 75, 103, 80, 70, 80, 92, 45, 70, 250, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VENIPEDE, 5, false, false, false, "Centipede Pokémon", PokemonType.BUG, PokemonType.POISON, 0.4, 5.3, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 260, 30, 45, 59, 30, 39, 57, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WHIRLIPEDE, 5, false, false, false, "Curlipede Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 58.5, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 360, 40, 55, 99, 40, 79, 47, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SCOLIPEDE, 5, false, false, false, "Megapede Pokémon", PokemonType.BUG, PokemonType.POISON, 2.5, 200.5, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 485, 60, 100, 89, 55, 69, 112, 45, 50, 243, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.COTTONEE, 5, false, false, false, "Cotton Puff Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.3, 0.6, AbilityId.PRANKSTER, AbilityId.INFILTRATOR, AbilityId.CHLOROPHYLL, 280, 40, 27, 60, 37, 50, 66, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WHIMSICOTT, 5, false, false, false, "Windveiled Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.7, 6.6, AbilityId.PRANKSTER, AbilityId.INFILTRATOR, AbilityId.CHLOROPHYLL, 480, 60, 67, 85, 77, 75, 116, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PETILIL, 5, false, false, false, "Bulb Pokémon", PokemonType.GRASS, null, 0.5, 6.6, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 280, 45, 35, 50, 70, 50, 30, 190, 50, 56, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.LILLIGANT, 5, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 1.1, 16.3, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 480, 70, 60, 75, 110, 75, 90, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.BASCULIN, 5, false, false, false, "Hostile Pokémon", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Red-Striped Form", "red-striped", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), + new PokemonForm("Blue-Striped Form", "blue-striped", PokemonType.WATER, null, 1, 18, AbilityId.ROCK_HEAD, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), + new PokemonForm("White-Striped Form", "white-striped", PokemonType.WATER, null, 1, 18, AbilityId.RATTLED, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true) + ), + new PokemonSpecies(SpeciesId.SANDILE, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 0.7, 15.2, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 292, 50, 72, 35, 35, 35, 65, 180, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KROKOROK, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 1, 33.4, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 351, 60, 82, 45, 45, 45, 74, 90, 50, 123, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KROOKODILE, 5, false, false, false, "Intimidation Pokémon", PokemonType.GROUND, PokemonType.DARK, 1.5, 96.3, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 519, 95, 117, 80, 65, 70, 92, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DARUMAKA, 5, false, false, false, "Zen Charm Pokémon", PokemonType.FIRE, null, 0.6, 37.5, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DARMANITAN, 5, false, false, false, "Blazing Pokémon", PokemonType.FIRE, null, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Standard Mode", "", PokemonType.FIRE, null, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), + new PokemonForm("Zen Mode", "zen", PokemonType.FIRE, PokemonType.PSYCHIC, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 540, 105, 30, 105, 140, 105, 55, 60, 50, 189) + ), + new PokemonSpecies(SpeciesId.MARACTUS, 5, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 1, 28, AbilityId.WATER_ABSORB, AbilityId.CHLOROPHYLL, AbilityId.STORM_DRAIN, 461, 75, 86, 67, 106, 67, 60, 255, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DWEBBLE, 5, false, false, false, "Rock Inn Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.3, 14.5, AbilityId.STURDY, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 325, 50, 65, 85, 35, 35, 55, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRUSTLE, 5, false, false, false, "Stone Home Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.4, 200, AbilityId.STURDY, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 485, 70, 105, 125, 65, 75, 45, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCRAGGY, 5, false, false, false, "Shedding Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 0.6, 11.8, AbilityId.SHED_SKIN, AbilityId.MOXIE, AbilityId.INTIMIDATE, 348, 50, 75, 70, 35, 70, 48, 180, 35, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCRAFTY, 5, false, false, false, "Hoodlum Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 1.1, 30, AbilityId.SHED_SKIN, AbilityId.MOXIE, AbilityId.INTIMIDATE, 488, 65, 90, 115, 45, 115, 58, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SIGILYPH, 5, false, false, false, "Avianoid Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.4, 14, AbilityId.WONDER_SKIN, AbilityId.MAGIC_GUARD, AbilityId.TINTED_LENS, 490, 72, 58, 80, 103, 80, 97, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.YAMASK, 5, false, false, false, "Spirit Pokémon", PokemonType.GHOST, null, 0.5, 1.5, AbilityId.MUMMY, AbilityId.NONE, AbilityId.NONE, 303, 38, 30, 85, 55, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.COFAGRIGUS, 5, false, false, false, "Coffin Pokémon", PokemonType.GHOST, null, 1.7, 76.5, AbilityId.MUMMY, AbilityId.NONE, AbilityId.NONE, 483, 58, 50, 145, 95, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TIRTOUGA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.7, 16.5, AbilityId.SOLID_ROCK, AbilityId.STURDY, AbilityId.SWIFT_SWIM, 355, 54, 78, 103, 53, 45, 22, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.CARRACOSTA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 1.2, 81, AbilityId.SOLID_ROCK, AbilityId.STURDY, AbilityId.SWIFT_SWIM, 495, 74, 108, 133, 83, 65, 32, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.ARCHEN, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.5, 9.5, AbilityId.DEFEATIST, AbilityId.NONE, AbilityId.WIMP_OUT, 401, 55, 112, 45, 74, 45, 70, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden + new PokemonSpecies(SpeciesId.ARCHEOPS, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.4, 32, AbilityId.DEFEATIST, AbilityId.NONE, AbilityId.EMERGENCY_EXIT, 567, 75, 140, 65, 112, 65, 110, 45, 50, 177, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden + new PokemonSpecies(SpeciesId.TRUBBISH, 5, false, false, false, "Trash Bag Pokémon", PokemonType.POISON, null, 0.6, 31, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.AFTERMATH, 329, 50, 50, 62, 40, 62, 65, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GARBODOR, 5, false, false, false, "Trash Heap Pokémon", PokemonType.POISON, null, 1.9, 107.3, AbilityId.STENCH, AbilityId.WEAK_ARMOR, AbilityId.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.POISON, null, 1.9, 107.3, AbilityId.STENCH, AbilityId.WEAK_ARMOR, AbilityId.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.POISON, PokemonType.STEEL, 21, 999.9, AbilityId.TOXIC_DEBRIS, AbilityId.TOXIC_DEBRIS, AbilityId.TOXIC_DEBRIS, 574, 115, 121, 102, 81, 102, 53, 60, 50, 166) + ), + new PokemonSpecies(SpeciesId.ZORUA, 5, false, false, false, "Tricky Fox Pokémon", PokemonType.DARK, null, 0.7, 12.5, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 330, 40, 65, 40, 80, 40, 65, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.ZOROARK, 5, false, false, false, "Illusion Fox Pokémon", PokemonType.DARK, null, 1.6, 81.1, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 510, 60, 105, 60, 120, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MINCCINO, 5, false, false, false, "Chinchilla Pokémon", PokemonType.NORMAL, null, 0.4, 5.8, AbilityId.CUTE_CHARM, AbilityId.TECHNICIAN, AbilityId.SKILL_LINK, 300, 55, 50, 40, 40, 40, 75, 255, 50, 60, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.CINCCINO, 5, false, false, false, "Scarf Pokémon", PokemonType.NORMAL, null, 0.5, 7.5, AbilityId.CUTE_CHARM, AbilityId.TECHNICIAN, AbilityId.SKILL_LINK, 470, 75, 95, 60, 65, 60, 115, 60, 50, 165, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.GOTHITA, 5, false, false, false, "Fixation Pokémon", PokemonType.PSYCHIC, null, 0.4, 5.8, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 290, 45, 30, 50, 55, 65, 45, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 25, false), + new PokemonSpecies(SpeciesId.GOTHORITA, 5, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.7, 18, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 390, 60, 45, 70, 75, 85, 55, 100, 50, 137, GrowthRate.MEDIUM_SLOW, 25, false), + new PokemonSpecies(SpeciesId.GOTHITELLE, 5, false, false, false, "Astral Body Pokémon", PokemonType.PSYCHIC, null, 1.5, 44, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 490, 70, 55, 95, 95, 110, 65, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 25, false), + new PokemonSpecies(SpeciesId.SOLOSIS, 5, false, false, false, "Cell Pokémon", PokemonType.PSYCHIC, null, 0.3, 1, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 290, 45, 30, 40, 105, 50, 20, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DUOSION, 5, false, false, false, "Mitosis Pokémon", PokemonType.PSYCHIC, null, 0.6, 8, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 370, 65, 40, 50, 125, 60, 30, 100, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.REUNICLUS, 5, false, false, false, "Multiplying Pokémon", PokemonType.PSYCHIC, null, 1, 20.1, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 490, 110, 65, 75, 125, 85, 30, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DUCKLETT, 5, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.5, 5.5, AbilityId.KEEN_EYE, AbilityId.BIG_PECKS, AbilityId.HYDRATION, 305, 62, 44, 50, 44, 50, 55, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWANNA, 5, false, false, false, "White Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.3, 24.2, AbilityId.KEEN_EYE, AbilityId.BIG_PECKS, AbilityId.HYDRATION, 473, 75, 87, 63, 87, 63, 98, 45, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VANILLITE, 5, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.4, 5.7, AbilityId.ICE_BODY, AbilityId.SNOW_CLOAK, AbilityId.WEAK_ARMOR, 305, 36, 50, 50, 65, 60, 44, 255, 50, 61, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.VANILLISH, 5, false, false, false, "Icy Snow Pokémon", PokemonType.ICE, null, 1.1, 41, AbilityId.ICE_BODY, AbilityId.SNOW_CLOAK, AbilityId.WEAK_ARMOR, 395, 51, 65, 65, 80, 75, 59, 120, 50, 138, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.VANILLUXE, 5, false, false, false, "Snowstorm Pokémon", PokemonType.ICE, null, 1.3, 57.5, AbilityId.ICE_BODY, AbilityId.SNOW_WARNING, AbilityId.WEAK_ARMOR, 535, 71, 95, 85, 110, 95, 79, 45, 50, 268, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DEERLING, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), + new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), + new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), + new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true) + ), + new PokemonSpecies(SpeciesId.SAWSBUCK, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), + new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), + new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), + new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true) + ), + new PokemonSpecies(SpeciesId.EMOLGA, 5, false, false, false, "Sky Squirrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 5, AbilityId.STATIC, AbilityId.NONE, AbilityId.MOTOR_DRIVE, 428, 55, 75, 60, 75, 60, 103, 200, 50, 150, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KARRABLAST, 5, false, false, false, "Clamping Pokémon", PokemonType.BUG, null, 0.5, 5.9, AbilityId.SWARM, AbilityId.SHED_SKIN, AbilityId.NO_GUARD, 315, 50, 75, 45, 40, 45, 60, 200, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ESCAVALIER, 5, false, false, false, "Cavalry Pokémon", PokemonType.BUG, PokemonType.STEEL, 1, 33, AbilityId.SWARM, AbilityId.SHELL_ARMOR, AbilityId.OVERCOAT, 495, 70, 135, 105, 60, 105, 20, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FOONGUS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.REGENERATOR, 294, 69, 55, 45, 55, 55, 15, 190, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AMOONGUSS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.6, 10.5, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.REGENERATOR, 464, 114, 85, 70, 85, 80, 30, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FRILLISH, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 1.2, 33, AbilityId.WATER_ABSORB, AbilityId.CURSED_BODY, AbilityId.DAMP, 335, 55, 40, 50, 65, 85, 40, 190, 50, 67, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.JELLICENT, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 2.2, 135, AbilityId.WATER_ABSORB, AbilityId.CURSED_BODY, AbilityId.DAMP, 480, 100, 60, 70, 85, 105, 60, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ALOMOMOLA, 5, false, false, false, "Caring Pokémon", PokemonType.WATER, null, 1.2, 31.6, AbilityId.HEALER, AbilityId.HYDRATION, AbilityId.REGENERATOR, 470, 165, 75, 80, 40, 45, 65, 75, 70, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.JOLTIK, 5, false, false, false, "Attaching Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.1, 0.6, AbilityId.COMPOUND_EYES, AbilityId.UNNERVE, AbilityId.SWARM, 319, 50, 47, 50, 57, 50, 65, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALVANTULA, 5, false, false, false, "EleSpider Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.8, 14.3, AbilityId.COMPOUND_EYES, AbilityId.UNNERVE, AbilityId.SWARM, 472, 70, 77, 60, 97, 60, 108, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FERROSEED, 5, false, false, false, "Thorn Seed Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.6, 18.8, AbilityId.IRON_BARBS, AbilityId.NONE, AbilityId.ANTICIPATION, 305, 44, 50, 91, 24, 86, 10, 255, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FERROTHORN, 5, false, false, false, "Thorn Pod Pokémon", PokemonType.GRASS, PokemonType.STEEL, 1, 110, AbilityId.IRON_BARBS, AbilityId.NONE, AbilityId.ANTICIPATION, 489, 74, 94, 131, 54, 116, 20, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KLINK, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.3, 21, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 300, 40, 55, 70, 45, 60, 30, 130, 50, 60, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.KLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 51, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 440, 60, 80, 95, 70, 85, 50, 60, 50, 154, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.KLINKLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 81, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 520, 60, 100, 115, 70, 85, 90, 30, 50, 260, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.TYNAMO, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 0.2, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 275, 35, 55, 40, 45, 40, 60, 190, 70, 55, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EELEKTRIK, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 1.2, 22, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 405, 65, 85, 70, 75, 70, 40, 60, 70, 142, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EELEKTROSS, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 2.1, 80.5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 515, 85, 115, 80, 105, 80, 50, 30, 70, 258, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ELGYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 0.5, 9, AbilityId.TELEPATHY, AbilityId.SYNCHRONIZE, AbilityId.ANALYTIC, 335, 55, 55, 55, 85, 55, 30, 255, 50, 67, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEHEEYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 1, 34.5, AbilityId.TELEPATHY, AbilityId.SYNCHRONIZE, AbilityId.ANALYTIC, 485, 75, 75, 75, 125, 95, 40, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LITWICK, 5, false, false, false, "Candle Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.3, 3.1, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 275, 50, 30, 55, 65, 55, 20, 190, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LAMPENT, 5, false, false, false, "Lamp Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.6, 13, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 370, 60, 40, 60, 95, 60, 55, 90, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CHANDELURE, 5, false, false, false, "Luring Pokémon", PokemonType.GHOST, PokemonType.FIRE, 1, 34.3, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 520, 60, 55, 90, 145, 90, 80, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.AXEW, 5, false, false, false, "Tusk Pokémon", PokemonType.DRAGON, null, 0.6, 18, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 320, 46, 87, 60, 30, 40, 57, 75, 35, 64, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.FRAXURE, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1, 36, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 410, 66, 117, 70, 40, 50, 67, 60, 35, 144, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HAXORUS, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1.8, 105.5, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 540, 76, 147, 90, 60, 70, 97, 45, 35, 270, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CUBCHOO, 5, false, false, false, "Chill Pokémon", PokemonType.ICE, null, 0.5, 8.5, AbilityId.SNOW_CLOAK, AbilityId.SLUSH_RUSH, AbilityId.RATTLED, 305, 55, 70, 40, 60, 40, 40, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEARTIC, 5, false, false, false, "Freezing Pokémon", PokemonType.ICE, null, 2.6, 260, AbilityId.SNOW_CLOAK, AbilityId.SLUSH_RUSH, AbilityId.SWIFT_SWIM, 505, 95, 130, 80, 70, 80, 50, 60, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRYOGONAL, 5, false, false, false, "Crystallizing Pokémon", PokemonType.ICE, null, 1.1, 148, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 515, 80, 50, 50, 95, 135, 105, 25, 50, 180, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.SHELMET, 5, false, false, false, "Snail Pokémon", PokemonType.BUG, null, 0.4, 7.7, AbilityId.HYDRATION, AbilityId.SHELL_ARMOR, AbilityId.OVERCOAT, 305, 50, 40, 85, 40, 65, 25, 200, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ACCELGOR, 5, false, false, false, "Shell Out Pokémon", PokemonType.BUG, null, 0.8, 25.3, AbilityId.HYDRATION, AbilityId.STICKY_HOLD, AbilityId.UNBURDEN, 495, 80, 70, 40, 100, 60, 145, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.STUNFISK, 5, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.ELECTRIC, 0.7, 11, AbilityId.STATIC, AbilityId.LIMBER, AbilityId.SAND_VEIL, 471, 109, 66, 84, 81, 99, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIENFOO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 0.9, 20, AbilityId.INNER_FOCUS, AbilityId.REGENERATOR, AbilityId.RECKLESS, 350, 45, 85, 50, 55, 50, 65, 180, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MIENSHAO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 1.4, 35.5, AbilityId.INNER_FOCUS, AbilityId.REGENERATOR, AbilityId.RECKLESS, 510, 65, 125, 60, 95, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRUDDIGON, 5, false, false, false, "Cave Pokémon", PokemonType.DRAGON, null, 1.6, 139, AbilityId.ROUGH_SKIN, AbilityId.SHEER_FORCE, AbilityId.MOLD_BREAKER, 485, 77, 120, 90, 60, 90, 48, 45, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOLETT, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1, 92, AbilityId.IRON_FIST, AbilityId.KLUTZ, AbilityId.NO_GUARD, 303, 59, 74, 50, 35, 50, 35, 190, 50, 61, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.GOLURK, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 2.8, 330, AbilityId.IRON_FIST, AbilityId.KLUTZ, AbilityId.NO_GUARD, 483, 89, 124, 80, 55, 80, 55, 90, 50, 169, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.PAWNIARD, 5, false, false, false, "Sharp Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 0.5, 10.2, AbilityId.DEFIANT, AbilityId.INNER_FOCUS, AbilityId.PRESSURE, 340, 45, 85, 70, 40, 40, 60, 120, 35, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BISHARP, 5, false, false, false, "Sword Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 1.6, 70, AbilityId.DEFIANT, AbilityId.INNER_FOCUS, AbilityId.PRESSURE, 490, 65, 125, 100, 60, 70, 70, 45, 35, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BOUFFALANT, 5, false, false, false, "Bash Buffalo Pokémon", PokemonType.NORMAL, null, 1.6, 94.6, AbilityId.RECKLESS, AbilityId.SAP_SIPPER, AbilityId.SOUNDPROOF, 490, 95, 110, 95, 40, 95, 55, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RUFFLET, 5, false, false, false, "Eaglet Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 10.5, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.HUSTLE, 350, 70, 83, 50, 37, 50, 60, 190, 50, 70, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.BRAVIARY, 5, false, false, false, "Valiant Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 41, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.DEFIANT, 510, 100, 123, 75, 57, 75, 80, 60, 50, 179, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.VULLABY, 5, false, false, false, "Diapered Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 9, AbilityId.BIG_PECKS, AbilityId.OVERCOAT, AbilityId.WEAK_ARMOR, 370, 70, 55, 75, 45, 65, 60, 190, 35, 74, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.MANDIBUZZ, 5, false, false, false, "Bone Vulture Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.2, 39.5, AbilityId.BIG_PECKS, AbilityId.OVERCOAT, AbilityId.WEAK_ARMOR, 510, 110, 65, 105, 55, 95, 80, 60, 35, 179, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.HEATMOR, 5, false, false, false, "Anteater Pokémon", PokemonType.FIRE, null, 1.4, 58, AbilityId.GLUTTONY, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, 484, 85, 97, 66, 105, 66, 65, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DURANT, 5, false, false, false, "Iron Ant Pokémon", PokemonType.BUG, PokemonType.STEEL, 0.3, 33, AbilityId.SWARM, AbilityId.HUSTLE, AbilityId.TRUANT, 484, 58, 109, 112, 48, 48, 109, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEINO, 5, false, false, false, "Irate Pokémon", PokemonType.DARK, PokemonType.DRAGON, 0.8, 17.3, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.NONE, 300, 52, 65, 50, 45, 50, 38, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ZWEILOUS, 5, false, false, false, "Hostile Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.4, 50, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.NONE, 420, 72, 85, 70, 65, 70, 58, 45, 35, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HYDREIGON, 5, false, false, false, "Brutal Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.8, 160, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 92, 105, 90, 125, 90, 98, 45, 35, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.LARVESTA, 5, false, false, false, "Torch Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.1, 28.8, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.SWARM, 360, 55, 85, 55, 50, 55, 60, 45, 50, 72, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.VOLCARONA, 5, false, false, false, "Sun Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.6, 46, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.SWARM, 550, 85, 60, 65, 135, 105, 100, 15, 50, 275, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.COBALION, 5, true, false, false, "Iron Will Pokémon", PokemonType.STEEL, PokemonType.FIGHTING, 2.1, 250, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 90, 129, 90, 72, 108, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TERRAKION, 5, true, false, false, "Cavern Pokémon", PokemonType.ROCK, PokemonType.FIGHTING, 1.9, 260, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 129, 90, 72, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.VIRIZION, 5, true, false, false, "Grassland Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 2, 200, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 90, 72, 90, 129, 108, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TORNADUS, 5, true, false, false, "Cyclone Pokémon", PokemonType.FLYING, null, 1.5, 63, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FLYING, null, 1.5, 63, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.FLYING, null, 1.4, 63, AbilityId.REGENERATOR, AbilityId.NONE, AbilityId.REGENERATOR, 580, 79, 100, 80, 110, 90, 121, 3, 90, 290) + ), + new PokemonSpecies(SpeciesId.THUNDURUS, 5, true, false, false, "Bolt Strike Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.ELECTRIC, PokemonType.FLYING, 3, 61, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.VOLT_ABSORB, 580, 79, 105, 70, 145, 80, 101, 3, 90, 290) + ), + new PokemonSpecies(SpeciesId.RESHIRAM, 5, false, true, false, "Vast White Pokémon", PokemonType.DRAGON, PokemonType.FIRE, 3.2, 330, AbilityId.TURBOBLAZE, AbilityId.NONE, AbilityId.NONE, 680, 100, 120, 100, 150, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZEKROM, 5, false, true, false, "Deep Black Pokémon", PokemonType.DRAGON, PokemonType.ELECTRIC, 2.9, 345, AbilityId.TERAVOLT, AbilityId.NONE, AbilityId.NONE, 680, 100, 150, 120, 120, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LANDORUS, 5, true, false, false, "Abundance Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.GROUND, PokemonType.FLYING, 1.3, 68, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.INTIMIDATE, 600, 89, 145, 90, 105, 80, 91, 3, 90, 300) + ), + new PokemonSpecies(SpeciesId.KYUREM, 5, false, true, false, "Boundary Pokémon", PokemonType.DRAGON, PokemonType.ICE, 3, 325, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.ICE, 3, 325, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, false, null, true), + new PokemonForm("Black", "black", PokemonType.DRAGON, PokemonType.ICE, 3.3, 325, AbilityId.TERAVOLT, AbilityId.NONE, AbilityId.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 350), + new PokemonForm("White", "white", PokemonType.DRAGON, PokemonType.ICE, 3.6, 325, AbilityId.TURBOBLAZE, AbilityId.NONE, AbilityId.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 350) + ), + new PokemonSpecies(SpeciesId.KELDEO, 5, false, false, true, "Colt Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false, true, + new PokemonForm("Ordinary Form", "ordinary", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, false, null, true), + new PokemonForm("Resolute", "resolute", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290) + ), + new PokemonSpecies(SpeciesId.MELOETTA, 5, false, false, true, "Melody Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Aria Forme", "aria", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, false, null, true), + new PokemonForm("Pirouette Forme", "pirouette", PokemonType.NORMAL, PokemonType.FIGHTING, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 128, 90, 77, 77, 128, 3, 100, 300, false, null, true) + ), + new PokemonSpecies(SpeciesId.GENESECT, 5, false, false, true, "Paleozoic Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, false, null, true), + new PokemonForm("Shock Drive", "shock", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), + new PokemonForm("Burn Drive", "burn", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), + new PokemonForm("Chill Drive", "chill", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), + new PokemonForm("Douse Drive", "douse", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300) + ), + new PokemonSpecies(SpeciesId.CHESPIN, 6, false, false, false, "Spiny Nut Pokémon", PokemonType.GRASS, null, 0.4, 9, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 313, 56, 61, 65, 48, 45, 38, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUILLADIN, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, null, 0.7, 29, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 405, 61, 78, 95, 56, 58, 57, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHESNAUGHT, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 530, 88, 107, 122, 74, 75, 64, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FENNEKIN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.4, 9.4, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BRAIXEN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1, 14.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DELPHOX, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 39, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, null, true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.TORRENT, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true) + ), + new PokemonSpecies(SpeciesId.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, null, true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.NONE, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", true) + ), + new PokemonSpecies(SpeciesId.GRENINJA, 6, false, false, false, "Ninja Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, null, true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.BATTLE_BOND, AbilityId.NONE, AbilityId.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, "", true), + new PokemonForm("Ash", "ash", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.BATTLE_BOND, AbilityId.NONE, AbilityId.NONE, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265) + ), + new PokemonSpecies(SpeciesId.BUNNELBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, null, 0.4, 5, AbilityId.PICKUP, AbilityId.CHEEK_POUCH, AbilityId.HUGE_POWER, 237, 38, 36, 38, 32, 36, 57, 255, 50, 47, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DIGGERSBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, PokemonType.GROUND, 1, 42.4, AbilityId.PICKUP, AbilityId.CHEEK_POUCH, AbilityId.HUGE_POWER, 423, 85, 56, 77, 50, 77, 78, 127, 50, 148, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FLETCHLING, 6, false, false, false, "Tiny Robin Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.7, AbilityId.BIG_PECKS, AbilityId.NONE, AbilityId.GALE_WINGS, 278, 45, 50, 43, 40, 38, 62, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLETCHINDER, 6, false, false, false, "Ember Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.7, 16, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.GALE_WINGS, 382, 62, 73, 55, 56, 52, 84, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TALONFLAME, 6, false, false, false, "Scorching Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.2, 24.5, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.GALE_WINGS, 499, 78, 81, 71, 74, 69, 126, 45, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SCATTERBUG, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true) + ), + new PokemonSpecies(SpeciesId.SPEWPA, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.SHED_SKIN, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true) + ), + new PokemonSpecies(SpeciesId.VIVILLON, 6, false, false, false, "Scale Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("River Pattern", "river", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true) + ), + new PokemonSpecies(SpeciesId.LITLEO, 6, false, false, false, "Lion Cub Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 0.6, 13.5, AbilityId.RIVALRY, AbilityId.UNNERVE, AbilityId.MOXIE, 369, 62, 50, 58, 73, 54, 72, 220, 70, 74, GrowthRate.MEDIUM_SLOW, 12.5, false), + new PokemonSpecies(SpeciesId.PYROAR, 6, false, false, false, "Royal Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 1.5, 81.5, AbilityId.RIVALRY, AbilityId.UNNERVE, AbilityId.MOXIE, 507, 86, 68, 72, 109, 66, 106, 65, 70, 177, GrowthRate.MEDIUM_SLOW, 12.5, true), + new PokemonSpecies(SpeciesId.FLABEBE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true) + ), + new PokemonSpecies(SpeciesId.FLOETTE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true) + ), + new PokemonSpecies(SpeciesId.FLORGES, 6, false, false, false, "Garden Pokémon", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true) + ), + new PokemonSpecies(SpeciesId.SKIDDO, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 0.9, 31, AbilityId.SAP_SIPPER, AbilityId.NONE, AbilityId.GRASS_PELT, 350, 66, 65, 48, 62, 57, 52, 200, 70, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOGOAT, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 1.7, 91, AbilityId.SAP_SIPPER, AbilityId.NONE, AbilityId.GRASS_PELT, 531, 123, 100, 62, 97, 81, 68, 45, 70, 186, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PANCHAM, 6, false, false, false, "Playful Pokémon", PokemonType.FIGHTING, null, 0.6, 8, AbilityId.IRON_FIST, AbilityId.MOLD_BREAKER, AbilityId.SCRAPPY, 348, 67, 82, 62, 46, 48, 43, 220, 50, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PANGORO, 6, false, false, false, "Daunting Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 2.1, 136, AbilityId.IRON_FIST, AbilityId.MOLD_BREAKER, AbilityId.SCRAPPY, 495, 95, 124, 78, 69, 71, 58, 65, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FURFROU, 6, false, false, false, "Poodle Pokémon", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Natural Form", "", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Heart Trim", "heart", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Star Trim", "star", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Diamond Trim", "diamond", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Debutante Trim", "debutante", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Matron Trim", "matron", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Dandy Trim", "dandy", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("La Reine Trim", "la-reine", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Kabuki Trim", "kabuki", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Pharaoh Trim", "pharaoh", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true) + ), + new PokemonSpecies(SpeciesId.ESPURR, 6, false, false, false, "Restraint Pokémon", PokemonType.PSYCHIC, null, 0.3, 3.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.OWN_TEMPO, 355, 62, 48, 54, 63, 60, 68, 190, 50, 71, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MEOWSTIC, 6, false, false, false, "Constraint Pokémon", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, "", true), + new PokemonForm("Female", "female", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.COMPETITIVE, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, null, true) + ), + new PokemonSpecies(SpeciesId.HONEDGE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 2, AbilityId.NO_GUARD, AbilityId.NONE, AbilityId.NONE, 325, 45, 80, 100, 35, 37, 28, 180, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DOUBLADE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 4.5, AbilityId.NO_GUARD, AbilityId.NONE, AbilityId.NONE, 448, 59, 110, 150, 45, 49, 35, 90, 50, 157, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AEGISLASH, 6, false, false, false, "Royal Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Shield Forme", "shield", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, false, "", true), + new PokemonForm("Blade Forme", "blade", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 140, 50, 140, 50, 60, 45, 50, 250) + ), + new PokemonSpecies(SpeciesId.SPRITZEE, 6, false, false, false, "Perfume Pokémon", PokemonType.FAIRY, null, 0.2, 0.5, AbilityId.HEALER, AbilityId.NONE, AbilityId.AROMA_VEIL, 341, 78, 52, 60, 63, 65, 23, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AROMATISSE, 6, false, false, false, "Fragrance Pokémon", PokemonType.FAIRY, null, 0.8, 15.5, AbilityId.HEALER, AbilityId.NONE, AbilityId.AROMA_VEIL, 462, 101, 72, 72, 99, 89, 29, 140, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWIRLIX, 6, false, false, false, "Cotton Candy Pokémon", PokemonType.FAIRY, null, 0.4, 3.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.UNBURDEN, 341, 62, 48, 66, 59, 57, 49, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SLURPUFF, 6, false, false, false, "Meringue Pokémon", PokemonType.FAIRY, null, 0.8, 5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.UNBURDEN, 480, 82, 80, 86, 85, 75, 72, 140, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.INKAY, 6, false, false, false, "Revolving Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 0.4, 3.5, AbilityId.CONTRARY, AbilityId.SUCTION_CUPS, AbilityId.INFILTRATOR, 288, 53, 54, 53, 37, 46, 45, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MALAMAR, 6, false, false, false, "Overturning Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 1.5, 47, AbilityId.CONTRARY, AbilityId.SUCTION_CUPS, AbilityId.INFILTRATOR, 482, 86, 92, 88, 68, 75, 73, 80, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BINACLE, 6, false, false, false, "Two-Handed Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 31, AbilityId.TOUGH_CLAWS, AbilityId.SNIPER, AbilityId.PICKPOCKET, 306, 42, 52, 67, 39, 56, 50, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BARBARACLE, 6, false, false, false, "Collective Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 96, AbilityId.TOUGH_CLAWS, AbilityId.SNIPER, AbilityId.PICKPOCKET, 500, 72, 105, 115, 54, 86, 68, 45, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SKRELP, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.WATER, 0.5, 7.3, AbilityId.POISON_POINT, AbilityId.POISON_TOUCH, AbilityId.ADAPTABILITY, 320, 50, 60, 60, 60, 60, 30, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DRAGALGE, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.DRAGON, 1.8, 81.5, AbilityId.POISON_POINT, AbilityId.POISON_TOUCH, AbilityId.ADAPTABILITY, 494, 65, 75, 90, 97, 123, 44, 55, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CLAUNCHER, 6, false, false, false, "Water Gun Pokémon", PokemonType.WATER, null, 0.5, 8.3, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.NONE, 330, 50, 53, 62, 58, 63, 44, 225, 50, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CLAWITZER, 6, false, false, false, "Howitzer Pokémon", PokemonType.WATER, null, 1.3, 35.3, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.NONE, 500, 71, 73, 88, 120, 89, 59, 55, 50, 100, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HELIOPTILE, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 0.5, 6, AbilityId.DRY_SKIN, AbilityId.SAND_VEIL, AbilityId.SOLAR_POWER, 289, 44, 38, 33, 61, 43, 70, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HELIOLISK, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 1, 21, AbilityId.DRY_SKIN, AbilityId.SAND_VEIL, AbilityId.SOLAR_POWER, 481, 62, 55, 52, 109, 94, 109, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TYRUNT, 6, false, false, false, "Royal Heir Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 0.8, 26, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.STURDY, 362, 58, 89, 77, 45, 45, 48, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.TYRANTRUM, 6, false, false, false, "Despot Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 2.5, 270, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.ROCK_HEAD, 521, 82, 121, 119, 69, 59, 71, 45, 50, 182, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.AMAURA, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 1.3, 25.2, AbilityId.REFRIGERATE, AbilityId.NONE, AbilityId.SNOW_WARNING, 362, 77, 59, 50, 67, 63, 46, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.AURORUS, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 2.7, 225, AbilityId.REFRIGERATE, AbilityId.NONE, AbilityId.SNOW_WARNING, 521, 123, 77, 72, 99, 92, 58, 45, 50, 104, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SYLVEON, 6, false, false, false, "Intertwining Pokémon", PokemonType.FAIRY, null, 1, 23.5, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.PIXILATE, 525, 95, 65, 65, 110, 130, 60, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.HAWLUCHA, 6, false, false, false, "Wrestling Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 0.8, 21.5, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.MOLD_BREAKER, 500, 78, 92, 75, 74, 63, 118, 100, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEDENNE, 6, false, false, false, "Antenna Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 0.2, 2.2, AbilityId.CHEEK_POUCH, AbilityId.PICKUP, AbilityId.PLUS, 431, 67, 58, 57, 81, 67, 101, 180, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CARBINK, 6, false, false, false, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.3, 5.7, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.STURDY, 500, 50, 50, 150, 50, 150, 50, 60, 50, 100, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GOOMY, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.3, 2.8, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 300, 45, 50, 35, 55, 75, 40, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SLIGGOO, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.8, 17.5, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 452, 68, 75, 53, 83, 113, 60, 45, 35, 158, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GOODRA, 6, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 2, 150.5, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 600, 90, 100, 70, 110, 150, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KLEFKI, 6, false, false, false, "Key Ring Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.2, 3, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.MAGICIAN, 470, 57, 80, 91, 80, 87, 75, 75, 50, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.PHANTUMP, 6, false, false, false, "Stump Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 7, AbilityId.NATURAL_CURE, AbilityId.FRISK, AbilityId.HARVEST, 309, 43, 70, 48, 50, 60, 38, 120, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TREVENANT, 6, false, false, false, "Elder Tree Pokémon", PokemonType.GHOST, PokemonType.GRASS, 1.5, 71, AbilityId.NATURAL_CURE, AbilityId.FRISK, AbilityId.HARVEST, 474, 85, 110, 76, 65, 82, 56, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PUMPKABOO, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, false, null, true), + new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.3, 3.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 44, 66, 70, 44, 55, 56, 120, 50, 67, false, "", true), + new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 0.5, 7.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 54, 66, 70, 44, 55, 46, 120, 50, 67, false, "", true), + new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 0.8, 15, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 59, 66, 70, 44, 55, 41, 120, 50, 67, false, "", true) + ), + new PokemonSpecies(SpeciesId.GOURGEIST, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, false, null, true), + new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.7, 9.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 55, 85, 122, 58, 75, 99, 60, 50, 173, false, "", true), + new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 1.1, 14, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 75, 95, 122, 58, 75, 69, 60, 50, 173, false, "", true), + new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 1.7, 39, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 85, 100, 122, 58, 75, 54, 60, 50, 173, false, "", true) + ), + new PokemonSpecies(SpeciesId.BERGMITE, 6, false, false, false, "Ice Chunk Pokémon", PokemonType.ICE, null, 1, 99.5, AbilityId.OWN_TEMPO, AbilityId.ICE_BODY, AbilityId.STURDY, 304, 55, 69, 85, 32, 35, 28, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AVALUGG, 6, false, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 2, 505, AbilityId.OWN_TEMPO, AbilityId.ICE_BODY, AbilityId.STURDY, 514, 95, 117, 184, 44, 46, 28, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NOIBAT, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 0.5, 8, AbilityId.FRISK, AbilityId.INFILTRATOR, AbilityId.TELEPATHY, 245, 40, 30, 35, 45, 40, 55, 190, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NOIVERN, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 1.5, 85, AbilityId.FRISK, AbilityId.INFILTRATOR, AbilityId.TELEPATHY, 535, 85, 70, 80, 97, 80, 123, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.XERNEAS, 6, false, true, false, "Life Pokémon", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Neutral Mode", "neutral", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, false, null, true), + new PokemonForm("Active Mode", "active", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340) + ), + new PokemonSpecies(SpeciesId.YVELTAL, 6, false, true, false, "Destruction Pokémon", PokemonType.DARK, PokemonType.FLYING, 5.8, 203, AbilityId.DARK_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZYGARDE, 6, false, true, false, "Order Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("50% Forme", "50", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), + new PokemonForm("10% Forme", "10", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, null, true), + new PokemonForm("50% Forme Power Construct", "50-pc", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), + new PokemonForm("10% Forme Power Construct", "10-pc", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, "10", true), + new PokemonForm("Complete Forme (50% PC)", "complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354), + new PokemonForm("Complete Forme (10% PC)", "10-complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354, false, "complete") + ), + new PokemonSpecies(SpeciesId.DIANCIE, 6, false, false, true, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FAIRY, 1.1, 27.8, AbilityId.MAGIC_BOUNCE, AbilityId.NONE, AbilityId.NONE, 700, 50, 160, 110, 160, 110, 110, 3, 50, 300) + ), + new PokemonSpecies(SpeciesId.HOOPA, 6, false, false, true, "Mischief Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Hoopa Confined", "", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, false, null, true), + new PokemonForm("Hoopa Unbound", "unbound", PokemonType.PSYCHIC, PokemonType.DARK, 6.5, 490, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 680, 80, 160, 60, 170, 130, 80, 3, 100, 340) + ), + new PokemonSpecies(SpeciesId.VOLCANION, 6, false, false, true, "Steam Pokémon", PokemonType.FIRE, PokemonType.WATER, 1.7, 195, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 120, 130, 90, 70, 3, 100, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ROWLET, 7, false, false, false, "Grass Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.3, 1.5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 320, 68, 55, 55, 50, 50, 42, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DARTRIX, 7, false, false, false, "Blade Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.7, 16, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 420, 78, 75, 75, 70, 70, 52, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DECIDUEYE, 7, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.6, 36.6, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 530, 78, 107, 75, 100, 100, 70, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.LITTEN, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.4, 4.3, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 320, 45, 65, 40, 60, 40, 70, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TORRACAT, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.7, 25, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 420, 65, 85, 50, 80, 50, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.INCINEROAR, 7, false, false, false, "Heel Pokémon", PokemonType.FIRE, PokemonType.DARK, 1.8, 83, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 530, 95, 115, 90, 80, 90, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.POPPLIO, 7, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 0.4, 7.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 320, 50, 54, 54, 66, 56, 40, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BRIONNE, 7, false, false, false, "Pop Star Pokémon", PokemonType.WATER, null, 0.6, 17.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 420, 60, 69, 69, 91, 81, 50, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PRIMARINA, 7, false, false, false, "Soloist Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.8, 44, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 530, 80, 74, 74, 126, 116, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PIKIPEK, 7, false, false, false, "Woodpecker Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.2, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.PICKUP, 265, 35, 75, 30, 30, 30, 65, 255, 70, 53, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TRUMBEAK, 7, false, false, false, "Bugle Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 14.8, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.PICKUP, 355, 55, 85, 50, 40, 50, 75, 120, 70, 124, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOUCANNON, 7, false, false, false, "Cannon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 26, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.SHEER_FORCE, 485, 80, 120, 75, 75, 75, 60, 45, 70, 243, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.YUNGOOS, 7, false, false, false, "Loitering Pokémon", PokemonType.NORMAL, null, 0.4, 6, AbilityId.STAKEOUT, AbilityId.STRONG_JAW, AbilityId.ADAPTABILITY, 253, 48, 70, 30, 30, 30, 45, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GUMSHOOS, 7, false, false, false, "Stakeout Pokémon", PokemonType.NORMAL, null, 0.7, 14.2, AbilityId.STAKEOUT, AbilityId.STRONG_JAW, AbilityId.ADAPTABILITY, 418, 88, 110, 60, 55, 60, 45, 127, 70, 146, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GRUBBIN, 7, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 4.4, AbilityId.SWARM, AbilityId.NONE, AbilityId.NONE, 300, 47, 62, 45, 55, 45, 46, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHARJABUG, 7, false, false, false, "Battery Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.5, 10.5, AbilityId.BATTERY, AbilityId.NONE, AbilityId.NONE, 400, 57, 82, 95, 55, 75, 36, 120, 50, 140, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VIKAVOLT, 7, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 1.5, 45, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 500, 77, 70, 90, 145, 75, 43, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRABRAWLER, 7, false, false, false, "Boxing Pokémon", PokemonType.FIGHTING, null, 0.6, 7, AbilityId.HYPER_CUTTER, AbilityId.IRON_FIST, AbilityId.ANGER_POINT, 338, 47, 82, 57, 42, 47, 63, 225, 70, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRABOMINABLE, 7, false, false, false, "Woolly Crab Pokémon", PokemonType.FIGHTING, PokemonType.ICE, 1.7, 180, AbilityId.HYPER_CUTTER, AbilityId.IRON_FIST, AbilityId.ANGER_POINT, 478, 97, 132, 77, 62, 67, 43, 60, 70, 167, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ORICORIO, 7, false, false, false, "Dancing Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, GrowthRate.MEDIUM_FAST, 25, false, false, + new PokemonForm("Baile Style", "baile", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, "", true), + new PokemonForm("Pom-Pom Style", "pompom", PokemonType.ELECTRIC, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), + new PokemonForm("Pau Style", "pau", PokemonType.PSYCHIC, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), + new PokemonForm("Sensu Style", "sensu", PokemonType.GHOST, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true) + ), + new PokemonSpecies(SpeciesId.CUTIEFLY, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.1, 0.2, AbilityId.HONEY_GATHER, AbilityId.SHIELD_DUST, AbilityId.SWEET_VEIL, 304, 40, 45, 40, 55, 40, 84, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RIBOMBEE, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.2, 0.5, AbilityId.HONEY_GATHER, AbilityId.SHIELD_DUST, AbilityId.SWEET_VEIL, 464, 60, 55, 60, 95, 70, 124, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ROCKRUFF, 7, false, false, false, "Puppy Pokémon", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, null, true), + new PokemonForm("Own Tempo", "own-tempo", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.OWN_TEMPO, AbilityId.NONE, AbilityId.OWN_TEMPO, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, "", true) + ), + new PokemonSpecies(SpeciesId.LYCANROC, 7, false, false, false, "Wolf Pokémon", PokemonType.ROCK, null, 0.8, 25, AbilityId.KEEN_EYE, AbilityId.SAND_RUSH, AbilityId.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Midday Form", "midday", PokemonType.ROCK, null, 0.8, 25, AbilityId.KEEN_EYE, AbilityId.SAND_RUSH, AbilityId.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, false, "", true), + new PokemonForm("Midnight Form", "midnight", PokemonType.ROCK, null, 1.1, 25, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.NO_GUARD, 487, 85, 115, 75, 55, 75, 82, 90, 50, 170, false, null, true), + new PokemonForm("Dusk Form", "dusk", PokemonType.ROCK, null, 0.8, 25, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 487, 75, 117, 65, 55, 65, 110, 90, 50, 170, false, null, true) + ), + new PokemonSpecies(SpeciesId.WISHIWASHI, 7, false, false, false, "Small Fry Pokémon", PokemonType.WATER, null, 0.2, 0.3, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, GrowthRate.FAST, 50, false, false, + new PokemonForm("Solo Form", "", PokemonType.WATER, null, 0.2, 0.3, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, false, null, true), + new PokemonForm("School", "school", PokemonType.WATER, null, 8.2, 78.6, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 620, 45, 140, 130, 140, 135, 30, 60, 50, 217) + ), + new PokemonSpecies(SpeciesId.MAREANIE, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.4, 8, AbilityId.MERCILESS, AbilityId.LIMBER, AbilityId.REGENERATOR, 305, 50, 53, 62, 43, 52, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOXAPEX, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.7, 14.5, AbilityId.MERCILESS, AbilityId.LIMBER, AbilityId.REGENERATOR, 495, 50, 63, 152, 53, 142, 35, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MUDBRAY, 7, false, false, false, "Donkey Pokémon", PokemonType.GROUND, null, 1, 110, AbilityId.OWN_TEMPO, AbilityId.STAMINA, AbilityId.INNER_FOCUS, 385, 70, 100, 70, 45, 55, 45, 190, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MUDSDALE, 7, false, false, false, "Draft Horse Pokémon", PokemonType.GROUND, null, 2.5, 920, AbilityId.OWN_TEMPO, AbilityId.STAMINA, AbilityId.INNER_FOCUS, 500, 100, 125, 100, 55, 85, 35, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEWPIDER, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 0.3, 4, AbilityId.WATER_BUBBLE, AbilityId.NONE, AbilityId.WATER_ABSORB, 269, 38, 40, 52, 40, 72, 27, 200, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ARAQUANID, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 1.8, 82, AbilityId.WATER_BUBBLE, AbilityId.NONE, AbilityId.WATER_ABSORB, 454, 68, 70, 92, 50, 132, 42, 100, 50, 159, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FOMANTIS, 7, false, false, false, "Sickle Grass Pokémon", PokemonType.GRASS, null, 0.3, 1.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CONTRARY, 250, 40, 55, 35, 50, 35, 35, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LURANTIS, 7, false, false, false, "Bloom Sickle Pokémon", PokemonType.GRASS, null, 0.9, 18.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CONTRARY, 480, 70, 105, 90, 80, 90, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MORELULL, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.2, 1.5, AbilityId.ILLUMINATE, AbilityId.EFFECT_SPORE, AbilityId.RAIN_DISH, 285, 40, 35, 55, 65, 75, 15, 190, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SHIINOTIC, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1, 11.5, AbilityId.ILLUMINATE, AbilityId.EFFECT_SPORE, AbilityId.RAIN_DISH, 405, 60, 45, 80, 90, 100, 30, 75, 50, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SALANDIT, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 0.6, 4.8, AbilityId.CORROSION, AbilityId.NONE, AbilityId.OBLIVIOUS, 320, 48, 44, 40, 71, 40, 77, 120, 50, 64, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SALAZZLE, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 1.2, 22.2, AbilityId.CORROSION, AbilityId.NONE, AbilityId.OBLIVIOUS, 480, 68, 64, 60, 111, 60, 117, 45, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.STUFFUL, 7, false, false, false, "Flailing Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 0.5, 6.8, AbilityId.FLUFFY, AbilityId.KLUTZ, AbilityId.CUTE_CHARM, 340, 70, 75, 50, 45, 50, 50, 140, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEWEAR, 7, false, false, false, "Strong Arm Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 2.1, 135, AbilityId.FLUFFY, AbilityId.KLUTZ, AbilityId.UNNERVE, 500, 120, 125, 80, 55, 60, 60, 70, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BOUNSWEET, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.3, 3.2, AbilityId.LEAF_GUARD, AbilityId.OBLIVIOUS, AbilityId.SWEET_VEIL, 210, 42, 30, 38, 30, 38, 32, 235, 50, 42, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.STEENEE, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.7, 8.2, AbilityId.LEAF_GUARD, AbilityId.OBLIVIOUS, AbilityId.SWEET_VEIL, 290, 52, 40, 48, 40, 48, 62, 120, 50, 102, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.TSAREENA, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 1.2, 21.4, AbilityId.LEAF_GUARD, AbilityId.QUEENLY_MAJESTY, AbilityId.SWEET_VEIL, 510, 72, 120, 98, 50, 98, 72, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.COMFEY, 7, false, false, false, "Posy Picker Pokémon", PokemonType.FAIRY, null, 0.1, 0.3, AbilityId.FLOWER_VEIL, AbilityId.TRIAGE, AbilityId.NATURAL_CURE, 485, 51, 52, 90, 82, 110, 100, 60, 50, 170, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.ORANGURU, 7, false, false, false, "Sage Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 76, AbilityId.INNER_FOCUS, AbilityId.TELEPATHY, AbilityId.SYMBIOSIS, 490, 90, 60, 80, 90, 110, 60, 45, 50, 172, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PASSIMIAN, 7, false, false, false, "Teamwork Pokémon", PokemonType.FIGHTING, null, 2, 82.8, AbilityId.RECEIVER, AbilityId.NONE, AbilityId.DEFIANT, 490, 100, 120, 90, 40, 60, 80, 45, 50, 172, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.WIMPOD, 7, false, false, false, "Turn Tail Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 12, AbilityId.WIMP_OUT, AbilityId.NONE, AbilityId.RUN_AWAY, 230, 25, 35, 40, 20, 30, 80, 90, 50, 46, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.GOLISOPOD, 7, false, false, false, "Hard Scale Pokémon", PokemonType.BUG, PokemonType.WATER, 2, 108, AbilityId.EMERGENCY_EXIT, AbilityId.NONE, AbilityId.ANTICIPATION, 530, 75, 125, 140, 60, 90, 40, 45, 50, 186, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.SANDYGAST, 7, false, false, false, "Sand Heap Pokémon", PokemonType.GHOST, PokemonType.GROUND, 0.5, 70, AbilityId.WATER_COMPACTION, AbilityId.NONE, AbilityId.SAND_VEIL, 320, 55, 55, 80, 70, 45, 15, 140, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PALOSSAND, 7, false, false, false, "Sand Castle Pokémon", PokemonType.GHOST, PokemonType.GROUND, 1.3, 250, AbilityId.WATER_COMPACTION, AbilityId.NONE, AbilityId.SAND_VEIL, 480, 85, 75, 110, 100, 75, 35, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PYUKUMUKU, 7, false, false, false, "Sea Cucumber Pokémon", PokemonType.WATER, null, 0.3, 1.2, AbilityId.INNARDS_OUT, AbilityId.NONE, AbilityId.UNAWARE, 410, 55, 60, 130, 30, 130, 5, 60, 50, 144, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TYPE_NULL, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 1.9, 120.5, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.NONE, 534, 95, 95, 95, 95, 95, 59, 3, 0, 107, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SILVALLY, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, GrowthRate.SLOW, null, false, false, + new PokemonForm("Type: Normal", "normal", PokemonType.NORMAL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, false, "", true), + new PokemonForm("Type: Fighting", "fighting", PokemonType.FIGHTING, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Flying", "flying", PokemonType.FLYING, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Poison", "poison", PokemonType.POISON, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Ground", "ground", PokemonType.GROUND, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Rock", "rock", PokemonType.ROCK, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Bug", "bug", PokemonType.BUG, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Ghost", "ghost", PokemonType.GHOST, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Steel", "steel", PokemonType.STEEL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Fire", "fire", PokemonType.FIRE, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Water", "water", PokemonType.WATER, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Grass", "grass", PokemonType.GRASS, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Electric", "electric", PokemonType.ELECTRIC, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Psychic", "psychic", PokemonType.PSYCHIC, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Ice", "ice", PokemonType.ICE, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Dragon", "dragon", PokemonType.DRAGON, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Dark", "dark", PokemonType.DARK, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Fairy", "fairy", PokemonType.FAIRY, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285) + ), + new PokemonSpecies(SpeciesId.MINIOR, 7, false, false, false, "Meteor Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, GrowthRate.MEDIUM_SLOW, null, false, false, + new PokemonForm("Red Meteor Form", "red-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Orange Meteor Form", "orange-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Yellow Meteor Form", "yellow-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Green Meteor Form", "green-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Blue Meteor Form", "blue-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Indigo Meteor Form", "indigo-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Violet Meteor Form", "violet-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Red Core Form", "red", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Orange Core Form", "orange", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Yellow Core Form", "yellow", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Green Core Form", "green", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Blue Core Form", "blue", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Indigo Core Form", "indigo", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Violet Core Form", "violet", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true) + ), + new PokemonSpecies(SpeciesId.KOMALA, 7, false, false, false, "Drowsing Pokémon", PokemonType.NORMAL, null, 0.4, 19.9, AbilityId.COMATOSE, AbilityId.NONE, AbilityId.NONE, 480, 65, 115, 65, 75, 95, 65, 45, 70, 168, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TURTONATOR, 7, false, false, false, "Blast Turtle Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 2, 212, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.NONE, 485, 60, 78, 135, 91, 85, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOGEDEMARU, 7, false, false, false, "Roly-Poly Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 3.3, AbilityId.IRON_BARBS, AbilityId.LIGHTNING_ROD, AbilityId.STURDY, 435, 65, 98, 63, 40, 73, 96, 180, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIMIKYU, 7, false, false, false, "Disguise Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Disguised Form", "disguised", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, false, null, true), + new PokemonForm("Busted Form", "busted", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167) + ), + new PokemonSpecies(SpeciesId.BRUXISH, 7, false, false, false, "Gnash Teeth Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 0.9, 19, AbilityId.DAZZLING, AbilityId.STRONG_JAW, AbilityId.WONDER_SKIN, 475, 68, 105, 70, 70, 70, 92, 80, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DRAMPA, 7, false, false, false, "Placid Pokémon", PokemonType.NORMAL, PokemonType.DRAGON, 3, 185, AbilityId.BERSERK, AbilityId.SAP_SIPPER, AbilityId.CLOUD_NINE, 485, 78, 60, 85, 135, 91, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DHELMISE, 7, false, false, false, "Sea Creeper Pokémon", PokemonType.GHOST, PokemonType.GRASS, 3.9, 210, AbilityId.STEELWORKER, AbilityId.NONE, AbilityId.NONE, 517, 70, 131, 100, 86, 90, 40, 25, 50, 181, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.JANGMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, null, 0.6, 29.7, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 300, 45, 55, 65, 45, 45, 45, 45, 50, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HAKAMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.2, 47, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 420, 55, 75, 90, 65, 70, 65, 45, 50, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KOMMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.6, 78.2, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 600, 75, 110, 125, 100, 105, 85, 45, 50, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TAPU_KOKO, 7, true, false, false, "Land Spirit Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 1.8, 20.5, AbilityId.ELECTRIC_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 115, 85, 95, 75, 130, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TAPU_LELE, 7, true, false, false, "Land Spirit Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.2, 18.6, AbilityId.PSYCHIC_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 85, 75, 130, 115, 95, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TAPU_BULU, 7, true, false, false, "Land Spirit Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1.9, 45.5, AbilityId.GRASSY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 130, 115, 85, 95, 75, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TAPU_FINI, 7, true, false, false, "Land Spirit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.3, 21.2, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 75, 115, 95, 130, 85, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.COSMOG, 7, true, false, false, "Nebula Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.1, AbilityId.UNAWARE, AbilityId.NONE, AbilityId.NONE, 200, 43, 29, 31, 29, 31, 37, 3, 0, 40, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.COSMOEM, 7, true, false, false, "Protostar Pokémon", PokemonType.PSYCHIC, null, 0.1, 999.9, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 400, 43, 29, 131, 29, 131, 37, 3, 0, 140, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SOLGALEO, 7, false, true, false, "Sunne Pokémon", PokemonType.PSYCHIC, PokemonType.STEEL, 3.4, 230, AbilityId.FULL_METAL_BODY, AbilityId.NONE, AbilityId.NONE, 680, 137, 137, 107, 113, 89, 97, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LUNALA, 7, false, true, false, "Moone Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 4, 120, AbilityId.SHADOW_SHIELD, AbilityId.NONE, AbilityId.NONE, 680, 137, 113, 89, 137, 107, 97, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.NIHILEGO, 7, true, false, false, "Parasite Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.2, 55.5, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 109, 53, 47, 127, 131, 103, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.BUZZWOLE, 7, true, false, false, "Swollen Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 2.4, 333.6, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 107, 139, 139, 53, 53, 79, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.PHEROMOSA, 7, true, false, false, "Lissome Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.8, 25, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 71, 137, 37, 137, 37, 151, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.XURKITREE, 7, true, false, false, "Glowing Pokémon", PokemonType.ELECTRIC, null, 3.8, 100, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 83, 89, 71, 173, 71, 83, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CELESTEELA, 7, true, false, false, "Launch Pokémon", PokemonType.STEEL, PokemonType.FLYING, 9.2, 999.9, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 97, 101, 103, 107, 101, 61, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.KARTANA, 7, true, false, false, "Drawn Sword Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.3, 0.1, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 59, 181, 131, 59, 31, 109, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GUZZLORD, 7, true, false, false, "Junkivore Pokémon", PokemonType.DARK, PokemonType.DRAGON, 5.5, 888, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 223, 101, 53, 97, 53, 43, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.NECROZMA, 7, false, true, false, "Prism Pokémon", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 3, 0, 300, false, null, true), + new PokemonForm("Dusk Mane", "dusk-mane", PokemonType.PSYCHIC, PokemonType.STEEL, 3.8, 460, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 157, 127, 113, 109, 77, 3, 0, 340), + new PokemonForm("Dawn Wings", "dawn-wings", PokemonType.PSYCHIC, PokemonType.GHOST, 4.2, 350, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 113, 109, 157, 127, 77, 3, 0, 340), + new PokemonForm("Ultra", "ultra", PokemonType.PSYCHIC, PokemonType.DRAGON, 7.5, 230, AbilityId.NEUROFORCE, AbilityId.NONE, AbilityId.NONE, 754, 97, 167, 97, 167, 97, 129, 3, 0, 377) + ), + new PokemonSpecies(SpeciesId.MAGEARNA, 7, false, false, true, "Artificial Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), + new PokemonForm("Original", "original", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true) + ), + new PokemonSpecies(SpeciesId.MARSHADOW, 7, false, false, true, "Gloomdweller Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, true), + new PokemonForm("Zenith", "zenith", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, false, true) + ), + new PokemonSpecies(SpeciesId.POIPOLE, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.6, 1.8, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 420, 67, 73, 67, 73, 67, 73, 45, 0, 210, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.NAGANADEL, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, PokemonType.DRAGON, 3.6, 150, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 540, 73, 73, 73, 127, 73, 121, 45, 0, 270, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.STAKATAKA, 7, true, false, false, "Rampart Pokémon", PokemonType.ROCK, PokemonType.STEEL, 5.5, 820, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 61, 131, 211, 53, 101, 13, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.BLACEPHALON, 7, true, false, false, "Fireworks Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.8, 13, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 53, 127, 53, 151, 79, 107, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZERAORA, 7, false, false, true, "Thunderclap Pokémon", PokemonType.ELECTRIC, null, 1.5, 44.5, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.NONE, 600, 88, 112, 75, 102, 80, 143, 3, 0, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MELTAN, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 0.2, 8, AbilityId.MAGNET_PULL, AbilityId.NONE, AbilityId.NONE, 300, 46, 65, 65, 55, 35, 34, 3, 0, 150, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MELMETAL, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 2.5, 800, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, null, 2.5, 800, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, null, 25, 999.9, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 700, 170, 158, 158, 95, 75, 44, 3, 0, 300) + ), + new PokemonSpecies(SpeciesId.GROOKEY, 8, false, false, false, "Chimp Pokémon", PokemonType.GRASS, null, 0.3, 5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 310, 50, 65, 50, 40, 40, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.THWACKEY, 8, false, false, false, "Beat Pokémon", PokemonType.GRASS, null, 0.7, 14, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.RILLABOOM, 8, false, false, false, "Drummer Pokémon", PokemonType.GRASS, null, 2.1, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, null, 2.1, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, null, 28, 999.9, AbilityId.GRASSY_SURGE, AbilityId.NONE, AbilityId.GRASSY_SURGE, 630, 125, 140, 105, 90, 85, 85, 45, 50, 265) + ), + new PokemonSpecies(SpeciesId.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.3, 4.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.RABOOT, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.6, 9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CINDERACE, 8, false, false, false, "Striker Pokémon", PokemonType.FIRE, null, 1.4, 33, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.FIRE, null, 1.4, 33, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, null, 27, 999.9, AbilityId.LIBERO, AbilityId.NONE, AbilityId.LIBERO, 630, 100, 141, 80, 95, 80, 134, 45, 50, 265) + ), + new PokemonSpecies(SpeciesId.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.3, 4, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.7, 11.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.INTELEON, 8, false, false, false, "Secret Agent Pokémon", PokemonType.WATER, null, 1.9, 45.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 1.9, 45.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 40, 999.9, AbilityId.SNIPER, AbilityId.NONE, AbilityId.SNIPER, 630, 95, 117, 67, 147, 67, 137, 45, 50, 265) + ), + new PokemonSpecies(SpeciesId.SKWOVET, 8, false, false, false, "Cheeky Pokémon", PokemonType.NORMAL, null, 0.3, 2.5, AbilityId.CHEEK_POUCH, AbilityId.NONE, AbilityId.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GREEDENT, 8, false, false, false, "Greedy Pokémon", PokemonType.NORMAL, null, 0.6, 6, AbilityId.CHEEK_POUCH, AbilityId.NONE, AbilityId.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ROOKIDEE, 8, false, false, false, "Tiny Bird Pokémon", PokemonType.FLYING, null, 0.2, 1.8, AbilityId.KEEN_EYE, AbilityId.UNNERVE, AbilityId.BIG_PECKS, 245, 38, 47, 35, 33, 35, 57, 255, 50, 49, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CORVISQUIRE, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, null, 0.8, 16, AbilityId.KEEN_EYE, AbilityId.UNNERVE, AbilityId.BIG_PECKS, 365, 68, 67, 55, 43, 55, 77, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CORVIKNIGHT, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, AbilityId.PRESSURE, AbilityId.UNNERVE, AbilityId.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, AbilityId.PRESSURE, AbilityId.UNNERVE, AbilityId.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FLYING, PokemonType.STEEL, 14, 999.9, AbilityId.MIRROR_ARMOR, AbilityId.MIRROR_ARMOR, AbilityId.MIRROR_ARMOR, 595, 118, 112, 135, 63, 90, 77, 45, 50, 248) + ), + new PokemonSpecies(SpeciesId.BLIPBUG, 8, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 8, AbilityId.SWARM, AbilityId.COMPOUND_EYES, AbilityId.TELEPATHY, 180, 25, 20, 20, 25, 45, 45, 255, 50, 36, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DOTTLER, 8, false, false, false, "Radome Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 19.5, AbilityId.SWARM, AbilityId.COMPOUND_EYES, AbilityId.TELEPATHY, 335, 50, 35, 80, 50, 90, 30, 120, 50, 117, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ORBEETLE, 8, false, false, false, "Seven Spot Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, AbilityId.SWARM, AbilityId.FRISK, AbilityId.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, AbilityId.SWARM, AbilityId.FRISK, AbilityId.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.PSYCHIC, 14, 999.9, AbilityId.TRACE, AbilityId.TRACE, AbilityId.TRACE, 605, 75, 50, 140, 100, 150, 90, 45, 50, 253) + ), + new PokemonSpecies(SpeciesId.NICKIT, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 0.6, 8.9, AbilityId.RUN_AWAY, AbilityId.UNBURDEN, AbilityId.STAKEOUT, 245, 40, 28, 28, 47, 52, 50, 255, 50, 49, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.THIEVUL, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 1.2, 19.9, AbilityId.RUN_AWAY, AbilityId.UNBURDEN, AbilityId.STAKEOUT, 455, 70, 58, 58, 87, 92, 90, 127, 50, 159, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.GOSSIFLEUR, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 0.4, 2.2, AbilityId.COTTON_DOWN, AbilityId.REGENERATOR, AbilityId.EFFECT_SPORE, 250, 40, 40, 60, 40, 60, 10, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ELDEGOSS, 8, false, false, false, "Cotton Bloom Pokémon", PokemonType.GRASS, null, 0.5, 2.5, AbilityId.COTTON_DOWN, AbilityId.REGENERATOR, AbilityId.EFFECT_SPORE, 460, 60, 50, 90, 80, 120, 60, 75, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WOOLOO, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 0.6, 6, AbilityId.FLUFFY, AbilityId.RUN_AWAY, AbilityId.BULLETPROOF, 270, 42, 40, 55, 40, 45, 48, 255, 50, 122, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUBWOOL, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 1.3, 43, AbilityId.FLUFFY, AbilityId.STEADFAST, AbilityId.BULLETPROOF, 490, 72, 80, 100, 60, 90, 88, 127, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHEWTLE, 8, false, false, false, "Snapping Pokémon", PokemonType.WATER, null, 0.3, 8.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 284, 50, 64, 50, 38, 38, 44, 255, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DREDNAW, 8, false, false, false, "Bite Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ROCK, 24, 999.9, AbilityId.STRONG_JAW, AbilityId.STRONG_JAW, AbilityId.STRONG_JAW, 585, 115, 137, 115, 61, 83, 74, 75, 50, 170) + ), + new PokemonSpecies(SpeciesId.YAMPER, 8, false, false, false, "Puppy Pokémon", PokemonType.ELECTRIC, null, 0.3, 13.5, AbilityId.BALL_FETCH, AbilityId.NONE, AbilityId.RATTLED, 270, 59, 45, 50, 40, 50, 26, 255, 50, 54, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.BOLTUND, 8, false, false, false, "Dog Pokémon", PokemonType.ELECTRIC, null, 1, 34, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.COMPETITIVE, 490, 69, 90, 60, 90, 60, 121, 45, 50, 172, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.ROLYCOLY, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, null, 0.3, 12, AbilityId.STEAM_ENGINE, AbilityId.HEATPROOF, AbilityId.FLASH_FIRE, 240, 30, 40, 50, 40, 50, 30, 255, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CARKOL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 1.1, 78, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 410, 80, 60, 90, 60, 70, 50, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.COALOSSAL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ROCK, PokemonType.FIRE, 42, 999.9, AbilityId.STEAM_ENGINE, AbilityId.STEAM_ENGINE, AbilityId.STEAM_ENGINE, 610, 140, 100, 132, 95, 100, 43, 45, 50, 255) + ), + new PokemonSpecies(SpeciesId.APPLIN, 8, false, false, false, "Apple Core Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.2, 0.5, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.BULLETPROOF, 260, 40, 40, 80, 40, 40, 20, 255, 50, 52, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.FLAPPLE, 8, false, false, false, "Apple Wing Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, AbilityId.HUSTLE, AbilityId.HUSTLE, AbilityId.HUSTLE, 585, 100, 125, 90, 105, 70, 95, 45, 50, 170) + ), + new PokemonSpecies(SpeciesId.APPLETUN, 8, false, false, false, "Apple Nectar Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, AbilityId.THICK_FAT, AbilityId.THICK_FAT, AbilityId.THICK_FAT, 585, 150, 100, 95, 115, 95, 30, 45, 50, 170) + ), + new PokemonSpecies(SpeciesId.SILICOBRA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 2.2, 7.6, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 315, 52, 57, 75, 35, 50, 46, 255, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SANDACONDA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 3.8, 65.5, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.8, 65.5, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GROUND, null, 22, 999.9, AbilityId.SAND_SPIT, AbilityId.SAND_SPIT, AbilityId.SAND_SPIT, 610, 102, 137, 140, 70, 80, 81, 120, 50, 179) + ), + new PokemonSpecies(SpeciesId.CRAMORANT, 8, false, false, false, "Gulp Pokémon", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, false, null, true), + new PokemonForm("Gulping Form", "gulping", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166), + new PokemonForm("Gorging Form", "gorging", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166) + ), + new PokemonSpecies(SpeciesId.ARROKUDA, 8, false, false, false, "Rush Pokémon", PokemonType.WATER, null, 0.5, 1, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.PROPELLER_TAIL, 280, 41, 63, 40, 40, 30, 66, 255, 50, 56, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.BARRASKEWDA, 8, false, false, false, "Skewer Pokémon", PokemonType.WATER, null, 1.3, 30, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.PROPELLER_TAIL, 490, 61, 123, 60, 60, 50, 136, 60, 50, 172, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TOXEL, 8, false, false, false, "Baby Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 0.4, 11, AbilityId.RATTLED, AbilityId.STATIC, AbilityId.KLUTZ, 242, 40, 38, 35, 54, 35, 40, 75, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TOXTRICITY, 8, false, false, false, "Punk Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.PLUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Amped Form", "amped", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.PLUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "", true), + new PokemonForm("Low-Key Form", "lowkey", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.MINUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "lowkey", true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, PokemonType.POISON, 24, 999.9, AbilityId.PUNK_ROCK, AbilityId.PUNK_ROCK, AbilityId.PUNK_ROCK, 602, 114, 105, 82, 137, 82, 82, 45, 50, 176) + ), + new PokemonSpecies(SpeciesId.SIZZLIPEDE, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 0.7, 1, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 305, 50, 65, 45, 50, 50, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CENTISKORCH, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 3, 120, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.BUG, 3, 120, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.BUG, 75, 999.9, AbilityId.FLASH_FIRE, AbilityId.FLASH_FIRE, AbilityId.FLASH_FIRE, 625, 130, 125, 75, 94, 100, 101, 75, 50, 184) + ), + new PokemonSpecies(SpeciesId.CLOBBOPUS, 8, false, false, false, "Tantrum Pokémon", PokemonType.FIGHTING, null, 0.6, 4, AbilityId.LIMBER, AbilityId.NONE, AbilityId.TECHNICIAN, 310, 50, 68, 60, 50, 50, 32, 180, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", PokemonType.FIGHTING, null, 1.6, 39, AbilityId.LIMBER, AbilityId.NONE, AbilityId.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SINISTEA, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), + new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true) + ), + new PokemonSpecies(SpeciesId.POLTEAGEIST, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), + new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true) + ), + new PokemonSpecies(SpeciesId.HATENNA, 8, false, false, false, "Calm Pokémon", PokemonType.PSYCHIC, null, 0.4, 3.4, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 265, 42, 30, 45, 56, 53, 39, 235, 50, 53, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.HATTREM, 8, false, false, false, "Serene Pokémon", PokemonType.PSYCHIC, null, 0.6, 4.8, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.HATTERENE, 8, false, false, false, "Silent Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, GrowthRate.SLOW, 0, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.PSYCHIC, PokemonType.FAIRY, 26, 999.9, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 610, 87, 100, 110, 146, 118, 49, 45, 50, 255) + ), + new PokemonSpecies(SpeciesId.IMPIDIMP, 8, false, false, false, "Wily Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.4, 5.5, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 265, 45, 45, 30, 55, 40, 50, 255, 50, 53, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.MORGREM, 8, false, false, false, "Devious Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.8, 12.5, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 370, 65, 60, 45, 75, 55, 70, 120, 50, 130, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.GRIMMSNARL, 8, false, false, false, "Bulk Up Pokémon", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, GrowthRate.MEDIUM_FAST, 100, false, true, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.DARK, PokemonType.FAIRY, 32, 999.9, AbilityId.PRANKSTER, AbilityId.PRANKSTER, AbilityId.PRANKSTER, 610, 130, 138, 75, 110, 92, 65, 45, 50, 255) + ), + new PokemonSpecies(SpeciesId.OBSTAGOON, 8, false, false, false, "Blocking Pokémon", PokemonType.DARK, PokemonType.NORMAL, 1.6, 46, AbilityId.RECKLESS, AbilityId.GUTS, AbilityId.DEFIANT, 520, 93, 90, 101, 60, 81, 95, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PERRSERKER, 8, false, false, false, "Viking Pokémon", PokemonType.STEEL, null, 0.8, 28, AbilityId.BATTLE_ARMOR, AbilityId.TOUGH_CLAWS, AbilityId.STEELY_SPIRIT, 440, 70, 110, 100, 50, 60, 50, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CURSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 1, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.PERISH_BODY, 510, 60, 95, 50, 145, 130, 30, 30, 50, 179, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.SIRFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 117, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.SCRAPPY, 507, 62, 135, 95, 68, 82, 65, 45, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MR_RIME, 8, false, false, false, "Comedian Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.5, 58.2, AbilityId.TANGLED_FEET, AbilityId.SCREEN_CLEANER, AbilityId.ICE_BODY, 520, 80, 85, 75, 110, 100, 70, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RUNERIGUS, 8, false, false, false, "Grudge Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1.6, 66.6, AbilityId.WANDERING_SPIRIT, AbilityId.NONE, AbilityId.NONE, 483, 58, 95, 145, 50, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MILCERY, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.2, 0.3, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 270, 45, 40, 40, 50, 61, 34, 200, 50, 54, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ALCREMIE, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, GrowthRate.MEDIUM_FAST, 0, false, true, + new PokemonForm("Vanilla Cream", "vanilla-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, "", true), + new PokemonForm("Ruby Cream", "ruby-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Matcha Cream", "matcha-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Mint Cream", "mint-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Lemon Cream", "lemon-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Salted Cream", "salted-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Ruby Swirl", "ruby-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Caramel Swirl", "caramel-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Rainbow Swirl", "rainbow-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FAIRY, null, 30, 999.9, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.MISTY_SURGE, 595, 105, 70, 85, 130, 141, 64, 100, 50, 173) + ), + new PokemonSpecies(SpeciesId.FALINKS, 8, false, false, false, "Formation Pokémon", PokemonType.FIGHTING, null, 3, 62, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", PokemonType.ELECTRIC, null, 0.3, 1, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SNOM, 8, false, false, false, "Worm Pokémon", PokemonType.ICE, PokemonType.BUG, 0.3, 3.8, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.ICE_SCALES, 185, 30, 25, 35, 45, 30, 20, 190, 50, 37, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FROSMOTH, 8, false, false, false, "Frost Moth Pokémon", PokemonType.ICE, PokemonType.BUG, 1.3, 42, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.ICE_SCALES, 475, 70, 65, 60, 125, 90, 65, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.STONJOURNER, 8, false, false, false, "Big Rock Pokémon", PokemonType.ROCK, null, 2.5, 520, AbilityId.POWER_SPOT, AbilityId.NONE, AbilityId.NONE, 470, 100, 125, 135, 20, 20, 70, 60, 50, 165, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EISCUE, 8, false, false, false, "Penguin Pokémon", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, GrowthRate.SLOW, 50, false, false, + new PokemonForm("Ice Face", "", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, false, null, true), + new PokemonForm("No Ice", "no-ice", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 70, 65, 50, 130, 60, 50, 165) + ), + new PokemonSpecies(SpeciesId.INDEEDEE, 8, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, GrowthRate.FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, false, "", true), + new PokemonForm("Female", "female", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.OWN_TEMPO, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 70, 55, 65, 95, 105, 85, 30, 140, 166, false, null, true) + ), + new PokemonSpecies(SpeciesId.MORPEKO, 8, false, false, false, "Two-Sided Pokémon", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Full Belly Mode", "full-belly", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, false, "", true), + new PokemonForm("Hangry Mode", "hangry", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153) + ), + new PokemonSpecies(SpeciesId.CUFANT, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 1.2, 100, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 330, 72, 80, 49, 40, 49, 40, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.COPPERAJAH, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 3, 650, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, null, 3, 650, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.GROUND, 23, 999.9, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.MOLD_BREAKER, 600, 177, 155, 79, 90, 79, 20, 90, 50, 175) + ), + new PokemonSpecies(SpeciesId.DRACOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 1.8, 190, AbilityId.VOLT_ABSORB, AbilityId.HUSTLE, AbilityId.SAND_RUSH, 505, 90, 100, 90, 80, 70, 75, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ARCTOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.ICE, 2.3, 150, AbilityId.VOLT_ABSORB, AbilityId.STATIC, AbilityId.SLUSH_RUSH, 505, 90, 100, 90, 90, 80, 55, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DRACOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.DRAGON, 2.3, 215, AbilityId.WATER_ABSORB, AbilityId.STRONG_JAW, AbilityId.SAND_RUSH, 505, 90, 90, 100, 70, 80, 75, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ARCTOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.ICE, 2, 175, AbilityId.WATER_ABSORB, AbilityId.ICE_BODY, AbilityId.SLUSH_RUSH, 505, 90, 90, 100, 80, 90, 55, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DURALUDON, 8, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, AbilityId.LIGHT_METAL, AbilityId.HEAVY_METAL, AbilityId.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, AbilityId.LIGHT_METAL, AbilityId.HEAVY_METAL, AbilityId.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.DRAGON, 43, 999.9, AbilityId.LIGHTNING_ROD, AbilityId.LIGHTNING_ROD, AbilityId.LIGHTNING_ROD, 635, 100, 110, 120, 175, 60, 70, 45, 50, 187) + ), + new PokemonSpecies(SpeciesId.DREEPY, 8, false, false, false, "Lingering Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 0.5, 2, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 270, 28, 60, 30, 40, 30, 82, 45, 50, 54, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAKLOAK, 8, false, false, false, "Caretaker Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 1.4, 11, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 410, 68, 80, 50, 60, 50, 102, 45, 50, 144, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAGAPULT, 8, false, false, false, "Stealth Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 3, 50, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 600, 88, 120, 75, 100, 75, 142, 45, 50, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ZACIAN, 8, false, true, false, "Warrior Pokémon", PokemonType.FAIRY, null, 2.8, 110, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FAIRY, null, 2.8, 110, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), + new PokemonForm("Crowned", "crowned", PokemonType.FAIRY, PokemonType.STEEL, 2.8, 355, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 700, 92, 150, 115, 80, 115, 148, 10, 0, 360) + ), + new PokemonSpecies(SpeciesId.ZAMAZENTA, 8, false, true, false, "Warrior Pokémon", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), + new PokemonForm("Crowned", "crowned", PokemonType.FIGHTING, PokemonType.STEEL, 2.9, 785, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 360) + ), + new PokemonSpecies(SpeciesId.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, false, null, true), + new PokemonForm("E-Max", "eternamax", PokemonType.POISON, PokemonType.DRAGON, 100, 999.9, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 1125, 255, 115, 250, 125, 250, 130, 255, 0, 345) + ), + new PokemonSpecies(SpeciesId.KUBFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, null, 0.6, 12, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.NONE, 385, 60, 90, 60, 53, 50, 72, 3, 50, 77, GrowthRate.SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.URSHIFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true, + new PokemonForm("Single Strike Style", "single-strike", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, "", true), + new PokemonForm("Rapid Strike Style", "rapid-strike", PokemonType.FIGHTING, PokemonType.WATER, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, null, true), + new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, PokemonType.FIGHTING, PokemonType.DARK, 29, 999.9, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), + new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, PokemonType.FIGHTING, PokemonType.WATER, 26, 999.9, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275) + ), + new PokemonSpecies(SpeciesId.ZARUDE, 8, false, false, true, "Rogue Monkey Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), + new PokemonForm("Dada", "dada", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true) + ), + new PokemonSpecies(SpeciesId.REGIELEKI, 8, true, false, false, "Electron Pokémon", PokemonType.ELECTRIC, null, 1.2, 145, AbilityId.TRANSISTOR, AbilityId.NONE, AbilityId.NONE, 580, 80, 100, 50, 100, 50, 200, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.REGIDRAGO, 8, true, false, false, "Dragon Orb Pokémon", PokemonType.DRAGON, null, 2.1, 200, AbilityId.DRAGONS_MAW, AbilityId.NONE, AbilityId.NONE, 580, 200, 100, 50, 100, 50, 80, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GLASTRIER, 8, true, false, false, "Wild Horse Pokémon", PokemonType.ICE, null, 2.2, 800, AbilityId.CHILLING_NEIGH, AbilityId.NONE, AbilityId.NONE, 580, 100, 145, 130, 65, 110, 30, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SPECTRIER, 8, true, false, false, "Swift Horse Pokémon", PokemonType.GHOST, null, 2, 44.5, AbilityId.GRIM_NEIGH, AbilityId.NONE, AbilityId.NONE, 580, 100, 65, 60, 145, 80, 130, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CALYREX, 8, false, true, false, "King Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, AbilityId.UNNERVE, AbilityId.NONE, AbilityId.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, AbilityId.UNNERVE, AbilityId.NONE, AbilityId.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, false, null, true), + new PokemonForm("Ice", "ice", PokemonType.PSYCHIC, PokemonType.ICE, 2.4, 809.1, AbilityId.AS_ONE_GLASTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 340), + new PokemonForm("Shadow", "shadow", PokemonType.PSYCHIC, PokemonType.GHOST, 2.4, 53.6, AbilityId.AS_ONE_SPECTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 340) + ), + new PokemonSpecies(SpeciesId.WYRDEER, 8, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.8, 95.1, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 525, 103, 105, 72, 105, 75, 65, 45, 50, 263, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KLEAVOR, 8, false, false, false, "Axe Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.8, 89, AbilityId.SWARM, AbilityId.SHEER_FORCE, AbilityId.SHARPNESS, 500, 70, 135, 95, 45, 70, 85, 15, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.URSALUNA, 8, false, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.4, 290, AbilityId.GUTS, AbilityId.BULLETPROOF, AbilityId.UNNERVE, 550, 130, 140, 105, 45, 80, 50, 20, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BASCULEGION, 8, false, false, false, "Big Fish Pokémon", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 45, 50, 265, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 45, 50, 265, false, "", true), + new PokemonForm("Female", "female", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 92, 65, 100, 75, 78, 45, 50, 265, false, null, true) + ), + new PokemonSpecies(SpeciesId.SNEASLER, 8, false, false, false, "Free Climb Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 1.3, 43, AbilityId.PRESSURE, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, 510, 80, 130, 60, 40, 80, 120, 20, 50, 102, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.OVERQWIL, 8, false, false, false, "Pin Cluster Pokémon", PokemonType.DARK, PokemonType.POISON, 2.5, 60.5, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 510, 85, 115, 95, 65, 65, 85, 45, 50, 179, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ENAMORUS, 8, true, false, false, "Love-Hate Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, GrowthRate.SLOW, 0, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 580, 74, 115, 110, 135, 100, 46, 3, 50, 116) + ), + new PokemonSpecies(SpeciesId.SPRIGATITO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.4, 4.1, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 310, 40, 61, 54, 45, 45, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FLORAGATO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.9, 12.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 410, 61, 80, 63, 60, 63, 83, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MEOWSCARADA, 9, false, false, false, "Magician Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.5, 31.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 530, 76, 110, 70, 81, 70, 123, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FUECOCO, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 0.4, 9.8, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 310, 67, 45, 59, 63, 40, 36, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CROCALOR, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 1, 30.7, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 411, 81, 55, 78, 90, 58, 49, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SKELEDIRGE, 9, false, false, false, "Singer Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 326.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 530, 104, 75, 100, 110, 75, 66, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUAXLY, 9, false, false, false, "Duckling Pokémon", PokemonType.WATER, null, 0.5, 6.1, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 310, 55, 65, 45, 50, 45, 50, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUAXWELL, 9, false, false, false, "Practicing Pokémon", PokemonType.WATER, null, 1.2, 21.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 410, 70, 85, 65, 65, 60, 65, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUAQUAVAL, 9, false, false, false, "Dancer Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.8, 61.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 530, 85, 120, 80, 85, 75, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.LECHONK, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 0.5, 10.2, AbilityId.AROMA_VEIL, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 254, 54, 45, 40, 35, 45, 35, 255, 50, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.OINKOLOGNE, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 1, 120, AbilityId.LINGERING_AROMA, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.NORMAL, null, 1, 120, AbilityId.LINGERING_AROMA, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, false, "", true), + new PokemonForm("Female", "female", PokemonType.NORMAL, null, 1, 120, AbilityId.AROMA_VEIL, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 115, 90, 70, 59, 90, 65, 100, 50, 171, false, null, true) + ), + new PokemonSpecies(SpeciesId.TAROUNTULA, 9, false, false, false, "String Ball Pokémon", PokemonType.BUG, null, 0.3, 4, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.STAKEOUT, 210, 35, 41, 45, 29, 40, 20, 255, 50, 42, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.SPIDOPS, 9, false, false, false, "Trap Pokémon", PokemonType.BUG, null, 1, 16.5, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.STAKEOUT, 404, 60, 79, 92, 52, 86, 35, 120, 50, 141, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.NYMBLE, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, null, 0.2, 1, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 210, 33, 46, 40, 21, 25, 45, 190, 20, 42, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LOKIX, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, PokemonType.DARK, 1, 17.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 450, 71, 102, 78, 52, 55, 92, 30, 0, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PAWMI, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2.5, AbilityId.STATIC, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 240, 45, 50, 20, 40, 25, 60, 190, 50, 48, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PAWMO, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.4, 6.5, AbilityId.VOLT_ABSORB, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 350, 60, 75, 40, 50, 40, 85, 80, 50, 123, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PAWMOT, 9, false, false, false, "Hands-On Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.9, 41, AbilityId.VOLT_ABSORB, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 490, 70, 115, 70, 70, 60, 105, 45, 50, 245, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TANDEMAUS, 9, false, false, false, "Couple Pokémon", PokemonType.NORMAL, null, 0.3, 1.8, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.OWN_TEMPO, 305, 50, 50, 45, 40, 45, 75, 150, 50, 61, GrowthRate.FAST, null, false), + new PokemonSpecies(SpeciesId.MAUSHOLD, 9, false, false, false, "Family Pokémon", PokemonType.NORMAL, null, 0.3, 2.3, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165, GrowthRate.FAST, null, false, false, + new PokemonForm("Family of Four", "four", PokemonType.NORMAL, null, 0.3, 2.8, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165), + new PokemonForm("Family of Three", "three", PokemonType.NORMAL, null, 0.3, 2.3, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165) + ), + new PokemonSpecies(SpeciesId.FIDOUGH, 9, false, false, false, "Puppy Pokémon", PokemonType.FAIRY, null, 0.3, 10.9, AbilityId.OWN_TEMPO, AbilityId.NONE, AbilityId.KLUTZ, 312, 37, 55, 70, 30, 55, 65, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DACHSBUN, 9, false, false, false, "Dog Pokémon", PokemonType.FAIRY, null, 0.5, 14.9, AbilityId.WELL_BAKED_BODY, AbilityId.NONE, AbilityId.AROMA_VEIL, 477, 57, 80, 115, 50, 80, 95, 90, 50, 167, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SMOLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.3, 6.5, AbilityId.EARLY_BIRD, AbilityId.NONE, AbilityId.HARVEST, 260, 41, 35, 45, 58, 51, 30, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DOLLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.6, 11.9, AbilityId.EARLY_BIRD, AbilityId.NONE, AbilityId.HARVEST, 354, 52, 53, 60, 78, 78, 33, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ARBOLIVA, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 1.4, 48.2, AbilityId.SEED_SOWER, AbilityId.NONE, AbilityId.HARVEST, 510, 78, 69, 90, 125, 109, 39, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SQUAWKABILLY, 9, false, false, false, "Parrot Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, GrowthRate.ERRATIC, 50, false, false, + new PokemonForm("Green Plumage", "green-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), + new PokemonForm("Blue Plumage", "blue-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), + new PokemonForm("Yellow Plumage", "yellow-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), + new PokemonForm("White Plumage", "white-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true) + ), + new PokemonSpecies(SpeciesId.NACLI, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.4, 16, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 280, 55, 55, 75, 35, 35, 25, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.NACLSTACK, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.6, 105, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 355, 60, 60, 100, 35, 65, 35, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GARGANACL, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 2.3, 240, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 500, 100, 100, 130, 45, 90, 35, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CHARCADET, 9, false, false, false, "Fire Child Pokémon", PokemonType.FIRE, null, 0.6, 10.5, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.FLAME_BODY, 255, 40, 50, 40, 50, 40, 35, 90, 50, 51, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ARMAROUGE, 9, false, false, false, "Fire Warrior Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 85, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.WEAK_ARMOR, 525, 85, 60, 100, 125, 80, 75, 25, 20, 263, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CERULEDGE, 9, false, false, false, "Fire Blades Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 62, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.WEAK_ARMOR, 525, 75, 125, 80, 60, 100, 85, 25, 20, 263, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TADBULB, 9, false, false, false, "EleTadpole Pokémon", PokemonType.ELECTRIC, null, 0.3, 0.4, AbilityId.OWN_TEMPO, AbilityId.STATIC, AbilityId.DAMP, 272, 61, 31, 41, 59, 35, 45, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BELLIBOLT, 9, false, false, false, "EleFrog Pokémon", PokemonType.ELECTRIC, null, 1.2, 113, AbilityId.ELECTROMORPHOSIS, AbilityId.STATIC, AbilityId.DAMP, 495, 109, 64, 91, 103, 83, 45, 50, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WATTREL, 9, false, false, false, "Storm Petrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 3.6, AbilityId.WIND_POWER, AbilityId.VOLT_ABSORB, AbilityId.COMPETITIVE, 280, 40, 40, 35, 55, 40, 70, 180, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KILOWATTREL, 9, false, false, false, "Frigatebird Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.4, 38.6, AbilityId.WIND_POWER, AbilityId.VOLT_ABSORB, AbilityId.COMPETITIVE, 490, 70, 70, 60, 105, 60, 125, 90, 50, 172, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MASCHIFF, 9, false, false, false, "Rascal Pokémon", PokemonType.DARK, null, 0.5, 16, AbilityId.INTIMIDATE, AbilityId.RUN_AWAY, AbilityId.STAKEOUT, 340, 60, 78, 60, 40, 51, 51, 150, 50, 68, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MABOSSTIFF, 9, false, false, false, "Boss Pokémon", PokemonType.DARK, null, 1.1, 61, AbilityId.INTIMIDATE, AbilityId.GUARD_DOG, AbilityId.STAKEOUT, 505, 80, 120, 90, 60, 70, 85, 75, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHROODLE, 9, false, false, false, "Toxic Mouse Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.2, 0.7, AbilityId.UNBURDEN, AbilityId.PICKPOCKET, AbilityId.PRANKSTER, 290, 40, 65, 35, 40, 35, 75, 190, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GRAFAIAI, 9, false, false, false, "Toxic Monkey Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.7, 27.2, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, AbilityId.PRANKSTER, 485, 63, 95, 65, 80, 72, 110, 90, 50, 170, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.BRAMBLIN, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.6, 0.6, AbilityId.WIND_RIDER, AbilityId.NONE, AbilityId.INFILTRATOR, 275, 40, 65, 30, 45, 35, 60, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BRAMBLEGHAST, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.2, 6, AbilityId.WIND_RIDER, AbilityId.NONE, AbilityId.INFILTRATOR, 480, 55, 115, 70, 80, 70, 90, 45, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOEDSCOOL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 0.9, 33, AbilityId.MYCELIUM_MIGHT, AbilityId.NONE, AbilityId.NONE, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TOEDSCRUEL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 1.9, 58, AbilityId.MYCELIUM_MIGHT, AbilityId.NONE, AbilityId.NONE, 515, 80, 70, 65, 80, 120, 100, 90, 50, 180, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KLAWF, 9, false, false, false, "Ambush Pokémon", PokemonType.ROCK, null, 1.3, 79, AbilityId.ANGER_SHELL, AbilityId.SHELL_ARMOR, AbilityId.REGENERATOR, 450, 70, 100, 115, 35, 55, 75, 120, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CAPSAKID, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, null, 0.3, 3, AbilityId.CHLOROPHYLL, AbilityId.INSOMNIA, AbilityId.KLUTZ, 304, 50, 62, 40, 62, 40, 50, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCOVILLAIN, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, PokemonType.FIRE, 0.9, 15, AbilityId.CHLOROPHYLL, AbilityId.INSOMNIA, AbilityId.MOODY, 486, 65, 108, 65, 108, 65, 75, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RELLOR, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, null, 0.2, 1, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.SHED_SKIN, 270, 41, 50, 60, 31, 58, 30, 190, 50, 54, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.RABSCA, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.3, 3.5, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.TELEPATHY, 470, 75, 50, 85, 115, 100, 45, 45, 50, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.FLITTLE, 9, false, false, false, "Frill Pokémon", PokemonType.PSYCHIC, null, 0.2, 1.5, AbilityId.ANTICIPATION, AbilityId.FRISK, AbilityId.SPEED_BOOST, 255, 30, 35, 30, 55, 30, 75, 120, 50, 51, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ESPATHRA, 9, false, false, false, "Ostrich Pokémon", PokemonType.PSYCHIC, null, 1.9, 90, AbilityId.OPPORTUNIST, AbilityId.FRISK, AbilityId.SPEED_BOOST, 481, 95, 60, 60, 101, 60, 105, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TINKATINK, 9, false, false, false, "Metalsmith Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.4, 8.9, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 297, 50, 45, 45, 35, 64, 58, 190, 50, 59, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.TINKATUFF, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 59.1, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 380, 65, 55, 55, 45, 82, 78, 90, 50, 133, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.TINKATON, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 112.8, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 506, 85, 75, 77, 70, 105, 94, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.WIGLETT, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 1.8, AbilityId.GOOEY, AbilityId.RATTLED, AbilityId.SAND_VEIL, 245, 10, 55, 25, 35, 25, 95, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WUGTRIO, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 5.4, AbilityId.GOOEY, AbilityId.RATTLED, AbilityId.SAND_VEIL, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BOMBIRDIER, 9, false, false, false, "Item Drop Pokémon", PokemonType.FLYING, PokemonType.DARK, 1.5, 42.9, AbilityId.BIG_PECKS, AbilityId.KEEN_EYE, AbilityId.ROCKY_PAYLOAD, 485, 70, 103, 85, 60, 85, 82, 25, 50, 243, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.FINIZEN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, AbilityId.WATER_VEIL, AbilityId.NONE, AbilityId.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PALAFIN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Zero Form", "zero", PokemonType.WATER, null, 1.3, 60.2, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), + new PokemonForm("Hero Form", "hero", PokemonType.WATER, null, 1.8, 97.4, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160) + ), + new PokemonSpecies(SpeciesId.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1, 35, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, false, null, true), + new PokemonForm("Segin Starmobile", "segin-starmobile", PokemonType.STEEL, PokemonType.DARK, 1.8, 240, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.INTIMIDATE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Schedar Starmobile", "schedar-starmobile", PokemonType.STEEL, PokemonType.FIRE, 1.8, 240, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.SPEED_BOOST, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Navi Starmobile", "navi-starmobile", PokemonType.STEEL, PokemonType.POISON, 1.8, 240, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.TOXIC_DEBRIS, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Ruchbah Starmobile", "ruchbah-starmobile", PokemonType.STEEL, PokemonType.FAIRY, 1.8, 240, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.MISTY_SURGE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Caph Starmobile", "caph-starmobile", PokemonType.STEEL, PokemonType.FIGHTING, 1.8, 240, AbilityId.STAMINA, AbilityId.NONE, AbilityId.STAMINA, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true) + ), + new PokemonSpecies(SpeciesId.CYCLIZAR, 9, false, false, false, "Mount Pokémon", PokemonType.DRAGON, PokemonType.NORMAL, 1.6, 63, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.REGENERATOR, 501, 70, 95, 65, 85, 65, 121, 190, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ORTHWORM, 9, false, false, false, "Earthworm Pokémon", PokemonType.STEEL, null, 2.5, 310, AbilityId.EARTH_EATER, AbilityId.NONE, AbilityId.SAND_VEIL, 480, 70, 85, 145, 60, 55, 65, 25, 50, 240, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLIMMET, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 0.7, 8, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.CORROSION, 350, 48, 35, 42, 105, 60, 60, 70, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLIMMORA, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.5, 45, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.CORROSION, 525, 83, 55, 90, 130, 81, 86, 25, 50, 184, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GREAVARD, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 0.6, 35, AbilityId.PICKUP, AbilityId.NONE, AbilityId.FLUFFY, 290, 50, 61, 60, 30, 55, 34, 120, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HOUNDSTONE, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 2, 15, AbilityId.SAND_RUSH, AbilityId.NONE, AbilityId.FLUFFY, 488, 72, 101, 100, 50, 97, 68, 60, 50, 171, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLAMIGO, 9, false, false, false, "Synchronize Pokémon", PokemonType.FLYING, PokemonType.FIGHTING, 1.6, 37, AbilityId.SCRAPPY, AbilityId.TANGLED_FEET, AbilityId.COSTAR, 500, 82, 115, 74, 75, 64, 90, 100, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CETODDLE, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 1.2, 45, AbilityId.THICK_FAT, AbilityId.SNOW_CLOAK, AbilityId.SHEER_FORCE, 334, 108, 68, 45, 30, 40, 43, 150, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CETITAN, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 4.5, 700, AbilityId.THICK_FAT, AbilityId.SLUSH_RUSH, AbilityId.SHEER_FORCE, 521, 170, 113, 65, 45, 55, 73, 50, 50, 182, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VELUZA, 9, false, false, false, "Jettison Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2.5, 90, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHARPNESS, 478, 90, 102, 73, 78, 65, 70, 100, 50, 167, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.DONDOZO, 9, false, false, false, "Big Catfish Pokémon", PokemonType.WATER, null, 12, 220, AbilityId.UNAWARE, AbilityId.OBLIVIOUS, AbilityId.WATER_VEIL, 530, 150, 100, 115, 65, 65, 35, 25, 50, 265, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TATSUGIRI, 9, false, false, false, "Mimicry Pokémon", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, GrowthRate.MEDIUM_SLOW, 50, false, false, + new PokemonForm("Curly Form", "curly", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), + new PokemonForm("Droopy Form", "droopy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), + new PokemonForm("Stretchy Form", "stretchy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true) + ), + new PokemonSpecies(SpeciesId.ANNIHILAPE, 9, false, false, false, "Rage Monkey Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 1.2, 56, AbilityId.VITAL_SPIRIT, AbilityId.INNER_FOCUS, AbilityId.DEFIANT, 535, 110, 115, 80, 50, 90, 90, 45, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CLODSIRE, 9, false, false, false, "Spiny Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.8, 223, AbilityId.POISON_POINT, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 430, 130, 75, 60, 45, 100, 20, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FARIGIRAF, 9, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 3.2, 160, AbilityId.CUD_CHEW, AbilityId.ARMOR_TAIL, AbilityId.SAP_SIPPER, 520, 120, 90, 70, 110, 70, 60, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUDUNSPARCE, 9, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 3.6, 39.2, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Two-Segment Form", "two-segment", PokemonType.NORMAL, null, 3.6, 39.2, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, false, ""), + new PokemonForm("Three-Segment Form", "three-segment", PokemonType.NORMAL, null, 4.5, 47.4, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182) + ), + new PokemonSpecies(SpeciesId.KINGAMBIT, 9, false, false, false, "Big Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 2, 120, AbilityId.DEFIANT, AbilityId.SUPREME_OVERLORD, AbilityId.PRESSURE, 550, 100, 135, 120, 60, 85, 50, 25, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GREAT_TUSK, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.FIGHTING, 2.2, 320, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 115, 131, 131, 53, 53, 87, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SCREAM_TAIL, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.PSYCHIC, 1.2, 8, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 115, 65, 99, 65, 115, 111, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.BRUTE_BONNET, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.2, 21, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 111, 127, 99, 79, 99, 55, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.FLUTTER_MANE, 9, false, false, false, "Paradox Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 1.4, 4, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 55, 55, 55, 135, 135, 135, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SLITHER_WING, 9, false, false, false, "Paradox Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 3.2, 92, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 85, 135, 79, 85, 105, 81, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SANDY_SHOCKS, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.GROUND, 2.3, 60, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 85, 81, 97, 121, 85, 101, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_TREADS, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.9, 240, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 90, 112, 120, 72, 70, 106, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_BUNDLE, 9, false, false, false, "Paradox Pokémon", PokemonType.ICE, PokemonType.WATER, 0.6, 11, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 56, 80, 114, 124, 60, 136, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_HANDS, 9, false, false, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.ELECTRIC, 1.8, 380.7, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 154, 140, 108, 50, 68, 50, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_JUGULIS, 9, false, false, false, "Paradox Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.3, 111, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 94, 80, 86, 122, 80, 108, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_MOTH, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.POISON, 1.2, 36, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 80, 70, 60, 140, 110, 110, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_THORNS, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.6, 303, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 100, 134, 110, 70, 84, 72, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.FRIGIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.5, 17, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 320, 65, 75, 45, 35, 45, 55, 45, 50, 64, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ARCTIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.8, 30, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 423, 90, 95, 66, 45, 65, 62, 25, 50, 148, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.BAXCALIBUR, 9, false, false, false, "Ice Dragon Pokémon", PokemonType.DRAGON, PokemonType.ICE, 2.1, 210, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 600, 115, 145, 92, 75, 86, 87, 10, 50, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GIMMIGHOUL, 9, false, false, false, "Coin Chest Pokémon", PokemonType.GHOST, null, 0.3, 5, AbilityId.RATTLED, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, GrowthRate.SLOW, null, false, false, + new PokemonForm("Chest Form", "chest", PokemonType.GHOST, null, 0.3, 5, AbilityId.RATTLED, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, false, "", true), + new PokemonForm("Roaming Form", "roaming", PokemonType.GHOST, null, 0.1, 1, AbilityId.RUN_AWAY, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 25, 75, 45, 80, 45, 50, 60, false, null, true) + ), + new PokemonSpecies(SpeciesId.GHOLDENGO, 9, false, false, false, "Coin Entity Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.2, 30, AbilityId.GOOD_AS_GOLD, AbilityId.NONE, AbilityId.NONE, 550, 87, 60, 95, 133, 91, 84, 45, 50, 275, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.WO_CHIEN, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.5, 74.2, AbilityId.TABLETS_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 85, 85, 100, 95, 135, 70, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CHIEN_PAO, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.ICE, 1.9, 152.2, AbilityId.SWORD_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 80, 120, 80, 90, 65, 135, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TING_LU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GROUND, 2.7, 699.7, AbilityId.VESSEL_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 155, 110, 125, 55, 80, 45, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CHI_YU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.4, 4.9, AbilityId.BEADS_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 55, 80, 80, 135, 120, 100, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ROARING_MOON, 9, false, false, false, "Paradox Pokémon", PokemonType.DRAGON, PokemonType.DARK, 2, 380, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 105, 139, 71, 55, 101, 119, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_VALIANT, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.FIGHTING, 1.4, 35, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 74, 130, 90, 120, 60, 116, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.KORAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, AbilityId.ORICHALCUM_PULSE, AbilityId.NONE, AbilityId.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Apex Build", "apex-build", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, AbilityId.ORICHALCUM_PULSE, AbilityId.NONE, AbilityId.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true) + ), + new PokemonSpecies(SpeciesId.MIRAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, AbilityId.HADRON_ENGINE, AbilityId.NONE, AbilityId.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Ultimate Mode", "ultimate-mode", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, AbilityId.HADRON_ENGINE, AbilityId.NONE, AbilityId.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true) + ), + new PokemonSpecies(SpeciesId.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", PokemonType.WATER, PokemonType.DRAGON, 3.5, 280, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 99, 83, 91, 125, 83, 109, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Gouging Fire and Raging Bolt + new PokemonSpecies(SpeciesId.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 1.5, 125, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 130, 88, 70, 108, 104, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Iron Boulder and Iron Crown + new PokemonSpecies(SpeciesId.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 4.4, AbilityId.SUPERSWEET_SYRUP, AbilityId.GLUTTONY, AbilityId.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false, + new PokemonForm("Counterfeit Form", "counterfeit", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), + new PokemonForm("Artisan Form", "artisan", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "counterfeit", true) + ), + new PokemonSpecies(SpeciesId.SINISTCHA, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, GrowthRate.SLOW, null, false, false, + new PokemonForm("Unremarkable Form", "unremarkable", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, false, null, true), + new PokemonForm("Masterpiece Form", "masterpiece", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, false, "unremarkable", true) + ), + new PokemonSpecies(SpeciesId.OKIDOGI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.8, 92.2, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.GUARD_DOG, 555, 88, 128, 115, 58, 86, 80, 3, 0, 276, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.MUNKIDORI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1, 12.2, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.FRISK, 555, 88, 75, 66, 130, 90, 106, 3, 0, 276, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.FEZANDIPITI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FAIRY, 1.4, 30.1, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.TECHNICIAN, 555, 88, 91, 82, 70, 125, 99, 3, 0, 276, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.OGERPON, 9, true, false, false, "Mask Pokémon", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, GrowthRate.SLOW, 0, false, false, + new PokemonForm("Teal Mask", "teal-mask", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, false, null, true), + new PokemonForm("Wellspring Mask", "wellspring-mask", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Hearthflame Mask", "hearthflame-mask", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Cornerstone Mask", "cornerstone-mask", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Teal Mask Terastallized", "teal-mask-tera", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.EMBODY_ASPECT_TEAL, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Wellspring Mask Terastallized", "wellspring-mask-tera", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, AbilityId.EMBODY_ASPECT_WELLSPRING, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Hearthflame Mask Terastallized", "hearthflame-mask-tera", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, AbilityId.EMBODY_ASPECT_HEARTHFLAME, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Cornerstone Mask Terastallized", "cornerstone-mask-tera", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, AbilityId.EMBODY_ASPECT_CORNERSTONE, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275) + ), + new PokemonSpecies(SpeciesId.ARCHALUDON, 9, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 2, 60, AbilityId.STAMINA, AbilityId.STURDY, AbilityId.STALWART, 600, 90, 105, 130, 125, 65, 85, 10, 50, 300, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HYDRAPPLE, 9, false, false, false, "Apple Hydra Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 1.8, 93, AbilityId.SUPERSWEET_SYRUP, AbilityId.REGENERATOR, AbilityId.STICKY_HOLD, 540, 106, 80, 110, 120, 80, 44, 10, 50, 270, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.GOUGING_FIRE, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 3.5, 590, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 105, 115, 121, 65, 93, 91, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.RAGING_BOLT, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 5.2, 480, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 125, 73, 91, 137, 89, 75, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_BOULDER, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.5, 162.5, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 120, 80, 68, 108, 124, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_CROWN, 9, false, false, false, "Paradox Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 156, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 72, 100, 122, 108, 98, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TERAPAGOS, 9, false, true, false, "Tera Pokémon", PokemonType.NORMAL, null, 0.2, 6.5, AbilityId.TERA_SHIFT, AbilityId.NONE, AbilityId.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, GrowthRate.SLOW, 50, false, false, + new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.2, 6.5, AbilityId.TERA_SHIFT, AbilityId.NONE, AbilityId.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, false, null, true), + new PokemonForm("Terastal Form", "terastal", PokemonType.NORMAL, null, 0.3, 16, AbilityId.TERA_SHELL, AbilityId.NONE, AbilityId.NONE, 600, 95, 95, 110, 105, 110, 85, 5, 50, 120), + new PokemonForm("Stellar Form", "stellar", PokemonType.NORMAL, null, 1.7, 77, AbilityId.TERAFORM_ZERO, AbilityId.NONE, AbilityId.NONE, 700, 160, 105, 110, 130, 110, 85, 5, 50, 140) + ), + new PokemonSpecies(SpeciesId.PECHARUNT, 9, false, false, true, "Subjugation Pokémon", PokemonType.POISON, PokemonType.GHOST, 0.3, 0.3, AbilityId.POISON_PUPPETEER, AbilityId.NONE, AbilityId.NONE, 600, 88, 88, 160, 88, 88, 88, 3, 0, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ALOLA_RATTATA, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.3, 3.8, AbilityId.GLUTTONY, AbilityId.HUSTLE, AbilityId.THICK_FAT, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_RATICATE, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.7, 25.5, AbilityId.GLUTTONY, AbilityId.HUSTLE, AbilityId.THICK_FAT, 413, 75, 71, 70, 40, 80, 77, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_RAICHU, 7, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.PSYCHIC, 0.7, 21, AbilityId.SURGE_SURFER, AbilityId.NONE, AbilityId.NONE, 485, 60, 85, 50, 95, 85, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_SANDSHREW, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 0.7, 40, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SLUSH_RUSH, 300, 50, 75, 90, 10, 35, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_SANDSLASH, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 1.2, 55, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SLUSH_RUSH, 450, 75, 100, 120, 25, 65, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_VULPIX, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, null, 0.6, 9.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SNOW_WARNING, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.ALOLA_NINETALES, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, PokemonType.FAIRY, 1.1, 19.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SNOW_WARNING, 505, 73, 67, 75, 81, 100, 109, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.ALOLA_DIGLETT, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.2, 1, AbilityId.SAND_VEIL, AbilityId.TANGLING_HAIR, AbilityId.SAND_FORCE, 265, 10, 55, 30, 35, 45, 90, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_DUGTRIO, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 66.6, AbilityId.SAND_VEIL, AbilityId.TANGLING_HAIR, AbilityId.SAND_FORCE, 425, 35, 100, 60, 50, 70, 110, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_MEOWTH, 7, false, false, false, "Scratch Cat Pokémon", PokemonType.DARK, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.RATTLED, 290, 40, 35, 35, 50, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_PERSIAN, 7, false, false, false, "Classy Cat Pokémon", PokemonType.DARK, null, 1.1, 33, AbilityId.FUR_COAT, AbilityId.TECHNICIAN, AbilityId.RATTLED, 440, 65, 60, 60, 75, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GEODUDE, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 0.4, 20.3, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GRAVELER, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1, 110, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GOLEM, 7, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.7, 316, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 495, 80, 120, 130, 55, 65, 45, 45, 70, 223, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GRIMER, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 0.7, 42, AbilityId.POISON_TOUCH, AbilityId.GLUTTONY, AbilityId.POWER_OF_ALCHEMY, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_MUK, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 52, AbilityId.POISON_TOUCH, AbilityId.GLUTTONY, AbilityId.POWER_OF_ALCHEMY, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_EXEGGUTOR, 7, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 10.9, 415.6, AbilityId.FRISK, AbilityId.NONE, AbilityId.HARVEST, 530, 95, 105, 85, 125, 75, 45, 45, 50, 186, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_MAROWAK, 7, false, false, false, "Bone Keeper Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1, 34, AbilityId.CURSED_BODY, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ETERNAL_FLOETTE, 6, true, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 551, 74, 65, 67, 125, 128, 92, 120, 70, 243, GrowthRate.MEDIUM_FAST, 0, false), //Marked as Sub-Legend, for casing purposes + new PokemonSpecies(SpeciesId.GALAR_MEOWTH, 8, false, false, false, "Scratch Cat Pokémon", PokemonType.STEEL, null, 0.4, 7.5, AbilityId.PICKUP, AbilityId.TOUGH_CLAWS, AbilityId.UNNERVE, 290, 50, 65, 55, 40, 40, 40, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_PONYTA, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, null, 0.8, 24, AbilityId.RUN_AWAY, AbilityId.PASTEL_VEIL, AbilityId.ANTICIPATION, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_RAPIDASH, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.7, 80, AbilityId.RUN_AWAY, AbilityId.PASTEL_VEIL, AbilityId.ANTICIPATION, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_SLOWPOKE, 8, false, false, false, "Dopey Pokémon", PokemonType.PSYCHIC, null, 1.2, 36, AbilityId.GLUTTONY, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_SLOWBRO, 8, false, false, false, "Hermit Crab Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.6, 70.5, AbilityId.QUICK_DRAW, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 100, 95, 100, 70, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_FARFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 42, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.SCRAPPY, 377, 52, 95, 55, 58, 62, 55, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_WEEZING, 8, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, PokemonType.FAIRY, 3, 16, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.MISTY_SURGE, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_MR_MIME, 8, false, false, false, "Barrier Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 56.8, AbilityId.VITAL_SPIRIT, AbilityId.SCREEN_CLEANER, AbilityId.ICE_BODY, 460, 50, 65, 65, 90, 90, 100, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_ARTICUNO, 8, true, false, false, "Freeze Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 50.9, AbilityId.COMPETITIVE, AbilityId.NONE, AbilityId.NONE, 580, 90, 85, 85, 125, 100, 95, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GALAR_ZAPDOS, 8, true, false, false, "Electric Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 1.6, 58.2, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 580, 90, 125, 90, 85, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GALAR_MOLTRES, 8, true, false, false, "Flame Pokémon", PokemonType.DARK, PokemonType.FLYING, 2, 66, AbilityId.BERSERK, AbilityId.NONE, AbilityId.NONE, 580, 90, 85, 90, 100, 125, 90, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GALAR_SLOWKING, 8, false, false, false, "Royal Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.8, 79.5, AbilityId.CURIOUS_MEDICINE, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 65, 80, 110, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_CORSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 0.6, 0.5, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 410, 60, 55, 100, 65, 100, 30, 60, 50, 144, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.GALAR_ZIGZAGOON, 8, false, false, false, "Tiny Raccoon Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.4, 17.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_LINOONE, 8, false, false, false, "Rushing Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.5, 32.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_DARUMAKA, 8, false, false, false, "Zen Charm Pokémon", PokemonType.ICE, null, 0.7, 40, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GALAR_DARMANITAN, 8, false, false, false, "Blazing Pokémon", PokemonType.ICE, null, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Standard Mode", "", PokemonType.ICE, null, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), + new PokemonForm("Zen Mode", "zen", PokemonType.ICE, PokemonType.FIRE, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 540, 105, 160, 55, 30, 55, 135, 60, 50, 189) + ), + new PokemonSpecies(SpeciesId.GALAR_YAMASK, 8, false, false, false, "Spirit Pokémon", PokemonType.GROUND, PokemonType.GHOST, 0.5, 1.5, AbilityId.WANDERING_SPIRIT, AbilityId.NONE, AbilityId.NONE, 303, 38, 55, 85, 30, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_STUNFISK, 8, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 20.5, AbilityId.MIMICRY, AbilityId.NONE, AbilityId.NONE, 471, 109, 81, 99, 66, 84, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HISUI_GROWLITHE, 8, false, false, false, "Puppy Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 22.7, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.ROCK_HEAD, 350, 60, 75, 45, 65, 50, 55, 190, 50, 70, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.HISUI_ARCANINE, 8, false, false, false, "Legendary Pokémon", PokemonType.FIRE, PokemonType.ROCK, 2, 168, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.ROCK_HEAD, 555, 95, 115, 80, 95, 80, 90, 85, 50, 194, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.HISUI_VOLTORB, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 0.5, 13, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 80, 66, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.HISUI_ELECTRODE, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 1.2, 81, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.HISUI_TYPHLOSION, 8, false, false, false, "Volcano Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 69.8, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FRISK, 534, 73, 84, 78, 119, 85, 95, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_QWILFISH, 8, false, false, false, "Balloon Pokémon", PokemonType.DARK, PokemonType.POISON, 0.5, 3.9, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HISUI_SNEASEL, 8, false, false, false, "Sharp Claw Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 0.9, 27, AbilityId.INNER_FOCUS, AbilityId.KEEN_EYE, AbilityId.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.HISUI_SAMUROTT, 8, false, false, false, "Formidable Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 58.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHARPNESS, 528, 90, 108, 80, 100, 65, 85, 45, 80, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_LILLIGANT, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 19.2, AbilityId.CHLOROPHYLL, AbilityId.HUSTLE, AbilityId.LEAF_GUARD, 480, 70, 105, 75, 50, 75, 105, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.HISUI_ZORUA, 8, false, false, false, "Tricky Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 0.7, 12.5, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 330, 35, 60, 40, 85, 40, 70, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_ZOROARK, 8, false, false, false, "Illusion Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 1.6, 83, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 510, 55, 100, 60, 125, 60, 110, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_BRAVIARY, 8, false, false, false, "Valiant Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 43.4, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.TINTED_LENS, 510, 110, 83, 70, 112, 70, 65, 60, 50, 179, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.HISUI_SLIGGOO, 8, false, false, false, "Soft Tissue Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 0.7, 68.5, AbilityId.SAP_SIPPER, AbilityId.SHELL_ARMOR, AbilityId.GOOEY, 452, 58, 75, 83, 83, 113, 40, 45, 35, 158, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HISUI_GOODRA, 8, false, false, false, "Dragon Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.7, 334.1, AbilityId.SAP_SIPPER, AbilityId.SHELL_ARMOR, AbilityId.GOOEY, 600, 80, 100, 100, 110, 150, 60, 45, 35, 270, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HISUI_AVALUGG, 8, false, false, false, "Iceberg Pokémon", PokemonType.ICE, PokemonType.ROCK, 1.4, 262.4, AbilityId.STRONG_JAW, AbilityId.ICE_BODY, AbilityId.STURDY, 514, 95, 127, 184, 34, 36, 38, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HISUI_DECIDUEYE, 8, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 37, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SCRAPPY, 530, 88, 112, 80, 95, 95, 60, 45, 50, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PALDEA_TAUROS, 9, false, false, false, "Wild Bull Pokémon", PokemonType.FIGHTING, null, 1.4, 115, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, GrowthRate.SLOW, 100, false, false, + new PokemonForm("Combat Breed", "combat", PokemonType.FIGHTING, null, 1.4, 115, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, "", true), + new PokemonForm("Blaze Breed", "blaze", PokemonType.FIGHTING, PokemonType.FIRE, 1.4, 85, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), + new PokemonForm("Aqua Breed", "aqua", PokemonType.FIGHTING, PokemonType.WATER, 1.4, 110, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true) + ), + new PokemonSpecies(SpeciesId.PALDEA_WOOPER, 9, false, false, false, "Water Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 0.4, 11, AbilityId.POISON_POINT, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BLOODMOON_URSALUNA, 9, true, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.7, 333, AbilityId.MINDS_EYE, AbilityId.NONE, AbilityId.NONE, 555, 113, 70, 120, 135, 65, 52, 75, 50, 278, GrowthRate.MEDIUM_FAST, 50, false) + ); +} diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index e21065c184f..1199ac581a6 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -34,17 +34,21 @@ import type { StatStageChangeCallback } from "#phases/stat-stage-change-phase"; import i18next from "#plugins/i18n"; import type { AbilityBattlerTagType, + BattlerTagTypeData, ContactSetStatusProtectedTagType, ContactStatStageChangeProtectedTagType, + CritStageBoostTagType, DamageProtectedTagType, EndureTagType, HighestStatBoostTagType, MoveRestrictionBattlerTagType, ProtectionBattlerTagType, + RemovedTypeTagType, SemiInvulnerableTagType, TrappingBattlerTagType, + TypeBoostTagType, } from "#types/battler-tags"; -import type { Mutable, NonFunctionProperties } from "#types/type-helpers"; +import type { Mutable } from "#types/type-helpers"; import { BooleanHolder, coerceArray, getFrameMs, isNullOrUndefined, NumberHolder, toDmgValue } from "#utils/common"; /** @@ -80,13 +84,10 @@ import { BooleanHolder, coerceArray, getFrameMs, isNullOrUndefined, NumberHolder * // Then we must also define a loadTag method with one of the following signatures * public override loadTag(source: BaseBattlerTag & Pick(source: BaseBattlerTag & Pick): void; - * public override loadTag(source: NonFunctionProperties): void; * } * ``` * Notes * - If the class has any subclasses, then the second form of `loadTag` *must* be used. - * - The third form *must not* be used if the class has any getters, as typescript would expect such fields to be - * present in `source`. */ /** Interface containing the serializable fields of BattlerTag */ @@ -201,11 +202,24 @@ export class BattlerTag implements BaseBattlerTag { } } -export abstract class SerializableBattlerTag extends BattlerTag { +export class SerializableBattlerTag extends BattlerTag { /** Nonexistent, dummy field to allow typescript to distinguish this class from `BattlerTag` */ private declare __SerializableBattlerTag: never; } +/** + * Interface for a generic serializable battler tag, i.e. one that does not have a + * dedicated subclass. + * + * @remarks + * Used to ensure type safety when serializing battler tags, + * allowing typescript to properly infer the type of the tag. + * @see BattlerTagTypeMap + */ +interface GenericSerializableBattlerTag extends SerializableBattlerTag { + tagType: T; +} + /** * Base class for tags that restrict the usage of moves. This effect is generally referred to as "disabling" a move * in-game (not to be confused with {@linkcode MoveId.DISABLE}). @@ -419,7 +433,6 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { public override readonly tagType = BattlerTagType.GORILLA_TACTICS; /** ID of the move that the user is locked into using*/ public readonly moveId: MoveId = MoveId.NONE; - constructor() { super(BattlerTagType.GORILLA_TACTICS, BattlerTagLapseType.CUSTOM, 0); } @@ -564,6 +577,7 @@ export class BeakBlastChargingTag extends BattlerTag { * @see {@link https://bulbapedia.bulbagarden.net/wiki/Shell_Trap_(move) | Shell Trap} */ export class ShellTrapTag extends BattlerTag { + public override readonly tagType = BattlerTagType.SHELL_TRAP; public activated = false; constructor() { @@ -1148,6 +1162,7 @@ export class PowderTag extends BattlerTag { } export class NightmareTag extends SerializableBattlerTag { + public override readonly tagType = BattlerTagType.NIGHTMARE; constructor() { super(BattlerTagType.NIGHTMARE, BattlerTagLapseType.TURN_END, 1, MoveId.NIGHTMARE); } @@ -1201,6 +1216,7 @@ export class NightmareTag extends SerializableBattlerTag { } export class FrenzyTag extends SerializableBattlerTag { + public override readonly tagType = BattlerTagType.FRENZY; constructor(turnCount: number, sourceMove: MoveId, sourceId: number) { super(BattlerTagType.FRENZY, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); } @@ -1235,7 +1251,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { ); } - public override loadTag(source: NonFunctionProperties): void { + public override loadTag(source: BaseBattlerTag & Pick): void { super.loadTag(source); this.moveId = source.moveId; } @@ -2038,8 +2054,8 @@ export class TruantTag extends AbilityBattlerTag { const lastMove = pokemon.getLastXMoves()[0]; - if (!lastMove) { - // Don't interrupt move if last move was `Moves.NONE` OR no prior move was found + if (!lastMove || lastMove.move === MoveId.NONE) { + // Don't interrupt move if last move was `MoveId.NONE` OR no prior move was found return true; } @@ -2099,8 +2115,8 @@ export class SlowStartTag extends AbilityBattlerTag { export class HighestStatBoostTag extends AbilityBattlerTag { public declare readonly tagType: HighestStatBoostTagType; - public stat: Stat; - public multiplier: number; + public stat: EffectiveStat = Stat.ATK; + public multiplier = 1.3; constructor(tagType: HighestStatBoostTagType, ability: AbilityId) { super(tagType, ability, BattlerTagLapseType.CUSTOM, 1); @@ -2112,28 +2128,28 @@ export class HighestStatBoostTag extends AbilityBattlerTag { */ public override loadTag(source: BaseBattlerTag & Pick): void { super.loadTag(source); - this.stat = source.stat as Stat; + this.stat = source.stat; this.multiplier = source.multiplier; } onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - let highestStat: EffectiveStat; - EFFECTIVE_STATS.map(s => - pokemon.getEffectiveStat(s, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true), - ).reduce((highestValue: number, value: number, i: number) => { - if (value > highestValue) { - highestStat = EFFECTIVE_STATS[i]; - return value; - } - return highestValue; - }, 0); + const highestStat = EFFECTIVE_STATS.reduce( + (curr: [EffectiveStat, number], stat: EffectiveStat) => { + const value = pokemon.getEffectiveStat(stat, undefined, undefined, true, true, true, false, true, true); + if (value > curr[1]) { + curr[0] = stat; + curr[1] = value; + } + return curr; + }, + [Stat.ATK, 0], + )[0]; - highestStat = highestStat!; // tell TS compiler it's defined! this.stat = highestStat; - this.multiplier = this.stat === Stat.SPD ? 1.5 : 1.3; + this.multiplier = highestStat === Stat.SPD ? 1.5 : 1.3; globalScene.phaseManager.queueMessage( i18next.t("battlerTags:highestStatBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -2203,7 +2219,7 @@ export class SemiInvulnerableTag extends SerializableBattlerTag { } } -export class TypeImmuneTag extends SerializableBattlerTag { +export abstract class TypeImmuneTag extends SerializableBattlerTag { #immuneType: PokemonType; public get immuneType(): PokemonType { return this.#immuneType; @@ -2222,6 +2238,7 @@ export class TypeImmuneTag extends SerializableBattlerTag { * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | MoveId.TELEKINESIS} */ export class FloatingTag extends TypeImmuneTag { + public override readonly tagType = BattlerTagType.FLOATING; constructor(tagType: BattlerTagType, sourceMove: MoveId, turnCount: number) { super(tagType, sourceMove, PokemonType.GROUND, turnCount); } @@ -2251,6 +2268,7 @@ export class FloatingTag extends TypeImmuneTag { } export class TypeBoostTag extends SerializableBattlerTag { + public declare readonly tagType: TypeBoostTagType; #boostedType: PokemonType; #boostValue: number; #oneUse: boolean; @@ -2300,13 +2318,24 @@ export class TypeBoostTag extends SerializableBattlerTag { } export class CritBoostTag extends SerializableBattlerTag { - constructor(tagType: BattlerTagType, sourceMove: MoveId) { + public declare readonly tagType: CritStageBoostTagType; + /** The number of stages boosted by this tag */ + public readonly critStages: number = 1; + + constructor(tagType: CritStageBoostTagType, sourceMove: MoveId) { super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove, undefined, true); } onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); + // Dragon cheer adds +2 crit stages if the pokemon is a Dragon type when the tag is added + if (this.tagType === BattlerTagType.DRAGON_CHEER && pokemon.getTypes(true).includes(PokemonType.DRAGON)) { + (this as Mutable).critStages = 2; + } else { + (this as Mutable).critStages = 1; + } + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:critBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -2327,23 +2356,12 @@ export class CritBoostTag extends SerializableBattlerTag { }), ); } -} -/** - * Tag for the effects of Dragon Cheer, which boosts the critical hit ratio of the user's allies. - */ -export class DragonCheerTag extends CritBoostTag { - /** The types of the user's ally when the tag is added */ - public typesOnAdd: PokemonType[]; - - constructor() { - super(BattlerTagType.CRIT_BOOST, MoveId.DRAGON_CHEER); - } - - onAdd(pokemon: Pokemon): void { - super.onAdd(pokemon); - - this.typesOnAdd = pokemon.getTypes(true); + public override loadTag(source: BaseBattlerTag & Pick): void { + super.loadTag(source); + // TODO: Remove the nullish coalescing once Zod Schemas come in + // For now, this is kept for backwards compatibility with older save files + (this as Mutable).critStages = source.critStages ?? 1; } } @@ -2402,6 +2420,7 @@ export class SaltCuredTag extends SerializableBattlerTag { } export class CursedTag extends SerializableBattlerTag { + public override readonly tagType = BattlerTagType.CURSED; constructor(sourceId: number) { super(BattlerTagType.CURSED, BattlerTagLapseType.TURN_END, 1, MoveId.CURSE, sourceId, true); } @@ -2448,7 +2467,8 @@ export class CursedTag extends SerializableBattlerTag { * Battler tag for attacks that remove a type post use. */ export class RemovedTypeTag extends SerializableBattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { + public declare readonly tagType: RemovedTypeTagType; + constructor(tagType: RemovedTypeTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 1, sourceMove); } } @@ -2458,7 +2478,8 @@ export class RemovedTypeTag extends SerializableBattlerTag { * @description `IGNORE_FLYING`: Persistent grounding effects (i.e. from Smack Down and Thousand Waves) */ export class GroundedTag extends SerializableBattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { + public override readonly tagType = BattlerTagType.IGNORE_FLYING; + constructor(tagType: BattlerTagType.IGNORE_FLYING, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 1, sourceMove); } } @@ -2593,7 +2614,7 @@ export class IceFaceBlockDamageTag extends FormBlockDamageTag { */ export class CommandedTag extends SerializableBattlerTag { public override readonly tagType = BattlerTagType.COMMANDED; - public readonly tatsugiriFormKey: string; + public readonly tatsugiriFormKey: string = "curly"; constructor(sourceId: number) { super(BattlerTagType.COMMANDED, BattlerTagLapseType.CUSTOM, 0, MoveId.NONE, sourceId); @@ -2618,7 +2639,7 @@ export class CommandedTag extends SerializableBattlerTag { } } - override loadTag(source: NonFunctionProperties): void { + override loadTag(source: BaseBattlerTag & Pick): void { super.loadTag(source); (this as Mutable).tatsugiriFormKey = source.tatsugiriFormKey; } @@ -2647,7 +2668,7 @@ export class StockpilingTag extends SerializableBattlerTag { super(BattlerTagType.STOCKPILING, BattlerTagLapseType.CUSTOM, 1, sourceMove); } - private onStatStagesChanged: StatStageChangeCallback = (_, statsChanged, statChanges) => { + private onStatStagesChanged(_: Pokemon | null, statsChanged: BattleStat[], statChanges: number[]) { const defChange = statChanges[statsChanged.indexOf(Stat.DEF)] ?? 0; const spDefChange = statChanges[statsChanged.indexOf(Stat.SPDEF)] ?? 0; @@ -2657,9 +2678,15 @@ export class StockpilingTag extends SerializableBattlerTag { if (spDefChange) { this.statChangeCounts[Stat.SPDEF]++; } - }; - public override loadTag(source: NonFunctionProperties): void { + // Removed during bundling; used to ensure this method's signature retains parity + // with the `StatStageChangeCallback` type. + this.onStatStagesChanged satisfies StatStageChangeCallback; + } + + public override loadTag( + source: BaseBattlerTag & Pick, + ): void { super.loadTag(source); this.stockpiledCount = source.stockpiledCount || 0; this.statChangeCounts = { @@ -2695,7 +2722,7 @@ export class StockpilingTag extends SerializableBattlerTag { true, false, true, - this.onStatStagesChanged, + this.onStatStagesChanged.bind(this), ); } } @@ -3006,7 +3033,7 @@ export class AutotomizedTag extends SerializableBattlerTag { this.onAdd(pokemon); } - public override loadTag(source: NonFunctionProperties): void { + public override loadTag(source: BaseBattlerTag & Pick): void { super.loadTag(source); this.autotomizeCount = source.autotomizeCount; } @@ -3537,6 +3564,7 @@ export class GrudgeTag extends SerializableBattlerTag { * @param sourcePokemon - The source of the move that fainted the tag's bearer * @returns `false` if Grudge activates its effect or lapses */ + // TODO: Confirm whether this should interact with copying moves override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType, sourcePokemon?: Pokemon): boolean { if (lapseType === BattlerTagLapseType.CUSTOM && sourcePokemon) { if (sourcePokemon.isActive() && pokemon.isOpponent(sourcePokemon)) { @@ -3641,7 +3669,7 @@ export function getBattlerTag( case BattlerTagType.FRENZY: return new FrenzyTag(turnCount, sourceMove, sourceId); case BattlerTagType.CHARGING: - return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, 1, sourceMove, sourceId); + return new SerializableBattlerTag(tagType, BattlerTagLapseType.CUSTOM, 1, sourceMove, sourceId); case BattlerTagType.ENCORE: return new EncoreTag(sourceId); case BattlerTagType.HELPING_HAND: @@ -3721,15 +3749,14 @@ export function getBattlerTag( case BattlerTagType.FIRE_BOOST: return new TypeBoostTag(tagType, sourceMove, PokemonType.FIRE, 1.5, false); case BattlerTagType.CRIT_BOOST: - return new CritBoostTag(tagType, sourceMove); case BattlerTagType.DRAGON_CHEER: - return new DragonCheerTag(); + return new CritBoostTag(tagType, sourceMove); case BattlerTagType.ALWAYS_CRIT: case BattlerTagType.IGNORE_ACCURACY: - return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, 2, sourceMove); + return new SerializableBattlerTag(tagType, BattlerTagLapseType.TURN_END, 2, sourceMove); case BattlerTagType.ALWAYS_GET_HIT: case BattlerTagType.RECEIVE_DOUBLE_DAMAGE: - return new BattlerTag(tagType, BattlerTagLapseType.PRE_MOVE, 1, sourceMove); + return new SerializableBattlerTag(tagType, BattlerTagLapseType.PRE_MOVE, 1, sourceMove); case BattlerTagType.BYPASS_SLEEP: return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove); case BattlerTagType.IGNORE_FLYING: @@ -3815,7 +3842,7 @@ export function getBattlerTag( * @param source - An object containing the data necessary to reconstruct the BattlerTag. * @returns The valid battler tag */ -export function loadBattlerTag(source: SerializableBattlerTag): BattlerTag { +export function loadBattlerTag(source: BattlerTag | BattlerTagTypeData): BattlerTag { // TODO: Remove this bang by fixing the signature of `getBattlerTag` // to allow undefined sourceIds and sourceMoves (with appropriate fallback for tags that require it) const tag = getBattlerTag(source.tagType, source.turnCount, source.sourceMove!, source.sourceId!); @@ -3856,7 +3883,7 @@ export type BattlerTagTypeMap = { [BattlerTagType.POWDER]: PowderTag; [BattlerTagType.NIGHTMARE]: NightmareTag; [BattlerTagType.FRENZY]: FrenzyTag; - [BattlerTagType.CHARGING]: BattlerTag; + [BattlerTagType.CHARGING]: GenericSerializableBattlerTag; [BattlerTagType.ENCORE]: EncoreTag; [BattlerTagType.HELPING_HAND]: HelpingHandTag; [BattlerTagType.INGRAIN]: IngrainTag; @@ -3896,11 +3923,11 @@ export type BattlerTagTypeMap = { [BattlerTagType.HIDDEN]: SemiInvulnerableTag; [BattlerTagType.FIRE_BOOST]: TypeBoostTag; [BattlerTagType.CRIT_BOOST]: CritBoostTag; - [BattlerTagType.DRAGON_CHEER]: DragonCheerTag; - [BattlerTagType.ALWAYS_CRIT]: BattlerTag; - [BattlerTagType.IGNORE_ACCURACY]: BattlerTag; - [BattlerTagType.ALWAYS_GET_HIT]: BattlerTag; - [BattlerTagType.RECEIVE_DOUBLE_DAMAGE]: BattlerTag; + [BattlerTagType.DRAGON_CHEER]: CritBoostTag; + [BattlerTagType.ALWAYS_CRIT]: GenericSerializableBattlerTag; + [BattlerTagType.IGNORE_ACCURACY]: GenericSerializableBattlerTag; + [BattlerTagType.ALWAYS_GET_HIT]: GenericSerializableBattlerTag; + [BattlerTagType.RECEIVE_DOUBLE_DAMAGE]: GenericSerializableBattlerTag; [BattlerTagType.BYPASS_SLEEP]: BattlerTag; [BattlerTagType.IGNORE_FLYING]: GroundedTag; [BattlerTagType.ROOSTED]: RoostedTag; diff --git a/src/data/challenge.ts b/src/data/challenge.ts index aaa82a7d20f..1a1a3774f8f 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -4,15 +4,12 @@ import { defaultStarterSpecies } from "#app/constants"; import { globalScene } from "#app/global-scene"; import { pokemonEvolutions } from "#balance/pokemon-evolutions"; import { speciesStarterCosts } from "#balance/starters"; -import { getEggTierForSpecies } from "#data/egg"; import { pokemonFormChanges } from "#data/pokemon-forms"; import type { PokemonSpecies } from "#data/pokemon-species"; -import { getPokemonSpeciesForm } from "#data/pokemon-species"; import { BattleType } from "#enums/battle-type"; import { ChallengeType } from "#enums/challenge-type"; import { Challenges } from "#enums/challenges"; import { TypeColor, TypeShadow } from "#enums/color"; -import { EggTier } from "#enums/egg-type"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { ModifierTier } from "#enums/modifier-tier"; import type { MoveId } from "#enums/move-id"; @@ -26,9 +23,9 @@ import type { Pokemon } from "#field/pokemon"; import { Trainer } from "#field/trainer"; import { PokemonMove } from "#moves/pokemon-move"; import type { DexAttrProps, GameData } from "#system/game-data"; -import { BooleanHolder, type NumberHolder, randSeedItem } from "#utils/common"; +import { BooleanHolder, isBetween, type NumberHolder, randSeedItem } from "#utils/common"; import { deepCopy } from "#utils/data"; -import { getPokemonSpecies } from "#utils/pokemon-utils"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; import { toCamelCase, toSnakeCase } from "#utils/strings"; import i18next from "i18next"; @@ -685,14 +682,11 @@ export class SingleTypeChallenge extends Challenge { */ export class FreshStartChallenge extends Challenge { constructor() { - super(Challenges.FRESH_START, 3); + super(Challenges.FRESH_START, 2); } applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder): boolean { - if ( - (this.value === 1 && !defaultStarterSpecies.includes(pokemon.speciesId)) || - (this.value === 2 && getEggTierForSpecies(pokemon) >= EggTier.EPIC) - ) { + if (this.value === 1 && !defaultStarterSpecies.includes(pokemon.speciesId)) { valid.value = false; return true; } @@ -708,12 +702,18 @@ export class FreshStartChallenge extends Challenge { pokemon.abilityIndex = pokemon.abilityIndex % 2; // Always base ability, if you set it to hidden it wraps to first ability pokemon.passive = false; // Passive isn't unlocked pokemon.nature = Nature.HARDY; // Neutral nature - pokemon.moveset = pokemon.species + let validMoves = pokemon.species .getLevelMoves() - .filter(m => m[0] <= 5) - .map(lm => lm[1]) - .slice(0, 4) - .map(m => new PokemonMove(m)); // No egg moves + .filter(m => isBetween(m[0], 1, 5)) + .map(lm => lm[1]); + // Filter egg moves out of the moveset + pokemon.moveset = pokemon.moveset.filter(pm => validMoves.includes(pm.moveId)); + if (pokemon.moveset.length < 4) { + // If there's empty slots fill with remaining valid moves + const existingMoveIds = pokemon.moveset.map(pm => pm.moveId); + validMoves = validMoves.filter(m => !existingMoveIds.includes(m)); + pokemon.moveset = pokemon.moveset.concat(validMoves.map(m => new PokemonMove(m))).slice(0, 4); + } pokemon.luck = 0; // No luck pokemon.shiny = false; // Not shiny pokemon.variant = 0; // Not shiny diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index 9a6f560933a..b5fb0aa8c07 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -2,7 +2,7 @@ import { pokerogueApi } from "#api/pokerogue-api"; import { globalScene } from "#app/global-scene"; import { speciesStarterCosts } from "#balance/starters"; import type { PokemonSpeciesForm } from "#data/pokemon-species"; -import { getPokemonSpeciesForm, PokemonSpecies } from "#data/pokemon-species"; +import { PokemonSpecies } from "#data/pokemon-species"; import { BiomeId } from "#enums/biome-id"; import { PartyMemberStrength } from "#enums/party-member-strength"; import type { SpeciesId } from "#enums/species-id"; @@ -10,7 +10,7 @@ import { PlayerPokemon } from "#field/pokemon"; import type { Starter } from "#ui/starter-select-ui-handler"; import { randSeedGauss, randSeedInt, randSeedItem } from "#utils/common"; import { getEnumValues } from "#utils/enums"; -import { getPokemonSpecies } from "#utils/pokemon-utils"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; export interface DailyRunConfig { seed: number; diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 6d97d8faf1e..e55eedc29aa 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -256,7 +256,7 @@ export const noAbilityTypeOverrideMoves: ReadonlySet = new Set([ MoveId.HIDDEN_POWER, ]); -/** Set of all moves that cannot be copied by {@linkcode Moves.SKETCH}. */ +/** Set of all moves that cannot be copied by {@linkcode MoveId.SKETCH}. */ export const invalidSketchMoves: ReadonlySet = new Set([ MoveId.NONE, MoveId.CHATTER, @@ -270,7 +270,7 @@ export const invalidSketchMoves: ReadonlySet = new Set([ MoveId.BREAKNECK_BLITZ__SPECIAL, ]); -/** Set of all moves that cannot be locked into by {@linkcode Moves.ENCORE}. */ +/** Set of all moves that cannot be locked into by {@linkcode MoveId.ENCORE}. */ export const invalidEncoreMoves: ReadonlySet = new Set([ MoveId.MIMIC, MoveId.MIRROR_MOVE, diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index bde5f2977d8..757f57e0b1f 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -2587,7 +2587,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { } /** - * Applies the effect of {@linkcode Moves.PSYCHO_SHIFT} to its target. + * Applies the effect of {@linkcode MoveId.PSYCHO_SHIFT} to its target. * Psycho Shift takes the user's status effect and passes it onto the target. * The user is then healed after the move has been successfully executed. * @param user - The {@linkcode Pokemon} using the move @@ -2927,7 +2927,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { /** * Attribute to add the {@linkcode BattlerTagType.BYPASS_SLEEP | BYPASS_SLEEP Battler Tag} for 1 turn to the user before move use. - * Used by {@linkcode Moves.SNORE} and {@linkcode Moves.SLEEP_TALK}. + * Used by {@linkcode MoveId.SNORE} and {@linkcode MoveId.SLEEP_TALK}. */ // TODO: Should this use a battler tag? // TODO: Give this `userSleptOrComatoseCondition` by default @@ -5912,20 +5912,21 @@ export class ProtectAttr extends AddBattlerTagAttr { getCondition(): MoveConditionFunc { return ((user, target, move): boolean => { let timesUsed = 0; - const moveHistory = user.getLastXMoves(); - let turnMove: TurnMove | undefined; - while (moveHistory.length) { - turnMove = moveHistory.shift(); - if (!allMoves[turnMove?.move ?? MoveId.NONE].hasAttr("ProtectAttr") || turnMove?.result !== MoveResult.SUCCESS) { + for (const turnMove of user.getLastXMoves(-1).slice()) { + if ( + // Quick & Wide guard increment the Protect counter without using it for fail chance + !(allMoves[turnMove.move].hasAttr("ProtectAttr") || + [MoveId.QUICK_GUARD, MoveId.WIDE_GUARD].includes(turnMove.move)) || + turnMove.result !== MoveResult.SUCCESS + ) { break; } - timesUsed++; + + timesUsed++ } - if (timesUsed) { - return !user.randBattleSeedInt(Math.pow(3, timesUsed)); - } - return true; + + return timesUsed === 0 || user.randBattleSeedInt(Math.pow(3, timesUsed)) === 0; }); } } @@ -7139,7 +7140,7 @@ export class CopyMoveAttr extends CallMoveAttr { /** * Attribute used for moves that cause the target to repeat their last used move. * - * Used by {@linkcode Moves.INSTRUCT | Instruct}. + * Used by {@linkcode MoveId.INSTRUCT | Instruct}. * @see [Instruct on Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/Instruct_(move)) */ export class RepeatMoveAttr extends MoveEffectAttr { @@ -7402,7 +7403,7 @@ const targetMoveCopiableCondition: MoveConditionFunc = (user, target, move) => { /** * Attribute to temporarily copy the last move in the target's moveset. - * Used by {@linkcode Moves.MIMIC}. + * Used by {@linkcode MoveId.MIMIC}. */ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -7966,7 +7967,7 @@ export class VariableTargetAttr extends MoveAttr { /** * Attribute to cause the target to move immediately after the user. * - * Used by {@linkcode Moves.AFTER_YOU}. + * Used by {@linkcode MoveId.AFTER_YOU}. */ export class AfterYouAttr extends MoveEffectAttr { /** @@ -10887,7 +10888,7 @@ export function initMoves() { .attr(MovePowerMultiplierAttr, (_user, target) => target.turnData.acted ? 1 : 2) .bitingMove(), new StatusMove(MoveId.COURT_CHANGE, PokemonType.NORMAL, 100, 10, -1, 0, 8) - .attr(SwapArenaTagsAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.MIST, ArenaTagType.REFLECT, ArenaTagType.SPIKES, ArenaTagType.STEALTH_ROCK, ArenaTagType.STICKY_WEB, ArenaTagType.TAILWIND, ArenaTagType.TOXIC_SPIKES ]), + .attr(SwapArenaTagsAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.MIST, ArenaTagType.REFLECT, ArenaTagType.SPIKES, ArenaTagType.STEALTH_ROCK, ArenaTagType.STICKY_WEB, ArenaTagType.TAILWIND, ArenaTagType.TOXIC_SPIKES, ArenaTagType.SAFEGUARD, ArenaTagType.FIRE_GRASS_PLEDGE, ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagType.GRASS_WATER_PLEDGE ]), /* Unused */ new AttackMove(MoveId.MAX_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 5b2805f9310..ac3d4def654 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -63,12 +63,12 @@ export const ATrainersTestEncounter: MysteryEncounter = MysteryEncounterBuilder. break; case 3: trainerType = TrainerType.MIRA; - spriteKeys = getSpriteKeysFromSpecies(SpeciesId.ALAKAZAM, false, 1); + spriteKeys = getSpriteKeysFromSpecies(SpeciesId.ALAKAZAM); trainerNameKey = "mira"; break; case 4: trainerType = TrainerType.RILEY; - spriteKeys = getSpriteKeysFromSpecies(SpeciesId.LUCARIO, false, 1); + spriteKeys = getSpriteKeysFromSpecies(SpeciesId.LUCARIO); trainerNameKey = "riley"; break; default: @@ -164,8 +164,8 @@ export const ATrainersTestEncounter: MysteryEncounter = MysteryEncounterBuilder. encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.epic`)); setEncounterRewards( { - guaranteedModifierTypeFuncs: [modifierTypes.SACRED_ASH], - guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ULTRA], + guaranteedModifierTypeFuncs: [modifierTypes.RELIC_GOLD], + guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE], fillRemaining: true, }, [eggOptions], diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 29517ac2531..d90e207cc9a 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -23,12 +23,8 @@ const namespace = "mysteryEncounters/darkDeal"; /** Exclude Ultra Beasts (inludes Cosmog/Solgaleo/Lunala/Necrozma), Paradox (includes Miraidon/Koraidon), Eternatus, and Mythicals */ const excludedBosses = [ - SpeciesId.NECROZMA, - SpeciesId.COSMOG, - SpeciesId.COSMOEM, - SpeciesId.SOLGALEO, - SpeciesId.LUNALA, SpeciesId.ETERNATUS, + /** UBs */ SpeciesId.NIHILEGO, SpeciesId.BUZZWOLE, SpeciesId.PHEROMOSA, @@ -40,6 +36,12 @@ const excludedBosses = [ SpeciesId.NAGANADEL, SpeciesId.STAKATAKA, SpeciesId.BLACEPHALON, + SpeciesId.COSMOG, + SpeciesId.COSMOEM, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NECROZMA, + /** Paradox */ SpeciesId.GREAT_TUSK, SpeciesId.SCREAM_TAIL, SpeciesId.BRUTE_BONNET, @@ -47,10 +49,10 @@ const excludedBosses = [ SpeciesId.SLITHER_WING, SpeciesId.SANDY_SHOCKS, SpeciesId.ROARING_MOON, - SpeciesId.KORAIDON, SpeciesId.WALKING_WAKE, SpeciesId.GOUGING_FIRE, SpeciesId.RAGING_BOLT, + SpeciesId.KORAIDON, SpeciesId.IRON_TREADS, SpeciesId.IRON_BUNDLE, SpeciesId.IRON_HANDS, @@ -58,22 +60,23 @@ const excludedBosses = [ SpeciesId.IRON_MOTH, SpeciesId.IRON_THORNS, SpeciesId.IRON_VALIANT, - SpeciesId.MIRAIDON, SpeciesId.IRON_LEAVES, SpeciesId.IRON_BOULDER, SpeciesId.IRON_CROWN, + SpeciesId.MIRAIDON, + /** Mythical */ SpeciesId.MEW, SpeciesId.CELEBI, - SpeciesId.DEOXYS, SpeciesId.JIRACHI, - SpeciesId.DARKRAI, + SpeciesId.DEOXYS, SpeciesId.PHIONE, SpeciesId.MANAPHY, - SpeciesId.ARCEUS, + SpeciesId.DARKRAI, SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, SpeciesId.VICTINI, - SpeciesId.MELOETTA, SpeciesId.KELDEO, + SpeciesId.MELOETTA, SpeciesId.GENESECT, SpeciesId.DIANCIE, SpeciesId.HOOPA, @@ -81,9 +84,9 @@ const excludedBosses = [ SpeciesId.MAGEARNA, SpeciesId.MARSHADOW, SpeciesId.ZERAORA, - SpeciesId.ZARUDE, SpeciesId.MELTAN, SpeciesId.MELMETAL, + SpeciesId.ZARUDE, SpeciesId.PECHARUNT, ]; diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index b547064fd66..d77326837cd 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -59,7 +59,7 @@ export const TeleportingHijinksEncounter: MysteryEncounter = MysteryEncounterBui ) .withEncounterTier(MysteryEncounterTier.COMMON) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) - .withSceneRequirement(new WaveModulusRequirement([1, 2, 3], 10)) // Must be in first 3 waves after boss wave + .withSceneRequirement(new WaveModulusRequirement([2, 3, 4], 10)) // Must be in first 3 waves after boss wave .withSceneRequirement(new MoneyRequirement(0, MONEY_COST_MULTIPLIER)) // Must be able to pay teleport cost .withAutoHideIntroVisuals(false) .withCatchAllowed(true) diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 235bd322ef8..7c528e2305b 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -52,37 +52,6 @@ class BreederSpeciesEvolution { } const POOL_1_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [ - [SpeciesId.MUNCHLAX, new BreederSpeciesEvolution(SpeciesId.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE)], - [ - SpeciesId.HAPPINY, - new BreederSpeciesEvolution(SpeciesId.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(SpeciesId.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE), - ], - [ - SpeciesId.MAGBY, - new BreederSpeciesEvolution(SpeciesId.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(SpeciesId.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE), - ], - [ - SpeciesId.ELEKID, - new BreederSpeciesEvolution(SpeciesId.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(SpeciesId.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE), - ], - [SpeciesId.RIOLU, new BreederSpeciesEvolution(SpeciesId.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE)], - [ - SpeciesId.BUDEW, - new BreederSpeciesEvolution(SpeciesId.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(SpeciesId.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE), - ], - [SpeciesId.TOXEL, new BreederSpeciesEvolution(SpeciesId.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE)], - [ - SpeciesId.MIME_JR, - new BreederSpeciesEvolution(SpeciesId.GALAR_MR_MIME, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(SpeciesId.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE), - ], -]; - -const POOL_2_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [ [ SpeciesId.PICHU, new BreederSpeciesEvolution(SpeciesId.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), @@ -93,24 +62,63 @@ const POOL_2_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [ new BreederSpeciesEvolution(SpeciesId.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(SpeciesId.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE), ], - [SpeciesId.SMOOCHUM, new BreederSpeciesEvolution(SpeciesId.JYNX, SECOND_STAGE_EVOLUTION_WAVE)], - [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE)], - [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE)], - [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE)], [ SpeciesId.IGGLYBUFF, new BreederSpeciesEvolution(SpeciesId.JIGGLYPUFF, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(SpeciesId.WIGGLYTUFF, FINAL_STAGE_EVOLUTION_WAVE), ], + [ + SpeciesId.TOGEPI, + new BreederSpeciesEvolution(SpeciesId.TOGETIC, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.TOGEKISS, FINAL_STAGE_EVOLUTION_WAVE), + ], + [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.SMOOCHUM, new BreederSpeciesEvolution(SpeciesId.JYNX, FIRST_STAGE_EVOLUTION_WAVE)], [ SpeciesId.AZURILL, new BreederSpeciesEvolution(SpeciesId.MARILL, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(SpeciesId.AZUMARILL, FINAL_STAGE_EVOLUTION_WAVE), ], - [SpeciesId.WYNAUT, new BreederSpeciesEvolution(SpeciesId.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE)], + [ + SpeciesId.BUDEW, + new BreederSpeciesEvolution(SpeciesId.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE), + ], [SpeciesId.CHINGLING, new BreederSpeciesEvolution(SpeciesId.CHIMECHO, SECOND_STAGE_EVOLUTION_WAVE)], [SpeciesId.BONSLY, new BreederSpeciesEvolution(SpeciesId.SUDOWOODO, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.MIME_JR, new BreederSpeciesEvolution(SpeciesId.MR_MIME, SECOND_STAGE_EVOLUTION_WAVE)], + [ + SpeciesId.MIME_JR, + new BreederSpeciesEvolution(SpeciesId.GALAR_MR_MIME, SECOND_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE), + ], + [ + SpeciesId.HAPPINY, + new BreederSpeciesEvolution(SpeciesId.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE), + ], [SpeciesId.MANTYKE, new BreederSpeciesEvolution(SpeciesId.MANTINE, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.TOXEL, new BreederSpeciesEvolution(SpeciesId.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE)], +]; + +const POOL_2_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [ + [SpeciesId.DITTO], + [ + SpeciesId.ELEKID, + new BreederSpeciesEvolution(SpeciesId.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE), + ], + [ + SpeciesId.MAGBY, + new BreederSpeciesEvolution(SpeciesId.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE), + ], + [SpeciesId.WYNAUT, new BreederSpeciesEvolution(SpeciesId.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.MUNCHLAX, new BreederSpeciesEvolution(SpeciesId.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.RIOLU, new BreederSpeciesEvolution(SpeciesId.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.AUDINO], ]; /** @@ -502,7 +510,7 @@ function getPartyConfig(): EnemyPartyConfig { shiny: true, variant: 1, nature: Nature.MODEST, - moveSet: [MoveId.MOONBLAST, MoveId.MYSTICAL_FIRE, MoveId.ICE_BEAM, MoveId.THUNDERBOLT], + moveSet: [MoveId.DAZZLING_GLEAM, MoveId.MYSTICAL_FIRE, MoveId.ICE_BEAM, MoveId.THUNDERBOLT], // Make this one have an item gimmick when we have more items/finish implementations ivs: [31, 31, 31, 31, 31, 31], }, { @@ -515,7 +523,7 @@ function getPartyConfig(): EnemyPartyConfig { shiny: true, variant: 2, nature: Nature.BOLD, - moveSet: [MoveId.TRI_ATTACK, MoveId.STORED_POWER, MoveId.TAKE_HEART, MoveId.MOONLIGHT], + moveSet: [MoveId.TRI_ATTACK, MoveId.STORED_POWER, MoveId.CALM_MIND, MoveId.MOONLIGHT], ivs: [31, 31, 31, 31, 31, 31], }, ); diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 452a9a8bb4b..74a36a280d3 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -13,8 +13,9 @@ import { HitHealModifier, PokemonHeldItemModifier, TurnHealModifier } from "#mod import type { PokemonHeldItemModifierType } from "#modifiers/modifier-type"; import { PokemonMove } from "#moves/pokemon-move"; import { showEncounterText } from "#mystery-encounters/encounter-dialogue-utils"; -import type { EnemyPartyConfig, EnemyPokemonConfig } from "#mystery-encounters/encounter-phase-utils"; import { + type EnemyPartyConfig, + type EnemyPokemonConfig, generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, @@ -23,8 +24,7 @@ import { transitionMysteryEncounterIntroVisuals, } from "#mystery-encounters/encounter-phase-utils"; import { applyModifierTypeToPlayerPokemon } from "#mystery-encounters/encounter-pokemon-utils"; -import type { MysteryEncounter } from "#mystery-encounters/mystery-encounter"; -import { MysteryEncounterBuilder } from "#mystery-encounters/mystery-encounter"; +import { type MysteryEncounter, MysteryEncounterBuilder } from "#mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#mystery-encounters/mystery-encounter-option"; import i18next from "#plugins/i18n"; import { randSeedInt } from "#utils/common"; @@ -200,7 +200,8 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde const encounter = globalScene.currentBattle.mysteryEncounter!; setEncounterRewards({ - guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT], + guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], + guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT], fillRemaining: true, }); encounter.startOfBattleEffects.push( diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 1164d2ca7ca..b4a2ba4abd5 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -47,6 +47,7 @@ const namespace = "mysteryEncounters/weirdDream"; /** Exclude Ultra Beasts, Paradox, Eternatus, and all legendary/mythical/trio pokemon that are below 570 BST */ const EXCLUDED_TRANSFORMATION_SPECIES = [ + SpeciesId.ARCEUS, SpeciesId.ETERNATUS, /** UBs */ SpeciesId.NIHILEGO, @@ -82,20 +83,19 @@ const EXCLUDED_TRANSFORMATION_SPECIES = [ SpeciesId.IRON_BOULDER, SpeciesId.IRON_CROWN, /** These are banned so they don't appear in the < 570 BST pool */ + SpeciesId.PHIONE, + SpeciesId.TYPE_NULL, SpeciesId.COSMOG, + SpeciesId.COSMOEM, SpeciesId.MELTAN, SpeciesId.KUBFU, - SpeciesId.COSMOEM, - SpeciesId.POIPOLE, - SpeciesId.TERAPAGOS, - SpeciesId.TYPE_NULL, - SpeciesId.CALYREX, - SpeciesId.NAGANADEL, SpeciesId.URSHIFU, + SpeciesId.CALYREX, SpeciesId.OGERPON, SpeciesId.OKIDOGI, SpeciesId.MUNKIDORI, SpeciesId.FEZANDIPITI, + SpeciesId.TERAPAGOS, ]; const SUPER_LEGENDARY_BST_THRESHOLD = 600; @@ -226,6 +226,7 @@ export const WeirdDreamEncounter: MysteryEncounter = MysteryEncounterBuilder.wit modifierTypes.MINT, modifierTypes.MINT, modifierTypes.MINT, + modifierTypes.MINT, ], fillRemaining: false, }); diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index dfaa6425ef1..7bfe02d9086 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -12,14 +12,13 @@ import { pokemonFormLevelMoves as pokemonSpeciesFormLevelMoves, pokemonSpeciesLevelMoves, } from "#balance/pokemon-level-moves"; -import { POKERUS_STARTER_COUNT, speciesStarterCosts } from "#balance/starters"; -import { allSpecies } from "#data/data-lists"; -import { GrowthRate } from "#data/exp"; +import { speciesStarterCosts } from "#balance/starters"; +import type { GrowthRate } from "#data/exp"; import { Gender } from "#data/gender"; import { AbilityId } from "#enums/ability-id"; import { DexAttr } from "#enums/dex-attr"; import { PartyMemberStrength } from "#enums/party-member-strength"; -import { PokemonType } from "#enums/pokemon-type"; +import type { PokemonType } from "#enums/pokemon-type"; import { SpeciesFormKey } from "#enums/species-form-key"; import { SpeciesId } from "#enums/species-id"; import type { Stat } from "#enums/stat"; @@ -29,7 +28,7 @@ import type { Variant, VariantSet } from "#sprites/variant"; import { populateVariantColorCache, variantColorCache, variantData } from "#sprites/variant"; import type { StarterMoveset } from "#system/game-data"; import type { Localizable } from "#types/locales"; -import { isNullOrUndefined, randSeedFloat, randSeedGauss, randSeedInt, randSeedItem } from "#utils/common"; +import { isNullOrUndefined, randSeedFloat, randSeedGauss, randSeedInt } from "#utils/common"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import { toCamelCase, toPascalCase } from "#utils/strings"; import { argbFromRgba, QuantizerCelebi, rgbaFromArgb } from "@material/material-color-utilities"; @@ -74,84 +73,6 @@ export const normalForm: SpeciesId[] = [ SpeciesId.CALYREX, ]; -export function getPokemonSpeciesForm(species: SpeciesId, formIndex: number): PokemonSpeciesForm { - const retSpecies: PokemonSpecies = - species >= 2000 - ? allSpecies.find(s => s.speciesId === species)! // TODO: is the bang correct? - : allSpecies[species - 1]; - if (formIndex < retSpecies.forms?.length) { - return retSpecies.forms[formIndex]; - } - return retSpecies; -} - -// TODO: Clean this up and seriously review alternate means of fusion naming -export function getFusedSpeciesName(speciesAName: string, speciesBName: string): string { - const fragAPattern = /([a-z]{2}.*?[aeiou(?:y$)\-']+)(.*?)$/i; - const fragBPattern = /([a-z]{2}.*?[aeiou(?:y$)\-'])(.*?)$/i; - - const [speciesAPrefixMatch, speciesBPrefixMatch] = [speciesAName, speciesBName].map(n => /^(?:[^ ]+) /.exec(n)); - const [speciesAPrefix, speciesBPrefix] = [speciesAPrefixMatch, speciesBPrefixMatch].map(m => (m ? m[0] : "")); - - if (speciesAPrefix) { - speciesAName = speciesAName.slice(speciesAPrefix.length); - } - if (speciesBPrefix) { - speciesBName = speciesBName.slice(speciesBPrefix.length); - } - - const [speciesASuffixMatch, speciesBSuffixMatch] = [speciesAName, speciesBName].map(n => / (?:[^ ]+)$/.exec(n)); - const [speciesASuffix, speciesBSuffix] = [speciesASuffixMatch, speciesBSuffixMatch].map(m => (m ? m[0] : "")); - - if (speciesASuffix) { - speciesAName = speciesAName.slice(0, -speciesASuffix.length); - } - if (speciesBSuffix) { - speciesBName = speciesBName.slice(0, -speciesBSuffix.length); - } - - const splitNameA = speciesAName.split(/ /g); - const splitNameB = speciesBName.split(/ /g); - - const fragAMatch = fragAPattern.exec(speciesAName); - const fragBMatch = fragBPattern.exec(speciesBName); - - let fragA: string; - let fragB: string; - - fragA = splitNameA.length === 1 ? (fragAMatch ? fragAMatch[1] : speciesAName) : splitNameA[splitNameA.length - 1]; - - if (splitNameB.length === 1) { - if (fragBMatch) { - const lastCharA = fragA.slice(fragA.length - 1); - const prevCharB = fragBMatch[1].slice(fragBMatch.length - 1); - fragB = (/[-']/.test(prevCharB) ? prevCharB : "") + fragBMatch[2] || prevCharB; - if (lastCharA === fragB[0]) { - if (/[aiu]/.test(lastCharA)) { - fragB = fragB.slice(1); - } else { - const newCharMatch = new RegExp(`[^${lastCharA}]`).exec(fragB); - if (newCharMatch?.index !== undefined && newCharMatch.index > 0) { - fragB = fragB.slice(newCharMatch.index); - } - } - } - } else { - fragB = speciesBName; - } - } else { - fragB = splitNameB[splitNameB.length - 1]; - } - - if (splitNameA.length > 1) { - fragA = `${splitNameA.slice(0, splitNameA.length - 1).join(" ")} ${fragA}`; - } - - fragB = `${fragB.slice(0, 1).toLowerCase()}${fragB.slice(1)}`; - - return `${speciesAPrefix || speciesBPrefix}${fragA}${fragB}${speciesBSuffix || speciesASuffix}`; -} - export type PokemonSpeciesFilter = (species: PokemonSpecies) => boolean; export abstract class PokemonSpeciesForm { @@ -1400,1804 +1321,3 @@ export class PokemonForm extends PokemonSpeciesForm { return this.formSpriteKey !== null ? this.formSpriteKey : this.formKey; } } - -/** - * Method to get the daily list of starters with Pokerus. - * @returns A list of starters with Pokerus - */ -export function getPokerusStarters(): PokemonSpecies[] { - const pokerusStarters: PokemonSpecies[] = []; - const date = new Date(); - date.setUTCHours(0, 0, 0, 0); - globalScene.executeWithSeedOffset( - () => { - while (pokerusStarters.length < POKERUS_STARTER_COUNT) { - const randomSpeciesId = Number.parseInt(randSeedItem(Object.keys(speciesStarterCosts)), 10); - const species = getPokemonSpecies(randomSpeciesId); - if (!pokerusStarters.includes(species)) { - pokerusStarters.push(species); - } - } - }, - 0, - date.getTime().toString(), - ); - return pokerusStarters; -} - -// biome-ignore format: manually formatted -export function initSpecies() { - allSpecies.push( - new PokemonSpecies(SpeciesId.BULBASAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 6.9, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 318, 45, 49, 49, 65, 65, 45, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.IVYSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 13, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 405, 60, 62, 63, 80, 80, 60, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.VENUSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 2, 100, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, GrowthRate.MEDIUM_SLOW, 87.5, true, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.POISON, 2, 100, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.POISON, 2.4, 155.5, AbilityId.THICK_FAT, AbilityId.THICK_FAT, AbilityId.THICK_FAT, 625, 80, 100, 123, 122, 120, 80, 45, 50, 263, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.POISON, 24, 999.9, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.EFFECT_SPORE, 625, 120, 122, 90, 108, 105, 80, 45, 50, 263, true), - ), - new PokemonSpecies(SpeciesId.CHARMANDER, 1, false, false, false, "Lizard Pokémon", PokemonType.FIRE, null, 0.6, 8.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 309, 39, 52, 43, 60, 50, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.CHARMELEON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 1.1, 19, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 405, 58, 64, 58, 80, 65, 80, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.CHARIZARD, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, false, null, true), - new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.FIRE, PokemonType.DRAGON, 1.7, 110.5, AbilityId.TOUGH_CLAWS, AbilityId.NONE, AbilityId.TOUGH_CLAWS, 634, 78, 130, 111, 130, 85, 100, 45, 50, 267), - new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.FIRE, PokemonType.FLYING, 1.7, 100.5, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.DROUGHT, 634, 78, 104, 78, 159, 115, 100, 45, 50, 267), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.FLYING, 28, 999.9, AbilityId.BERSERK, AbilityId.NONE, AbilityId.BERSERK, 634, 118, 99, 88, 134, 95, 100, 45, 50, 267), - ), - new PokemonSpecies(SpeciesId.SQUIRTLE, 1, false, false, false, "Tiny Turtle Pokémon", PokemonType.WATER, null, 0.5, 9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 314, 44, 48, 65, 50, 64, 43, 45, 50, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.WARTORTLE, 1, false, false, false, "Turtle Pokémon", PokemonType.WATER, null, 1, 22.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 405, 59, 63, 80, 65, 80, 58, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.BLASTOISE, 1, false, false, false, "Shellfish Pokémon", PokemonType.WATER, null, 1.6, 85.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 1.6, 85.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, null, 1.6, 101.1, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.MEGA_LAUNCHER, 630, 79, 103, 120, 135, 115, 78, 45, 50, 265), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.STEEL, 25, 999.9, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.SHELL_ARMOR, 630, 119, 108, 125, 105, 110, 63, 45, 50, 265), - ), - new PokemonSpecies(SpeciesId.CATERPIE, 1, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 2.9, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 45, 30, 35, 20, 20, 45, 255, 50, 39, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.METAPOD, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 9.9, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 20, 55, 25, 25, 30, 120, 50, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BUTTERFREE, 1, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, true, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.FLYING, 17, 999.9, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.COMPOUND_EYES, 495, 80, 40, 75, 120, 95, 85, 45, 50, 198, true), - ), - new PokemonSpecies(SpeciesId.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", PokemonType.BUG, PokemonType.POISON, 0.3, 3.2, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.KAKUNA, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, PokemonType.POISON, 0.6, 10, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BEEDRILL, 1, false, false, false, "Poison Bee Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 29.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.POISON, 1, 29.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.POISON, 1.4, 40.5, AbilityId.ADAPTABILITY, AbilityId.NONE, AbilityId.ADAPTABILITY, 495, 65, 150, 40, 15, 80, 145, 45, 70, 198), - ), - new PokemonSpecies(SpeciesId.PIDGEY, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.8, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 251, 40, 45, 40, 35, 35, 56, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.PIDGEOTTO, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 30, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 349, 63, 60, 55, 50, 50, 71, 120, 70, 122, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.PIDGEOT, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FLYING, 2.2, 50.5, AbilityId.NO_GUARD, AbilityId.NO_GUARD, AbilityId.NO_GUARD, 579, 83, 80, 80, 135, 80, 121, 45, 70, 240), - ), - new PokemonSpecies(SpeciesId.RATTATA, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.3, 3.5, AbilityId.RUN_AWAY, AbilityId.GUTS, AbilityId.HUSTLE, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.RATICATE, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.7, 18.5, AbilityId.RUN_AWAY, AbilityId.GUTS, AbilityId.HUSTLE, 413, 55, 81, 60, 50, 70, 97, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.SPEAROW, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.SNIPER, 262, 40, 60, 30, 31, 31, 70, 255, 70, 52, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FEAROW, 1, false, false, false, "Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 38, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.SNIPER, 442, 65, 90, 65, 61, 61, 100, 90, 70, 155, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.EKANS, 1, false, false, false, "Snake Pokémon", PokemonType.POISON, null, 2, 6.9, AbilityId.INTIMIDATE, AbilityId.SHED_SKIN, AbilityId.UNNERVE, 288, 35, 60, 44, 40, 54, 55, 255, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ARBOK, 1, false, false, false, "Cobra Pokémon", PokemonType.POISON, null, 3.5, 65, AbilityId.INTIMIDATE, AbilityId.SHED_SKIN, AbilityId.UNNERVE, 448, 60, 95, 69, 65, 79, 80, 90, 70, 157, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PIKACHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true), - new PokemonForm("Partner", "partner", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), - new PokemonForm("Cosplay", "cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Cool Cosplay", "cool-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Beauty Cosplay", "beauty-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Cute Cosplay", "cute-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Smart Cosplay", "smart-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Tough Cosplay", "tough-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, null, 21, 999.9, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 530, 125, 95, 60, 90, 70, 90, 190, 50, 112), //+100 BST from Partner Form - ), - new PokemonSpecies(SpeciesId.RAICHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.8, 30, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.SANDSHREW, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 0.6, 12, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.SAND_RUSH, 300, 50, 75, 85, 20, 30, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SANDSLASH, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 1, 29.5, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.SAND_RUSH, 450, 75, 100, 110, 45, 55, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.NIDORAN_F, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.4, 7, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 275, 55, 47, 52, 40, 40, 41, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.NIDORINA, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.8, 20, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 365, 70, 62, 67, 55, 55, 56, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.NIDOQUEEN, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.3, 60, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.SHEER_FORCE, 505, 90, 92, 87, 75, 85, 76, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.NIDORAN_M, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.5, 9, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 273, 46, 57, 40, 40, 40, 50, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 100, false), - new PokemonSpecies(SpeciesId.NIDORINO, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.9, 19.5, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 365, 61, 72, 57, 55, 55, 65, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 100, false), - new PokemonSpecies(SpeciesId.NIDOKING, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.4, 62, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.SHEER_FORCE, 505, 81, 102, 77, 85, 75, 85, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 100, false), - new PokemonSpecies(SpeciesId.CLEFAIRY, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.5, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.FRIEND_GUARD, 323, 70, 45, 48, 60, 65, 35, 150, 140, 113, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.CLEFABLE, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.3, 40, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.UNAWARE, 483, 95, 70, 73, 95, 90, 60, 25, 140, 242, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.VULPIX, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.6, 9.9, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.DROUGHT, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(SpeciesId.NINETALES, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1.1, 19.9, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.DROUGHT, 505, 73, 76, 75, 81, 100, 100, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(SpeciesId.JIGGLYPUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.5, 5.5, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRIEND_GUARD, 270, 115, 45, 20, 45, 25, 20, 170, 50, 95, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.WIGGLYTUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 1, 12, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRISK, 435, 140, 70, 45, 85, 50, 45, 50, 50, 218, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.ZUBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 0.8, 7.5, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 245, 40, 45, 35, 30, 40, 55, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.GOLBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.6, 55, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 455, 75, 80, 70, 65, 75, 90, 90, 50, 159, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.ODDISH, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.5, 5.4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.RUN_AWAY, 320, 45, 50, 55, 75, 65, 30, 255, 50, 64, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GLOOM, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.8, 8.6, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.STENCH, 395, 60, 65, 70, 85, 75, 40, 120, 50, 138, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.VILEPLUME, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.2, 18.6, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.EFFECT_SPORE, 490, 75, 80, 85, 110, 90, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.PARAS, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 5.4, AbilityId.EFFECT_SPORE, AbilityId.DRY_SKIN, AbilityId.DAMP, 285, 35, 70, 55, 45, 55, 25, 190, 70, 57, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PARASECT, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 1, 29.5, AbilityId.EFFECT_SPORE, AbilityId.DRY_SKIN, AbilityId.DAMP, 405, 60, 95, 80, 60, 80, 30, 75, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.VENONAT, 1, false, false, false, "Insect Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 30, AbilityId.COMPOUND_EYES, AbilityId.TINTED_LENS, AbilityId.RUN_AWAY, 305, 60, 55, 50, 40, 55, 45, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.VENOMOTH, 1, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.5, 12.5, AbilityId.SHIELD_DUST, AbilityId.TINTED_LENS, AbilityId.WONDER_SKIN, 450, 70, 65, 60, 90, 75, 90, 75, 70, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DIGLETT, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.2, 0.8, AbilityId.SAND_VEIL, AbilityId.ARENA_TRAP, AbilityId.SAND_FORCE, 265, 10, 55, 25, 35, 45, 95, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DUGTRIO, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.7, 33.3, AbilityId.SAND_VEIL, AbilityId.ARENA_TRAP, AbilityId.SAND_FORCE, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MEOWTH, 1, false, false, false, "Scratch Cat Pokémon", PokemonType.NORMAL, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 33, 999.9, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, 540, 115, 110, 65, 65, 70, 115, 255, 50, 58), //+100 BST from Persian - ), - new PokemonSpecies(SpeciesId.PERSIAN, 1, false, false, false, "Classy Cat Pokémon", PokemonType.NORMAL, null, 1, 32, AbilityId.LIMBER, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 440, 65, 70, 60, 65, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PSYDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 0.8, 19.6, AbilityId.DAMP, AbilityId.CLOUD_NINE, AbilityId.SWIFT_SWIM, 320, 50, 52, 48, 65, 50, 55, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GOLDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 1.7, 76.6, AbilityId.DAMP, AbilityId.CLOUD_NINE, AbilityId.SWIFT_SWIM, 500, 80, 82, 78, 95, 80, 85, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MANKEY, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 0.5, 28, AbilityId.VITAL_SPIRIT, AbilityId.ANGER_POINT, AbilityId.DEFIANT, 305, 40, 80, 35, 35, 45, 70, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PRIMEAPE, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 1, 32, AbilityId.VITAL_SPIRIT, AbilityId.ANGER_POINT, AbilityId.DEFIANT, 455, 65, 105, 60, 60, 70, 95, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GROWLITHE, 1, false, false, false, "Puppy Pokémon", PokemonType.FIRE, null, 0.7, 19, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.JUSTIFIED, 350, 55, 70, 45, 70, 50, 60, 190, 50, 70, GrowthRate.SLOW, 75, false), - new PokemonSpecies(SpeciesId.ARCANINE, 1, false, false, false, "Legendary Pokémon", PokemonType.FIRE, null, 1.9, 155, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.JUSTIFIED, 555, 90, 110, 80, 100, 80, 95, 75, 50, 194, GrowthRate.SLOW, 75, false), - new PokemonSpecies(SpeciesId.POLIWAG, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.6, 12.4, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 300, 40, 50, 40, 40, 40, 90, 255, 50, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.POLIWHIRL, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 1, 20, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 385, 65, 65, 65, 50, 50, 90, 120, 50, 135, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.POLIWRATH, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.3, 54, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 510, 90, 95, 95, 70, 90, 70, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 0.9, 19.5, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 310, 25, 20, 15, 105, 55, 90, 200, 50, 62, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(SpeciesId.KADABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.3, 56.5, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 400, 40, 35, 30, 120, 70, 105, 100, 50, 140, GrowthRate.MEDIUM_SLOW, 75, true), - new PokemonSpecies(SpeciesId.ALAKAZAM, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.5, 48, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, GrowthRate.MEDIUM_SLOW, 75, true, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 1.5, 48, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, null, 1.2, 48, AbilityId.TRACE, AbilityId.TRACE, AbilityId.TRACE, 600, 55, 50, 65, 175, 105, 150, 50, 50, 250, true), - ), - new PokemonSpecies(SpeciesId.MACHOP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 0.8, 19.5, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 305, 70, 80, 50, 35, 35, 35, 180, 50, 61, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(SpeciesId.MACHOKE, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.5, 70.5, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 405, 80, 100, 70, 50, 60, 45, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(SpeciesId.MACHAMP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.6, 130, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, null, 1.6, 130, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIGHTING, null, 25, 999.9, AbilityId.GUTS, AbilityId.GUTS, AbilityId.GUTS, 605, 120, 170, 85, 75, 90, 65, 45, 50, 253), - ), - new PokemonSpecies(SpeciesId.BELLSPROUT, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 300, 50, 75, 35, 70, 30, 40, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.WEEPINBELL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 6.4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 390, 65, 90, 50, 85, 45, 55, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.VICTREEBEL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.7, 15.5, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 490, 80, 105, 65, 100, 70, 70, 45, 70, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.TENTACOOL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 0.9, 45.5, AbilityId.CLEAR_BODY, AbilityId.LIQUID_OOZE, AbilityId.RAIN_DISH, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.TENTACRUEL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 1.6, 55, AbilityId.CLEAR_BODY, AbilityId.LIQUID_OOZE, AbilityId.RAIN_DISH, 515, 80, 70, 65, 80, 120, 100, 60, 50, 180, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.GEODUDE, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.4, 20, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GRAVELER, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1, 105, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GOLEM, 1, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.4, 300, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 495, 80, 120, 130, 55, 65, 45, 45, 70, 248, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.PONYTA, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1, 30, AbilityId.RUN_AWAY, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RAPIDASH, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1.7, 95, AbilityId.RUN_AWAY, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SLOWPOKE, 1, false, false, false, "Dopey Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.2, 36, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SLOWBRO, 1, false, false, false, "Hermit Crab Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.PSYCHIC, 2, 120, AbilityId.SHELL_ARMOR, AbilityId.SHELL_ARMOR, AbilityId.SHELL_ARMOR, 590, 95, 75, 180, 130, 80, 30, 75, 50, 172), - ), - new PokemonSpecies(SpeciesId.MAGNEMITE, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 6, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 325, 25, 35, 70, 95, 55, 45, 190, 50, 65, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.MAGNETON, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1, 60, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 465, 50, 60, 95, 120, 70, 70, 60, 50, 163, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.FARFETCHD, 1, false, false, false, "Wild Duck Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.8, 15, AbilityId.KEEN_EYE, AbilityId.INNER_FOCUS, AbilityId.DEFIANT, 377, 52, 90, 55, 58, 62, 60, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DODUO, 1, false, false, false, "Twin Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.4, 39.2, AbilityId.RUN_AWAY, AbilityId.EARLY_BIRD, AbilityId.TANGLED_FEET, 310, 35, 85, 45, 35, 35, 75, 190, 70, 62, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.DODRIO, 1, false, false, false, "Triple Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.8, 85.2, AbilityId.RUN_AWAY, AbilityId.EARLY_BIRD, AbilityId.TANGLED_FEET, 470, 60, 110, 70, 60, 60, 110, 45, 70, 165, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.SEEL, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 1.1, 90, AbilityId.THICK_FAT, AbilityId.HYDRATION, AbilityId.ICE_BODY, 325, 65, 45, 55, 45, 70, 45, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DEWGONG, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, PokemonType.ICE, 1.7, 120, AbilityId.THICK_FAT, AbilityId.HYDRATION, AbilityId.ICE_BODY, 475, 90, 70, 80, 70, 95, 70, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GRIMER, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 0.9, 30, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.POISON_TOUCH, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MUK, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 1.2, 30, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.POISON_TOUCH, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SHELLDER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.3, 4, AbilityId.SHELL_ARMOR, AbilityId.SKILL_LINK, AbilityId.OVERCOAT, 305, 30, 65, 100, 45, 25, 40, 190, 50, 61, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.CLOYSTER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, PokemonType.ICE, 1.5, 132.5, AbilityId.SHELL_ARMOR, AbilityId.SKILL_LINK, AbilityId.OVERCOAT, 525, 50, 95, 180, 85, 45, 70, 60, 50, 184, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.GASTLY, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.3, 0.1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 310, 30, 35, 30, 100, 35, 80, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.HAUNTER, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.6, 0.1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 405, 45, 50, 45, 115, 55, 95, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GENGAR, 1, false, false, false, "Shadow Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, PokemonType.POISON, 1.4, 40.5, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.NONE, 600, 60, 65, 80, 170, 95, 130, 45, 50, 250), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GHOST, PokemonType.POISON, 20, 999.9, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 600, 140, 65, 70, 140, 85, 100, 45, 50, 250), - ), - new PokemonSpecies(SpeciesId.ONIX, 1, false, false, false, "Rock Snake Pokémon", PokemonType.ROCK, PokemonType.GROUND, 8.8, 210, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.WEAK_ARMOR, 385, 35, 45, 160, 30, 45, 70, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DROWZEE, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1, 32.4, AbilityId.INSOMNIA, AbilityId.FOREWARN, AbilityId.INNER_FOCUS, 328, 60, 48, 45, 43, 90, 42, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HYPNO, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1.6, 75.6, AbilityId.INSOMNIA, AbilityId.FOREWARN, AbilityId.INNER_FOCUS, 483, 85, 73, 70, 73, 115, 67, 75, 70, 169, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.KRABBY, 1, false, false, false, "River Crab Pokémon", PokemonType.WATER, null, 0.4, 6.5, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 325, 30, 105, 90, 25, 25, 50, 225, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.KINGLER, 1, false, false, false, "Pincer Pokémon", PokemonType.WATER, null, 1.3, 60, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 1.3, 60, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 19, 999.9, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 575, 92, 145, 140, 60, 65, 73, 60, 50, 166), - ), - new PokemonSpecies(SpeciesId.VOLTORB, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 0.5, 10.4, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 70, 66, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.ELECTRODE, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 1.2, 66.6, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.EXEGGCUTE, 1, false, false, false, "Egg Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 0.4, 2.5, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HARVEST, 325, 60, 40, 80, 60, 45, 40, 90, 50, 65, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.EXEGGUTOR, 1, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 2, 120, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HARVEST, 530, 95, 95, 85, 125, 75, 55, 45, 50, 186, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.CUBONE, 1, false, false, false, "Lonely Pokémon", PokemonType.GROUND, null, 0.4, 6.5, AbilityId.ROCK_HEAD, AbilityId.LIGHTNING_ROD, AbilityId.BATTLE_ARMOR, 320, 50, 50, 95, 40, 50, 35, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MAROWAK, 1, false, false, false, "Bone Keeper Pokémon", PokemonType.GROUND, null, 1, 45, AbilityId.ROCK_HEAD, AbilityId.LIGHTNING_ROD, AbilityId.BATTLE_ARMOR, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HITMONLEE, 1, false, false, false, "Kicking Pokémon", PokemonType.FIGHTING, null, 1.5, 49.8, AbilityId.LIMBER, AbilityId.RECKLESS, AbilityId.UNBURDEN, 455, 50, 120, 53, 35, 110, 87, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.HITMONCHAN, 1, false, false, false, "Punching Pokémon", PokemonType.FIGHTING, null, 1.4, 50.2, AbilityId.KEEN_EYE, AbilityId.IRON_FIST, AbilityId.INNER_FOCUS, 455, 50, 105, 79, 35, 110, 76, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.LICKITUNG, 1, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.2, 65.5, AbilityId.OWN_TEMPO, AbilityId.OBLIVIOUS, AbilityId.CLOUD_NINE, 385, 90, 55, 75, 60, 75, 30, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.KOFFING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 0.6, 1, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.STENCH, 340, 40, 65, 95, 60, 45, 35, 190, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WEEZING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 1.2, 9.5, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.STENCH, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RHYHORN, 1, false, false, false, "Spikes Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1, 115, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, AbilityId.RECKLESS, 345, 80, 85, 95, 30, 30, 25, 120, 50, 69, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.RHYDON, 1, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1.9, 120, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, AbilityId.RECKLESS, 485, 105, 130, 120, 45, 45, 40, 60, 50, 170, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.CHANSEY, 1, false, false, false, "Egg Pokémon", PokemonType.NORMAL, null, 1.1, 34.6, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.HEALER, 450, 250, 5, 5, 35, 105, 50, 30, 140, 395, GrowthRate.FAST, 0, false), - new PokemonSpecies(SpeciesId.TANGELA, 1, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 1, 35, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.REGENERATOR, 435, 65, 55, 115, 100, 40, 60, 45, 50, 87, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.KANGASKHAN, 1, false, false, false, "Parent Pokémon", PokemonType.NORMAL, null, 2.2, 80, AbilityId.EARLY_BIRD, AbilityId.SCRAPPY, AbilityId.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, GrowthRate.MEDIUM_FAST, 0, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.2, 80, AbilityId.EARLY_BIRD, AbilityId.SCRAPPY, AbilityId.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, null, 2.2, 100, AbilityId.PARENTAL_BOND, AbilityId.PARENTAL_BOND, AbilityId.PARENTAL_BOND, 590, 105, 125, 100, 60, 100, 100, 45, 50, 172), - ), - new PokemonSpecies(SpeciesId.HORSEA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 0.4, 8, AbilityId.SWIFT_SWIM, AbilityId.SNIPER, AbilityId.DAMP, 295, 30, 40, 70, 70, 25, 60, 225, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SEADRA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 1.2, 25, AbilityId.POISON_POINT, AbilityId.SNIPER, AbilityId.DAMP, 440, 55, 65, 95, 95, 45, 85, 75, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GOLDEEN, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 0.6, 15, AbilityId.SWIFT_SWIM, AbilityId.WATER_VEIL, AbilityId.LIGHTNING_ROD, 320, 45, 67, 60, 35, 50, 63, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.SEAKING, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 1.3, 39, AbilityId.SWIFT_SWIM, AbilityId.WATER_VEIL, AbilityId.LIGHTNING_ROD, 450, 80, 92, 65, 65, 80, 68, 60, 50, 158, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.STARYU, 1, false, false, false, "Star Shape Pokémon", PokemonType.WATER, null, 0.8, 34.5, AbilityId.ILLUMINATE, AbilityId.NATURAL_CURE, AbilityId.ANALYTIC, 340, 30, 45, 55, 70, 55, 85, 225, 50, 68, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.STARMIE, 1, false, false, false, "Mysterious Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.1, 80, AbilityId.ILLUMINATE, AbilityId.NATURAL_CURE, AbilityId.ANALYTIC, 520, 60, 75, 85, 100, 85, 115, 60, 50, 182, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.MR_MIME, 1, false, false, false, "Barrier Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.3, 54.5, AbilityId.SOUNDPROOF, AbilityId.FILTER, AbilityId.TECHNICIAN, 460, 40, 45, 65, 100, 120, 90, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SCYTHER, 1, false, false, false, "Mantis Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.5, 56, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.STEADFAST, 500, 70, 110, 80, 55, 80, 105, 45, 50, 100, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.JYNX, 1, false, false, false, "Human Shape Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 40.6, AbilityId.OBLIVIOUS, AbilityId.FOREWARN, AbilityId.DRY_SKIN, 455, 65, 50, 35, 115, 95, 95, 45, 50, 159, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.ELECTABUZZ, 1, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 1.1, 30, AbilityId.STATIC, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 490, 65, 83, 57, 95, 85, 105, 45, 50, 172, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(SpeciesId.MAGMAR, 1, false, false, false, "Spitfire Pokémon", PokemonType.FIRE, null, 1.3, 44.5, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 495, 65, 95, 57, 100, 85, 93, 45, 50, 173, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(SpeciesId.PINSIR, 1, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, null, 1.5, 55, AbilityId.HYPER_CUTTER, AbilityId.MOLD_BREAKER, AbilityId.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, null, 1.5, 55, AbilityId.HYPER_CUTTER, AbilityId.MOLD_BREAKER, AbilityId.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FLYING, 1.7, 59, AbilityId.AERILATE, AbilityId.AERILATE, AbilityId.AERILATE, 600, 65, 155, 120, 65, 90, 105, 45, 50, 175), - ), - new PokemonSpecies(SpeciesId.TAUROS, 1, false, false, false, "Wild Bull Pokémon", PokemonType.NORMAL, null, 1.4, 88.4, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.SHEER_FORCE, 490, 75, 100, 95, 40, 70, 110, 45, 50, 172, GrowthRate.SLOW, 100, false), - new PokemonSpecies(SpeciesId.MAGIKARP, 1, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.9, 10, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.RATTLED, 200, 20, 10, 55, 15, 20, 80, 255, 50, 40, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.GYARADOS, 1, false, false, false, "Atrocious Pokémon", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 6.5, 305, AbilityId.MOLD_BREAKER, AbilityId.MOLD_BREAKER, AbilityId.MOLD_BREAKER, 640, 95, 155, 109, 70, 130, 81, 45, 50, 189, true), - ), - new PokemonSpecies(SpeciesId.LAPRAS, 1, false, false, false, "Transport Pokémon", PokemonType.WATER, PokemonType.ICE, 2.5, 220, AbilityId.WATER_ABSORB, AbilityId.SHELL_ARMOR, AbilityId.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ICE, 2.5, 220, AbilityId.WATER_ABSORB, AbilityId.SHELL_ARMOR, AbilityId.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ICE, 24, 999.9, AbilityId.SHIELD_DUST, AbilityId.SHIELD_DUST, AbilityId.SHIELD_DUST, 635, 170, 97, 85, 107, 111, 65, 45, 50, 187), - ), - new PokemonSpecies(SpeciesId.DITTO, 1, false, false, false, "Transform Pokémon", PokemonType.NORMAL, null, 0.3, 4, AbilityId.LIMBER, AbilityId.NONE, AbilityId.IMPOSTER, 288, 48, 48, 48, 48, 48, 48, 35, 50, 101, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.EEVEE, 1, false, false, false, "Evolution Pokémon", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, GrowthRate.MEDIUM_FAST, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, false, null, true), - new PokemonForm("Partner", "partner", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 435, 65, 75, 70, 65, 85, 75, 45, 50, 65, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 18, 999.9, AbilityId.PROTEAN, AbilityId.PROTEAN, AbilityId.PROTEAN, 535, 110, 95, 70, 90, 85, 85, 45, 50, 65), //+100 BST from Partner Form - ), - new PokemonSpecies(SpeciesId.VAPOREON, 1, false, false, false, "Bubble Jet Pokémon", PokemonType.WATER, null, 1, 29, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.HYDRATION, 525, 130, 65, 60, 110, 95, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.JOLTEON, 1, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.8, 24.5, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.QUICK_FEET, 525, 65, 65, 60, 110, 95, 130, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.FLAREON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 0.9, 25, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.GUTS, 525, 65, 130, 60, 95, 110, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.PORYGON, 1, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.8, 36.5, AbilityId.TRACE, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 395, 65, 60, 70, 85, 75, 40, 45, 50, 79, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.OMANYTE, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.4, 7.5, AbilityId.SWIFT_SWIM, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 355, 35, 40, 100, 90, 55, 35, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.OMASTAR, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 1, 35, AbilityId.SWIFT_SWIM, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 495, 70, 60, 125, 115, 70, 55, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.KABUTO, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 11.5, AbilityId.SWIFT_SWIM, AbilityId.BATTLE_ARMOR, AbilityId.WEAK_ARMOR, 355, 30, 80, 90, 55, 45, 55, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.KABUTOPS, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 40.5, AbilityId.SWIFT_SWIM, AbilityId.BATTLE_ARMOR, AbilityId.WEAK_ARMOR, 495, 60, 115, 105, 65, 70, 80, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.AERODACTYL, 1, false, false, false, "Fossil Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, AbilityId.ROCK_HEAD, AbilityId.PRESSURE, AbilityId.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, GrowthRate.SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, AbilityId.ROCK_HEAD, AbilityId.PRESSURE, AbilityId.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FLYING, 2.1, 79, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 615, 80, 135, 85, 70, 95, 150, 45, 50, 180), - ), - new PokemonSpecies(SpeciesId.SNORLAX, 1, false, false, false, "Sleeping Pokémon", PokemonType.NORMAL, null, 2.1, 460, AbilityId.IMMUNITY, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.1, 460, AbilityId.IMMUNITY, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 35, 999.9, AbilityId.HARVEST, AbilityId.HARVEST, AbilityId.HARVEST, 640, 210, 135, 70, 90, 115, 20, 25, 50, 189), - ), - new PokemonSpecies(SpeciesId.ARTICUNO, 1, true, false, false, "Freeze Pokémon", PokemonType.ICE, PokemonType.FLYING, 1.7, 55.4, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ZAPDOS, 1, true, false, false, "Electric Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.6, 52.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.MOLTRES, 1, true, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 2, 60, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FLAME_BODY, 580, 90, 100, 90, 125, 85, 90, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.DRATINI, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 1.8, 3.3, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.MARVEL_SCALE, 300, 41, 64, 45, 50, 50, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.DRAGONAIR, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 4, 16.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.MARVEL_SCALE, 420, 61, 84, 65, 70, 70, 70, 45, 35, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.DRAGONITE, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 2.2, 210, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.MULTISCALE, 600, 91, 134, 95, 100, 100, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.MEWTWO, 1, false, true, false, "Genetic Pokémon", PokemonType.PSYCHIC, null, 2, 122, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2, 122, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, false, null, true), - new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.PSYCHIC, PokemonType.FIGHTING, 2.3, 127, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.STEADFAST, 780, 106, 190, 100, 154, 100, 130, 3, 0, 340), - new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.PSYCHIC, null, 1.5, 33, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.INSOMNIA, 780, 106, 150, 70, 194, 120, 140, 3, 0, 340), - ), - new PokemonSpecies(SpeciesId.MEW, 1, false, false, true, "New Species Pokémon", PokemonType.PSYCHIC, null, 0.4, 4, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(SpeciesId.CHIKORITA, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 0.9, 6.4, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 318, 45, 49, 65, 49, 65, 45, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.BAYLEEF, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 1.2, 15.8, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 405, 60, 62, 80, 63, 80, 60, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.MEGANIUM, 2, false, false, false, "Herb Pokémon", PokemonType.GRASS, null, 1.8, 100.5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 525, 80, 82, 100, 83, 100, 80, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(SpeciesId.CYNDAQUIL, 2, false, false, false, "Fire Mouse Pokémon", PokemonType.FIRE, null, 0.5, 7.9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 309, 39, 52, 43, 60, 50, 65, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.QUILAVA, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 0.9, 19, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 405, 58, 64, 58, 80, 65, 80, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.TYPHLOSION, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 1.7, 79.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 534, 78, 84, 78, 109, 85, 100, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.TOTODILE, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 0.6, 9.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 314, 50, 65, 64, 44, 48, 43, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.CROCONAW, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 1.1, 25, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 405, 65, 80, 80, 59, 63, 58, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.FERALIGATR, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 2.3, 88.8, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 530, 85, 105, 100, 79, 83, 78, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.SENTRET, 2, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.8, 6, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.FRISK, 215, 35, 46, 34, 35, 45, 20, 255, 70, 43, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FURRET, 2, false, false, false, "Long Body Pokémon", PokemonType.NORMAL, null, 1.8, 32.5, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.FRISK, 415, 85, 76, 64, 45, 55, 90, 90, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HOOTHOOT, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 21.2, AbilityId.INSOMNIA, AbilityId.KEEN_EYE, AbilityId.TINTED_LENS, 262, 60, 30, 30, 36, 56, 50, 255, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.NOCTOWL, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.6, 40.8, AbilityId.INSOMNIA, AbilityId.KEEN_EYE, AbilityId.TINTED_LENS, 452, 100, 50, 50, 86, 96, 70, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LEDYBA, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 10.8, AbilityId.SWARM, AbilityId.EARLY_BIRD, AbilityId.RATTLED, 265, 40, 20, 30, 40, 80, 55, 255, 70, 53, GrowthRate.FAST, 50, true), - new PokemonSpecies(SpeciesId.LEDIAN, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.4, 35.6, AbilityId.SWARM, AbilityId.EARLY_BIRD, AbilityId.IRON_FIST, 390, 55, 35, 50, 55, 110, 85, 90, 70, 137, GrowthRate.FAST, 50, true), - new PokemonSpecies(SpeciesId.SPINARAK, 2, false, false, false, "String Spit Pokémon", PokemonType.BUG, PokemonType.POISON, 0.5, 8.5, AbilityId.SWARM, AbilityId.INSOMNIA, AbilityId.SNIPER, 250, 40, 60, 40, 40, 40, 30, 255, 70, 50, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.ARIADOS, 2, false, false, false, "Long Leg Pokémon", PokemonType.BUG, PokemonType.POISON, 1.1, 33.5, AbilityId.SWARM, AbilityId.INSOMNIA, AbilityId.SNIPER, 400, 70, 90, 70, 60, 70, 40, 90, 70, 140, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.CROBAT, 2, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.8, 75, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 535, 85, 90, 80, 70, 80, 130, 90, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CHINCHOU, 2, false, false, false, "Angler Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 0.5, 12, AbilityId.VOLT_ABSORB, AbilityId.ILLUMINATE, AbilityId.WATER_ABSORB, 330, 75, 38, 38, 56, 56, 67, 190, 50, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.LANTURN, 2, false, false, false, "Light Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 1.2, 22.5, AbilityId.VOLT_ABSORB, AbilityId.ILLUMINATE, AbilityId.WATER_ABSORB, 460, 125, 58, 58, 76, 76, 67, 75, 50, 161, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.PICHU, 2, false, false, false, "Tiny Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), - new PokemonForm("Spiky-Eared", "spiky", PokemonType.ELECTRIC, null, 1.4, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), - ), - new PokemonSpecies(SpeciesId.CLEFFA, 2, false, false, false, "Star Shape Pokémon", PokemonType.FAIRY, null, 0.3, 3, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.FRIEND_GUARD, 218, 50, 25, 28, 45, 55, 15, 150, 140, 44, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.IGGLYBUFF, 2, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.3, 1, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRIEND_GUARD, 210, 90, 30, 15, 40, 20, 15, 170, 50, 42, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.TOGEPI, 2, false, false, false, "Spike Ball Pokémon", PokemonType.FAIRY, null, 0.3, 1.5, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 245, 35, 20, 65, 40, 65, 20, 190, 50, 49, GrowthRate.FAST, 87.5, false), - new PokemonSpecies(SpeciesId.TOGETIC, 2, false, false, false, "Happiness Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 0.6, 3.2, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 405, 55, 40, 85, 80, 105, 40, 75, 50, 142, GrowthRate.FAST, 87.5, false), - new PokemonSpecies(SpeciesId.NATU, 2, false, false, false, "Tiny Bird Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.2, 2, AbilityId.SYNCHRONIZE, AbilityId.EARLY_BIRD, AbilityId.MAGIC_BOUNCE, 320, 40, 50, 45, 70, 45, 70, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.XATU, 2, false, false, false, "Mystic Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.5, 15, AbilityId.SYNCHRONIZE, AbilityId.EARLY_BIRD, AbilityId.MAGIC_BOUNCE, 470, 65, 75, 70, 95, 70, 95, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.MAREEP, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.6, 7.8, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 280, 55, 40, 40, 65, 45, 35, 235, 70, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.FLAAFFY, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.8, 13.3, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 365, 70, 55, 55, 80, 60, 45, 120, 70, 128, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.AMPHAROS, 2, false, false, false, "Light Pokémon", PokemonType.ELECTRIC, null, 1.4, 61.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 61.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, PokemonType.DRAGON, 1.4, 61.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.MOLD_BREAKER, 610, 90, 95, 105, 165, 110, 45, 45, 70, 255), - ), - new PokemonSpecies(SpeciesId.BELLOSSOM, 2, false, false, false, "Flower Pokémon", PokemonType.GRASS, null, 0.4, 5.8, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HEALER, 490, 75, 80, 95, 90, 100, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.MARILL, 2, false, false, false, "Aqua Mouse Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.4, 8.5, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 250, 70, 20, 50, 20, 50, 40, 190, 50, 88, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.AZUMARILL, 2, false, false, false, "Aqua Rabbit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.8, 28.5, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 420, 100, 50, 80, 60, 80, 50, 75, 50, 210, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.SUDOWOODO, 2, false, false, false, "Imitation Pokémon", PokemonType.ROCK, null, 1.2, 38, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.RATTLED, 410, 70, 100, 115, 30, 65, 30, 65, 50, 144, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.POLITOED, 2, false, false, false, "Frog Pokémon", PokemonType.WATER, null, 1.1, 33.9, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.DRIZZLE, 500, 90, 75, 75, 90, 100, 70, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.HOPPIP, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.4, 0.5, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 250, 35, 35, 40, 35, 55, 50, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SKIPLOOM, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.6, 1, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 340, 55, 45, 50, 45, 65, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.JUMPLUFF, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.8, 3, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 460, 75, 55, 70, 55, 95, 110, 45, 70, 230, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.AIPOM, 2, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 0.8, 11.5, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.SKILL_LINK, 360, 55, 70, 55, 40, 55, 85, 45, 70, 72, GrowthRate.FAST, 50, true), - new PokemonSpecies(SpeciesId.SUNKERN, 2, false, false, false, "Seed Pokémon", PokemonType.GRASS, null, 0.3, 1.8, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.EARLY_BIRD, 180, 30, 30, 30, 30, 30, 30, 235, 70, 36, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SUNFLORA, 2, false, false, false, "Sun Pokémon", PokemonType.GRASS, null, 0.8, 8.5, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.EARLY_BIRD, 425, 75, 75, 55, 105, 85, 30, 120, 70, 149, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.YANMA, 2, false, false, false, "Clear Wing Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38, AbilityId.SPEED_BOOST, AbilityId.COMPOUND_EYES, AbilityId.FRISK, 390, 65, 65, 45, 75, 45, 95, 75, 70, 78, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WOOPER, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 8.5, AbilityId.DAMP, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.QUAGSIRE, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.4, 75, AbilityId.DAMP, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 430, 95, 85, 85, 65, 65, 35, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.ESPEON, 2, false, false, false, "Sun Pokémon", PokemonType.PSYCHIC, null, 0.9, 26.5, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.MAGIC_BOUNCE, 525, 65, 65, 60, 130, 95, 110, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.UMBREON, 2, false, false, false, "Moonlight Pokémon", PokemonType.DARK, null, 1, 27, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.INNER_FOCUS, 525, 95, 65, 110, 60, 130, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.MURKROW, 2, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 2.1, AbilityId.INSOMNIA, AbilityId.SUPER_LUCK, AbilityId.PRANKSTER, 405, 60, 85, 42, 85, 42, 91, 30, 35, 81, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.SLOWKING, 2, false, false, false, "Royal Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2, 79.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 80, 100, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MISDREAVUS, 2, false, false, false, "Screech Pokémon", PokemonType.GHOST, null, 0.7, 1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 435, 60, 60, 60, 85, 85, 85, 45, 35, 87, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.UNOWN, 2, false, false, false, "Symbol Pokémon", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("A", "a", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("B", "b", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("C", "c", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("D", "d", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("E", "e", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("F", "f", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("G", "g", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("H", "h", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("I", "i", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("J", "j", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("K", "k", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("L", "l", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("M", "m", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("N", "n", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("O", "o", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("P", "p", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("Q", "q", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("R", "r", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("S", "s", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("T", "t", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("U", "u", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("V", "v", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("W", "w", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("X", "x", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("Y", "y", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("Z", "z", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("!", "exclamation", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("?", "question", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - ), - new PokemonSpecies(SpeciesId.WOBBUFFET, 2, false, false, false, "Patient Pokémon", PokemonType.PSYCHIC, null, 1.3, 28.5, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.TELEPATHY, 405, 190, 33, 58, 33, 58, 33, 45, 50, 142, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.GIRAFARIG, 2, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 41.5, AbilityId.INNER_FOCUS, AbilityId.EARLY_BIRD, AbilityId.SAP_SIPPER, 455, 70, 80, 65, 90, 65, 85, 60, 70, 159, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.PINECO, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.6, 7.2, AbilityId.STURDY, AbilityId.NONE, AbilityId.OVERCOAT, 290, 50, 65, 90, 35, 35, 15, 190, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FORRETRESS, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.2, 125.8, AbilityId.STURDY, AbilityId.NONE, AbilityId.OVERCOAT, 465, 75, 90, 140, 60, 60, 40, 75, 70, 163, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DUNSPARCE, 2, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 1.5, 14, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 415, 100, 70, 70, 65, 65, 45, 190, 50, 145, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GLIGAR, 2, false, false, false, "Fly Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.1, 64.8, AbilityId.HYPER_CUTTER, AbilityId.SAND_VEIL, AbilityId.IMMUNITY, 430, 65, 75, 105, 35, 65, 85, 60, 70, 86, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.STEELIX, 2, false, false, false, "Iron Snake Pokémon", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.GROUND, 10.5, 740, AbilityId.SAND_FORCE, AbilityId.SAND_FORCE, AbilityId.SAND_FORCE, 610, 75, 125, 230, 55, 95, 30, 25, 50, 179, true), - ), - new PokemonSpecies(SpeciesId.SNUBBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.8, AbilityId.INTIMIDATE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 300, 60, 80, 50, 40, 40, 30, 190, 70, 60, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.GRANBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.4, 48.7, AbilityId.INTIMIDATE, AbilityId.QUICK_FEET, AbilityId.RATTLED, 450, 90, 120, 75, 60, 60, 45, 75, 70, 158, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.QWILFISH, 2, false, false, false, "Balloon Pokémon", PokemonType.WATER, PokemonType.POISON, 0.5, 3.9, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SCIZOR, 2, false, false, false, "Pincer Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.STEEL, 2, 125, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, 600, 70, 150, 140, 65, 100, 75, 25, 50, 175, true), - ), - new PokemonSpecies(SpeciesId.SHUCKLE, 2, false, false, false, "Mold Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.6, 20.5, AbilityId.STURDY, AbilityId.GLUTTONY, AbilityId.CONTRARY, 505, 20, 10, 230, 10, 230, 5, 190, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.HERACROSS, 2, false, false, false, "Single Horn Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, AbilityId.SWARM, AbilityId.GUTS, AbilityId.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, AbilityId.SWARM, AbilityId.GUTS, AbilityId.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FIGHTING, 1.7, 62.5, AbilityId.SKILL_LINK, AbilityId.SKILL_LINK, AbilityId.SKILL_LINK, 600, 80, 185, 115, 40, 105, 75, 45, 50, 175, true), - ), - new PokemonSpecies(SpeciesId.SNEASEL, 2, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.KEEN_EYE, AbilityId.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.TEDDIURSA, 2, false, false, false, "Little Bear Pokémon", PokemonType.NORMAL, null, 0.6, 8.8, AbilityId.PICKUP, AbilityId.QUICK_FEET, AbilityId.HONEY_GATHER, 330, 60, 80, 50, 50, 50, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.URSARING, 2, false, false, false, "Hibernator Pokémon", PokemonType.NORMAL, null, 1.8, 125.8, AbilityId.GUTS, AbilityId.QUICK_FEET, AbilityId.UNNERVE, 500, 90, 130, 75, 75, 75, 55, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.SLUGMA, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, null, 0.7, 35, AbilityId.MAGMA_ARMOR, AbilityId.FLAME_BODY, AbilityId.WEAK_ARMOR, 250, 40, 40, 40, 70, 40, 20, 190, 70, 50, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MAGCARGO, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 55, AbilityId.MAGMA_ARMOR, AbilityId.FLAME_BODY, AbilityId.WEAK_ARMOR, 430, 60, 50, 120, 90, 80, 30, 75, 70, 151, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SWINUB, 2, false, false, false, "Pig Pokémon", PokemonType.ICE, PokemonType.GROUND, 0.4, 6.5, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 250, 50, 50, 40, 30, 30, 50, 225, 50, 50, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.PILOSWINE, 2, false, false, false, "Swine Pokémon", PokemonType.ICE, PokemonType.GROUND, 1.1, 55.8, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 450, 100, 100, 80, 60, 60, 50, 75, 50, 158, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.CORSOLA, 2, false, false, false, "Coral Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.6, 5, AbilityId.HUSTLE, AbilityId.NATURAL_CURE, AbilityId.REGENERATOR, 410, 65, 55, 95, 65, 95, 35, 60, 50, 144, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.REMORAID, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.6, 12, AbilityId.HUSTLE, AbilityId.SNIPER, AbilityId.MOODY, 300, 35, 65, 35, 65, 35, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.OCTILLERY, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.9, 28.5, AbilityId.SUCTION_CUPS, AbilityId.SNIPER, AbilityId.MOODY, 480, 75, 105, 75, 105, 75, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.DELIBIRD, 2, false, false, false, "Delivery Pokémon", PokemonType.ICE, PokemonType.FLYING, 0.9, 16, AbilityId.VITAL_SPIRIT, AbilityId.HUSTLE, AbilityId.INSOMNIA, 330, 45, 55, 45, 65, 45, 75, 45, 50, 116, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.MANTINE, 2, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 2.1, 220, AbilityId.SWIFT_SWIM, AbilityId.WATER_ABSORB, AbilityId.WATER_VEIL, 485, 85, 40, 70, 80, 140, 70, 25, 50, 170, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.SKARMORY, 2, false, false, false, "Armor Bird Pokémon", PokemonType.STEEL, PokemonType.FLYING, 1.7, 50.5, AbilityId.KEEN_EYE, AbilityId.STURDY, AbilityId.WEAK_ARMOR, 465, 65, 80, 140, 40, 70, 70, 25, 50, 163, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HOUNDOUR, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.6, 10.8, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 330, 45, 60, 30, 80, 50, 65, 120, 35, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HOUNDOOM, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.FIRE, 1.9, 49.5, AbilityId.SOLAR_POWER, AbilityId.SOLAR_POWER, AbilityId.SOLAR_POWER, 600, 75, 90, 90, 140, 90, 115, 45, 35, 175, true), - ), - new PokemonSpecies(SpeciesId.KINGDRA, 2, false, false, false, "Dragon Pokémon", PokemonType.WATER, PokemonType.DRAGON, 1.8, 152, AbilityId.SWIFT_SWIM, AbilityId.SNIPER, AbilityId.DAMP, 540, 75, 95, 95, 95, 95, 85, 45, 50, 270, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PHANPY, 2, false, false, false, "Long Nose Pokémon", PokemonType.GROUND, null, 0.5, 33.5, AbilityId.PICKUP, AbilityId.NONE, AbilityId.SAND_VEIL, 330, 90, 60, 60, 40, 40, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DONPHAN, 2, false, false, false, "Armor Pokémon", PokemonType.GROUND, null, 1.1, 120, AbilityId.STURDY, AbilityId.NONE, AbilityId.SAND_VEIL, 500, 90, 120, 120, 60, 60, 50, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.PORYGON2, 2, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.6, 32.5, AbilityId.TRACE, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 515, 85, 80, 90, 105, 95, 60, 45, 50, 180, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.STANTLER, 2, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, null, 1.4, 71.2, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 465, 73, 95, 62, 85, 65, 85, 45, 70, 163, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.SMEARGLE, 2, false, false, false, "Painter Pokémon", PokemonType.NORMAL, null, 1.2, 58, AbilityId.OWN_TEMPO, AbilityId.TECHNICIAN, AbilityId.MOODY, 250, 55, 20, 35, 20, 45, 75, 45, 70, 88, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.TYROGUE, 2, false, false, false, "Scuffle Pokémon", PokemonType.FIGHTING, null, 0.7, 21, AbilityId.GUTS, AbilityId.STEADFAST, AbilityId.VITAL_SPIRIT, 210, 35, 35, 35, 35, 35, 35, 75, 50, 42, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.HITMONTOP, 2, false, false, false, "Handstand Pokémon", PokemonType.FIGHTING, null, 1.4, 48, AbilityId.INTIMIDATE, AbilityId.TECHNICIAN, AbilityId.STEADFAST, 455, 50, 95, 95, 35, 110, 70, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.SMOOCHUM, 2, false, false, false, "Kiss Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 0.4, 6, AbilityId.OBLIVIOUS, AbilityId.FOREWARN, AbilityId.HYDRATION, 305, 45, 30, 15, 85, 65, 65, 45, 50, 61, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.ELEKID, 2, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 0.6, 23.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 360, 45, 63, 37, 65, 55, 95, 45, 50, 72, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(SpeciesId.MAGBY, 2, false, false, false, "Live Coal Pokémon", PokemonType.FIRE, null, 0.7, 21.4, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 365, 45, 75, 37, 70, 55, 83, 45, 50, 73, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(SpeciesId.MILTANK, 2, false, false, false, "Milk Cow Pokémon", PokemonType.NORMAL, null, 1.2, 75.5, AbilityId.THICK_FAT, AbilityId.SCRAPPY, AbilityId.SAP_SIPPER, 490, 95, 80, 105, 40, 70, 100, 45, 50, 172, GrowthRate.SLOW, 0, false), - new PokemonSpecies(SpeciesId.BLISSEY, 2, false, false, false, "Happiness Pokémon", PokemonType.NORMAL, null, 1.5, 46.8, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.HEALER, 540, 255, 10, 10, 75, 135, 55, 30, 140, 608, GrowthRate.FAST, 0, false), - new PokemonSpecies(SpeciesId.RAIKOU, 2, true, false, false, "Thunder Pokémon", PokemonType.ELECTRIC, null, 1.9, 178, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 90, 85, 75, 115, 100, 115, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ENTEI, 2, true, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 2.1, 198, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 115, 115, 85, 90, 75, 100, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SUICUNE, 2, true, false, false, "Aurora Pokémon", PokemonType.WATER, null, 2, 187, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 100, 75, 115, 90, 115, 85, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.LARVITAR, 2, false, false, false, "Rock Skin Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.6, 72, AbilityId.GUTS, AbilityId.NONE, AbilityId.SAND_VEIL, 300, 50, 64, 50, 45, 50, 41, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.PUPITAR, 2, false, false, false, "Hard Shell Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.2, 152, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 410, 70, 84, 70, 65, 70, 51, 45, 35, 144, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.TYRANITAR, 2, false, false, false, "Armor Pokémon", PokemonType.ROCK, PokemonType.DARK, 2, 202, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.DARK, 2, 202, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.DARK, 2.5, 255, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_STREAM, 700, 100, 164, 150, 95, 120, 71, 45, 35, 300), - ), - new PokemonSpecies(SpeciesId.LUGIA, 2, false, true, false, "Diving Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 5.2, 216, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.MULTISCALE, 680, 106, 90, 130, 90, 154, 110, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.HO_OH, 2, false, true, false, "Rainbow Pokémon", PokemonType.FIRE, PokemonType.FLYING, 3.8, 199, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.REGENERATOR, 680, 106, 130, 90, 110, 154, 90, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.CELEBI, 2, false, false, true, "Time Travel Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 0.6, 5, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(SpeciesId.TREECKO, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.5, 5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 310, 40, 45, 35, 65, 55, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.GROVYLE, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.9, 21.6, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 405, 50, 65, 45, 85, 65, 95, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.SCEPTILE, 3, false, false, false, "Forest Pokémon", PokemonType.GRASS, null, 1.7, 52.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, null, 1.7, 52.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.DRAGON, 1.9, 55.2, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 630, 70, 110, 75, 145, 85, 145, 45, 50, 265), - ), - new PokemonSpecies(SpeciesId.TORCHIC, 3, false, false, false, "Chick Pokémon", PokemonType.FIRE, null, 0.4, 2.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 310, 45, 60, 40, 70, 50, 45, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(SpeciesId.COMBUSKEN, 3, false, false, false, "Young Fowl Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 19.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 405, 60, 85, 60, 85, 60, 55, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(SpeciesId.BLAZIKEN, 3, false, false, false, "Blaze Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, true, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.SPEED_BOOST, 630, 80, 160, 80, 130, 80, 100, 45, 50, 265, true), - ), - new PokemonSpecies(SpeciesId.MUDKIP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, null, 0.4, 7.6, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 310, 50, 70, 50, 50, 50, 40, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.MARSHTOMP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.7, 28, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 405, 70, 85, 70, 60, 70, 50, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.SWAMPERT, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.GROUND, 1.9, 102, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.SWIFT_SWIM, 635, 100, 150, 110, 95, 110, 70, 45, 50, 268), - ), - new PokemonSpecies(SpeciesId.POOCHYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 0.5, 13.6, AbilityId.RUN_AWAY, AbilityId.QUICK_FEET, AbilityId.RATTLED, 220, 35, 55, 35, 30, 30, 35, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MIGHTYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 1, 37, AbilityId.INTIMIDATE, AbilityId.QUICK_FEET, AbilityId.MOXIE, 420, 70, 90, 70, 60, 60, 70, 127, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ZIGZAGOON, 3, false, false, false, "Tiny Raccoon Pokémon", PokemonType.NORMAL, null, 0.4, 17.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LINOONE, 3, false, false, false, "Rushing Pokémon", PokemonType.NORMAL, null, 0.5, 32.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WURMPLE, 3, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 3.6, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 45, 45, 35, 20, 30, 20, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SILCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.6, 10, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BEAUTIFLY, 3, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 28.4, AbilityId.SWARM, AbilityId.NONE, AbilityId.RIVALRY, 395, 60, 70, 50, 100, 50, 65, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.CASCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 11.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DUSTOX, 3, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 31.6, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.COMPOUND_EYES, 385, 60, 50, 70, 50, 90, 65, 45, 70, 193, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.LOTAD, 3, false, false, false, "Water Weed Pokémon", PokemonType.WATER, PokemonType.GRASS, 0.5, 2.6, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 220, 40, 30, 30, 40, 50, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.LOMBRE, 3, false, false, false, "Jolly Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.2, 32.5, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 340, 60, 50, 50, 60, 70, 50, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.LUDICOLO, 3, false, false, false, "Carefree Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.5, 55, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 480, 80, 70, 70, 90, 100, 70, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.SEEDOT, 3, false, false, false, "Acorn Pokémon", PokemonType.GRASS, null, 0.5, 4, AbilityId.CHLOROPHYLL, AbilityId.EARLY_BIRD, AbilityId.PICKPOCKET, 220, 40, 40, 50, 30, 30, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.NUZLEAF, 3, false, false, false, "Wily Pokémon", PokemonType.GRASS, PokemonType.DARK, 1, 28, AbilityId.CHLOROPHYLL, AbilityId.EARLY_BIRD, AbilityId.PICKPOCKET, 340, 70, 70, 40, 60, 40, 60, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.SHIFTRY, 3, false, false, false, "Wicked Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 59.6, AbilityId.CHLOROPHYLL, AbilityId.WIND_RIDER, AbilityId.PICKPOCKET, 480, 90, 100, 60, 90, 60, 80, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.TAILLOW, 3, false, false, false, "Tiny Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.3, AbilityId.GUTS, AbilityId.NONE, AbilityId.SCRAPPY, 270, 40, 55, 30, 30, 30, 85, 200, 70, 54, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SWELLOW, 3, false, false, false, "Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 19.8, AbilityId.GUTS, AbilityId.NONE, AbilityId.SCRAPPY, 455, 60, 85, 60, 75, 50, 125, 45, 70, 159, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.WINGULL, 3, false, false, false, "Seagull Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.6, 9.5, AbilityId.KEEN_EYE, AbilityId.HYDRATION, AbilityId.RAIN_DISH, 270, 40, 30, 30, 55, 30, 85, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PELIPPER, 3, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.2, 28, AbilityId.KEEN_EYE, AbilityId.DRIZZLE, AbilityId.RAIN_DISH, 440, 60, 50, 100, 95, 70, 65, 45, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RALTS, 3, false, false, false, "Feeling Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.4, 6.6, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 198, 28, 25, 25, 45, 35, 40, 235, 35, 40, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.KIRLIA, 3, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.8, 20.2, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 278, 38, 35, 35, 65, 55, 50, 120, 35, 97, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.GARDEVOIR, 3, false, false, false, "Embrace Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.PIXILATE, AbilityId.PIXILATE, AbilityId.PIXILATE, 618, 68, 85, 65, 165, 135, 100, 45, 35, 259), - ), - new PokemonSpecies(SpeciesId.SURSKIT, 3, false, false, false, "Pond Skater Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 1.7, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.RAIN_DISH, 269, 40, 30, 32, 50, 52, 65, 200, 70, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MASQUERAIN, 3, false, false, false, "Eyeball Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 3.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.UNNERVE, 454, 70, 60, 62, 100, 82, 80, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SHROOMISH, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, null, 0.4, 4.5, AbilityId.EFFECT_SPORE, AbilityId.POISON_HEAL, AbilityId.QUICK_FEET, 295, 60, 40, 60, 40, 60, 35, 255, 70, 59, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.BRELOOM, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 39.2, AbilityId.EFFECT_SPORE, AbilityId.POISON_HEAL, AbilityId.TECHNICIAN, 460, 60, 130, 80, 60, 60, 70, 90, 70, 161, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.SLAKOTH, 3, false, false, false, "Slacker Pokémon", PokemonType.NORMAL, null, 0.8, 24, AbilityId.TRUANT, AbilityId.NONE, AbilityId.STALL, 280, 60, 60, 60, 35, 35, 30, 255, 70, 56, GrowthRate.SLOW, 50, false), //Custom Hidden - new PokemonSpecies(SpeciesId.VIGOROTH, 3, false, false, false, "Wild Monkey Pokémon", PokemonType.NORMAL, null, 1.4, 46.5, AbilityId.VITAL_SPIRIT, AbilityId.NONE, AbilityId.INSOMNIA, 440, 80, 80, 80, 55, 55, 90, 120, 70, 154, GrowthRate.SLOW, 50, false), //Custom Hidden - new PokemonSpecies(SpeciesId.SLAKING, 3, false, false, false, "Lazy Pokémon", PokemonType.NORMAL, null, 2, 130.5, AbilityId.TRUANT, AbilityId.NONE, AbilityId.STALL, 670, 150, 160, 100, 95, 65, 100, 45, 70, 285, GrowthRate.SLOW, 50, false), //Custom Hidden - new PokemonSpecies(SpeciesId.NINCADA, 3, false, false, false, "Trainee Pokémon", PokemonType.BUG, PokemonType.GROUND, 0.5, 5.5, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.RUN_AWAY, 266, 31, 45, 90, 30, 30, 40, 255, 50, 53, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.NINJASK, 3, false, false, false, "Ninja Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 12, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.INFILTRATOR, 456, 61, 90, 45, 50, 50, 160, 120, 50, 160, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.SHEDINJA, 3, false, false, false, "Shed Pokémon", PokemonType.BUG, PokemonType.GHOST, 0.8, 1.2, AbilityId.WONDER_GUARD, AbilityId.NONE, AbilityId.NONE, 236, 1, 90, 45, 30, 30, 40, 45, 50, 83, GrowthRate.ERRATIC, null, false), - new PokemonSpecies(SpeciesId.WHISMUR, 3, false, false, false, "Whisper Pokémon", PokemonType.NORMAL, null, 0.6, 16.3, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.RATTLED, 240, 64, 51, 23, 51, 23, 28, 190, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.LOUDRED, 3, false, false, false, "Big Voice Pokémon", PokemonType.NORMAL, null, 1, 40.5, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.SCRAPPY, 360, 84, 71, 43, 71, 43, 48, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.EXPLOUD, 3, false, false, false, "Loud Noise Pokémon", PokemonType.NORMAL, null, 1.5, 84, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.SCRAPPY, 490, 104, 91, 63, 91, 73, 68, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.MAKUHITA, 3, false, false, false, "Guts Pokémon", PokemonType.FIGHTING, null, 1, 86.4, AbilityId.THICK_FAT, AbilityId.GUTS, AbilityId.SHEER_FORCE, 237, 72, 60, 30, 20, 30, 25, 180, 70, 47, GrowthRate.FLUCTUATING, 75, false), - new PokemonSpecies(SpeciesId.HARIYAMA, 3, false, false, false, "Arm Thrust Pokémon", PokemonType.FIGHTING, null, 2.3, 253.8, AbilityId.THICK_FAT, AbilityId.GUTS, AbilityId.SHEER_FORCE, 474, 144, 120, 60, 40, 60, 50, 200, 70, 166, GrowthRate.FLUCTUATING, 75, false), - new PokemonSpecies(SpeciesId.AZURILL, 3, false, false, false, "Polka Dot Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.2, 2, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 190, 50, 20, 40, 20, 40, 20, 150, 50, 38, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.NOSEPASS, 3, false, false, false, "Compass Pokémon", PokemonType.ROCK, null, 1, 97, AbilityId.STURDY, AbilityId.MAGNET_PULL, AbilityId.SAND_FORCE, 375, 30, 45, 135, 45, 90, 30, 255, 70, 75, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SKITTY, 3, false, false, false, "Kitten Pokémon", PokemonType.NORMAL, null, 0.6, 11, AbilityId.CUTE_CHARM, AbilityId.NORMALIZE, AbilityId.WONDER_SKIN, 260, 50, 45, 45, 35, 35, 50, 255, 70, 52, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.DELCATTY, 3, false, false, false, "Prim Pokémon", PokemonType.NORMAL, null, 1.1, 32.6, AbilityId.CUTE_CHARM, AbilityId.NORMALIZE, AbilityId.WONDER_SKIN, 400, 70, 65, 65, 55, 55, 90, 60, 70, 140, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.SABLEYE, 3, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, AbilityId.KEEN_EYE, AbilityId.STALL, AbilityId.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, AbilityId.KEEN_EYE, AbilityId.STALL, AbilityId.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.GHOST, 0.5, 161, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 480, 50, 85, 125, 85, 115, 20, 45, 35, 133), - ), - new PokemonSpecies(SpeciesId.MAWILE, 3, false, false, false, "Deceiver Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.INTIMIDATE, AbilityId.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, GrowthRate.FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.INTIMIDATE, AbilityId.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.FAIRY, 1, 23.5, AbilityId.HUGE_POWER, AbilityId.HUGE_POWER, AbilityId.HUGE_POWER, 480, 50, 105, 125, 55, 95, 50, 45, 50, 133), - ), - new PokemonSpecies(SpeciesId.ARON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.4, 60, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 330, 50, 70, 100, 40, 40, 30, 180, 35, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.LAIRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.9, 120, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 430, 60, 90, 140, 50, 50, 40, 90, 35, 151, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.AGGRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, null, 2.2, 395, AbilityId.FILTER, AbilityId.FILTER, AbilityId.FILTER, 630, 70, 140, 230, 60, 80, 50, 45, 35, 265), - ), - new PokemonSpecies(SpeciesId.MEDITITE, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 0.6, 11.2, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 280, 30, 40, 55, 40, 55, 60, 180, 70, 56, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.MEDICHAM, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.PURE_POWER, 510, 60, 100, 85, 80, 85, 100, 90, 70, 144, true), - ), - new PokemonSpecies(SpeciesId.ELECTRIKE, 3, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.6, 15.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 295, 40, 45, 40, 65, 40, 65, 120, 50, 59, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.MANECTRIC, 3, false, false, false, "Discharge Pokémon", PokemonType.ELECTRIC, null, 1.5, 40.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.5, 40.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, null, 1.8, 44, AbilityId.INTIMIDATE, AbilityId.INTIMIDATE, AbilityId.INTIMIDATE, 575, 70, 75, 80, 135, 80, 135, 45, 50, 166), - ), - new PokemonSpecies(SpeciesId.PLUSLE, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, AbilityId.PLUS, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 405, 60, 50, 40, 85, 75, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MINUN, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, AbilityId.MINUS, AbilityId.NONE, AbilityId.VOLT_ABSORB, 405, 60, 40, 50, 75, 85, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.VOLBEAT, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.7, 17.7, AbilityId.ILLUMINATE, AbilityId.SWARM, AbilityId.PRANKSTER, 430, 65, 73, 75, 47, 85, 85, 150, 70, 151, GrowthRate.ERRATIC, 100, false), - new PokemonSpecies(SpeciesId.ILLUMISE, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.6, 17.7, AbilityId.OBLIVIOUS, AbilityId.TINTED_LENS, AbilityId.PRANKSTER, 430, 65, 47, 75, 73, 85, 85, 150, 70, 151, GrowthRate.FLUCTUATING, 0, false), - new PokemonSpecies(SpeciesId.ROSELIA, 3, false, false, false, "Thorn Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.3, 2, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.LEAF_GUARD, 400, 50, 60, 45, 100, 80, 65, 150, 50, 140, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.GULPIN, 3, false, false, false, "Stomach Pokémon", PokemonType.POISON, null, 0.4, 10.3, AbilityId.LIQUID_OOZE, AbilityId.STICKY_HOLD, AbilityId.GLUTTONY, 302, 70, 43, 53, 43, 53, 40, 225, 70, 60, GrowthRate.FLUCTUATING, 50, true), - new PokemonSpecies(SpeciesId.SWALOT, 3, false, false, false, "Poison Bag Pokémon", PokemonType.POISON, null, 1.7, 80, AbilityId.LIQUID_OOZE, AbilityId.STICKY_HOLD, AbilityId.GLUTTONY, 467, 100, 73, 83, 73, 83, 55, 75, 70, 163, GrowthRate.FLUCTUATING, 50, true), - new PokemonSpecies(SpeciesId.CARVANHA, 3, false, false, false, "Savage Pokémon", PokemonType.WATER, PokemonType.DARK, 0.8, 20.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 305, 45, 90, 20, 65, 20, 65, 225, 35, 61, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.SHARPEDO, 3, false, false, false, "Brutal Pokémon", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 2.5, 130.3, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.STRONG_JAW, 560, 70, 140, 70, 110, 65, 105, 60, 35, 161), - ), - new PokemonSpecies(SpeciesId.WAILMER, 3, false, false, false, "Ball Whale Pokémon", PokemonType.WATER, null, 2, 130, AbilityId.WATER_VEIL, AbilityId.OBLIVIOUS, AbilityId.PRESSURE, 400, 130, 70, 35, 70, 35, 60, 125, 50, 80, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.WAILORD, 3, false, false, false, "Float Whale Pokémon", PokemonType.WATER, null, 14.5, 398, AbilityId.WATER_VEIL, AbilityId.OBLIVIOUS, AbilityId.PRESSURE, 500, 170, 90, 45, 90, 45, 60, 60, 50, 175, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.NUMEL, 3, false, false, false, "Numb Pokémon", PokemonType.FIRE, PokemonType.GROUND, 0.7, 24, AbilityId.OBLIVIOUS, AbilityId.SIMPLE, AbilityId.OWN_TEMPO, 305, 60, 60, 40, 65, 45, 35, 255, 70, 61, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.CAMERUPT, 3, false, false, false, "Eruption Pokémon", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, AbilityId.MAGMA_ARMOR, AbilityId.SOLID_ROCK, AbilityId.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, AbilityId.MAGMA_ARMOR, AbilityId.SOLID_ROCK, AbilityId.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.GROUND, 2.5, 320.5, AbilityId.SHEER_FORCE, AbilityId.SHEER_FORCE, AbilityId.SHEER_FORCE, 560, 70, 120, 100, 145, 105, 20, 150, 70, 161), - ), - new PokemonSpecies(SpeciesId.TORKOAL, 3, false, false, false, "Coal Pokémon", PokemonType.FIRE, null, 0.5, 80.4, AbilityId.WHITE_SMOKE, AbilityId.DROUGHT, AbilityId.SHELL_ARMOR, 470, 70, 85, 140, 85, 70, 20, 90, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SPOINK, 3, false, false, false, "Bounce Pokémon", PokemonType.PSYCHIC, null, 0.7, 30.6, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.GLUTTONY, 330, 60, 25, 35, 70, 80, 60, 255, 70, 66, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.GRUMPIG, 3, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.9, 71.5, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.GLUTTONY, 470, 80, 45, 65, 90, 110, 80, 60, 70, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.SPINDA, 3, false, false, false, "Spot Panda Pokémon", PokemonType.NORMAL, null, 1.1, 5, AbilityId.OWN_TEMPO, AbilityId.TANGLED_FEET, AbilityId.CONTRARY, 360, 60, 60, 60, 60, 60, 60, 255, 70, 126, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.TRAPINCH, 3, false, false, false, "Ant Pit Pokémon", PokemonType.GROUND, null, 0.7, 15, AbilityId.HYPER_CUTTER, AbilityId.ARENA_TRAP, AbilityId.SHEER_FORCE, 290, 45, 100, 45, 45, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.VIBRAVA, 3, false, false, false, "Vibration Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 1.1, 15.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 340, 50, 70, 50, 50, 50, 70, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.FLYGON, 3, false, false, false, "Mystic Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 2, 82, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 80, 100, 80, 80, 80, 100, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CACNEA, 3, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 0.4, 51.3, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.WATER_ABSORB, 335, 50, 85, 40, 85, 40, 35, 190, 35, 67, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CACTURNE, 3, false, false, false, "Scarecrow Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 77.4, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.WATER_ABSORB, 475, 70, 115, 60, 115, 60, 55, 60, 35, 166, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.SWABLU, 3, false, false, false, "Cotton Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.4, 1.2, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 310, 45, 40, 60, 40, 75, 50, 255, 50, 62, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.ALTARIA, 3, false, false, false, "Humming Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, GrowthRate.ERRATIC, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FAIRY, 1.5, 20.6, AbilityId.PIXILATE, AbilityId.NONE, AbilityId.PIXILATE, 590, 75, 110, 110, 110, 105, 80, 45, 50, 172), - ), - new PokemonSpecies(SpeciesId.ZANGOOSE, 3, false, false, false, "Cat Ferret Pokémon", PokemonType.NORMAL, null, 1.3, 40.3, AbilityId.IMMUNITY, AbilityId.NONE, AbilityId.TOXIC_BOOST, 458, 73, 115, 60, 60, 60, 90, 90, 70, 160, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.SEVIPER, 3, false, false, false, "Fang Snake Pokémon", PokemonType.POISON, null, 2.7, 52.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.INFILTRATOR, 458, 73, 100, 60, 100, 60, 65, 90, 70, 160, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.LUNATONE, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1, 168, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 460, 90, 55, 65, 95, 85, 70, 45, 50, 161, GrowthRate.FAST, null, false), - new PokemonSpecies(SpeciesId.SOLROCK, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.2, 154, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 460, 90, 95, 85, 55, 65, 70, 45, 50, 161, GrowthRate.FAST, null, false), - new PokemonSpecies(SpeciesId.BARBOACH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 1.9, AbilityId.OBLIVIOUS, AbilityId.ANTICIPATION, AbilityId.HYDRATION, 288, 50, 48, 43, 46, 41, 60, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WHISCASH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 23.6, AbilityId.OBLIVIOUS, AbilityId.ANTICIPATION, AbilityId.HYDRATION, 468, 110, 78, 73, 76, 71, 60, 75, 50, 164, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CORPHISH, 3, false, false, false, "Ruffian Pokémon", PokemonType.WATER, null, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.ADAPTABILITY, 308, 43, 80, 65, 50, 35, 35, 205, 50, 62, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.CRAWDAUNT, 3, false, false, false, "Rogue Pokémon", PokemonType.WATER, PokemonType.DARK, 1.1, 32.8, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.ADAPTABILITY, 468, 63, 120, 85, 90, 55, 55, 155, 50, 164, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.BALTOY, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 0.5, 21.5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 300, 40, 40, 55, 40, 70, 55, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.CLAYDOL, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 1.5, 108, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 500, 60, 70, 105, 70, 120, 75, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.LILEEP, 3, false, false, false, "Sea Lily Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1, 23.8, AbilityId.SUCTION_CUPS, AbilityId.NONE, AbilityId.STORM_DRAIN, 355, 66, 41, 77, 61, 87, 23, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.CRADILY, 3, false, false, false, "Barnacle Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1.5, 60.4, AbilityId.SUCTION_CUPS, AbilityId.NONE, AbilityId.STORM_DRAIN, 495, 86, 81, 97, 81, 107, 43, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.ANORITH, 3, false, false, false, "Old Shrimp Pokémon", PokemonType.ROCK, PokemonType.BUG, 0.7, 12.5, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.SWIFT_SWIM, 355, 45, 95, 50, 40, 50, 75, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.ARMALDO, 3, false, false, false, "Plate Pokémon", PokemonType.ROCK, PokemonType.BUG, 1.5, 68.2, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.SWIFT_SWIM, 495, 75, 125, 100, 70, 80, 45, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.FEEBAS, 3, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.6, 7.4, AbilityId.SWIFT_SWIM, AbilityId.OBLIVIOUS, AbilityId.ADAPTABILITY, 200, 20, 15, 20, 10, 55, 80, 255, 50, 40, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.MILOTIC, 3, false, false, false, "Tender Pokémon", PokemonType.WATER, null, 6.2, 162, AbilityId.MARVEL_SCALE, AbilityId.COMPETITIVE, AbilityId.CUTE_CHARM, 540, 95, 60, 79, 100, 125, 81, 60, 50, 189, GrowthRate.ERRATIC, 50, true), - new PokemonSpecies(SpeciesId.CASTFORM, 3, false, false, false, "Weather Pokémon", PokemonType.NORMAL, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, false, null, true), - new PokemonForm("Sunny Form", "sunny", PokemonType.FIRE, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), - new PokemonForm("Rainy Form", "rainy", PokemonType.WATER, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), - new PokemonForm("Snowy Form", "snowy", PokemonType.ICE, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), - ), - new PokemonSpecies(SpeciesId.KECLEON, 3, false, false, false, "Color Swap Pokémon", PokemonType.NORMAL, null, 1, 22, AbilityId.COLOR_CHANGE, AbilityId.NONE, AbilityId.PROTEAN, 440, 60, 90, 70, 60, 120, 40, 200, 70, 154, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SHUPPET, 3, false, false, false, "Puppet Pokémon", PokemonType.GHOST, null, 0.6, 2.3, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 295, 44, 75, 35, 63, 33, 45, 225, 35, 59, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.BANETTE, 3, false, false, false, "Marionette Pokémon", PokemonType.GHOST, null, 1.1, 12.5, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, GrowthRate.FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GHOST, null, 1.1, 12.5, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, null, 1.2, 13, AbilityId.PRANKSTER, AbilityId.PRANKSTER, AbilityId.PRANKSTER, 555, 64, 165, 75, 93, 83, 75, 45, 35, 159), - ), - new PokemonSpecies(SpeciesId.DUSKULL, 3, false, false, false, "Requiem Pokémon", PokemonType.GHOST, null, 0.8, 15, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.FRISK, 295, 20, 40, 90, 30, 90, 25, 190, 35, 59, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.DUSCLOPS, 3, false, false, false, "Beckon Pokémon", PokemonType.GHOST, null, 1.6, 30.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FRISK, 455, 40, 70, 130, 60, 130, 25, 90, 35, 159, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.TROPIUS, 3, false, false, false, "Fruit Pokémon", PokemonType.GRASS, PokemonType.FLYING, 2, 100, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.HARVEST, 460, 99, 68, 83, 72, 87, 51, 200, 70, 161, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.CHIMECHO, 3, false, false, false, "Wind Chime Pokémon", PokemonType.PSYCHIC, null, 0.6, 1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 455, 75, 50, 80, 95, 90, 65, 45, 70, 159, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.ABSOL, 3, false, false, false, "Disaster Pokémon", PokemonType.DARK, null, 1.2, 47, AbilityId.PRESSURE, AbilityId.SUPER_LUCK, AbilityId.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DARK, null, 1.2, 47, AbilityId.PRESSURE, AbilityId.SUPER_LUCK, AbilityId.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, null, 1.2, 49, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 565, 65, 150, 60, 115, 60, 115, 30, 35, 163), - ), - new PokemonSpecies(SpeciesId.WYNAUT, 3, false, false, false, "Bright Pokémon", PokemonType.PSYCHIC, null, 0.6, 14, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.TELEPATHY, 260, 95, 23, 48, 23, 48, 23, 125, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SNORUNT, 3, false, false, false, "Snow Hat Pokémon", PokemonType.ICE, null, 0.7, 16.8, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 300, 50, 50, 50, 50, 50, 50, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GLALIE, 3, false, false, false, "Face Pokémon", PokemonType.ICE, null, 1.5, 256.5, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ICE, null, 1.5, 256.5, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ICE, null, 2.1, 350.2, AbilityId.REFRIGERATE, AbilityId.REFRIGERATE, AbilityId.REFRIGERATE, 580, 80, 120, 80, 120, 80, 100, 75, 50, 168), - ), - new PokemonSpecies(SpeciesId.SPHEAL, 3, false, false, false, "Clap Pokémon", PokemonType.ICE, PokemonType.WATER, 0.8, 39.5, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 290, 70, 40, 50, 55, 50, 25, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SEALEO, 3, false, false, false, "Ball Roll Pokémon", PokemonType.ICE, PokemonType.WATER, 1.1, 87.6, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 410, 90, 60, 70, 75, 70, 45, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.WALREIN, 3, false, false, false, "Ice Break Pokémon", PokemonType.ICE, PokemonType.WATER, 1.4, 150.6, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 530, 110, 80, 90, 95, 90, 65, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CLAMPERL, 3, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.4, 52.5, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.RATTLED, 345, 35, 64, 85, 74, 55, 32, 255, 70, 69, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.HUNTAIL, 3, false, false, false, "Deep Sea Pokémon", PokemonType.WATER, null, 1.7, 27, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 485, 55, 104, 105, 94, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.GOREBYSS, 3, false, false, false, "South Sea Pokémon", PokemonType.WATER, null, 1.8, 22.6, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.HYDRATION, 485, 55, 84, 105, 114, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.RELICANTH, 3, false, false, false, "Longevity Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 23.4, AbilityId.SWIFT_SWIM, AbilityId.ROCK_HEAD, AbilityId.STURDY, 485, 100, 90, 130, 45, 65, 55, 25, 50, 170, GrowthRate.SLOW, 87.5, true), - new PokemonSpecies(SpeciesId.LUVDISC, 3, false, false, false, "Rendezvous Pokémon", PokemonType.WATER, null, 0.6, 8.7, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.HYDRATION, 330, 43, 30, 55, 40, 65, 97, 225, 70, 116, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.BAGON, 3, false, false, false, "Rock Head Pokémon", PokemonType.DRAGON, null, 0.6, 42.1, AbilityId.ROCK_HEAD, AbilityId.NONE, AbilityId.SHEER_FORCE, 300, 45, 75, 60, 40, 30, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.SHELGON, 3, false, false, false, "Endurance Pokémon", PokemonType.DRAGON, null, 1.1, 110.5, AbilityId.ROCK_HEAD, AbilityId.NONE, AbilityId.OVERCOAT, 420, 65, 95, 100, 60, 50, 50, 45, 35, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.SALAMENCE, 3, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 1.8, 112.6, AbilityId.AERILATE, AbilityId.NONE, AbilityId.AERILATE, 700, 95, 145, 130, 120, 90, 120, 45, 35, 300), - ), - new PokemonSpecies(SpeciesId.BELDUM, 3, false, false, false, "Iron Ball Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.6, 95.2, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 300, 40, 55, 80, 35, 60, 30, 45, 35, 60, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Frigibax - new PokemonSpecies(SpeciesId.METANG, 3, false, false, false, "Iron Claw Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.2, 202.5, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 420, 60, 75, 100, 55, 80, 50, 25, 35, 147, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Arctibax - new PokemonSpecies(SpeciesId.METAGROSS, 3, false, false, false, "Iron Leg Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 10, 35, 300, GrowthRate.SLOW, null, false, true, //Custom Catchrate, matching Baxcalibur - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 3, 35, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.PSYCHIC, 2.5, 942.9, AbilityId.TOUGH_CLAWS, AbilityId.NONE, AbilityId.TOUGH_CLAWS, 700, 80, 145, 150, 105, 110, 110, 3, 35, 300), - ), - new PokemonSpecies(SpeciesId.REGIROCK, 3, true, false, false, "Rock Peak Pokémon", PokemonType.ROCK, null, 1.7, 230, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.STURDY, 580, 80, 100, 200, 50, 100, 50, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.REGICE, 3, true, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 1.8, 175, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.ICE_BODY, 580, 80, 50, 100, 100, 200, 50, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.REGISTEEL, 3, true, false, false, "Iron Pokémon", PokemonType.STEEL, null, 1.9, 205, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 580, 80, 75, 150, 75, 150, 50, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.LATIAS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, GrowthRate.SLOW, 0, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 1.8, 52, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 700, 80, 100, 120, 140, 150, 110, 3, 90, 300), - ), - new PokemonSpecies(SpeciesId.LATIOS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 2.3, 70, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 700, 80, 130, 100, 160, 120, 110, 3, 90, 300), - ), - new PokemonSpecies(SpeciesId.KYOGRE, 3, false, true, false, "Sea Basin Pokémon", PokemonType.WATER, null, 4.5, 352, AbilityId.DRIZZLE, AbilityId.NONE, AbilityId.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 4.5, 352, AbilityId.DRIZZLE, AbilityId.NONE, AbilityId.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, false, null, true), - new PokemonForm("Primal", "primal", PokemonType.WATER, null, 9.8, 430, AbilityId.PRIMORDIAL_SEA, AbilityId.NONE, AbilityId.NONE, 770, 100, 150, 90, 180, 160, 90, 3, 0, 335), - ), - new PokemonSpecies(SpeciesId.GROUDON, 3, false, true, false, "Continent Pokémon", PokemonType.GROUND, null, 3.5, 950, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.5, 950, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, false, null, true), - new PokemonForm("Primal", "primal", PokemonType.GROUND, PokemonType.FIRE, 5, 999.7, AbilityId.DESOLATE_LAND, AbilityId.NONE, AbilityId.NONE, 770, 100, 180, 160, 150, 90, 90, 3, 0, 335), - ), - new PokemonSpecies(SpeciesId.RAYQUAZA, 3, false, true, false, "Sky High Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 3, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 3, 0, 340, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 10.8, 392, AbilityId.DELTA_STREAM, AbilityId.NONE, AbilityId.NONE, 780, 105, 180, 100, 180, 100, 115, 3, 0, 340), - ), - new PokemonSpecies(SpeciesId.JIRACHI, 3, false, false, true, "Wish Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.3, 1.1, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.DEOXYS, 3, false, false, true, "DNA Pokémon", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal Forme", "normal", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, false, "", true), - new PokemonForm("Attack Forme", "attack", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 180, 20, 180, 20, 150, 3, 0, 300), - new PokemonForm("Defense Forme", "defense", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 70, 160, 70, 160, 90, 3, 0, 300), - new PokemonForm("Speed Forme", "speed", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 95, 90, 95, 90, 180, 3, 0, 300), - ), - new PokemonSpecies(SpeciesId.TURTWIG, 4, false, false, false, "Tiny Leaf Pokémon", PokemonType.GRASS, null, 0.4, 10.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 318, 55, 68, 64, 45, 55, 31, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.GROTLE, 4, false, false, false, "Grove Pokémon", PokemonType.GRASS, null, 1.1, 97, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 405, 75, 89, 85, 55, 65, 36, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.TORTERRA, 4, false, false, false, "Continent Pokémon", PokemonType.GRASS, PokemonType.GROUND, 2.2, 310, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 525, 95, 109, 105, 75, 85, 56, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.CHIMCHAR, 4, false, false, false, "Chimp Pokémon", PokemonType.FIRE, null, 0.5, 6.2, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 309, 44, 58, 44, 58, 44, 61, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.MONFERNO, 4, false, false, false, "Playful Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 22, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 405, 64, 78, 52, 78, 52, 81, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.INFERNAPE, 4, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.2, 55, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 534, 76, 104, 71, 104, 71, 108, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.PIPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.4, 5.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 314, 53, 51, 53, 61, 56, 40, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.PRINPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.8, 23, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 405, 64, 66, 68, 81, 76, 50, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.EMPOLEON, 4, false, false, false, "Emperor Pokémon", PokemonType.WATER, PokemonType.STEEL, 1.7, 84.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 530, 84, 86, 88, 111, 101, 60, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.STARLY, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.RECKLESS, 245, 40, 55, 30, 30, 30, 60, 255, 70, 49, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.STARAVIA, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15.5, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.RECKLESS, 340, 55, 75, 50, 40, 40, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.STARAPTOR, 4, false, false, false, "Predator Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 24.9, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.RECKLESS, 485, 85, 120, 70, 50, 60, 100, 45, 70, 243, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.BIDOOF, 4, false, false, false, "Plump Mouse Pokémon", PokemonType.NORMAL, null, 0.5, 20, AbilityId.SIMPLE, AbilityId.UNAWARE, AbilityId.MOODY, 250, 59, 45, 40, 35, 40, 31, 255, 70, 50, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.BIBAREL, 4, false, false, false, "Beaver Pokémon", PokemonType.NORMAL, PokemonType.WATER, 1, 31.5, AbilityId.SIMPLE, AbilityId.UNAWARE, AbilityId.MOODY, 410, 79, 85, 60, 55, 60, 71, 127, 70, 144, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.KRICKETOT, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 0.3, 2.2, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.RUN_AWAY, 194, 37, 25, 41, 25, 41, 25, 255, 70, 39, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.KRICKETUNE, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 1, 25.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.TECHNICIAN, 384, 77, 85, 51, 55, 51, 65, 45, 70, 134, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.SHINX, 4, false, false, false, "Flash Pokémon", PokemonType.ELECTRIC, null, 0.5, 9.5, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 263, 45, 65, 34, 40, 34, 45, 235, 50, 53, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.LUXIO, 4, false, false, false, "Spark Pokémon", PokemonType.ELECTRIC, null, 0.9, 30.5, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 363, 60, 85, 49, 60, 49, 60, 120, 100, 127, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.LUXRAY, 4, false, false, false, "Gleam Eyes Pokémon", PokemonType.ELECTRIC, null, 1.4, 42, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 523, 80, 120, 79, 95, 79, 70, 45, 50, 262, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.BUDEW, 4, false, false, false, "Bud Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1.2, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.LEAF_GUARD, 280, 40, 30, 35, 50, 70, 55, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ROSERADE, 4, false, false, false, "Bouquet Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.9, 14.5, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.TECHNICIAN, 515, 60, 70, 65, 125, 105, 90, 75, 50, 258, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.CRANIDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 0.9, 31.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHEER_FORCE, 350, 67, 125, 40, 30, 30, 58, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.RAMPARDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 1.6, 102.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHEER_FORCE, 495, 97, 165, 60, 65, 50, 58, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.SHIELDON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 0.5, 57, AbilityId.STURDY, AbilityId.NONE, AbilityId.SOUNDPROOF, 350, 30, 42, 118, 42, 88, 30, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.BASTIODON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.3, 149.5, AbilityId.STURDY, AbilityId.NONE, AbilityId.SOUNDPROOF, 495, 60, 52, 168, 47, 138, 30, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(SpeciesId.BURMY, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), - new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), - new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), - ), - new PokemonSpecies(SpeciesId.WORMADAM, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, false, null, true), - new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, PokemonType.GROUND, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 79, 105, 59, 85, 36, 45, 70, 148, false, null, true), - new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, PokemonType.STEEL, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 69, 95, 69, 95, 36, 45, 70, 148, false, null, true), - ), - new PokemonSpecies(SpeciesId.MOTHIM, 4, false, false, false, "Moth Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.9, 23.3, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 424, 70, 94, 50, 94, 50, 66, 45, 70, 148, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.COMBEE, 4, false, false, false, "Tiny Bee Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.3, 5.5, AbilityId.HONEY_GATHER, AbilityId.NONE, AbilityId.HUSTLE, 244, 30, 30, 42, 30, 42, 70, 120, 50, 49, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(SpeciesId.VESPIQUEN, 4, false, false, false, "Beehive Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38.5, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 474, 70, 80, 102, 80, 102, 40, 45, 50, 166, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.PACHIRISU, 4, false, false, false, "EleSquirrel Pokémon", PokemonType.ELECTRIC, null, 0.4, 3.9, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.VOLT_ABSORB, 405, 60, 45, 70, 45, 90, 95, 200, 100, 142, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.BUIZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 0.7, 29.5, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 330, 55, 65, 35, 60, 30, 85, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.FLOATZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 1.1, 33.5, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 495, 85, 105, 55, 85, 50, 115, 75, 70, 173, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.CHERUBI, 4, false, false, false, "Cherry Pokémon", PokemonType.GRASS, null, 0.4, 3.3, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.NONE, 275, 45, 35, 45, 62, 53, 35, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CHERRIM, 4, false, false, false, "Blossom Pokémon", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Overcast Form", "overcast", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, false, null, true), - new PokemonForm("Sunshine Form", "sunshine", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158), - ), - new PokemonSpecies(SpeciesId.SHELLOS, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("East Sea", "east", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true), - new PokemonForm("West Sea", "west", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true), - ), - new PokemonSpecies(SpeciesId.GASTRODON, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("East Sea", "east", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true), - new PokemonForm("West Sea", "west", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true), - ), - new PokemonSpecies(SpeciesId.AMBIPOM, 4, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 1.2, 20.3, AbilityId.TECHNICIAN, AbilityId.PICKUP, AbilityId.SKILL_LINK, 482, 75, 100, 66, 60, 66, 115, 45, 100, 169, GrowthRate.FAST, 50, true), - new PokemonSpecies(SpeciesId.DRIFLOON, 4, false, false, false, "Balloon Pokémon", PokemonType.GHOST, PokemonType.FLYING, 0.4, 1.2, AbilityId.AFTERMATH, AbilityId.UNBURDEN, AbilityId.FLARE_BOOST, 348, 90, 50, 34, 60, 44, 70, 125, 50, 70, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.DRIFBLIM, 4, false, false, false, "Blimp Pokémon", PokemonType.GHOST, PokemonType.FLYING, 1.2, 15, AbilityId.AFTERMATH, AbilityId.UNBURDEN, AbilityId.FLARE_BOOST, 498, 150, 80, 44, 90, 54, 80, 60, 50, 174, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(SpeciesId.BUNEARY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 0.4, 5.5, AbilityId.RUN_AWAY, AbilityId.KLUTZ, AbilityId.LIMBER, 350, 55, 66, 44, 44, 56, 85, 190, 0, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LOPUNNY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 1.2, 33.3, AbilityId.CUTE_CHARM, AbilityId.KLUTZ, AbilityId.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.2, 33.3, AbilityId.CUTE_CHARM, AbilityId.KLUTZ, AbilityId.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FIGHTING, 1.3, 28.3, AbilityId.SCRAPPY, AbilityId.SCRAPPY, AbilityId.SCRAPPY, 580, 65, 136, 94, 54, 96, 135, 60, 140, 168), - ), - new PokemonSpecies(SpeciesId.MISMAGIUS, 4, false, false, false, "Magical Pokémon", PokemonType.GHOST, null, 0.9, 4.4, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 495, 60, 60, 60, 105, 105, 105, 45, 35, 173, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.HONCHKROW, 4, false, false, false, "Big Boss Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.9, 27.3, AbilityId.INSOMNIA, AbilityId.SUPER_LUCK, AbilityId.MOXIE, 505, 100, 125, 52, 105, 52, 71, 30, 35, 177, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GLAMEOW, 4, false, false, false, "Catty Pokémon", PokemonType.NORMAL, null, 0.5, 3.9, AbilityId.LIMBER, AbilityId.OWN_TEMPO, AbilityId.KEEN_EYE, 310, 49, 55, 42, 42, 37, 85, 190, 70, 62, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.PURUGLY, 4, false, false, false, "Tiger Cat Pokémon", PokemonType.NORMAL, null, 1, 43.8, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.DEFIANT, 452, 71, 82, 64, 64, 59, 112, 75, 70, 158, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.CHINGLING, 4, false, false, false, "Bell Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.6, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 285, 45, 30, 50, 65, 50, 45, 120, 70, 57, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.STUNKY, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 0.4, 19.2, AbilityId.STENCH, AbilityId.AFTERMATH, AbilityId.KEEN_EYE, 329, 63, 63, 47, 41, 41, 74, 225, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SKUNTANK, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 38, AbilityId.STENCH, AbilityId.AFTERMATH, AbilityId.KEEN_EYE, 479, 103, 93, 67, 71, 61, 84, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BRONZOR, 4, false, false, false, "Bronze Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.5, 60.5, AbilityId.LEVITATE, AbilityId.HEATPROOF, AbilityId.HEAVY_METAL, 300, 57, 24, 86, 24, 86, 23, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.BRONZONG, 4, false, false, false, "Bronze Bell Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.3, 187, AbilityId.LEVITATE, AbilityId.HEATPROOF, AbilityId.HEAVY_METAL, 500, 67, 89, 116, 79, 116, 33, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.BONSLY, 4, false, false, false, "Bonsai Pokémon", PokemonType.ROCK, null, 0.5, 15, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.RATTLED, 290, 50, 80, 95, 10, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MIME_JR, 4, false, false, false, "Mime Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.6, 13, AbilityId.SOUNDPROOF, AbilityId.FILTER, AbilityId.TECHNICIAN, 310, 20, 25, 45, 70, 90, 60, 145, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HAPPINY, 4, false, false, false, "Playhouse Pokémon", PokemonType.NORMAL, null, 0.6, 24.4, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.FRIEND_GUARD, 220, 100, 5, 5, 15, 65, 30, 130, 140, 110, GrowthRate.FAST, 0, false), - new PokemonSpecies(SpeciesId.CHATOT, 4, false, false, false, "Music Note Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 1.9, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 411, 76, 65, 45, 92, 42, 91, 30, 35, 144, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SPIRITOMB, 4, false, false, false, "Forbidden Pokémon", PokemonType.GHOST, PokemonType.DARK, 1, 108, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INFILTRATOR, 485, 50, 92, 108, 92, 108, 35, 100, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GIBLE, 4, false, false, false, "Land Shark Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 0.7, 20.5, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 300, 58, 70, 45, 40, 45, 42, 45, 50, 60, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.GABITE, 4, false, false, false, "Cave Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.4, 56, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 410, 68, 90, 65, 50, 55, 82, 45, 50, 144, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.GARCHOMP, 4, false, false, false, "Mach Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SAND_FORCE, 700, 108, 170, 115, 120, 95, 92, 45, 50, 300, true), - ), - new PokemonSpecies(SpeciesId.MUNCHLAX, 4, false, false, false, "Big Eater Pokémon", PokemonType.NORMAL, null, 0.6, 105, AbilityId.PICKUP, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 390, 135, 85, 40, 40, 85, 5, 50, 50, 78, GrowthRate.SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.RIOLU, 4, false, false, false, "Emanation Pokémon", PokemonType.FIGHTING, null, 0.7, 20.2, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.PRANKSTER, 285, 40, 70, 40, 35, 40, 60, 75, 50, 57, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.LUCARIO, 4, false, false, false, "Aura Pokémon", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.STEEL, 1.3, 57.5, AbilityId.ADAPTABILITY, AbilityId.ADAPTABILITY, AbilityId.ADAPTABILITY, 625, 70, 145, 88, 140, 70, 112, 45, 50, 184), - ), - new PokemonSpecies(SpeciesId.HIPPOPOTAS, 4, false, false, false, "Hippo Pokémon", PokemonType.GROUND, null, 0.8, 49.5, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_FORCE, 330, 68, 72, 78, 38, 42, 32, 140, 50, 66, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.HIPPOWDON, 4, false, false, false, "Heavyweight Pokémon", PokemonType.GROUND, null, 2, 300, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_FORCE, 525, 108, 112, 118, 68, 72, 47, 60, 50, 184, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.SKORUPI, 4, false, false, false, "Scorpion Pokémon", PokemonType.POISON, PokemonType.BUG, 0.8, 12, AbilityId.BATTLE_ARMOR, AbilityId.SNIPER, AbilityId.KEEN_EYE, 330, 40, 50, 90, 30, 55, 65, 120, 50, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.DRAPION, 4, false, false, false, "Ogre Scorpion Pokémon", PokemonType.POISON, PokemonType.DARK, 1.3, 61.5, AbilityId.BATTLE_ARMOR, AbilityId.SNIPER, AbilityId.KEEN_EYE, 500, 70, 90, 110, 60, 75, 95, 45, 50, 175, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.CROAGUNK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 0.7, 23, AbilityId.ANTICIPATION, AbilityId.DRY_SKIN, AbilityId.POISON_TOUCH, 300, 48, 61, 40, 61, 40, 50, 140, 100, 60, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.TOXICROAK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.3, 44.4, AbilityId.ANTICIPATION, AbilityId.DRY_SKIN, AbilityId.POISON_TOUCH, 490, 83, 106, 65, 86, 65, 85, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.CARNIVINE, 4, false, false, false, "Bug Catcher Pokémon", PokemonType.GRASS, null, 1.4, 27, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 454, 74, 100, 72, 90, 72, 46, 200, 70, 159, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.FINNEON, 4, false, false, false, "Wing Fish Pokémon", PokemonType.WATER, null, 0.4, 7, AbilityId.SWIFT_SWIM, AbilityId.STORM_DRAIN, AbilityId.WATER_VEIL, 330, 49, 49, 56, 49, 61, 66, 190, 70, 66, GrowthRate.ERRATIC, 50, true), - new PokemonSpecies(SpeciesId.LUMINEON, 4, false, false, false, "Neon Pokémon", PokemonType.WATER, null, 1.2, 24, AbilityId.SWIFT_SWIM, AbilityId.STORM_DRAIN, AbilityId.WATER_VEIL, 460, 69, 69, 76, 69, 86, 91, 75, 70, 161, GrowthRate.ERRATIC, 50, true), - new PokemonSpecies(SpeciesId.MANTYKE, 4, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 1, 65, AbilityId.SWIFT_SWIM, AbilityId.WATER_ABSORB, AbilityId.WATER_VEIL, 345, 45, 20, 50, 60, 120, 50, 25, 50, 69, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.SNOVER, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 1, 50.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 334, 60, 62, 50, 62, 60, 40, 120, 50, 67, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.ABOMASNOW, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.ICE, 2.7, 185, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SNOW_WARNING, 594, 90, 132, 105, 132, 105, 30, 60, 50, 173, true), - ), - new PokemonSpecies(SpeciesId.WEAVILE, 4, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 1.1, 34, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.PICKPOCKET, 510, 70, 120, 65, 45, 85, 125, 45, 35, 179, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.MAGNEZONE, 4, false, false, false, "Magnet Area Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1.2, 180, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 535, 70, 70, 115, 130, 90, 60, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.LICKILICKY, 4, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.7, 140, AbilityId.OWN_TEMPO, AbilityId.OBLIVIOUS, AbilityId.CLOUD_NINE, 515, 110, 85, 95, 80, 95, 50, 30, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RHYPERIOR, 4, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 2.4, 282.8, AbilityId.LIGHTNING_ROD, AbilityId.SOLID_ROCK, AbilityId.RECKLESS, 535, 115, 140, 130, 55, 55, 40, 30, 50, 268, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.TANGROWTH, 4, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 2, 128.6, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.REGENERATOR, 535, 100, 100, 125, 110, 50, 50, 30, 50, 187, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.ELECTIVIRE, 4, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.8, 138.6, AbilityId.MOTOR_DRIVE, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 540, 75, 123, 67, 95, 85, 95, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(SpeciesId.MAGMORTAR, 4, false, false, false, "Blast Pokémon", PokemonType.FIRE, null, 1.6, 68, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 540, 75, 95, 67, 125, 95, 83, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(SpeciesId.TOGEKISS, 4, false, false, false, "Jubilee Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.5, 38, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 545, 85, 50, 95, 120, 115, 80, 30, 50, 273, GrowthRate.FAST, 87.5, false), - new PokemonSpecies(SpeciesId.YANMEGA, 4, false, false, false, "Ogre Darner Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.9, 51.5, AbilityId.SPEED_BOOST, AbilityId.TINTED_LENS, AbilityId.FRISK, 515, 86, 76, 86, 116, 56, 95, 30, 70, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LEAFEON, 4, false, false, false, "Verdant Pokémon", PokemonType.GRASS, null, 1, 25.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 65, 110, 130, 60, 65, 95, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.GLACEON, 4, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.8, 25.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.ICE_BODY, 525, 65, 60, 110, 130, 95, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.GLISCOR, 4, false, false, false, "Fang Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 2, 42.5, AbilityId.HYPER_CUTTER, AbilityId.SAND_VEIL, AbilityId.POISON_HEAL, 510, 75, 95, 125, 45, 75, 95, 30, 70, 179, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.MAMOSWINE, 4, false, false, false, "Twin Tusk Pokémon", PokemonType.ICE, PokemonType.GROUND, 2.5, 291, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 530, 110, 130, 80, 70, 60, 80, 50, 50, 265, GrowthRate.SLOW, 50, true), - new PokemonSpecies(SpeciesId.PORYGON_Z, 4, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.9, 34, AbilityId.ADAPTABILITY, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 535, 85, 80, 70, 135, 75, 90, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.GALLADE, 4, false, false, false, "Blade Pokémon", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, AbilityId.STEADFAST, AbilityId.SHARPNESS, AbilityId.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, AbilityId.STEADFAST, AbilityId.SHARPNESS, AbilityId.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 56.4, AbilityId.INNER_FOCUS, AbilityId.INNER_FOCUS, AbilityId.INNER_FOCUS, 618, 68, 165, 95, 65, 115, 110, 45, 35, 259), - ), - new PokemonSpecies(SpeciesId.PROBOPASS, 4, false, false, false, "Compass Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.4, 340, AbilityId.STURDY, AbilityId.MAGNET_PULL, AbilityId.SAND_FORCE, 525, 60, 55, 145, 75, 150, 40, 60, 70, 184, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DUSKNOIR, 4, false, false, false, "Gripper Pokémon", PokemonType.GHOST, null, 2.2, 106.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FRISK, 525, 45, 100, 135, 65, 135, 45, 45, 35, 263, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.FROSLASS, 4, false, false, false, "Snow Land Pokémon", PokemonType.ICE, PokemonType.GHOST, 1.3, 26.6, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.CURSED_BODY, 480, 70, 80, 70, 80, 70, 110, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.ROTOM, 4, false, false, false, "Plasma Pokémon", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, false, null, true), - new PokemonForm("Heat", "heat", PokemonType.ELECTRIC, PokemonType.FIRE, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Wash", "wash", PokemonType.ELECTRIC, PokemonType.WATER, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Frost", "frost", PokemonType.ELECTRIC, PokemonType.ICE, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Fan", "fan", PokemonType.ELECTRIC, PokemonType.FLYING, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Mow", "mow", PokemonType.ELECTRIC, PokemonType.GRASS, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - ), - new PokemonSpecies(SpeciesId.UXIE, 4, true, false, false, "Knowledge Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 75, 75, 130, 75, 130, 95, 3, 140, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.MESPRIT, 4, true, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 80, 105, 105, 105, 105, 80, 3, 140, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.AZELF, 4, true, false, false, "Willpower Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 75, 125, 70, 125, 70, 115, 3, 140, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.DIALGA, 4, false, true, false, "Temporal Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, false, null, true), - new PokemonForm("Origin Forme", "origin", PokemonType.STEEL, PokemonType.DRAGON, 7, 848.7, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 100, 120, 150, 120, 90, 3, 0, 340), - ), - new PokemonSpecies(SpeciesId.PALKIA, 4, false, true, false, "Spatial Pokémon", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, false, null, true), - new PokemonForm("Origin Forme", "origin", PokemonType.WATER, PokemonType.DRAGON, 6.3, 659, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 100, 100, 150, 120, 120, 3, 0, 340), - ), - new PokemonSpecies(SpeciesId.HEATRAN, 4, true, false, false, "Lava Dome Pokémon", PokemonType.FIRE, PokemonType.STEEL, 1.7, 430, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.FLAME_BODY, 600, 91, 90, 106, 130, 106, 77, 3, 100, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.REGIGIGAS, 4, true, false, false, "Colossal Pokémon", PokemonType.NORMAL, null, 3.7, 420, AbilityId.SLOW_START, AbilityId.NONE, AbilityId.NORMALIZE, 670, 110, 160, 110, 80, 110, 100, 3, 0, 335, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.GIRATINA, 4, false, true, false, "Renegade Pokémon", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Altered Forme", "altered", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, false, null, true), - new PokemonForm("Origin Forme", "origin", PokemonType.GHOST, PokemonType.DRAGON, 6.9, 650, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.LEVITATE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340), - ), - new PokemonSpecies(SpeciesId.CRESSELIA, 4, true, false, false, "Lunar Pokémon", PokemonType.PSYCHIC, null, 1.5, 85.6, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 120, 70, 110, 75, 120, 85, 3, 100, 300, GrowthRate.SLOW, 0, false), - new PokemonSpecies(SpeciesId.PHIONE, 4, false, false, true, "Sea Drifter Pokémon", PokemonType.WATER, null, 0.4, 3.1, AbilityId.HYDRATION, AbilityId.NONE, AbilityId.NONE, 480, 80, 80, 80, 80, 80, 80, 30, 70, 240, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.MANAPHY, 4, false, false, true, "Seafaring Pokémon", PokemonType.WATER, null, 0.3, 1.4, AbilityId.HYDRATION, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 70, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.DARKRAI, 4, false, false, true, "Pitch-Black Pokémon", PokemonType.DARK, null, 1.5, 50.5, AbilityId.BAD_DREAMS, AbilityId.NONE, AbilityId.NONE, 600, 70, 90, 90, 135, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SHAYMIN, 4, false, false, true, "Gratitude Pokémon", PokemonType.GRASS, null, 0.2, 2.1, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false, true, - new PokemonForm("Land Forme", "land", PokemonType.GRASS, null, 0.2, 2.1, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, false, null, true), - new PokemonForm("Sky Forme", "sky", PokemonType.GRASS, PokemonType.FLYING, 0.4, 5.2, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 103, 75, 120, 75, 127, 45, 100, 300), - ), - new PokemonSpecies(SpeciesId.ARCEUS, 4, false, false, true, "Alpha Pokémon", PokemonType.NORMAL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "normal", PokemonType.NORMAL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, true), - new PokemonForm("Fighting", "fighting", PokemonType.FIGHTING, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Flying", "flying", PokemonType.FLYING, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Poison", "poison", PokemonType.POISON, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Ground", "ground", PokemonType.GROUND, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Rock", "rock", PokemonType.ROCK, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Bug", "bug", PokemonType.BUG, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Ghost", "ghost", PokemonType.GHOST, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Steel", "steel", PokemonType.STEEL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Fire", "fire", PokemonType.FIRE, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Water", "water", PokemonType.WATER, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Grass", "grass", PokemonType.GRASS, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Electric", "electric", PokemonType.ELECTRIC, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Psychic", "psychic", PokemonType.PSYCHIC, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Ice", "ice", PokemonType.ICE, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Dragon", "dragon", PokemonType.DRAGON, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Dark", "dark", PokemonType.DARK, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Fairy", "fairy", PokemonType.FAIRY, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("???", "unknown", PokemonType.UNKNOWN, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, false, true), - ), - new PokemonSpecies(SpeciesId.VICTINI, 5, false, false, true, "Victory Pokémon", PokemonType.PSYCHIC, PokemonType.FIRE, 0.4, 4, AbilityId.VICTORY_STAR, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SNIVY, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.6, 8.1, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.SERVINE, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.8, 16, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 413, 60, 60, 75, 60, 75, 83, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.SERPERIOR, 5, false, false, false, "Regal Pokémon", PokemonType.GRASS, null, 3.3, 63, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.TEPIG, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, null, 0.5, 9.9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.THICK_FAT, 308, 65, 63, 45, 45, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.PIGNITE, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1, 55.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.THICK_FAT, 418, 90, 93, 55, 70, 55, 55, 45, 70, 146, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.EMBOAR, 5, false, false, false, "Mega Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.6, 150, AbilityId.BLAZE, AbilityId.NONE, AbilityId.RECKLESS, 528, 110, 123, 65, 100, 65, 65, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.OSHAWOTT, 5, false, false, false, "Sea Otter Pokémon", PokemonType.WATER, null, 0.5, 5.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 308, 55, 55, 45, 63, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.DEWOTT, 5, false, false, false, "Discipline Pokémon", PokemonType.WATER, null, 0.8, 24.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 413, 75, 75, 60, 83, 60, 60, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.SAMUROTT, 5, false, false, false, "Formidable Pokémon", PokemonType.WATER, null, 1.5, 94.6, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 528, 95, 100, 85, 108, 70, 70, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.PATRAT, 5, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.5, 11.6, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.ANALYTIC, 255, 45, 55, 39, 35, 39, 42, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WATCHOG, 5, false, false, false, "Lookout Pokémon", PokemonType.NORMAL, null, 1.1, 27, AbilityId.ILLUMINATE, AbilityId.KEEN_EYE, AbilityId.ANALYTIC, 420, 60, 85, 69, 60, 69, 77, 255, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LILLIPUP, 5, false, false, false, "Puppy Pokémon", PokemonType.NORMAL, null, 0.4, 4.1, AbilityId.VITAL_SPIRIT, AbilityId.PICKUP, AbilityId.RUN_AWAY, 275, 45, 60, 45, 25, 45, 55, 255, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.HERDIER, 5, false, false, false, "Loyal Dog Pokémon", PokemonType.NORMAL, null, 0.9, 14.7, AbilityId.INTIMIDATE, AbilityId.SAND_RUSH, AbilityId.SCRAPPY, 370, 65, 80, 65, 35, 65, 60, 120, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.STOUTLAND, 5, false, false, false, "Big-Hearted Pokémon", PokemonType.NORMAL, null, 1.2, 61, AbilityId.INTIMIDATE, AbilityId.SAND_RUSH, AbilityId.SCRAPPY, 500, 85, 110, 90, 45, 90, 80, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.PURRLOIN, 5, false, false, false, "Devious Pokémon", PokemonType.DARK, null, 0.4, 10.1, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.PRANKSTER, 281, 41, 50, 37, 50, 37, 66, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LIEPARD, 5, false, false, false, "Cruel Pokémon", PokemonType.DARK, null, 1.1, 37.5, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.PRANKSTER, 446, 64, 88, 50, 88, 50, 106, 90, 50, 156, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PANSAGE, 5, false, false, false, "Grass Monkey Pokémon", PokemonType.GRASS, null, 0.6, 10.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.OVERGROW, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.SIMISAGE, 5, false, false, false, "Thorn Monkey Pokémon", PokemonType.GRASS, null, 1.1, 30.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.OVERGROW, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.PANSEAR, 5, false, false, false, "High Temp Pokémon", PokemonType.FIRE, null, 0.6, 11, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.BLAZE, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.SIMISEAR, 5, false, false, false, "Ember Pokémon", PokemonType.FIRE, null, 1, 28, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.BLAZE, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.PANPOUR, 5, false, false, false, "Spray Pokémon", PokemonType.WATER, null, 0.6, 13.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.TORRENT, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.SIMIPOUR, 5, false, false, false, "Geyser Pokémon", PokemonType.WATER, null, 1, 29, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.TORRENT, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.MUNNA, 5, false, false, false, "Dream Eater Pokémon", PokemonType.PSYCHIC, null, 0.6, 23.3, AbilityId.FOREWARN, AbilityId.SYNCHRONIZE, AbilityId.TELEPATHY, 292, 76, 25, 45, 67, 55, 24, 190, 50, 58, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.MUSHARNA, 5, false, false, false, "Drowsing Pokémon", PokemonType.PSYCHIC, null, 1.1, 60.5, AbilityId.FOREWARN, AbilityId.SYNCHRONIZE, AbilityId.TELEPATHY, 487, 116, 55, 85, 107, 95, 29, 75, 50, 170, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.PIDOVE, 5, false, false, false, "Tiny Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.1, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 264, 50, 55, 50, 36, 30, 43, 255, 50, 53, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.TRANQUILL, 5, false, false, false, "Wild Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 358, 62, 77, 62, 50, 42, 65, 120, 50, 125, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.UNFEZANT, 5, false, false, false, "Proud Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 29, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 488, 80, 115, 80, 65, 55, 93, 45, 50, 244, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.BLITZLE, 5, false, false, false, "Electrified Pokémon", PokemonType.ELECTRIC, null, 0.8, 29.8, AbilityId.LIGHTNING_ROD, AbilityId.MOTOR_DRIVE, AbilityId.SAP_SIPPER, 295, 45, 60, 32, 50, 32, 76, 190, 70, 59, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ZEBSTRIKA, 5, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.6, 79.5, AbilityId.LIGHTNING_ROD, AbilityId.MOTOR_DRIVE, AbilityId.SAP_SIPPER, 497, 75, 100, 63, 80, 63, 116, 75, 70, 174, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ROGGENROLA, 5, false, false, false, "Mantle Pokémon", PokemonType.ROCK, null, 0.4, 18, AbilityId.STURDY, AbilityId.WEAK_ARMOR, AbilityId.SAND_FORCE, 280, 55, 75, 85, 25, 25, 15, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.BOLDORE, 5, false, false, false, "Ore Pokémon", PokemonType.ROCK, null, 0.9, 102, AbilityId.STURDY, AbilityId.WEAK_ARMOR, AbilityId.SAND_FORCE, 390, 70, 105, 105, 50, 40, 20, 120, 50, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GIGALITH, 5, false, false, false, "Compressed Pokémon", PokemonType.ROCK, null, 1.7, 260, AbilityId.STURDY, AbilityId.SAND_STREAM, AbilityId.SAND_FORCE, 515, 85, 135, 130, 60, 80, 25, 45, 50, 258, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.WOOBAT, 5, false, false, false, "Bat Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.4, 2.1, AbilityId.UNAWARE, AbilityId.KLUTZ, AbilityId.SIMPLE, 323, 65, 45, 43, 55, 43, 72, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SWOOBAT, 5, false, false, false, "Courting Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.9, 10.5, AbilityId.UNAWARE, AbilityId.KLUTZ, AbilityId.SIMPLE, 425, 67, 57, 55, 77, 55, 114, 45, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DRILBUR, 5, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.3, 8.5, AbilityId.SAND_RUSH, AbilityId.SAND_FORCE, AbilityId.MOLD_BREAKER, 328, 60, 85, 40, 30, 45, 68, 120, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.EXCADRILL, 5, false, false, false, "Subterrene Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 40.4, AbilityId.SAND_RUSH, AbilityId.SAND_FORCE, AbilityId.MOLD_BREAKER, 508, 110, 135, 60, 50, 65, 88, 60, 50, 178, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.AUDINO, 5, false, false, false, "Hearing Pokémon", PokemonType.NORMAL, null, 1.1, 31, AbilityId.HEALER, AbilityId.REGENERATOR, AbilityId.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, GrowthRate.FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.1, 31, AbilityId.HEALER, AbilityId.REGENERATOR, AbilityId.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FAIRY, 1.5, 32, AbilityId.REGENERATOR, AbilityId.REGENERATOR, AbilityId.REGENERATOR, 545, 103, 60, 126, 80, 126, 50, 255, 50, 390), //Custom Ability, base form Hidden Ability - ), - new PokemonSpecies(SpeciesId.TIMBURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 0.6, 12.5, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 305, 75, 80, 55, 25, 35, 35, 180, 70, 61, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(SpeciesId.GURDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.2, 40, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 405, 85, 105, 85, 40, 50, 40, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(SpeciesId.CONKELDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.4, 87, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 505, 105, 140, 95, 55, 65, 45, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(SpeciesId.TYMPOLE, 5, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.5, 4.5, AbilityId.SWIFT_SWIM, AbilityId.HYDRATION, AbilityId.WATER_ABSORB, 294, 50, 50, 40, 50, 40, 64, 255, 50, 59, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.PALPITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.8, 17, AbilityId.SWIFT_SWIM, AbilityId.HYDRATION, AbilityId.WATER_ABSORB, 384, 75, 65, 55, 65, 55, 69, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SEISMITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 62, AbilityId.SWIFT_SWIM, AbilityId.POISON_TOUCH, AbilityId.WATER_ABSORB, 509, 105, 95, 75, 85, 75, 74, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.THROH, 5, false, false, false, "Judo Pokémon", PokemonType.FIGHTING, null, 1.3, 55.5, AbilityId.GUTS, AbilityId.INNER_FOCUS, AbilityId.MOLD_BREAKER, 465, 120, 100, 85, 30, 85, 45, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.SAWK, 5, false, false, false, "Karate Pokémon", PokemonType.FIGHTING, null, 1.4, 51, AbilityId.STURDY, AbilityId.INNER_FOCUS, AbilityId.MOLD_BREAKER, 465, 75, 125, 75, 30, 75, 85, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.SEWADDLE, 5, false, false, false, "Sewing Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 2.5, AbilityId.SWARM, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 310, 45, 53, 70, 40, 60, 42, 255, 70, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SWADLOON, 5, false, false, false, "Leaf-Wrapped Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 7.3, AbilityId.LEAF_GUARD, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 380, 55, 63, 90, 50, 80, 42, 120, 70, 133, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.LEAVANNY, 5, false, false, false, "Nurturing Pokémon", PokemonType.BUG, PokemonType.GRASS, 1.2, 20.5, AbilityId.SWARM, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 500, 75, 103, 80, 70, 80, 92, 45, 70, 250, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.VENIPEDE, 5, false, false, false, "Centipede Pokémon", PokemonType.BUG, PokemonType.POISON, 0.4, 5.3, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 260, 30, 45, 59, 30, 39, 57, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.WHIRLIPEDE, 5, false, false, false, "Curlipede Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 58.5, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 360, 40, 55, 99, 40, 79, 47, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SCOLIPEDE, 5, false, false, false, "Megapede Pokémon", PokemonType.BUG, PokemonType.POISON, 2.5, 200.5, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 485, 60, 100, 89, 55, 69, 112, 45, 50, 243, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.COTTONEE, 5, false, false, false, "Cotton Puff Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.3, 0.6, AbilityId.PRANKSTER, AbilityId.INFILTRATOR, AbilityId.CHLOROPHYLL, 280, 40, 27, 60, 37, 50, 66, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WHIMSICOTT, 5, false, false, false, "Windveiled Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.7, 6.6, AbilityId.PRANKSTER, AbilityId.INFILTRATOR, AbilityId.CHLOROPHYLL, 480, 60, 67, 85, 77, 75, 116, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PETILIL, 5, false, false, false, "Bulb Pokémon", PokemonType.GRASS, null, 0.5, 6.6, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 280, 45, 35, 50, 70, 50, 30, 190, 50, 56, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.LILLIGANT, 5, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 1.1, 16.3, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 480, 70, 60, 75, 110, 75, 90, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.BASCULIN, 5, false, false, false, "Hostile Pokémon", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Red-Striped Form", "red-striped", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), - new PokemonForm("Blue-Striped Form", "blue-striped", PokemonType.WATER, null, 1, 18, AbilityId.ROCK_HEAD, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), - new PokemonForm("White-Striped Form", "white-striped", PokemonType.WATER, null, 1, 18, AbilityId.RATTLED, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), - ), - new PokemonSpecies(SpeciesId.SANDILE, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 0.7, 15.2, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 292, 50, 72, 35, 35, 35, 65, 180, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.KROKOROK, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 1, 33.4, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 351, 60, 82, 45, 45, 45, 74, 90, 50, 123, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.KROOKODILE, 5, false, false, false, "Intimidation Pokémon", PokemonType.GROUND, PokemonType.DARK, 1.5, 96.3, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 519, 95, 117, 80, 65, 70, 92, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.DARUMAKA, 5, false, false, false, "Zen Charm Pokémon", PokemonType.FIRE, null, 0.6, 37.5, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.DARMANITAN, 5, false, false, false, "Blazing Pokémon", PokemonType.FIRE, null, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Standard Mode", "", PokemonType.FIRE, null, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), - new PokemonForm("Zen Mode", "zen", PokemonType.FIRE, PokemonType.PSYCHIC, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 540, 105, 30, 105, 140, 105, 55, 60, 50, 189), - ), - new PokemonSpecies(SpeciesId.MARACTUS, 5, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 1, 28, AbilityId.WATER_ABSORB, AbilityId.CHLOROPHYLL, AbilityId.STORM_DRAIN, 461, 75, 86, 67, 106, 67, 60, 255, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DWEBBLE, 5, false, false, false, "Rock Inn Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.3, 14.5, AbilityId.STURDY, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 325, 50, 65, 85, 35, 35, 55, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CRUSTLE, 5, false, false, false, "Stone Home Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.4, 200, AbilityId.STURDY, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 485, 70, 105, 125, 65, 75, 45, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SCRAGGY, 5, false, false, false, "Shedding Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 0.6, 11.8, AbilityId.SHED_SKIN, AbilityId.MOXIE, AbilityId.INTIMIDATE, 348, 50, 75, 70, 35, 70, 48, 180, 35, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SCRAFTY, 5, false, false, false, "Hoodlum Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 1.1, 30, AbilityId.SHED_SKIN, AbilityId.MOXIE, AbilityId.INTIMIDATE, 488, 65, 90, 115, 45, 115, 58, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SIGILYPH, 5, false, false, false, "Avianoid Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.4, 14, AbilityId.WONDER_SKIN, AbilityId.MAGIC_GUARD, AbilityId.TINTED_LENS, 490, 72, 58, 80, 103, 80, 97, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.YAMASK, 5, false, false, false, "Spirit Pokémon", PokemonType.GHOST, null, 0.5, 1.5, AbilityId.MUMMY, AbilityId.NONE, AbilityId.NONE, 303, 38, 30, 85, 55, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.COFAGRIGUS, 5, false, false, false, "Coffin Pokémon", PokemonType.GHOST, null, 1.7, 76.5, AbilityId.MUMMY, AbilityId.NONE, AbilityId.NONE, 483, 58, 50, 145, 95, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TIRTOUGA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.7, 16.5, AbilityId.SOLID_ROCK, AbilityId.STURDY, AbilityId.SWIFT_SWIM, 355, 54, 78, 103, 53, 45, 22, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.CARRACOSTA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 1.2, 81, AbilityId.SOLID_ROCK, AbilityId.STURDY, AbilityId.SWIFT_SWIM, 495, 74, 108, 133, 83, 65, 32, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.ARCHEN, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.5, 9.5, AbilityId.DEFEATIST, AbilityId.NONE, AbilityId.WIMP_OUT, 401, 55, 112, 45, 74, 45, 70, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden - new PokemonSpecies(SpeciesId.ARCHEOPS, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.4, 32, AbilityId.DEFEATIST, AbilityId.NONE, AbilityId.EMERGENCY_EXIT, 567, 75, 140, 65, 112, 65, 110, 45, 50, 177, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden - new PokemonSpecies(SpeciesId.TRUBBISH, 5, false, false, false, "Trash Bag Pokémon", PokemonType.POISON, null, 0.6, 31, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.AFTERMATH, 329, 50, 50, 62, 40, 62, 65, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GARBODOR, 5, false, false, false, "Trash Heap Pokémon", PokemonType.POISON, null, 1.9, 107.3, AbilityId.STENCH, AbilityId.WEAK_ARMOR, AbilityId.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.POISON, null, 1.9, 107.3, AbilityId.STENCH, AbilityId.WEAK_ARMOR, AbilityId.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.POISON, PokemonType.STEEL, 21, 999.9, AbilityId.TOXIC_DEBRIS, AbilityId.TOXIC_DEBRIS, AbilityId.TOXIC_DEBRIS, 574, 115, 121, 102, 81, 102, 53, 60, 50, 166), - ), - new PokemonSpecies(SpeciesId.ZORUA, 5, false, false, false, "Tricky Fox Pokémon", PokemonType.DARK, null, 0.7, 12.5, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 330, 40, 65, 40, 80, 40, 65, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.ZOROARK, 5, false, false, false, "Illusion Fox Pokémon", PokemonType.DARK, null, 1.6, 81.1, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 510, 60, 105, 60, 120, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.MINCCINO, 5, false, false, false, "Chinchilla Pokémon", PokemonType.NORMAL, null, 0.4, 5.8, AbilityId.CUTE_CHARM, AbilityId.TECHNICIAN, AbilityId.SKILL_LINK, 300, 55, 50, 40, 40, 40, 75, 255, 50, 60, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.CINCCINO, 5, false, false, false, "Scarf Pokémon", PokemonType.NORMAL, null, 0.5, 7.5, AbilityId.CUTE_CHARM, AbilityId.TECHNICIAN, AbilityId.SKILL_LINK, 470, 75, 95, 60, 65, 60, 115, 60, 50, 165, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.GOTHITA, 5, false, false, false, "Fixation Pokémon", PokemonType.PSYCHIC, null, 0.4, 5.8, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 290, 45, 30, 50, 55, 65, 45, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 25, false), - new PokemonSpecies(SpeciesId.GOTHORITA, 5, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.7, 18, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 390, 60, 45, 70, 75, 85, 55, 100, 50, 137, GrowthRate.MEDIUM_SLOW, 25, false), - new PokemonSpecies(SpeciesId.GOTHITELLE, 5, false, false, false, "Astral Body Pokémon", PokemonType.PSYCHIC, null, 1.5, 44, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 490, 70, 55, 95, 95, 110, 65, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 25, false), - new PokemonSpecies(SpeciesId.SOLOSIS, 5, false, false, false, "Cell Pokémon", PokemonType.PSYCHIC, null, 0.3, 1, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 290, 45, 30, 40, 105, 50, 20, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.DUOSION, 5, false, false, false, "Mitosis Pokémon", PokemonType.PSYCHIC, null, 0.6, 8, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 370, 65, 40, 50, 125, 60, 30, 100, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.REUNICLUS, 5, false, false, false, "Multiplying Pokémon", PokemonType.PSYCHIC, null, 1, 20.1, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 490, 110, 65, 75, 125, 85, 30, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.DUCKLETT, 5, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.5, 5.5, AbilityId.KEEN_EYE, AbilityId.BIG_PECKS, AbilityId.HYDRATION, 305, 62, 44, 50, 44, 50, 55, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SWANNA, 5, false, false, false, "White Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.3, 24.2, AbilityId.KEEN_EYE, AbilityId.BIG_PECKS, AbilityId.HYDRATION, 473, 75, 87, 63, 87, 63, 98, 45, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.VANILLITE, 5, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.4, 5.7, AbilityId.ICE_BODY, AbilityId.SNOW_CLOAK, AbilityId.WEAK_ARMOR, 305, 36, 50, 50, 65, 60, 44, 255, 50, 61, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.VANILLISH, 5, false, false, false, "Icy Snow Pokémon", PokemonType.ICE, null, 1.1, 41, AbilityId.ICE_BODY, AbilityId.SNOW_CLOAK, AbilityId.WEAK_ARMOR, 395, 51, 65, 65, 80, 75, 59, 120, 50, 138, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.VANILLUXE, 5, false, false, false, "Snowstorm Pokémon", PokemonType.ICE, null, 1.3, 57.5, AbilityId.ICE_BODY, AbilityId.SNOW_WARNING, AbilityId.WEAK_ARMOR, 535, 71, 95, 85, 110, 95, 79, 45, 50, 268, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.DEERLING, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - ), - new PokemonSpecies(SpeciesId.SAWSBUCK, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - ), - new PokemonSpecies(SpeciesId.EMOLGA, 5, false, false, false, "Sky Squirrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 5, AbilityId.STATIC, AbilityId.NONE, AbilityId.MOTOR_DRIVE, 428, 55, 75, 60, 75, 60, 103, 200, 50, 150, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.KARRABLAST, 5, false, false, false, "Clamping Pokémon", PokemonType.BUG, null, 0.5, 5.9, AbilityId.SWARM, AbilityId.SHED_SKIN, AbilityId.NO_GUARD, 315, 50, 75, 45, 40, 45, 60, 200, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ESCAVALIER, 5, false, false, false, "Cavalry Pokémon", PokemonType.BUG, PokemonType.STEEL, 1, 33, AbilityId.SWARM, AbilityId.SHELL_ARMOR, AbilityId.OVERCOAT, 495, 70, 135, 105, 60, 105, 20, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FOONGUS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.REGENERATOR, 294, 69, 55, 45, 55, 55, 15, 190, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.AMOONGUSS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.6, 10.5, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.REGENERATOR, 464, 114, 85, 70, 85, 80, 30, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FRILLISH, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 1.2, 33, AbilityId.WATER_ABSORB, AbilityId.CURSED_BODY, AbilityId.DAMP, 335, 55, 40, 50, 65, 85, 40, 190, 50, 67, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.JELLICENT, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 2.2, 135, AbilityId.WATER_ABSORB, AbilityId.CURSED_BODY, AbilityId.DAMP, 480, 100, 60, 70, 85, 105, 60, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(SpeciesId.ALOMOMOLA, 5, false, false, false, "Caring Pokémon", PokemonType.WATER, null, 1.2, 31.6, AbilityId.HEALER, AbilityId.HYDRATION, AbilityId.REGENERATOR, 470, 165, 75, 80, 40, 45, 65, 75, 70, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.JOLTIK, 5, false, false, false, "Attaching Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.1, 0.6, AbilityId.COMPOUND_EYES, AbilityId.UNNERVE, AbilityId.SWARM, 319, 50, 47, 50, 57, 50, 65, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALVANTULA, 5, false, false, false, "EleSpider Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.8, 14.3, AbilityId.COMPOUND_EYES, AbilityId.UNNERVE, AbilityId.SWARM, 472, 70, 77, 60, 97, 60, 108, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FERROSEED, 5, false, false, false, "Thorn Seed Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.6, 18.8, AbilityId.IRON_BARBS, AbilityId.NONE, AbilityId.ANTICIPATION, 305, 44, 50, 91, 24, 86, 10, 255, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FERROTHORN, 5, false, false, false, "Thorn Pod Pokémon", PokemonType.GRASS, PokemonType.STEEL, 1, 110, AbilityId.IRON_BARBS, AbilityId.NONE, AbilityId.ANTICIPATION, 489, 74, 94, 131, 54, 116, 20, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.KLINK, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.3, 21, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 300, 40, 55, 70, 45, 60, 30, 130, 50, 60, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(SpeciesId.KLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 51, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 440, 60, 80, 95, 70, 85, 50, 60, 50, 154, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(SpeciesId.KLINKLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 81, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 520, 60, 100, 115, 70, 85, 90, 30, 50, 260, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(SpeciesId.TYNAMO, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 0.2, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 275, 35, 55, 40, 45, 40, 60, 190, 70, 55, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.EELEKTRIK, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 1.2, 22, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 405, 65, 85, 70, 75, 70, 40, 60, 70, 142, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.EELEKTROSS, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 2.1, 80.5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 515, 85, 115, 80, 105, 80, 50, 30, 70, 258, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.ELGYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 0.5, 9, AbilityId.TELEPATHY, AbilityId.SYNCHRONIZE, AbilityId.ANALYTIC, 335, 55, 55, 55, 85, 55, 30, 255, 50, 67, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BEHEEYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 1, 34.5, AbilityId.TELEPATHY, AbilityId.SYNCHRONIZE, AbilityId.ANALYTIC, 485, 75, 75, 75, 125, 95, 40, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LITWICK, 5, false, false, false, "Candle Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.3, 3.1, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 275, 50, 30, 55, 65, 55, 20, 190, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.LAMPENT, 5, false, false, false, "Lamp Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.6, 13, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 370, 60, 40, 60, 95, 60, 55, 90, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CHANDELURE, 5, false, false, false, "Luring Pokémon", PokemonType.GHOST, PokemonType.FIRE, 1, 34.3, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 520, 60, 55, 90, 145, 90, 80, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.AXEW, 5, false, false, false, "Tusk Pokémon", PokemonType.DRAGON, null, 0.6, 18, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 320, 46, 87, 60, 30, 40, 57, 75, 35, 64, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.FRAXURE, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1, 36, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 410, 66, 117, 70, 40, 50, 67, 60, 35, 144, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HAXORUS, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1.8, 105.5, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 540, 76, 147, 90, 60, 70, 97, 45, 35, 270, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.CUBCHOO, 5, false, false, false, "Chill Pokémon", PokemonType.ICE, null, 0.5, 8.5, AbilityId.SNOW_CLOAK, AbilityId.SLUSH_RUSH, AbilityId.RATTLED, 305, 55, 70, 40, 60, 40, 40, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BEARTIC, 5, false, false, false, "Freezing Pokémon", PokemonType.ICE, null, 2.6, 260, AbilityId.SNOW_CLOAK, AbilityId.SLUSH_RUSH, AbilityId.SWIFT_SWIM, 505, 95, 130, 80, 70, 80, 50, 60, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CRYOGONAL, 5, false, false, false, "Crystallizing Pokémon", PokemonType.ICE, null, 1.1, 148, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 515, 80, 50, 50, 95, 135, 105, 25, 50, 180, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.SHELMET, 5, false, false, false, "Snail Pokémon", PokemonType.BUG, null, 0.4, 7.7, AbilityId.HYDRATION, AbilityId.SHELL_ARMOR, AbilityId.OVERCOAT, 305, 50, 40, 85, 40, 65, 25, 200, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ACCELGOR, 5, false, false, false, "Shell Out Pokémon", PokemonType.BUG, null, 0.8, 25.3, AbilityId.HYDRATION, AbilityId.STICKY_HOLD, AbilityId.UNBURDEN, 495, 80, 70, 40, 100, 60, 145, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.STUNFISK, 5, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.ELECTRIC, 0.7, 11, AbilityId.STATIC, AbilityId.LIMBER, AbilityId.SAND_VEIL, 471, 109, 66, 84, 81, 99, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MIENFOO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 0.9, 20, AbilityId.INNER_FOCUS, AbilityId.REGENERATOR, AbilityId.RECKLESS, 350, 45, 85, 50, 55, 50, 65, 180, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.MIENSHAO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 1.4, 35.5, AbilityId.INNER_FOCUS, AbilityId.REGENERATOR, AbilityId.RECKLESS, 510, 65, 125, 60, 95, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.DRUDDIGON, 5, false, false, false, "Cave Pokémon", PokemonType.DRAGON, null, 1.6, 139, AbilityId.ROUGH_SKIN, AbilityId.SHEER_FORCE, AbilityId.MOLD_BREAKER, 485, 77, 120, 90, 60, 90, 48, 45, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GOLETT, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1, 92, AbilityId.IRON_FIST, AbilityId.KLUTZ, AbilityId.NO_GUARD, 303, 59, 74, 50, 35, 50, 35, 190, 50, 61, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.GOLURK, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 2.8, 330, AbilityId.IRON_FIST, AbilityId.KLUTZ, AbilityId.NO_GUARD, 483, 89, 124, 80, 55, 80, 55, 90, 50, 169, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.PAWNIARD, 5, false, false, false, "Sharp Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 0.5, 10.2, AbilityId.DEFIANT, AbilityId.INNER_FOCUS, AbilityId.PRESSURE, 340, 45, 85, 70, 40, 40, 60, 120, 35, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BISHARP, 5, false, false, false, "Sword Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 1.6, 70, AbilityId.DEFIANT, AbilityId.INNER_FOCUS, AbilityId.PRESSURE, 490, 65, 125, 100, 60, 70, 70, 45, 35, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BOUFFALANT, 5, false, false, false, "Bash Buffalo Pokémon", PokemonType.NORMAL, null, 1.6, 94.6, AbilityId.RECKLESS, AbilityId.SAP_SIPPER, AbilityId.SOUNDPROOF, 490, 95, 110, 95, 40, 95, 55, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RUFFLET, 5, false, false, false, "Eaglet Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 10.5, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.HUSTLE, 350, 70, 83, 50, 37, 50, 60, 190, 50, 70, GrowthRate.SLOW, 100, false), - new PokemonSpecies(SpeciesId.BRAVIARY, 5, false, false, false, "Valiant Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 41, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.DEFIANT, 510, 100, 123, 75, 57, 75, 80, 60, 50, 179, GrowthRate.SLOW, 100, false), - new PokemonSpecies(SpeciesId.VULLABY, 5, false, false, false, "Diapered Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 9, AbilityId.BIG_PECKS, AbilityId.OVERCOAT, AbilityId.WEAK_ARMOR, 370, 70, 55, 75, 45, 65, 60, 190, 35, 74, GrowthRate.SLOW, 0, false), - new PokemonSpecies(SpeciesId.MANDIBUZZ, 5, false, false, false, "Bone Vulture Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.2, 39.5, AbilityId.BIG_PECKS, AbilityId.OVERCOAT, AbilityId.WEAK_ARMOR, 510, 110, 65, 105, 55, 95, 80, 60, 35, 179, GrowthRate.SLOW, 0, false), - new PokemonSpecies(SpeciesId.HEATMOR, 5, false, false, false, "Anteater Pokémon", PokemonType.FIRE, null, 1.4, 58, AbilityId.GLUTTONY, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, 484, 85, 97, 66, 105, 66, 65, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DURANT, 5, false, false, false, "Iron Ant Pokémon", PokemonType.BUG, PokemonType.STEEL, 0.3, 33, AbilityId.SWARM, AbilityId.HUSTLE, AbilityId.TRUANT, 484, 58, 109, 112, 48, 48, 109, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DEINO, 5, false, false, false, "Irate Pokémon", PokemonType.DARK, PokemonType.DRAGON, 0.8, 17.3, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.NONE, 300, 52, 65, 50, 45, 50, 38, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.ZWEILOUS, 5, false, false, false, "Hostile Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.4, 50, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.NONE, 420, 72, 85, 70, 65, 70, 58, 45, 35, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HYDREIGON, 5, false, false, false, "Brutal Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.8, 160, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 92, 105, 90, 125, 90, 98, 45, 35, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.LARVESTA, 5, false, false, false, "Torch Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.1, 28.8, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.SWARM, 360, 55, 85, 55, 50, 55, 60, 45, 50, 72, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.VOLCARONA, 5, false, false, false, "Sun Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.6, 46, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.SWARM, 550, 85, 60, 65, 135, 105, 100, 15, 50, 275, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.COBALION, 5, true, false, false, "Iron Will Pokémon", PokemonType.STEEL, PokemonType.FIGHTING, 2.1, 250, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 90, 129, 90, 72, 108, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.TERRAKION, 5, true, false, false, "Cavern Pokémon", PokemonType.ROCK, PokemonType.FIGHTING, 1.9, 260, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 129, 90, 72, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.VIRIZION, 5, true, false, false, "Grassland Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 2, 200, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 90, 72, 90, 129, 108, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.TORNADUS, 5, true, false, false, "Cyclone Pokémon", PokemonType.FLYING, null, 1.5, 63, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FLYING, null, 1.5, 63, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.FLYING, null, 1.4, 63, AbilityId.REGENERATOR, AbilityId.NONE, AbilityId.REGENERATOR, 580, 79, 100, 80, 110, 90, 121, 3, 90, 290), - ), - new PokemonSpecies(SpeciesId.THUNDURUS, 5, true, false, false, "Bolt Strike Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.ELECTRIC, PokemonType.FLYING, 3, 61, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.VOLT_ABSORB, 580, 79, 105, 70, 145, 80, 101, 3, 90, 290), - ), - new PokemonSpecies(SpeciesId.RESHIRAM, 5, false, true, false, "Vast White Pokémon", PokemonType.DRAGON, PokemonType.FIRE, 3.2, 330, AbilityId.TURBOBLAZE, AbilityId.NONE, AbilityId.NONE, 680, 100, 120, 100, 150, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ZEKROM, 5, false, true, false, "Deep Black Pokémon", PokemonType.DRAGON, PokemonType.ELECTRIC, 2.9, 345, AbilityId.TERAVOLT, AbilityId.NONE, AbilityId.NONE, 680, 100, 150, 120, 120, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.LANDORUS, 5, true, false, false, "Abundance Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.GROUND, PokemonType.FLYING, 1.3, 68, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.INTIMIDATE, 600, 89, 145, 90, 105, 80, 91, 3, 90, 300), - ), - new PokemonSpecies(SpeciesId.KYUREM, 5, false, true, false, "Boundary Pokémon", PokemonType.DRAGON, PokemonType.ICE, 3, 325, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.ICE, 3, 325, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, false, null, true), - new PokemonForm("Black", "black", PokemonType.DRAGON, PokemonType.ICE, 3.3, 325, AbilityId.TERAVOLT, AbilityId.NONE, AbilityId.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 350), - new PokemonForm("White", "white", PokemonType.DRAGON, PokemonType.ICE, 3.6, 325, AbilityId.TURBOBLAZE, AbilityId.NONE, AbilityId.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 350), - ), - new PokemonSpecies(SpeciesId.KELDEO, 5, false, false, true, "Colt Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false, true, - new PokemonForm("Ordinary Form", "ordinary", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, false, null, true), - new PokemonForm("Resolute", "resolute", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290), - ), - new PokemonSpecies(SpeciesId.MELOETTA, 5, false, false, true, "Melody Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Aria Forme", "aria", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, false, null, true), - new PokemonForm("Pirouette Forme", "pirouette", PokemonType.NORMAL, PokemonType.FIGHTING, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 128, 90, 77, 77, 128, 3, 100, 300, false, null, true), - ), - new PokemonSpecies(SpeciesId.GENESECT, 5, false, false, true, "Paleozoic Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, false, null, true), - new PokemonForm("Shock Drive", "shock", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - new PokemonForm("Burn Drive", "burn", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - new PokemonForm("Chill Drive", "chill", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - new PokemonForm("Douse Drive", "douse", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - ), - new PokemonSpecies(SpeciesId.CHESPIN, 6, false, false, false, "Spiny Nut Pokémon", PokemonType.GRASS, null, 0.4, 9, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 313, 56, 61, 65, 48, 45, 38, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.QUILLADIN, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, null, 0.7, 29, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 405, 61, 78, 95, 56, 58, 57, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.CHESNAUGHT, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 530, 88, 107, 122, 74, 75, 64, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.FENNEKIN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.4, 9.4, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.BRAIXEN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1, 14.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.DELPHOX, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 39, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.TORRENT, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true), - ), - new PokemonSpecies(SpeciesId.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.NONE, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", true), - ), - new PokemonSpecies(SpeciesId.GRENINJA, 6, false, false, false, "Ninja Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.BATTLE_BOND, AbilityId.NONE, AbilityId.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, "", true), - new PokemonForm("Ash", "ash", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.BATTLE_BOND, AbilityId.NONE, AbilityId.NONE, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265), - ), - new PokemonSpecies(SpeciesId.BUNNELBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, null, 0.4, 5, AbilityId.PICKUP, AbilityId.CHEEK_POUCH, AbilityId.HUGE_POWER, 237, 38, 36, 38, 32, 36, 57, 255, 50, 47, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DIGGERSBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, PokemonType.GROUND, 1, 42.4, AbilityId.PICKUP, AbilityId.CHEEK_POUCH, AbilityId.HUGE_POWER, 423, 85, 56, 77, 50, 77, 78, 127, 50, 148, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FLETCHLING, 6, false, false, false, "Tiny Robin Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.7, AbilityId.BIG_PECKS, AbilityId.NONE, AbilityId.GALE_WINGS, 278, 45, 50, 43, 40, 38, 62, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.FLETCHINDER, 6, false, false, false, "Ember Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.7, 16, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.GALE_WINGS, 382, 62, 73, 55, 56, 52, 84, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.TALONFLAME, 6, false, false, false, "Scorching Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.2, 24.5, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.GALE_WINGS, 499, 78, 81, 71, 74, 69, 126, 45, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SCATTERBUG, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - ), - new PokemonSpecies(SpeciesId.SPEWPA, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.SHED_SKIN, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - ), - new PokemonSpecies(SpeciesId.VIVILLON, 6, false, false, false, "Scale Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("River Pattern", "river", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - ), - new PokemonSpecies(SpeciesId.LITLEO, 6, false, false, false, "Lion Cub Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 0.6, 13.5, AbilityId.RIVALRY, AbilityId.UNNERVE, AbilityId.MOXIE, 369, 62, 50, 58, 73, 54, 72, 220, 70, 74, GrowthRate.MEDIUM_SLOW, 12.5, false), - new PokemonSpecies(SpeciesId.PYROAR, 6, false, false, false, "Royal Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 1.5, 81.5, AbilityId.RIVALRY, AbilityId.UNNERVE, AbilityId.MOXIE, 507, 86, 68, 72, 109, 66, 106, 65, 70, 177, GrowthRate.MEDIUM_SLOW, 12.5, true), - new PokemonSpecies(SpeciesId.FLABEBE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - ), - new PokemonSpecies(SpeciesId.FLOETTE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - ), - new PokemonSpecies(SpeciesId.FLORGES, 6, false, false, false, "Garden Pokémon", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - ), - new PokemonSpecies(SpeciesId.SKIDDO, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 0.9, 31, AbilityId.SAP_SIPPER, AbilityId.NONE, AbilityId.GRASS_PELT, 350, 66, 65, 48, 62, 57, 52, 200, 70, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GOGOAT, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 1.7, 91, AbilityId.SAP_SIPPER, AbilityId.NONE, AbilityId.GRASS_PELT, 531, 123, 100, 62, 97, 81, 68, 45, 70, 186, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PANCHAM, 6, false, false, false, "Playful Pokémon", PokemonType.FIGHTING, null, 0.6, 8, AbilityId.IRON_FIST, AbilityId.MOLD_BREAKER, AbilityId.SCRAPPY, 348, 67, 82, 62, 46, 48, 43, 220, 50, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PANGORO, 6, false, false, false, "Daunting Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 2.1, 136, AbilityId.IRON_FIST, AbilityId.MOLD_BREAKER, AbilityId.SCRAPPY, 495, 95, 124, 78, 69, 71, 58, 65, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FURFROU, 6, false, false, false, "Poodle Pokémon", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Natural Form", "", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Heart Trim", "heart", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Star Trim", "star", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Diamond Trim", "diamond", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Debutante Trim", "debutante", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Matron Trim", "matron", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Dandy Trim", "dandy", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("La Reine Trim", "la-reine", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Kabuki Trim", "kabuki", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Pharaoh Trim", "pharaoh", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - ), - new PokemonSpecies(SpeciesId.ESPURR, 6, false, false, false, "Restraint Pokémon", PokemonType.PSYCHIC, null, 0.3, 3.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.OWN_TEMPO, 355, 62, 48, 54, 63, 60, 68, 190, 50, 71, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MEOWSTIC, 6, false, false, false, "Constraint Pokémon", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, "", true), - new PokemonForm("Female", "female", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.COMPETITIVE, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, null, true), - ), - new PokemonSpecies(SpeciesId.HONEDGE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 2, AbilityId.NO_GUARD, AbilityId.NONE, AbilityId.NONE, 325, 45, 80, 100, 35, 37, 28, 180, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DOUBLADE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 4.5, AbilityId.NO_GUARD, AbilityId.NONE, AbilityId.NONE, 448, 59, 110, 150, 45, 49, 35, 90, 50, 157, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.AEGISLASH, 6, false, false, false, "Royal Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Shield Forme", "shield", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, false, "", true), - new PokemonForm("Blade Forme", "blade", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 140, 50, 140, 50, 60, 45, 50, 250), - ), - new PokemonSpecies(SpeciesId.SPRITZEE, 6, false, false, false, "Perfume Pokémon", PokemonType.FAIRY, null, 0.2, 0.5, AbilityId.HEALER, AbilityId.NONE, AbilityId.AROMA_VEIL, 341, 78, 52, 60, 63, 65, 23, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.AROMATISSE, 6, false, false, false, "Fragrance Pokémon", PokemonType.FAIRY, null, 0.8, 15.5, AbilityId.HEALER, AbilityId.NONE, AbilityId.AROMA_VEIL, 462, 101, 72, 72, 99, 89, 29, 140, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SWIRLIX, 6, false, false, false, "Cotton Candy Pokémon", PokemonType.FAIRY, null, 0.4, 3.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.UNBURDEN, 341, 62, 48, 66, 59, 57, 49, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SLURPUFF, 6, false, false, false, "Meringue Pokémon", PokemonType.FAIRY, null, 0.8, 5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.UNBURDEN, 480, 82, 80, 86, 85, 75, 72, 140, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.INKAY, 6, false, false, false, "Revolving Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 0.4, 3.5, AbilityId.CONTRARY, AbilityId.SUCTION_CUPS, AbilityId.INFILTRATOR, 288, 53, 54, 53, 37, 46, 45, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MALAMAR, 6, false, false, false, "Overturning Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 1.5, 47, AbilityId.CONTRARY, AbilityId.SUCTION_CUPS, AbilityId.INFILTRATOR, 482, 86, 92, 88, 68, 75, 73, 80, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BINACLE, 6, false, false, false, "Two-Handed Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 31, AbilityId.TOUGH_CLAWS, AbilityId.SNIPER, AbilityId.PICKPOCKET, 306, 42, 52, 67, 39, 56, 50, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BARBARACLE, 6, false, false, false, "Collective Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 96, AbilityId.TOUGH_CLAWS, AbilityId.SNIPER, AbilityId.PICKPOCKET, 500, 72, 105, 115, 54, 86, 68, 45, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SKRELP, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.WATER, 0.5, 7.3, AbilityId.POISON_POINT, AbilityId.POISON_TOUCH, AbilityId.ADAPTABILITY, 320, 50, 60, 60, 60, 60, 30, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DRAGALGE, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.DRAGON, 1.8, 81.5, AbilityId.POISON_POINT, AbilityId.POISON_TOUCH, AbilityId.ADAPTABILITY, 494, 65, 75, 90, 97, 123, 44, 55, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CLAUNCHER, 6, false, false, false, "Water Gun Pokémon", PokemonType.WATER, null, 0.5, 8.3, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.NONE, 330, 50, 53, 62, 58, 63, 44, 225, 50, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.CLAWITZER, 6, false, false, false, "Howitzer Pokémon", PokemonType.WATER, null, 1.3, 35.3, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.NONE, 500, 71, 73, 88, 120, 89, 59, 55, 50, 100, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HELIOPTILE, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 0.5, 6, AbilityId.DRY_SKIN, AbilityId.SAND_VEIL, AbilityId.SOLAR_POWER, 289, 44, 38, 33, 61, 43, 70, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HELIOLISK, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 1, 21, AbilityId.DRY_SKIN, AbilityId.SAND_VEIL, AbilityId.SOLAR_POWER, 481, 62, 55, 52, 109, 94, 109, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TYRUNT, 6, false, false, false, "Royal Heir Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 0.8, 26, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.STURDY, 362, 58, 89, 77, 45, 45, 48, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.TYRANTRUM, 6, false, false, false, "Despot Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 2.5, 270, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.ROCK_HEAD, 521, 82, 121, 119, 69, 59, 71, 45, 50, 182, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.AMAURA, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 1.3, 25.2, AbilityId.REFRIGERATE, AbilityId.NONE, AbilityId.SNOW_WARNING, 362, 77, 59, 50, 67, 63, 46, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.AURORUS, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 2.7, 225, AbilityId.REFRIGERATE, AbilityId.NONE, AbilityId.SNOW_WARNING, 521, 123, 77, 72, 99, 92, 58, 45, 50, 104, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.SYLVEON, 6, false, false, false, "Intertwining Pokémon", PokemonType.FAIRY, null, 1, 23.5, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.PIXILATE, 525, 95, 65, 65, 110, 130, 60, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.HAWLUCHA, 6, false, false, false, "Wrestling Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 0.8, 21.5, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.MOLD_BREAKER, 500, 78, 92, 75, 74, 63, 118, 100, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DEDENNE, 6, false, false, false, "Antenna Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 0.2, 2.2, AbilityId.CHEEK_POUCH, AbilityId.PICKUP, AbilityId.PLUS, 431, 67, 58, 57, 81, 67, 101, 180, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CARBINK, 6, false, false, false, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.3, 5.7, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.STURDY, 500, 50, 50, 150, 50, 150, 50, 60, 50, 100, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.GOOMY, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.3, 2.8, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 300, 45, 50, 35, 55, 75, 40, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.SLIGGOO, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.8, 17.5, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 452, 68, 75, 53, 83, 113, 60, 45, 35, 158, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.GOODRA, 6, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 2, 150.5, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 600, 90, 100, 70, 110, 150, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.KLEFKI, 6, false, false, false, "Key Ring Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.2, 3, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.MAGICIAN, 470, 57, 80, 91, 80, 87, 75, 75, 50, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.PHANTUMP, 6, false, false, false, "Stump Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 7, AbilityId.NATURAL_CURE, AbilityId.FRISK, AbilityId.HARVEST, 309, 43, 70, 48, 50, 60, 38, 120, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TREVENANT, 6, false, false, false, "Elder Tree Pokémon", PokemonType.GHOST, PokemonType.GRASS, 1.5, 71, AbilityId.NATURAL_CURE, AbilityId.FRISK, AbilityId.HARVEST, 474, 85, 110, 76, 65, 82, 56, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PUMPKABOO, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, false, null, true), - new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.3, 3.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 44, 66, 70, 44, 55, 56, 120, 50, 67, false, "", true), - new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 0.5, 7.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 54, 66, 70, 44, 55, 46, 120, 50, 67, false, "", true), - new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 0.8, 15, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 59, 66, 70, 44, 55, 41, 120, 50, 67, false, "", true), - ), - new PokemonSpecies(SpeciesId.GOURGEIST, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, false, null, true), - new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.7, 9.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 55, 85, 122, 58, 75, 99, 60, 50, 173, false, "", true), - new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 1.1, 14, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 75, 95, 122, 58, 75, 69, 60, 50, 173, false, "", true), - new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 1.7, 39, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 85, 100, 122, 58, 75, 54, 60, 50, 173, false, "", true), - ), - new PokemonSpecies(SpeciesId.BERGMITE, 6, false, false, false, "Ice Chunk Pokémon", PokemonType.ICE, null, 1, 99.5, AbilityId.OWN_TEMPO, AbilityId.ICE_BODY, AbilityId.STURDY, 304, 55, 69, 85, 32, 35, 28, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.AVALUGG, 6, false, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 2, 505, AbilityId.OWN_TEMPO, AbilityId.ICE_BODY, AbilityId.STURDY, 514, 95, 117, 184, 44, 46, 28, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.NOIBAT, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 0.5, 8, AbilityId.FRISK, AbilityId.INFILTRATOR, AbilityId.TELEPATHY, 245, 40, 30, 35, 45, 40, 55, 190, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.NOIVERN, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 1.5, 85, AbilityId.FRISK, AbilityId.INFILTRATOR, AbilityId.TELEPATHY, 535, 85, 70, 80, 97, 80, 123, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.XERNEAS, 6, false, true, false, "Life Pokémon", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Neutral Mode", "neutral", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, false, null, true), - new PokemonForm("Active Mode", "active", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340) - ), - new PokemonSpecies(SpeciesId.YVELTAL, 6, false, true, false, "Destruction Pokémon", PokemonType.DARK, PokemonType.FLYING, 5.8, 203, AbilityId.DARK_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ZYGARDE, 6, false, true, false, "Order Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("50% Forme", "50", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), - new PokemonForm("10% Forme", "10", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, null, true), - new PokemonForm("50% Forme Power Construct", "50-pc", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), - new PokemonForm("10% Forme Power Construct", "10-pc", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, "10", true), - new PokemonForm("Complete Forme (50% PC)", "complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354), - new PokemonForm("Complete Forme (10% PC)", "10-complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354, false, "complete"), - ), - new PokemonSpecies(SpeciesId.DIANCIE, 6, false, false, true, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FAIRY, 1.1, 27.8, AbilityId.MAGIC_BOUNCE, AbilityId.NONE, AbilityId.NONE, 700, 50, 160, 110, 160, 110, 110, 3, 50, 300), - ), - new PokemonSpecies(SpeciesId.HOOPA, 6, false, false, true, "Mischief Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hoopa Confined", "", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, false, null, true), - new PokemonForm("Hoopa Unbound", "unbound", PokemonType.PSYCHIC, PokemonType.DARK, 6.5, 490, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 680, 80, 160, 60, 170, 130, 80, 3, 100, 340), - ), - new PokemonSpecies(SpeciesId.VOLCANION, 6, false, false, true, "Steam Pokémon", PokemonType.FIRE, PokemonType.WATER, 1.7, 195, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 120, 130, 90, 70, 3, 100, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ROWLET, 7, false, false, false, "Grass Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.3, 1.5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 320, 68, 55, 55, 50, 50, 42, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.DARTRIX, 7, false, false, false, "Blade Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.7, 16, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 420, 78, 75, 75, 70, 70, 52, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.DECIDUEYE, 7, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.6, 36.6, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 530, 78, 107, 75, 100, 100, 70, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.LITTEN, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.4, 4.3, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 320, 45, 65, 40, 60, 40, 70, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.TORRACAT, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.7, 25, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 420, 65, 85, 50, 80, 50, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.INCINEROAR, 7, false, false, false, "Heel Pokémon", PokemonType.FIRE, PokemonType.DARK, 1.8, 83, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 530, 95, 115, 90, 80, 90, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.POPPLIO, 7, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 0.4, 7.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 320, 50, 54, 54, 66, 56, 40, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.BRIONNE, 7, false, false, false, "Pop Star Pokémon", PokemonType.WATER, null, 0.6, 17.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 420, 60, 69, 69, 91, 81, 50, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.PRIMARINA, 7, false, false, false, "Soloist Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.8, 44, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 530, 80, 74, 74, 126, 116, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.PIKIPEK, 7, false, false, false, "Woodpecker Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.2, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.PICKUP, 265, 35, 75, 30, 30, 30, 65, 255, 70, 53, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TRUMBEAK, 7, false, false, false, "Bugle Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 14.8, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.PICKUP, 355, 55, 85, 50, 40, 50, 75, 120, 70, 124, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TOUCANNON, 7, false, false, false, "Cannon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 26, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.SHEER_FORCE, 485, 80, 120, 75, 75, 75, 60, 45, 70, 243, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.YUNGOOS, 7, false, false, false, "Loitering Pokémon", PokemonType.NORMAL, null, 0.4, 6, AbilityId.STAKEOUT, AbilityId.STRONG_JAW, AbilityId.ADAPTABILITY, 253, 48, 70, 30, 30, 30, 45, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GUMSHOOS, 7, false, false, false, "Stakeout Pokémon", PokemonType.NORMAL, null, 0.7, 14.2, AbilityId.STAKEOUT, AbilityId.STRONG_JAW, AbilityId.ADAPTABILITY, 418, 88, 110, 60, 55, 60, 45, 127, 70, 146, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GRUBBIN, 7, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 4.4, AbilityId.SWARM, AbilityId.NONE, AbilityId.NONE, 300, 47, 62, 45, 55, 45, 46, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CHARJABUG, 7, false, false, false, "Battery Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.5, 10.5, AbilityId.BATTERY, AbilityId.NONE, AbilityId.NONE, 400, 57, 82, 95, 55, 75, 36, 120, 50, 140, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.VIKAVOLT, 7, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 1.5, 45, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 500, 77, 70, 90, 145, 75, 43, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CRABRAWLER, 7, false, false, false, "Boxing Pokémon", PokemonType.FIGHTING, null, 0.6, 7, AbilityId.HYPER_CUTTER, AbilityId.IRON_FIST, AbilityId.ANGER_POINT, 338, 47, 82, 57, 42, 47, 63, 225, 70, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CRABOMINABLE, 7, false, false, false, "Woolly Crab Pokémon", PokemonType.FIGHTING, PokemonType.ICE, 1.7, 180, AbilityId.HYPER_CUTTER, AbilityId.IRON_FIST, AbilityId.ANGER_POINT, 478, 97, 132, 77, 62, 67, 43, 60, 70, 167, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ORICORIO, 7, false, false, false, "Dancing Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, GrowthRate.MEDIUM_FAST, 25, false, false, - new PokemonForm("Baile Style", "baile", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, "", true), - new PokemonForm("Pom-Pom Style", "pompom", PokemonType.ELECTRIC, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), - new PokemonForm("Pau Style", "pau", PokemonType.PSYCHIC, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), - new PokemonForm("Sensu Style", "sensu", PokemonType.GHOST, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), - ), - new PokemonSpecies(SpeciesId.CUTIEFLY, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.1, 0.2, AbilityId.HONEY_GATHER, AbilityId.SHIELD_DUST, AbilityId.SWEET_VEIL, 304, 40, 45, 40, 55, 40, 84, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RIBOMBEE, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.2, 0.5, AbilityId.HONEY_GATHER, AbilityId.SHIELD_DUST, AbilityId.SWEET_VEIL, 464, 60, 55, 60, 95, 70, 124, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ROCKRUFF, 7, false, false, false, "Puppy Pokémon", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, null, true), - new PokemonForm("Own Tempo", "own-tempo", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.OWN_TEMPO, AbilityId.NONE, AbilityId.OWN_TEMPO, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, "", true), - ), - new PokemonSpecies(SpeciesId.LYCANROC, 7, false, false, false, "Wolf Pokémon", PokemonType.ROCK, null, 0.8, 25, AbilityId.KEEN_EYE, AbilityId.SAND_RUSH, AbilityId.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Midday Form", "midday", PokemonType.ROCK, null, 0.8, 25, AbilityId.KEEN_EYE, AbilityId.SAND_RUSH, AbilityId.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, false, "", true), - new PokemonForm("Midnight Form", "midnight", PokemonType.ROCK, null, 1.1, 25, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.NO_GUARD, 487, 85, 115, 75, 55, 75, 82, 90, 50, 170, false, null, true), - new PokemonForm("Dusk Form", "dusk", PokemonType.ROCK, null, 0.8, 25, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 487, 75, 117, 65, 55, 65, 110, 90, 50, 170, false, null, true), - ), - new PokemonSpecies(SpeciesId.WISHIWASHI, 7, false, false, false, "Small Fry Pokémon", PokemonType.WATER, null, 0.2, 0.3, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, GrowthRate.FAST, 50, false, false, - new PokemonForm("Solo Form", "", PokemonType.WATER, null, 0.2, 0.3, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, false, null, true), - new PokemonForm("School", "school", PokemonType.WATER, null, 8.2, 78.6, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 620, 45, 140, 130, 140, 135, 30, 60, 50, 217), - ), - new PokemonSpecies(SpeciesId.MAREANIE, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.4, 8, AbilityId.MERCILESS, AbilityId.LIMBER, AbilityId.REGENERATOR, 305, 50, 53, 62, 43, 52, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TOXAPEX, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.7, 14.5, AbilityId.MERCILESS, AbilityId.LIMBER, AbilityId.REGENERATOR, 495, 50, 63, 152, 53, 142, 35, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MUDBRAY, 7, false, false, false, "Donkey Pokémon", PokemonType.GROUND, null, 1, 110, AbilityId.OWN_TEMPO, AbilityId.STAMINA, AbilityId.INNER_FOCUS, 385, 70, 100, 70, 45, 55, 45, 190, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MUDSDALE, 7, false, false, false, "Draft Horse Pokémon", PokemonType.GROUND, null, 2.5, 920, AbilityId.OWN_TEMPO, AbilityId.STAMINA, AbilityId.INNER_FOCUS, 500, 100, 125, 100, 55, 85, 35, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DEWPIDER, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 0.3, 4, AbilityId.WATER_BUBBLE, AbilityId.NONE, AbilityId.WATER_ABSORB, 269, 38, 40, 52, 40, 72, 27, 200, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ARAQUANID, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 1.8, 82, AbilityId.WATER_BUBBLE, AbilityId.NONE, AbilityId.WATER_ABSORB, 454, 68, 70, 92, 50, 132, 42, 100, 50, 159, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FOMANTIS, 7, false, false, false, "Sickle Grass Pokémon", PokemonType.GRASS, null, 0.3, 1.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CONTRARY, 250, 40, 55, 35, 50, 35, 35, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LURANTIS, 7, false, false, false, "Bloom Sickle Pokémon", PokemonType.GRASS, null, 0.9, 18.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CONTRARY, 480, 70, 105, 90, 80, 90, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MORELULL, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.2, 1.5, AbilityId.ILLUMINATE, AbilityId.EFFECT_SPORE, AbilityId.RAIN_DISH, 285, 40, 35, 55, 65, 75, 15, 190, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SHIINOTIC, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1, 11.5, AbilityId.ILLUMINATE, AbilityId.EFFECT_SPORE, AbilityId.RAIN_DISH, 405, 60, 45, 80, 90, 100, 30, 75, 50, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SALANDIT, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 0.6, 4.8, AbilityId.CORROSION, AbilityId.NONE, AbilityId.OBLIVIOUS, 320, 48, 44, 40, 71, 40, 77, 120, 50, 64, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(SpeciesId.SALAZZLE, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 1.2, 22.2, AbilityId.CORROSION, AbilityId.NONE, AbilityId.OBLIVIOUS, 480, 68, 64, 60, 111, 60, 117, 45, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.STUFFUL, 7, false, false, false, "Flailing Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 0.5, 6.8, AbilityId.FLUFFY, AbilityId.KLUTZ, AbilityId.CUTE_CHARM, 340, 70, 75, 50, 45, 50, 50, 140, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BEWEAR, 7, false, false, false, "Strong Arm Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 2.1, 135, AbilityId.FLUFFY, AbilityId.KLUTZ, AbilityId.UNNERVE, 500, 120, 125, 80, 55, 60, 60, 70, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BOUNSWEET, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.3, 3.2, AbilityId.LEAF_GUARD, AbilityId.OBLIVIOUS, AbilityId.SWEET_VEIL, 210, 42, 30, 38, 30, 38, 32, 235, 50, 42, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.STEENEE, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.7, 8.2, AbilityId.LEAF_GUARD, AbilityId.OBLIVIOUS, AbilityId.SWEET_VEIL, 290, 52, 40, 48, 40, 48, 62, 120, 50, 102, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.TSAREENA, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 1.2, 21.4, AbilityId.LEAF_GUARD, AbilityId.QUEENLY_MAJESTY, AbilityId.SWEET_VEIL, 510, 72, 120, 98, 50, 98, 72, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.COMFEY, 7, false, false, false, "Posy Picker Pokémon", PokemonType.FAIRY, null, 0.1, 0.3, AbilityId.FLOWER_VEIL, AbilityId.TRIAGE, AbilityId.NATURAL_CURE, 485, 51, 52, 90, 82, 110, 100, 60, 50, 170, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.ORANGURU, 7, false, false, false, "Sage Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 76, AbilityId.INNER_FOCUS, AbilityId.TELEPATHY, AbilityId.SYMBIOSIS, 490, 90, 60, 80, 90, 110, 60, 45, 50, 172, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.PASSIMIAN, 7, false, false, false, "Teamwork Pokémon", PokemonType.FIGHTING, null, 2, 82.8, AbilityId.RECEIVER, AbilityId.NONE, AbilityId.DEFIANT, 490, 100, 120, 90, 40, 60, 80, 45, 50, 172, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.WIMPOD, 7, false, false, false, "Turn Tail Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 12, AbilityId.WIMP_OUT, AbilityId.NONE, AbilityId.RUN_AWAY, 230, 25, 35, 40, 20, 30, 80, 90, 50, 46, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden - new PokemonSpecies(SpeciesId.GOLISOPOD, 7, false, false, false, "Hard Scale Pokémon", PokemonType.BUG, PokemonType.WATER, 2, 108, AbilityId.EMERGENCY_EXIT, AbilityId.NONE, AbilityId.ANTICIPATION, 530, 75, 125, 140, 60, 90, 40, 45, 50, 186, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden - new PokemonSpecies(SpeciesId.SANDYGAST, 7, false, false, false, "Sand Heap Pokémon", PokemonType.GHOST, PokemonType.GROUND, 0.5, 70, AbilityId.WATER_COMPACTION, AbilityId.NONE, AbilityId.SAND_VEIL, 320, 55, 55, 80, 70, 45, 15, 140, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PALOSSAND, 7, false, false, false, "Sand Castle Pokémon", PokemonType.GHOST, PokemonType.GROUND, 1.3, 250, AbilityId.WATER_COMPACTION, AbilityId.NONE, AbilityId.SAND_VEIL, 480, 85, 75, 110, 100, 75, 35, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PYUKUMUKU, 7, false, false, false, "Sea Cucumber Pokémon", PokemonType.WATER, null, 0.3, 1.2, AbilityId.INNARDS_OUT, AbilityId.NONE, AbilityId.UNAWARE, 410, 55, 60, 130, 30, 130, 5, 60, 50, 144, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.TYPE_NULL, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 1.9, 120.5, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.NONE, 534, 95, 95, 95, 95, 95, 59, 3, 0, 107, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SILVALLY, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, GrowthRate.SLOW, null, false, false, - new PokemonForm("Type: Normal", "normal", PokemonType.NORMAL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, false, "", true), - new PokemonForm("Type: Fighting", "fighting", PokemonType.FIGHTING, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Flying", "flying", PokemonType.FLYING, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Poison", "poison", PokemonType.POISON, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Ground", "ground", PokemonType.GROUND, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Rock", "rock", PokemonType.ROCK, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Bug", "bug", PokemonType.BUG, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Ghost", "ghost", PokemonType.GHOST, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Steel", "steel", PokemonType.STEEL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Fire", "fire", PokemonType.FIRE, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Water", "water", PokemonType.WATER, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Grass", "grass", PokemonType.GRASS, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Electric", "electric", PokemonType.ELECTRIC, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Psychic", "psychic", PokemonType.PSYCHIC, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Ice", "ice", PokemonType.ICE, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Dragon", "dragon", PokemonType.DRAGON, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Dark", "dark", PokemonType.DARK, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Fairy", "fairy", PokemonType.FAIRY, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - ), - new PokemonSpecies(SpeciesId.MINIOR, 7, false, false, false, "Meteor Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, GrowthRate.MEDIUM_SLOW, null, false, false, - new PokemonForm("Red Meteor Form", "red-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), - new PokemonForm("Orange Meteor Form", "orange-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), - new PokemonForm("Yellow Meteor Form", "yellow-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), - new PokemonForm("Green Meteor Form", "green-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), - new PokemonForm("Blue Meteor Form", "blue-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), - new PokemonForm("Indigo Meteor Form", "indigo-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), - new PokemonForm("Violet Meteor Form", "violet-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), - new PokemonForm("Red Core Form", "red", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Orange Core Form", "orange", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Yellow Core Form", "yellow", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Green Core Form", "green", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Blue Core Form", "blue", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Indigo Core Form", "indigo", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Violet Core Form", "violet", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - ), - new PokemonSpecies(SpeciesId.KOMALA, 7, false, false, false, "Drowsing Pokémon", PokemonType.NORMAL, null, 0.4, 19.9, AbilityId.COMATOSE, AbilityId.NONE, AbilityId.NONE, 480, 65, 115, 65, 75, 95, 65, 45, 70, 168, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.TURTONATOR, 7, false, false, false, "Blast Turtle Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 2, 212, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.NONE, 485, 60, 78, 135, 91, 85, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TOGEDEMARU, 7, false, false, false, "Roly-Poly Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 3.3, AbilityId.IRON_BARBS, AbilityId.LIGHTNING_ROD, AbilityId.STURDY, 435, 65, 98, 63, 40, 73, 96, 180, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MIMIKYU, 7, false, false, false, "Disguise Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Disguised Form", "disguised", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, false, null, true), - new PokemonForm("Busted Form", "busted", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167), - ), - new PokemonSpecies(SpeciesId.BRUXISH, 7, false, false, false, "Gnash Teeth Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 0.9, 19, AbilityId.DAZZLING, AbilityId.STRONG_JAW, AbilityId.WONDER_SKIN, 475, 68, 105, 70, 70, 70, 92, 80, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DRAMPA, 7, false, false, false, "Placid Pokémon", PokemonType.NORMAL, PokemonType.DRAGON, 3, 185, AbilityId.BERSERK, AbilityId.SAP_SIPPER, AbilityId.CLOUD_NINE, 485, 78, 60, 85, 135, 91, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DHELMISE, 7, false, false, false, "Sea Creeper Pokémon", PokemonType.GHOST, PokemonType.GRASS, 3.9, 210, AbilityId.STEELWORKER, AbilityId.NONE, AbilityId.NONE, 517, 70, 131, 100, 86, 90, 40, 25, 50, 181, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.JANGMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, null, 0.6, 29.7, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 300, 45, 55, 65, 45, 45, 45, 45, 50, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HAKAMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.2, 47, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 420, 55, 75, 90, 65, 70, 65, 45, 50, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.KOMMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.6, 78.2, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 600, 75, 110, 125, 100, 105, 85, 45, 50, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.TAPU_KOKO, 7, true, false, false, "Land Spirit Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 1.8, 20.5, AbilityId.ELECTRIC_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 115, 85, 95, 75, 130, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.TAPU_LELE, 7, true, false, false, "Land Spirit Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.2, 18.6, AbilityId.PSYCHIC_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 85, 75, 130, 115, 95, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.TAPU_BULU, 7, true, false, false, "Land Spirit Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1.9, 45.5, AbilityId.GRASSY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 130, 115, 85, 95, 75, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.TAPU_FINI, 7, true, false, false, "Land Spirit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.3, 21.2, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 75, 115, 95, 130, 85, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.COSMOG, 7, true, false, false, "Nebula Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.1, AbilityId.UNAWARE, AbilityId.NONE, AbilityId.NONE, 200, 43, 29, 31, 29, 31, 37, 3, 0, 40, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.COSMOEM, 7, true, false, false, "Protostar Pokémon", PokemonType.PSYCHIC, null, 0.1, 999.9, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 400, 43, 29, 131, 29, 131, 37, 3, 0, 140, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SOLGALEO, 7, false, true, false, "Sunne Pokémon", PokemonType.PSYCHIC, PokemonType.STEEL, 3.4, 230, AbilityId.FULL_METAL_BODY, AbilityId.NONE, AbilityId.NONE, 680, 137, 137, 107, 113, 89, 97, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.LUNALA, 7, false, true, false, "Moone Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 4, 120, AbilityId.SHADOW_SHIELD, AbilityId.NONE, AbilityId.NONE, 680, 137, 113, 89, 137, 107, 97, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.NIHILEGO, 7, true, false, false, "Parasite Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.2, 55.5, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 109, 53, 47, 127, 131, 103, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.BUZZWOLE, 7, true, false, false, "Swollen Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 2.4, 333.6, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 107, 139, 139, 53, 53, 79, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.PHEROMOSA, 7, true, false, false, "Lissome Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.8, 25, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 71, 137, 37, 137, 37, 151, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.XURKITREE, 7, true, false, false, "Glowing Pokémon", PokemonType.ELECTRIC, null, 3.8, 100, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 83, 89, 71, 173, 71, 83, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.CELESTEELA, 7, true, false, false, "Launch Pokémon", PokemonType.STEEL, PokemonType.FLYING, 9.2, 999.9, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 97, 101, 103, 107, 101, 61, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.KARTANA, 7, true, false, false, "Drawn Sword Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.3, 0.1, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 59, 181, 131, 59, 31, 109, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.GUZZLORD, 7, true, false, false, "Junkivore Pokémon", PokemonType.DARK, PokemonType.DRAGON, 5.5, 888, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 223, 101, 53, 97, 53, 43, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.NECROZMA, 7, false, true, false, "Prism Pokémon", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 3, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 3, 0, 300, false, null, true), - new PokemonForm("Dusk Mane", "dusk-mane", PokemonType.PSYCHIC, PokemonType.STEEL, 3.8, 460, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 157, 127, 113, 109, 77, 3, 0, 340), - new PokemonForm("Dawn Wings", "dawn-wings", PokemonType.PSYCHIC, PokemonType.GHOST, 4.2, 350, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 113, 109, 157, 127, 77, 3, 0, 340), - new PokemonForm("Ultra", "ultra", PokemonType.PSYCHIC, PokemonType.DRAGON, 7.5, 230, AbilityId.NEUROFORCE, AbilityId.NONE, AbilityId.NONE, 754, 97, 167, 97, 167, 97, 129, 3, 0, 377), - ), - new PokemonSpecies(SpeciesId.MAGEARNA, 7, false, false, true, "Artificial Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), - new PokemonForm("Original", "original", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), - ), - new PokemonSpecies(SpeciesId.MARSHADOW, 7, false, false, true, "Gloomdweller Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, true), - new PokemonForm("Zenith", "zenith", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, false, true) - ), - new PokemonSpecies(SpeciesId.POIPOLE, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.6, 1.8, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 420, 67, 73, 67, 73, 67, 73, 45, 0, 210, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.NAGANADEL, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, PokemonType.DRAGON, 3.6, 150, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 540, 73, 73, 73, 127, 73, 121, 45, 0, 270, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.STAKATAKA, 7, true, false, false, "Rampart Pokémon", PokemonType.ROCK, PokemonType.STEEL, 5.5, 820, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 61, 131, 211, 53, 101, 13, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.BLACEPHALON, 7, true, false, false, "Fireworks Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.8, 13, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 53, 127, 53, 151, 79, 107, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ZERAORA, 7, false, false, true, "Thunderclap Pokémon", PokemonType.ELECTRIC, null, 1.5, 44.5, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.NONE, 600, 88, 112, 75, 102, 80, 143, 3, 0, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.MELTAN, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 0.2, 8, AbilityId.MAGNET_PULL, AbilityId.NONE, AbilityId.NONE, 300, 46, 65, 65, 55, 35, 34, 3, 0, 150, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.MELMETAL, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 2.5, 800, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, null, 2.5, 800, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, null, 25, 999.9, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 700, 170, 158, 158, 95, 75, 44, 3, 0, 300), - ), - new PokemonSpecies(SpeciesId.GROOKEY, 8, false, false, false, "Chimp Pokémon", PokemonType.GRASS, null, 0.3, 5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 310, 50, 65, 50, 40, 40, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.THWACKEY, 8, false, false, false, "Beat Pokémon", PokemonType.GRASS, null, 0.7, 14, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.RILLABOOM, 8, false, false, false, "Drummer Pokémon", PokemonType.GRASS, null, 2.1, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, null, 2.1, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, null, 28, 999.9, AbilityId.GRASSY_SURGE, AbilityId.NONE, AbilityId.GRASSY_SURGE, 630, 125, 140, 105, 90, 85, 85, 45, 50, 265), - ), - new PokemonSpecies(SpeciesId.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.3, 4.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.RABOOT, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.6, 9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.CINDERACE, 8, false, false, false, "Striker Pokémon", PokemonType.FIRE, null, 1.4, 33, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.FIRE, null, 1.4, 33, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, null, 27, 999.9, AbilityId.LIBERO, AbilityId.NONE, AbilityId.LIBERO, 630, 100, 141, 80, 95, 80, 134, 45, 50, 265), - ), - new PokemonSpecies(SpeciesId.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.3, 4, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.7, 11.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.INTELEON, 8, false, false, false, "Secret Agent Pokémon", PokemonType.WATER, null, 1.9, 45.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 1.9, 45.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 40, 999.9, AbilityId.SNIPER, AbilityId.NONE, AbilityId.SNIPER, 630, 95, 117, 67, 147, 67, 137, 45, 50, 265), - ), - new PokemonSpecies(SpeciesId.SKWOVET, 8, false, false, false, "Cheeky Pokémon", PokemonType.NORMAL, null, 0.3, 2.5, AbilityId.CHEEK_POUCH, AbilityId.NONE, AbilityId.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GREEDENT, 8, false, false, false, "Greedy Pokémon", PokemonType.NORMAL, null, 0.6, 6, AbilityId.CHEEK_POUCH, AbilityId.NONE, AbilityId.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ROOKIDEE, 8, false, false, false, "Tiny Bird Pokémon", PokemonType.FLYING, null, 0.2, 1.8, AbilityId.KEEN_EYE, AbilityId.UNNERVE, AbilityId.BIG_PECKS, 245, 38, 47, 35, 33, 35, 57, 255, 50, 49, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CORVISQUIRE, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, null, 0.8, 16, AbilityId.KEEN_EYE, AbilityId.UNNERVE, AbilityId.BIG_PECKS, 365, 68, 67, 55, 43, 55, 77, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CORVIKNIGHT, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, AbilityId.PRESSURE, AbilityId.UNNERVE, AbilityId.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, AbilityId.PRESSURE, AbilityId.UNNERVE, AbilityId.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FLYING, PokemonType.STEEL, 14, 999.9, AbilityId.MIRROR_ARMOR, AbilityId.MIRROR_ARMOR, AbilityId.MIRROR_ARMOR, 595, 118, 112, 135, 63, 90, 77, 45, 50, 248), - ), - new PokemonSpecies(SpeciesId.BLIPBUG, 8, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 8, AbilityId.SWARM, AbilityId.COMPOUND_EYES, AbilityId.TELEPATHY, 180, 25, 20, 20, 25, 45, 45, 255, 50, 36, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DOTTLER, 8, false, false, false, "Radome Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 19.5, AbilityId.SWARM, AbilityId.COMPOUND_EYES, AbilityId.TELEPATHY, 335, 50, 35, 80, 50, 90, 30, 120, 50, 117, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ORBEETLE, 8, false, false, false, "Seven Spot Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, AbilityId.SWARM, AbilityId.FRISK, AbilityId.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, AbilityId.SWARM, AbilityId.FRISK, AbilityId.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.PSYCHIC, 14, 999.9, AbilityId.TRACE, AbilityId.TRACE, AbilityId.TRACE, 605, 75, 50, 140, 100, 150, 90, 45, 50, 253), - ), - new PokemonSpecies(SpeciesId.NICKIT, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 0.6, 8.9, AbilityId.RUN_AWAY, AbilityId.UNBURDEN, AbilityId.STAKEOUT, 245, 40, 28, 28, 47, 52, 50, 255, 50, 49, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.THIEVUL, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 1.2, 19.9, AbilityId.RUN_AWAY, AbilityId.UNBURDEN, AbilityId.STAKEOUT, 455, 70, 58, 58, 87, 92, 90, 127, 50, 159, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.GOSSIFLEUR, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 0.4, 2.2, AbilityId.COTTON_DOWN, AbilityId.REGENERATOR, AbilityId.EFFECT_SPORE, 250, 40, 40, 60, 40, 60, 10, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ELDEGOSS, 8, false, false, false, "Cotton Bloom Pokémon", PokemonType.GRASS, null, 0.5, 2.5, AbilityId.COTTON_DOWN, AbilityId.REGENERATOR, AbilityId.EFFECT_SPORE, 460, 60, 50, 90, 80, 120, 60, 75, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WOOLOO, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 0.6, 6, AbilityId.FLUFFY, AbilityId.RUN_AWAY, AbilityId.BULLETPROOF, 270, 42, 40, 55, 40, 45, 48, 255, 50, 122, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DUBWOOL, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 1.3, 43, AbilityId.FLUFFY, AbilityId.STEADFAST, AbilityId.BULLETPROOF, 490, 72, 80, 100, 60, 90, 88, 127, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CHEWTLE, 8, false, false, false, "Snapping Pokémon", PokemonType.WATER, null, 0.3, 8.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 284, 50, 64, 50, 38, 38, 44, 255, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DREDNAW, 8, false, false, false, "Bite Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ROCK, 24, 999.9, AbilityId.STRONG_JAW, AbilityId.STRONG_JAW, AbilityId.STRONG_JAW, 585, 115, 137, 115, 61, 83, 74, 75, 50, 170), - ), - new PokemonSpecies(SpeciesId.YAMPER, 8, false, false, false, "Puppy Pokémon", PokemonType.ELECTRIC, null, 0.3, 13.5, AbilityId.BALL_FETCH, AbilityId.NONE, AbilityId.RATTLED, 270, 59, 45, 50, 40, 50, 26, 255, 50, 54, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.BOLTUND, 8, false, false, false, "Dog Pokémon", PokemonType.ELECTRIC, null, 1, 34, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.COMPETITIVE, 490, 69, 90, 60, 90, 60, 121, 45, 50, 172, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.ROLYCOLY, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, null, 0.3, 12, AbilityId.STEAM_ENGINE, AbilityId.HEATPROOF, AbilityId.FLASH_FIRE, 240, 30, 40, 50, 40, 50, 30, 255, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CARKOL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 1.1, 78, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 410, 80, 60, 90, 60, 70, 50, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.COALOSSAL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ROCK, PokemonType.FIRE, 42, 999.9, AbilityId.STEAM_ENGINE, AbilityId.STEAM_ENGINE, AbilityId.STEAM_ENGINE, 610, 140, 100, 132, 95, 100, 43, 45, 50, 255), - ), - new PokemonSpecies(SpeciesId.APPLIN, 8, false, false, false, "Apple Core Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.2, 0.5, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.BULLETPROOF, 260, 40, 40, 80, 40, 40, 20, 255, 50, 52, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.FLAPPLE, 8, false, false, false, "Apple Wing Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, AbilityId.HUSTLE, AbilityId.HUSTLE, AbilityId.HUSTLE, 585, 100, 125, 90, 105, 70, 95, 45, 50, 170), - ), - new PokemonSpecies(SpeciesId.APPLETUN, 8, false, false, false, "Apple Nectar Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, AbilityId.THICK_FAT, AbilityId.THICK_FAT, AbilityId.THICK_FAT, 585, 150, 100, 95, 115, 95, 30, 45, 50, 170), - ), - new PokemonSpecies(SpeciesId.SILICOBRA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 2.2, 7.6, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 315, 52, 57, 75, 35, 50, 46, 255, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SANDACONDA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 3.8, 65.5, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.8, 65.5, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GROUND, null, 22, 999.9, AbilityId.SAND_SPIT, AbilityId.SAND_SPIT, AbilityId.SAND_SPIT, 610, 102, 137, 140, 70, 80, 81, 120, 50, 179), - ), - new PokemonSpecies(SpeciesId.CRAMORANT, 8, false, false, false, "Gulp Pokémon", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, false, null, true), - new PokemonForm("Gulping Form", "gulping", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166), - new PokemonForm("Gorging Form", "gorging", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166), - ), - new PokemonSpecies(SpeciesId.ARROKUDA, 8, false, false, false, "Rush Pokémon", PokemonType.WATER, null, 0.5, 1, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.PROPELLER_TAIL, 280, 41, 63, 40, 40, 30, 66, 255, 50, 56, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.BARRASKEWDA, 8, false, false, false, "Skewer Pokémon", PokemonType.WATER, null, 1.3, 30, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.PROPELLER_TAIL, 490, 61, 123, 60, 60, 50, 136, 60, 50, 172, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.TOXEL, 8, false, false, false, "Baby Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 0.4, 11, AbilityId.RATTLED, AbilityId.STATIC, AbilityId.KLUTZ, 242, 40, 38, 35, 54, 35, 40, 75, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.TOXTRICITY, 8, false, false, false, "Punk Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.PLUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Amped Form", "amped", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.PLUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "", true), - new PokemonForm("Low-Key Form", "lowkey", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.MINUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "lowkey", true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, PokemonType.POISON, 24, 999.9, AbilityId.PUNK_ROCK, AbilityId.PUNK_ROCK, AbilityId.PUNK_ROCK, 602, 114, 105, 82, 137, 82, 82, 45, 50, 176), - ), - new PokemonSpecies(SpeciesId.SIZZLIPEDE, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 0.7, 1, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 305, 50, 65, 45, 50, 50, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CENTISKORCH, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 3, 120, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.BUG, 3, 120, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.BUG, 75, 999.9, AbilityId.FLASH_FIRE, AbilityId.FLASH_FIRE, AbilityId.FLASH_FIRE, 625, 130, 125, 75, 94, 100, 101, 75, 50, 184), - ), - new PokemonSpecies(SpeciesId.CLOBBOPUS, 8, false, false, false, "Tantrum Pokémon", PokemonType.FIGHTING, null, 0.6, 4, AbilityId.LIMBER, AbilityId.NONE, AbilityId.TECHNICIAN, 310, 50, 68, 60, 50, 50, 32, 180, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", PokemonType.FIGHTING, null, 1.6, 39, AbilityId.LIMBER, AbilityId.NONE, AbilityId.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SINISTEA, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), - new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), - ), - new PokemonSpecies(SpeciesId.POLTEAGEIST, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), - new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), - ), - new PokemonSpecies(SpeciesId.HATENNA, 8, false, false, false, "Calm Pokémon", PokemonType.PSYCHIC, null, 0.4, 3.4, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 265, 42, 30, 45, 56, 53, 39, 235, 50, 53, GrowthRate.SLOW, 0, false), - new PokemonSpecies(SpeciesId.HATTREM, 8, false, false, false, "Serene Pokémon", PokemonType.PSYCHIC, null, 0.6, 4.8, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), - new PokemonSpecies(SpeciesId.HATTERENE, 8, false, false, false, "Silent Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, GrowthRate.SLOW, 0, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.PSYCHIC, PokemonType.FAIRY, 26, 999.9, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 610, 87, 100, 110, 146, 118, 49, 45, 50, 255), - ), - new PokemonSpecies(SpeciesId.IMPIDIMP, 8, false, false, false, "Wily Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.4, 5.5, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 265, 45, 45, 30, 55, 40, 50, 255, 50, 53, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.MORGREM, 8, false, false, false, "Devious Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.8, 12.5, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 370, 65, 60, 45, 75, 55, 70, 120, 50, 130, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(SpeciesId.GRIMMSNARL, 8, false, false, false, "Bulk Up Pokémon", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, GrowthRate.MEDIUM_FAST, 100, false, true, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.DARK, PokemonType.FAIRY, 32, 999.9, AbilityId.PRANKSTER, AbilityId.PRANKSTER, AbilityId.PRANKSTER, 610, 130, 138, 75, 110, 92, 65, 45, 50, 255), - ), - new PokemonSpecies(SpeciesId.OBSTAGOON, 8, false, false, false, "Blocking Pokémon", PokemonType.DARK, PokemonType.NORMAL, 1.6, 46, AbilityId.RECKLESS, AbilityId.GUTS, AbilityId.DEFIANT, 520, 93, 90, 101, 60, 81, 95, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PERRSERKER, 8, false, false, false, "Viking Pokémon", PokemonType.STEEL, null, 0.8, 28, AbilityId.BATTLE_ARMOR, AbilityId.TOUGH_CLAWS, AbilityId.STEELY_SPIRIT, 440, 70, 110, 100, 50, 60, 50, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CURSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 1, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.PERISH_BODY, 510, 60, 95, 50, 145, 130, 30, 30, 50, 179, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.SIRFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 117, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.SCRAPPY, 507, 62, 135, 95, 68, 82, 65, 45, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MR_RIME, 8, false, false, false, "Comedian Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.5, 58.2, AbilityId.TANGLED_FEET, AbilityId.SCREEN_CLEANER, AbilityId.ICE_BODY, 520, 80, 85, 75, 110, 100, 70, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RUNERIGUS, 8, false, false, false, "Grudge Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1.6, 66.6, AbilityId.WANDERING_SPIRIT, AbilityId.NONE, AbilityId.NONE, 483, 58, 95, 145, 50, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.MILCERY, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.2, 0.3, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 270, 45, 40, 40, 50, 61, 34, 200, 50, 54, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.ALCREMIE, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, GrowthRate.MEDIUM_FAST, 0, false, true, - new PokemonForm("Vanilla Cream", "vanilla-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, "", true), - new PokemonForm("Ruby Cream", "ruby-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Matcha Cream", "matcha-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Mint Cream", "mint-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Lemon Cream", "lemon-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Salted Cream", "salted-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Ruby Swirl", "ruby-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Caramel Swirl", "caramel-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Rainbow Swirl", "rainbow-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FAIRY, null, 30, 999.9, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.MISTY_SURGE, 595, 105, 70, 85, 130, 141, 64, 100, 50, 173), - ), - new PokemonSpecies(SpeciesId.FALINKS, 8, false, false, false, "Formation Pokémon", PokemonType.FIGHTING, null, 3, 62, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", PokemonType.ELECTRIC, null, 0.3, 1, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SNOM, 8, false, false, false, "Worm Pokémon", PokemonType.ICE, PokemonType.BUG, 0.3, 3.8, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.ICE_SCALES, 185, 30, 25, 35, 45, 30, 20, 190, 50, 37, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FROSMOTH, 8, false, false, false, "Frost Moth Pokémon", PokemonType.ICE, PokemonType.BUG, 1.3, 42, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.ICE_SCALES, 475, 70, 65, 60, 125, 90, 65, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.STONJOURNER, 8, false, false, false, "Big Rock Pokémon", PokemonType.ROCK, null, 2.5, 520, AbilityId.POWER_SPOT, AbilityId.NONE, AbilityId.NONE, 470, 100, 125, 135, 20, 20, 70, 60, 50, 165, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.EISCUE, 8, false, false, false, "Penguin Pokémon", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, GrowthRate.SLOW, 50, false, false, - new PokemonForm("Ice Face", "", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, false, null, true), - new PokemonForm("No Ice", "no-ice", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 70, 65, 50, 130, 60, 50, 165), - ), - new PokemonSpecies(SpeciesId.INDEEDEE, 8, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, GrowthRate.FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, false, "", true), - new PokemonForm("Female", "female", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.OWN_TEMPO, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 70, 55, 65, 95, 105, 85, 30, 140, 166, false, null, true), - ), - new PokemonSpecies(SpeciesId.MORPEKO, 8, false, false, false, "Two-Sided Pokémon", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Full Belly Mode", "full-belly", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, false, "", true), - new PokemonForm("Hangry Mode", "hangry", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153), - ), - new PokemonSpecies(SpeciesId.CUFANT, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 1.2, 100, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 330, 72, 80, 49, 40, 49, 40, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.COPPERAJAH, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 3, 650, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, null, 3, 650, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.GROUND, 23, 999.9, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.MOLD_BREAKER, 600, 177, 155, 79, 90, 79, 20, 90, 50, 175), - ), - new PokemonSpecies(SpeciesId.DRACOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 1.8, 190, AbilityId.VOLT_ABSORB, AbilityId.HUSTLE, AbilityId.SAND_RUSH, 505, 90, 100, 90, 80, 70, 75, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ARCTOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.ICE, 2.3, 150, AbilityId.VOLT_ABSORB, AbilityId.STATIC, AbilityId.SLUSH_RUSH, 505, 90, 100, 90, 90, 80, 55, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.DRACOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.DRAGON, 2.3, 215, AbilityId.WATER_ABSORB, AbilityId.STRONG_JAW, AbilityId.SAND_RUSH, 505, 90, 90, 100, 70, 80, 75, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ARCTOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.ICE, 2, 175, AbilityId.WATER_ABSORB, AbilityId.ICE_BODY, AbilityId.SLUSH_RUSH, 505, 90, 90, 100, 80, 90, 55, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.DURALUDON, 8, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, AbilityId.LIGHT_METAL, AbilityId.HEAVY_METAL, AbilityId.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, AbilityId.LIGHT_METAL, AbilityId.HEAVY_METAL, AbilityId.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.DRAGON, 43, 999.9, AbilityId.LIGHTNING_ROD, AbilityId.LIGHTNING_ROD, AbilityId.LIGHTNING_ROD, 635, 100, 110, 120, 175, 60, 70, 45, 50, 187), - ), - new PokemonSpecies(SpeciesId.DREEPY, 8, false, false, false, "Lingering Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 0.5, 2, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 270, 28, 60, 30, 40, 30, 82, 45, 50, 54, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.DRAKLOAK, 8, false, false, false, "Caretaker Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 1.4, 11, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 410, 68, 80, 50, 60, 50, 102, 45, 50, 144, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.DRAGAPULT, 8, false, false, false, "Stealth Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 3, 50, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 600, 88, 120, 75, 100, 75, 142, 45, 50, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.ZACIAN, 8, false, true, false, "Warrior Pokémon", PokemonType.FAIRY, null, 2.8, 110, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FAIRY, null, 2.8, 110, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), - new PokemonForm("Crowned", "crowned", PokemonType.FAIRY, PokemonType.STEEL, 2.8, 355, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 700, 92, 150, 115, 80, 115, 148, 10, 0, 360), - ), - new PokemonSpecies(SpeciesId.ZAMAZENTA, 8, false, true, false, "Warrior Pokémon", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), - new PokemonForm("Crowned", "crowned", PokemonType.FIGHTING, PokemonType.STEEL, 2.9, 785, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 360), - ), - new PokemonSpecies(SpeciesId.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, false, null, true), - new PokemonForm("E-Max", "eternamax", PokemonType.POISON, PokemonType.DRAGON, 100, 999.9, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 1125, 255, 115, 250, 125, 250, 130, 255, 0, 345), - ), - new PokemonSpecies(SpeciesId.KUBFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, null, 0.6, 12, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.NONE, 385, 60, 90, 60, 53, 50, 72, 3, 50, 77, GrowthRate.SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.URSHIFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true, - new PokemonForm("Single Strike Style", "single-strike", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, "", true), - new PokemonForm("Rapid Strike Style", "rapid-strike", PokemonType.FIGHTING, PokemonType.WATER, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, null, true), - new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, PokemonType.FIGHTING, PokemonType.DARK, 29, 999.9, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), - new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, PokemonType.FIGHTING, PokemonType.WATER, 26, 999.9, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), - ), - new PokemonSpecies(SpeciesId.ZARUDE, 8, false, false, true, "Rogue Monkey Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), - new PokemonForm("Dada", "dada", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), - ), - new PokemonSpecies(SpeciesId.REGIELEKI, 8, true, false, false, "Electron Pokémon", PokemonType.ELECTRIC, null, 1.2, 145, AbilityId.TRANSISTOR, AbilityId.NONE, AbilityId.NONE, 580, 80, 100, 50, 100, 50, 200, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.REGIDRAGO, 8, true, false, false, "Dragon Orb Pokémon", PokemonType.DRAGON, null, 2.1, 200, AbilityId.DRAGONS_MAW, AbilityId.NONE, AbilityId.NONE, 580, 200, 100, 50, 100, 50, 80, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.GLASTRIER, 8, true, false, false, "Wild Horse Pokémon", PokemonType.ICE, null, 2.2, 800, AbilityId.CHILLING_NEIGH, AbilityId.NONE, AbilityId.NONE, 580, 100, 145, 130, 65, 110, 30, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SPECTRIER, 8, true, false, false, "Swift Horse Pokémon", PokemonType.GHOST, null, 2, 44.5, AbilityId.GRIM_NEIGH, AbilityId.NONE, AbilityId.NONE, 580, 100, 65, 60, 145, 80, 130, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.CALYREX, 8, false, true, false, "King Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, AbilityId.UNNERVE, AbilityId.NONE, AbilityId.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, AbilityId.UNNERVE, AbilityId.NONE, AbilityId.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, false, null, true), - new PokemonForm("Ice", "ice", PokemonType.PSYCHIC, PokemonType.ICE, 2.4, 809.1, AbilityId.AS_ONE_GLASTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 340), - new PokemonForm("Shadow", "shadow", PokemonType.PSYCHIC, PokemonType.GHOST, 2.4, 53.6, AbilityId.AS_ONE_SPECTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 340), - ), - new PokemonSpecies(SpeciesId.WYRDEER, 8, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.8, 95.1, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 525, 103, 105, 72, 105, 75, 65, 45, 50, 263, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.KLEAVOR, 8, false, false, false, "Axe Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.8, 89, AbilityId.SWARM, AbilityId.SHEER_FORCE, AbilityId.SHARPNESS, 500, 70, 135, 95, 45, 70, 85, 15, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.URSALUNA, 8, false, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.4, 290, AbilityId.GUTS, AbilityId.BULLETPROOF, AbilityId.UNNERVE, 550, 130, 140, 105, 45, 80, 50, 20, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BASCULEGION, 8, false, false, false, "Big Fish Pokémon", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 45, 50, 265, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 45, 50, 265, false, "", true), - new PokemonForm("Female", "female", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 92, 65, 100, 75, 78, 45, 50, 265, false, null, true), - ), - new PokemonSpecies(SpeciesId.SNEASLER, 8, false, false, false, "Free Climb Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 1.3, 43, AbilityId.PRESSURE, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, 510, 80, 130, 60, 40, 80, 120, 20, 50, 102, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.OVERQWIL, 8, false, false, false, "Pin Cluster Pokémon", PokemonType.DARK, PokemonType.POISON, 2.5, 60.5, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 510, 85, 115, 95, 65, 65, 85, 45, 50, 179, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ENAMORUS, 8, true, false, false, "Love-Hate Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, GrowthRate.SLOW, 0, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 580, 74, 115, 110, 135, 100, 46, 3, 50, 116), - ), - new PokemonSpecies(SpeciesId.SPRIGATITO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.4, 4.1, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 310, 40, 61, 54, 45, 45, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.FLORAGATO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.9, 12.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 410, 61, 80, 63, 60, 63, 83, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.MEOWSCARADA, 9, false, false, false, "Magician Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.5, 31.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 530, 76, 110, 70, 81, 70, 123, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.FUECOCO, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 0.4, 9.8, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 310, 67, 45, 59, 63, 40, 36, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.CROCALOR, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 1, 30.7, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 411, 81, 55, 78, 90, 58, 49, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.SKELEDIRGE, 9, false, false, false, "Singer Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 326.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 530, 104, 75, 100, 110, 75, 66, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.QUAXLY, 9, false, false, false, "Duckling Pokémon", PokemonType.WATER, null, 0.5, 6.1, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 310, 55, 65, 45, 50, 45, 50, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.QUAXWELL, 9, false, false, false, "Practicing Pokémon", PokemonType.WATER, null, 1.2, 21.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 410, 70, 85, 65, 65, 60, 65, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.QUAQUAVAL, 9, false, false, false, "Dancer Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.8, 61.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 530, 85, 120, 80, 85, 75, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.LECHONK, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 0.5, 10.2, AbilityId.AROMA_VEIL, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 254, 54, 45, 40, 35, 45, 35, 255, 50, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.OINKOLOGNE, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 1, 120, AbilityId.LINGERING_AROMA, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.NORMAL, null, 1, 120, AbilityId.LINGERING_AROMA, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, false, "", true), - new PokemonForm("Female", "female", PokemonType.NORMAL, null, 1, 120, AbilityId.AROMA_VEIL, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 115, 90, 70, 59, 90, 65, 100, 50, 171, false, null, true), - ), - new PokemonSpecies(SpeciesId.TAROUNTULA, 9, false, false, false, "String Ball Pokémon", PokemonType.BUG, null, 0.3, 4, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.STAKEOUT, 210, 35, 41, 45, 29, 40, 20, 255, 50, 42, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.SPIDOPS, 9, false, false, false, "Trap Pokémon", PokemonType.BUG, null, 1, 16.5, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.STAKEOUT, 404, 60, 79, 92, 52, 86, 35, 120, 50, 141, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.NYMBLE, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, null, 0.2, 1, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 210, 33, 46, 40, 21, 25, 45, 190, 20, 42, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.LOKIX, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, PokemonType.DARK, 1, 17.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 450, 71, 102, 78, 52, 55, 92, 30, 0, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PAWMI, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2.5, AbilityId.STATIC, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 240, 45, 50, 20, 40, 25, 60, 190, 50, 48, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PAWMO, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.4, 6.5, AbilityId.VOLT_ABSORB, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 350, 60, 75, 40, 50, 40, 85, 80, 50, 123, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.PAWMOT, 9, false, false, false, "Hands-On Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.9, 41, AbilityId.VOLT_ABSORB, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 490, 70, 115, 70, 70, 60, 105, 45, 50, 245, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TANDEMAUS, 9, false, false, false, "Couple Pokémon", PokemonType.NORMAL, null, 0.3, 1.8, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.OWN_TEMPO, 305, 50, 50, 45, 40, 45, 75, 150, 50, 61, GrowthRate.FAST, null, false), - new PokemonSpecies(SpeciesId.MAUSHOLD, 9, false, false, false, "Family Pokémon", PokemonType.NORMAL, null, 0.3, 2.3, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165, GrowthRate.FAST, null, false, false, - new PokemonForm("Family of Four", "four", PokemonType.NORMAL, null, 0.3, 2.8, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165), - new PokemonForm("Family of Three", "three", PokemonType.NORMAL, null, 0.3, 2.3, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165), - ), - new PokemonSpecies(SpeciesId.FIDOUGH, 9, false, false, false, "Puppy Pokémon", PokemonType.FAIRY, null, 0.3, 10.9, AbilityId.OWN_TEMPO, AbilityId.NONE, AbilityId.KLUTZ, 312, 37, 55, 70, 30, 55, 65, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.DACHSBUN, 9, false, false, false, "Dog Pokémon", PokemonType.FAIRY, null, 0.5, 14.9, AbilityId.WELL_BAKED_BODY, AbilityId.NONE, AbilityId.AROMA_VEIL, 477, 57, 80, 115, 50, 80, 95, 90, 50, 167, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SMOLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.3, 6.5, AbilityId.EARLY_BIRD, AbilityId.NONE, AbilityId.HARVEST, 260, 41, 35, 45, 58, 51, 30, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.DOLLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.6, 11.9, AbilityId.EARLY_BIRD, AbilityId.NONE, AbilityId.HARVEST, 354, 52, 53, 60, 78, 78, 33, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ARBOLIVA, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 1.4, 48.2, AbilityId.SEED_SOWER, AbilityId.NONE, AbilityId.HARVEST, 510, 78, 69, 90, 125, 109, 39, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SQUAWKABILLY, 9, false, false, false, "Parrot Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, GrowthRate.ERRATIC, 50, false, false, - new PokemonForm("Green Plumage", "green-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - new PokemonForm("Blue Plumage", "blue-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - new PokemonForm("Yellow Plumage", "yellow-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - new PokemonForm("White Plumage", "white-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - ), - new PokemonSpecies(SpeciesId.NACLI, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.4, 16, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 280, 55, 55, 75, 35, 35, 25, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.NACLSTACK, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.6, 105, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 355, 60, 60, 100, 35, 65, 35, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GARGANACL, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 2.3, 240, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 500, 100, 100, 130, 45, 90, 35, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CHARCADET, 9, false, false, false, "Fire Child Pokémon", PokemonType.FIRE, null, 0.6, 10.5, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.FLAME_BODY, 255, 40, 50, 40, 50, 40, 35, 90, 50, 51, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.ARMAROUGE, 9, false, false, false, "Fire Warrior Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 85, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.WEAK_ARMOR, 525, 85, 60, 100, 125, 80, 75, 25, 20, 263, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.CERULEDGE, 9, false, false, false, "Fire Blades Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 62, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.WEAK_ARMOR, 525, 75, 125, 80, 60, 100, 85, 25, 20, 263, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.TADBULB, 9, false, false, false, "EleTadpole Pokémon", PokemonType.ELECTRIC, null, 0.3, 0.4, AbilityId.OWN_TEMPO, AbilityId.STATIC, AbilityId.DAMP, 272, 61, 31, 41, 59, 35, 45, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BELLIBOLT, 9, false, false, false, "EleFrog Pokémon", PokemonType.ELECTRIC, null, 1.2, 113, AbilityId.ELECTROMORPHOSIS, AbilityId.STATIC, AbilityId.DAMP, 495, 109, 64, 91, 103, 83, 45, 50, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WATTREL, 9, false, false, false, "Storm Petrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 3.6, AbilityId.WIND_POWER, AbilityId.VOLT_ABSORB, AbilityId.COMPETITIVE, 280, 40, 40, 35, 55, 40, 70, 180, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.KILOWATTREL, 9, false, false, false, "Frigatebird Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.4, 38.6, AbilityId.WIND_POWER, AbilityId.VOLT_ABSORB, AbilityId.COMPETITIVE, 490, 70, 70, 60, 105, 60, 125, 90, 50, 172, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.MASCHIFF, 9, false, false, false, "Rascal Pokémon", PokemonType.DARK, null, 0.5, 16, AbilityId.INTIMIDATE, AbilityId.RUN_AWAY, AbilityId.STAKEOUT, 340, 60, 78, 60, 40, 51, 51, 150, 50, 68, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.MABOSSTIFF, 9, false, false, false, "Boss Pokémon", PokemonType.DARK, null, 1.1, 61, AbilityId.INTIMIDATE, AbilityId.GUARD_DOG, AbilityId.STAKEOUT, 505, 80, 120, 90, 60, 70, 85, 75, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.SHROODLE, 9, false, false, false, "Toxic Mouse Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.2, 0.7, AbilityId.UNBURDEN, AbilityId.PICKPOCKET, AbilityId.PRANKSTER, 290, 40, 65, 35, 40, 35, 75, 190, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GRAFAIAI, 9, false, false, false, "Toxic Monkey Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.7, 27.2, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, AbilityId.PRANKSTER, 485, 63, 95, 65, 80, 72, 110, 90, 50, 170, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.BRAMBLIN, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.6, 0.6, AbilityId.WIND_RIDER, AbilityId.NONE, AbilityId.INFILTRATOR, 275, 40, 65, 30, 45, 35, 60, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BRAMBLEGHAST, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.2, 6, AbilityId.WIND_RIDER, AbilityId.NONE, AbilityId.INFILTRATOR, 480, 55, 115, 70, 80, 70, 90, 45, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.TOEDSCOOL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 0.9, 33, AbilityId.MYCELIUM_MIGHT, AbilityId.NONE, AbilityId.NONE, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.TOEDSCRUEL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 1.9, 58, AbilityId.MYCELIUM_MIGHT, AbilityId.NONE, AbilityId.NONE, 515, 80, 70, 65, 80, 120, 100, 90, 50, 180, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.KLAWF, 9, false, false, false, "Ambush Pokémon", PokemonType.ROCK, null, 1.3, 79, AbilityId.ANGER_SHELL, AbilityId.SHELL_ARMOR, AbilityId.REGENERATOR, 450, 70, 100, 115, 35, 55, 75, 120, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CAPSAKID, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, null, 0.3, 3, AbilityId.CHLOROPHYLL, AbilityId.INSOMNIA, AbilityId.KLUTZ, 304, 50, 62, 40, 62, 40, 50, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.SCOVILLAIN, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, PokemonType.FIRE, 0.9, 15, AbilityId.CHLOROPHYLL, AbilityId.INSOMNIA, AbilityId.MOODY, 486, 65, 108, 65, 108, 65, 75, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.RELLOR, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, null, 0.2, 1, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.SHED_SKIN, 270, 41, 50, 60, 31, 58, 30, 190, 50, 54, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.RABSCA, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.3, 3.5, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.TELEPATHY, 470, 75, 50, 85, 115, 100, 45, 45, 50, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.FLITTLE, 9, false, false, false, "Frill Pokémon", PokemonType.PSYCHIC, null, 0.2, 1.5, AbilityId.ANTICIPATION, AbilityId.FRISK, AbilityId.SPEED_BOOST, 255, 30, 35, 30, 55, 30, 75, 120, 50, 51, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ESPATHRA, 9, false, false, false, "Ostrich Pokémon", PokemonType.PSYCHIC, null, 1.9, 90, AbilityId.OPPORTUNIST, AbilityId.FRISK, AbilityId.SPEED_BOOST, 481, 95, 60, 60, 101, 60, 105, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.TINKATINK, 9, false, false, false, "Metalsmith Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.4, 8.9, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 297, 50, 45, 45, 35, 64, 58, 190, 50, 59, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.TINKATUFF, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 59.1, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 380, 65, 55, 55, 45, 82, 78, 90, 50, 133, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.TINKATON, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 112.8, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 506, 85, 75, 77, 70, 105, 94, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(SpeciesId.WIGLETT, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 1.8, AbilityId.GOOEY, AbilityId.RATTLED, AbilityId.SAND_VEIL, 245, 10, 55, 25, 35, 25, 95, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.WUGTRIO, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 5.4, AbilityId.GOOEY, AbilityId.RATTLED, AbilityId.SAND_VEIL, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BOMBIRDIER, 9, false, false, false, "Item Drop Pokémon", PokemonType.FLYING, PokemonType.DARK, 1.5, 42.9, AbilityId.BIG_PECKS, AbilityId.KEEN_EYE, AbilityId.ROCKY_PAYLOAD, 485, 70, 103, 85, 60, 85, 82, 25, 50, 243, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.FINIZEN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, AbilityId.WATER_VEIL, AbilityId.NONE, AbilityId.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.PALAFIN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Zero Form", "zero", PokemonType.WATER, null, 1.3, 60.2, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), - new PokemonForm("Hero Form", "hero", PokemonType.WATER, null, 1.8, 97.4, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), - ), - new PokemonSpecies(SpeciesId.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1, 35, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, false, null, true), - new PokemonForm("Segin Starmobile", "segin-starmobile", PokemonType.STEEL, PokemonType.DARK, 1.8, 240, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.INTIMIDATE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Schedar Starmobile", "schedar-starmobile", PokemonType.STEEL, PokemonType.FIRE, 1.8, 240, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.SPEED_BOOST, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Navi Starmobile", "navi-starmobile", PokemonType.STEEL, PokemonType.POISON, 1.8, 240, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.TOXIC_DEBRIS, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Ruchbah Starmobile", "ruchbah-starmobile", PokemonType.STEEL, PokemonType.FAIRY, 1.8, 240, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.MISTY_SURGE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Caph Starmobile", "caph-starmobile", PokemonType.STEEL, PokemonType.FIGHTING, 1.8, 240, AbilityId.STAMINA, AbilityId.NONE, AbilityId.STAMINA, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - ), - new PokemonSpecies(SpeciesId.CYCLIZAR, 9, false, false, false, "Mount Pokémon", PokemonType.DRAGON, PokemonType.NORMAL, 1.6, 63, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.REGENERATOR, 501, 70, 95, 65, 85, 65, 121, 190, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ORTHWORM, 9, false, false, false, "Earthworm Pokémon", PokemonType.STEEL, null, 2.5, 310, AbilityId.EARTH_EATER, AbilityId.NONE, AbilityId.SAND_VEIL, 480, 70, 85, 145, 60, 55, 65, 25, 50, 240, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.GLIMMET, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 0.7, 8, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.CORROSION, 350, 48, 35, 42, 105, 60, 60, 70, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GLIMMORA, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.5, 45, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.CORROSION, 525, 83, 55, 90, 130, 81, 86, 25, 50, 184, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GREAVARD, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 0.6, 35, AbilityId.PICKUP, AbilityId.NONE, AbilityId.FLUFFY, 290, 50, 61, 60, 30, 55, 34, 120, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.HOUNDSTONE, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 2, 15, AbilityId.SAND_RUSH, AbilityId.NONE, AbilityId.FLUFFY, 488, 72, 101, 100, 50, 97, 68, 60, 50, 171, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.FLAMIGO, 9, false, false, false, "Synchronize Pokémon", PokemonType.FLYING, PokemonType.FIGHTING, 1.6, 37, AbilityId.SCRAPPY, AbilityId.TANGLED_FEET, AbilityId.COSTAR, 500, 82, 115, 74, 75, 64, 90, 100, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CETODDLE, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 1.2, 45, AbilityId.THICK_FAT, AbilityId.SNOW_CLOAK, AbilityId.SHEER_FORCE, 334, 108, 68, 45, 30, 40, 43, 150, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.CETITAN, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 4.5, 700, AbilityId.THICK_FAT, AbilityId.SLUSH_RUSH, AbilityId.SHEER_FORCE, 521, 170, 113, 65, 45, 55, 73, 50, 50, 182, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.VELUZA, 9, false, false, false, "Jettison Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2.5, 90, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHARPNESS, 478, 90, 102, 73, 78, 65, 70, 100, 50, 167, GrowthRate.FAST, 50, false), - new PokemonSpecies(SpeciesId.DONDOZO, 9, false, false, false, "Big Catfish Pokémon", PokemonType.WATER, null, 12, 220, AbilityId.UNAWARE, AbilityId.OBLIVIOUS, AbilityId.WATER_VEIL, 530, 150, 100, 115, 65, 65, 35, 25, 50, 265, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.TATSUGIRI, 9, false, false, false, "Mimicry Pokémon", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, GrowthRate.MEDIUM_SLOW, 50, false, false, - new PokemonForm("Curly Form", "curly", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), - new PokemonForm("Droopy Form", "droopy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), - new PokemonForm("Stretchy Form", "stretchy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), - ), - new PokemonSpecies(SpeciesId.ANNIHILAPE, 9, false, false, false, "Rage Monkey Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 1.2, 56, AbilityId.VITAL_SPIRIT, AbilityId.INNER_FOCUS, AbilityId.DEFIANT, 535, 110, 115, 80, 50, 90, 90, 45, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.CLODSIRE, 9, false, false, false, "Spiny Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.8, 223, AbilityId.POISON_POINT, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 430, 130, 75, 60, 45, 100, 20, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.FARIGIRAF, 9, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 3.2, 160, AbilityId.CUD_CHEW, AbilityId.ARMOR_TAIL, AbilityId.SAP_SIPPER, 520, 120, 90, 70, 110, 70, 60, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.DUDUNSPARCE, 9, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 3.6, 39.2, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Two-Segment Form", "two-segment", PokemonType.NORMAL, null, 3.6, 39.2, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, false, ""), - new PokemonForm("Three-Segment Form", "three-segment", PokemonType.NORMAL, null, 4.5, 47.4, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182), - ), - new PokemonSpecies(SpeciesId.KINGAMBIT, 9, false, false, false, "Big Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 2, 120, AbilityId.DEFIANT, AbilityId.SUPREME_OVERLORD, AbilityId.PRESSURE, 550, 100, 135, 120, 60, 85, 50, 25, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GREAT_TUSK, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.FIGHTING, 2.2, 320, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 115, 131, 131, 53, 53, 87, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SCREAM_TAIL, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.PSYCHIC, 1.2, 8, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 115, 65, 99, 65, 115, 111, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.BRUTE_BONNET, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.2, 21, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 111, 127, 99, 79, 99, 55, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.FLUTTER_MANE, 9, false, false, false, "Paradox Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 1.4, 4, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 55, 55, 55, 135, 135, 135, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SLITHER_WING, 9, false, false, false, "Paradox Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 3.2, 92, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 85, 135, 79, 85, 105, 81, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SANDY_SHOCKS, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.GROUND, 2.3, 60, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 85, 81, 97, 121, 85, 101, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_TREADS, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.9, 240, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 90, 112, 120, 72, 70, 106, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_BUNDLE, 9, false, false, false, "Paradox Pokémon", PokemonType.ICE, PokemonType.WATER, 0.6, 11, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 56, 80, 114, 124, 60, 136, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_HANDS, 9, false, false, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.ELECTRIC, 1.8, 380.7, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 154, 140, 108, 50, 68, 50, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_JUGULIS, 9, false, false, false, "Paradox Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.3, 111, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 94, 80, 86, 122, 80, 108, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_MOTH, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.POISON, 1.2, 36, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 80, 70, 60, 140, 110, 110, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_THORNS, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.6, 303, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 100, 134, 110, 70, 84, 72, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.FRIGIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.5, 17, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 320, 65, 75, 45, 35, 45, 55, 45, 50, 64, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.ARCTIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.8, 30, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 423, 90, 95, 66, 45, 65, 62, 25, 50, 148, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.BAXCALIBUR, 9, false, false, false, "Ice Dragon Pokémon", PokemonType.DRAGON, PokemonType.ICE, 2.1, 210, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 600, 115, 145, 92, 75, 86, 87, 10, 50, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.GIMMIGHOUL, 9, false, false, false, "Coin Chest Pokémon", PokemonType.GHOST, null, 0.3, 5, AbilityId.RATTLED, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, GrowthRate.SLOW, null, false, false, - new PokemonForm("Chest Form", "chest", PokemonType.GHOST, null, 0.3, 5, AbilityId.RATTLED, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, false, "", true), - new PokemonForm("Roaming Form", "roaming", PokemonType.GHOST, null, 0.1, 1, AbilityId.RUN_AWAY, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 25, 75, 45, 80, 45, 50, 60, false, null, true), - ), - new PokemonSpecies(SpeciesId.GHOLDENGO, 9, false, false, false, "Coin Entity Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.2, 30, AbilityId.GOOD_AS_GOLD, AbilityId.NONE, AbilityId.NONE, 550, 87, 60, 95, 133, 91, 84, 45, 50, 275, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.WO_CHIEN, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.5, 74.2, AbilityId.TABLETS_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 85, 85, 100, 95, 135, 70, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.CHIEN_PAO, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.ICE, 1.9, 152.2, AbilityId.SWORD_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 80, 120, 80, 90, 65, 135, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.TING_LU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GROUND, 2.7, 699.7, AbilityId.VESSEL_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 155, 110, 125, 55, 80, 45, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.CHI_YU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.4, 4.9, AbilityId.BEADS_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 55, 80, 80, 135, 120, 100, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ROARING_MOON, 9, false, false, false, "Paradox Pokémon", PokemonType.DRAGON, PokemonType.DARK, 2, 380, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 105, 139, 71, 55, 101, 119, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_VALIANT, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.FIGHTING, 1.4, 35, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 74, 130, 90, 120, 60, 116, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.KORAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, AbilityId.ORICHALCUM_PULSE, AbilityId.NONE, AbilityId.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Apex Build", "apex-build", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, AbilityId.ORICHALCUM_PULSE, AbilityId.NONE, AbilityId.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), - ), - new PokemonSpecies(SpeciesId.MIRAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, AbilityId.HADRON_ENGINE, AbilityId.NONE, AbilityId.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Ultimate Mode", "ultimate-mode", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, AbilityId.HADRON_ENGINE, AbilityId.NONE, AbilityId.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), - ), - new PokemonSpecies(SpeciesId.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", PokemonType.WATER, PokemonType.DRAGON, 3.5, 280, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 99, 83, 91, 125, 83, 109, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Gouging Fire and Raging Bolt - new PokemonSpecies(SpeciesId.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 1.5, 125, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 130, 88, 70, 108, 104, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Iron Boulder and Iron Crown - new PokemonSpecies(SpeciesId.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 4.4, AbilityId.SUPERSWEET_SYRUP, AbilityId.GLUTTONY, AbilityId.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false, - new PokemonForm("Counterfeit Form", "counterfeit", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), - new PokemonForm("Artisan Form", "artisan", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "counterfeit", true), - ), - new PokemonSpecies(SpeciesId.SINISTCHA, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, GrowthRate.SLOW, null, false, false, - new PokemonForm("Unremarkable Form", "unremarkable", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, false, null, true), - new PokemonForm("Masterpiece Form", "masterpiece", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, false, "unremarkable", true), - ), - new PokemonSpecies(SpeciesId.OKIDOGI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.8, 92.2, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.GUARD_DOG, 555, 88, 128, 115, 58, 86, 80, 3, 0, 276, GrowthRate.SLOW, 100, false), - new PokemonSpecies(SpeciesId.MUNKIDORI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1, 12.2, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.FRISK, 555, 88, 75, 66, 130, 90, 106, 3, 0, 276, GrowthRate.SLOW, 100, false), - new PokemonSpecies(SpeciesId.FEZANDIPITI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FAIRY, 1.4, 30.1, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.TECHNICIAN, 555, 88, 91, 82, 70, 125, 99, 3, 0, 276, GrowthRate.SLOW, 100, false), - new PokemonSpecies(SpeciesId.OGERPON, 9, true, false, false, "Mask Pokémon", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, GrowthRate.SLOW, 0, false, false, - new PokemonForm("Teal Mask", "teal-mask", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, false, null, true), - new PokemonForm("Wellspring Mask", "wellspring-mask", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Hearthflame Mask", "hearthflame-mask", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Cornerstone Mask", "cornerstone-mask", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Teal Mask Terastallized", "teal-mask-tera", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.EMBODY_ASPECT_TEAL, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Wellspring Mask Terastallized", "wellspring-mask-tera", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, AbilityId.EMBODY_ASPECT_WELLSPRING, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Hearthflame Mask Terastallized", "hearthflame-mask-tera", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, AbilityId.EMBODY_ASPECT_HEARTHFLAME, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Cornerstone Mask Terastallized", "cornerstone-mask-tera", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, AbilityId.EMBODY_ASPECT_CORNERSTONE, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - ), - new PokemonSpecies(SpeciesId.ARCHALUDON, 9, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 2, 60, AbilityId.STAMINA, AbilityId.STURDY, AbilityId.STALWART, 600, 90, 105, 130, 125, 65, 85, 10, 50, 300, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HYDRAPPLE, 9, false, false, false, "Apple Hydra Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 1.8, 93, AbilityId.SUPERSWEET_SYRUP, AbilityId.REGENERATOR, AbilityId.STICKY_HOLD, 540, 106, 80, 110, 120, 80, 44, 10, 50, 270, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(SpeciesId.GOUGING_FIRE, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 3.5, 590, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 105, 115, 121, 65, 93, 91, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.RAGING_BOLT, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 5.2, 480, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 125, 73, 91, 137, 89, 75, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_BOULDER, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.5, 162.5, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 120, 80, 68, 108, 124, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.IRON_CROWN, 9, false, false, false, "Paradox Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 156, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 72, 100, 122, 108, 98, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.TERAPAGOS, 9, false, true, false, "Tera Pokémon", PokemonType.NORMAL, null, 0.2, 6.5, AbilityId.TERA_SHIFT, AbilityId.NONE, AbilityId.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, GrowthRate.SLOW, 50, false, false, - new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.2, 6.5, AbilityId.TERA_SHIFT, AbilityId.NONE, AbilityId.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, false, null, true), - new PokemonForm("Terastal Form", "terastal", PokemonType.NORMAL, null, 0.3, 16, AbilityId.TERA_SHELL, AbilityId.NONE, AbilityId.NONE, 600, 95, 95, 110, 105, 110, 85, 5, 50, 120), - new PokemonForm("Stellar Form", "stellar", PokemonType.NORMAL, null, 1.7, 77, AbilityId.TERAFORM_ZERO, AbilityId.NONE, AbilityId.NONE, 700, 160, 105, 110, 130, 110, 85, 5, 50, 140), - ), - new PokemonSpecies(SpeciesId.PECHARUNT, 9, false, false, true, "Subjugation Pokémon", PokemonType.POISON, PokemonType.GHOST, 0.3, 0.3, AbilityId.POISON_PUPPETEER, AbilityId.NONE, AbilityId.NONE, 600, 88, 88, 160, 88, 88, 88, 3, 0, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.ALOLA_RATTATA, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.3, 3.8, AbilityId.GLUTTONY, AbilityId.HUSTLE, AbilityId.THICK_FAT, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_RATICATE, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.7, 25.5, AbilityId.GLUTTONY, AbilityId.HUSTLE, AbilityId.THICK_FAT, 413, 75, 71, 70, 40, 80, 77, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_RAICHU, 7, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.PSYCHIC, 0.7, 21, AbilityId.SURGE_SURFER, AbilityId.NONE, AbilityId.NONE, 485, 60, 85, 50, 95, 85, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_SANDSHREW, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 0.7, 40, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SLUSH_RUSH, 300, 50, 75, 90, 10, 35, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_SANDSLASH, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 1.2, 55, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SLUSH_RUSH, 450, 75, 100, 120, 25, 65, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_VULPIX, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, null, 0.6, 9.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SNOW_WARNING, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(SpeciesId.ALOLA_NINETALES, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, PokemonType.FAIRY, 1.1, 19.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SNOW_WARNING, 505, 73, 67, 75, 81, 100, 109, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(SpeciesId.ALOLA_DIGLETT, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.2, 1, AbilityId.SAND_VEIL, AbilityId.TANGLING_HAIR, AbilityId.SAND_FORCE, 265, 10, 55, 30, 35, 45, 90, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_DUGTRIO, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 66.6, AbilityId.SAND_VEIL, AbilityId.TANGLING_HAIR, AbilityId.SAND_FORCE, 425, 35, 100, 60, 50, 70, 110, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_MEOWTH, 7, false, false, false, "Scratch Cat Pokémon", PokemonType.DARK, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.RATTLED, 290, 40, 35, 35, 50, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_PERSIAN, 7, false, false, false, "Classy Cat Pokémon", PokemonType.DARK, null, 1.1, 33, AbilityId.FUR_COAT, AbilityId.TECHNICIAN, AbilityId.RATTLED, 440, 65, 60, 60, 75, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_GEODUDE, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 0.4, 20.3, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_GRAVELER, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1, 110, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_GOLEM, 7, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.7, 316, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 495, 80, 120, 130, 55, 65, 45, 45, 70, 223, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_GRIMER, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 0.7, 42, AbilityId.POISON_TOUCH, AbilityId.GLUTTONY, AbilityId.POWER_OF_ALCHEMY, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_MUK, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 52, AbilityId.POISON_TOUCH, AbilityId.GLUTTONY, AbilityId.POWER_OF_ALCHEMY, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_EXEGGUTOR, 7, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 10.9, 415.6, AbilityId.FRISK, AbilityId.NONE, AbilityId.HARVEST, 530, 95, 105, 85, 125, 75, 45, 45, 50, 186, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.ALOLA_MAROWAK, 7, false, false, false, "Bone Keeper Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1, 34, AbilityId.CURSED_BODY, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.ETERNAL_FLOETTE, 6, true, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 551, 74, 65, 67, 125, 128, 92, 120, 70, 243, GrowthRate.MEDIUM_FAST, 0, false), //Marked as Sub-Legend, for casing purposes - new PokemonSpecies(SpeciesId.GALAR_MEOWTH, 8, false, false, false, "Scratch Cat Pokémon", PokemonType.STEEL, null, 0.4, 7.5, AbilityId.PICKUP, AbilityId.TOUGH_CLAWS, AbilityId.UNNERVE, 290, 50, 65, 55, 40, 40, 40, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_PONYTA, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, null, 0.8, 24, AbilityId.RUN_AWAY, AbilityId.PASTEL_VEIL, AbilityId.ANTICIPATION, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_RAPIDASH, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.7, 80, AbilityId.RUN_AWAY, AbilityId.PASTEL_VEIL, AbilityId.ANTICIPATION, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_SLOWPOKE, 8, false, false, false, "Dopey Pokémon", PokemonType.PSYCHIC, null, 1.2, 36, AbilityId.GLUTTONY, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_SLOWBRO, 8, false, false, false, "Hermit Crab Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.6, 70.5, AbilityId.QUICK_DRAW, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 100, 95, 100, 70, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_FARFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 42, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.SCRAPPY, 377, 52, 95, 55, 58, 62, 55, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_WEEZING, 8, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, PokemonType.FAIRY, 3, 16, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.MISTY_SURGE, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_MR_MIME, 8, false, false, false, "Barrier Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 56.8, AbilityId.VITAL_SPIRIT, AbilityId.SCREEN_CLEANER, AbilityId.ICE_BODY, 460, 50, 65, 65, 90, 90, 100, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_ARTICUNO, 8, true, false, false, "Freeze Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 50.9, AbilityId.COMPETITIVE, AbilityId.NONE, AbilityId.NONE, 580, 90, 85, 85, 125, 100, 95, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.GALAR_ZAPDOS, 8, true, false, false, "Electric Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 1.6, 58.2, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 580, 90, 125, 90, 85, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.GALAR_MOLTRES, 8, true, false, false, "Flame Pokémon", PokemonType.DARK, PokemonType.FLYING, 2, 66, AbilityId.BERSERK, AbilityId.NONE, AbilityId.NONE, 580, 90, 85, 90, 100, 125, 90, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.GALAR_SLOWKING, 8, false, false, false, "Royal Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.8, 79.5, AbilityId.CURIOUS_MEDICINE, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 65, 80, 110, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_CORSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 0.6, 0.5, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 410, 60, 55, 100, 65, 100, 30, 60, 50, 144, GrowthRate.FAST, 25, false), - new PokemonSpecies(SpeciesId.GALAR_ZIGZAGOON, 8, false, false, false, "Tiny Raccoon Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.4, 17.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_LINOONE, 8, false, false, false, "Rushing Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.5, 32.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_DARUMAKA, 8, false, false, false, "Zen Charm Pokémon", PokemonType.ICE, null, 0.7, 40, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.GALAR_DARMANITAN, 8, false, false, false, "Blazing Pokémon", PokemonType.ICE, null, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Standard Mode", "", PokemonType.ICE, null, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), - new PokemonForm("Zen Mode", "zen", PokemonType.ICE, PokemonType.FIRE, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 540, 105, 160, 55, 30, 55, 135, 60, 50, 189), - ), - new PokemonSpecies(SpeciesId.GALAR_YAMASK, 8, false, false, false, "Spirit Pokémon", PokemonType.GROUND, PokemonType.GHOST, 0.5, 1.5, AbilityId.WANDERING_SPIRIT, AbilityId.NONE, AbilityId.NONE, 303, 38, 55, 85, 30, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.GALAR_STUNFISK, 8, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 20.5, AbilityId.MIMICRY, AbilityId.NONE, AbilityId.NONE, 471, 109, 81, 99, 66, 84, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HISUI_GROWLITHE, 8, false, false, false, "Puppy Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 22.7, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.ROCK_HEAD, 350, 60, 75, 45, 65, 50, 55, 190, 50, 70, GrowthRate.SLOW, 75, false), - new PokemonSpecies(SpeciesId.HISUI_ARCANINE, 8, false, false, false, "Legendary Pokémon", PokemonType.FIRE, PokemonType.ROCK, 2, 168, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.ROCK_HEAD, 555, 95, 115, 80, 95, 80, 90, 85, 50, 194, GrowthRate.SLOW, 75, false), - new PokemonSpecies(SpeciesId.HISUI_VOLTORB, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 0.5, 13, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 80, 66, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.HISUI_ELECTRODE, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 1.2, 81, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(SpeciesId.HISUI_TYPHLOSION, 8, false, false, false, "Volcano Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 69.8, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FRISK, 534, 73, 84, 78, 119, 85, 95, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.HISUI_QWILFISH, 8, false, false, false, "Balloon Pokémon", PokemonType.DARK, PokemonType.POISON, 0.5, 3.9, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HISUI_SNEASEL, 8, false, false, false, "Sharp Claw Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 0.9, 27, AbilityId.INNER_FOCUS, AbilityId.KEEN_EYE, AbilityId.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(SpeciesId.HISUI_SAMUROTT, 8, false, false, false, "Formidable Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 58.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHARPNESS, 528, 90, 108, 80, 100, 65, 85, 45, 80, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.HISUI_LILLIGANT, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 19.2, AbilityId.CHLOROPHYLL, AbilityId.HUSTLE, AbilityId.LEAF_GUARD, 480, 70, 105, 75, 50, 75, 105, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.HISUI_ZORUA, 8, false, false, false, "Tricky Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 0.7, 12.5, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 330, 35, 60, 40, 85, 40, 70, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.HISUI_ZOROARK, 8, false, false, false, "Illusion Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 1.6, 83, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 510, 55, 100, 60, 125, 60, 110, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.HISUI_BRAVIARY, 8, false, false, false, "Valiant Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 43.4, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.TINTED_LENS, 510, 110, 83, 70, 112, 70, 65, 60, 50, 179, GrowthRate.SLOW, 100, false), - new PokemonSpecies(SpeciesId.HISUI_SLIGGOO, 8, false, false, false, "Soft Tissue Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 0.7, 68.5, AbilityId.SAP_SIPPER, AbilityId.SHELL_ARMOR, AbilityId.GOOEY, 452, 58, 75, 83, 83, 113, 40, 45, 35, 158, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HISUI_GOODRA, 8, false, false, false, "Dragon Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.7, 334.1, AbilityId.SAP_SIPPER, AbilityId.SHELL_ARMOR, AbilityId.GOOEY, 600, 80, 100, 100, 110, 150, 60, 45, 35, 270, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.HISUI_AVALUGG, 8, false, false, false, "Iceberg Pokémon", PokemonType.ICE, PokemonType.ROCK, 1.4, 262.4, AbilityId.STRONG_JAW, AbilityId.ICE_BODY, AbilityId.STURDY, 514, 95, 127, 184, 34, 36, 38, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.HISUI_DECIDUEYE, 8, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 37, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SCRAPPY, 530, 88, 112, 80, 95, 95, 60, 45, 50, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(SpeciesId.PALDEA_TAUROS, 9, false, false, false, "Wild Bull Pokémon", PokemonType.FIGHTING, null, 1.4, 115, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, GrowthRate.SLOW, 100, false, false, - new PokemonForm("Combat Breed", "combat", PokemonType.FIGHTING, null, 1.4, 115, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, "", true), - new PokemonForm("Blaze Breed", "blaze", PokemonType.FIGHTING, PokemonType.FIRE, 1.4, 85, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), - new PokemonForm("Aqua Breed", "aqua", PokemonType.FIGHTING, PokemonType.WATER, 1.4, 110, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), - ), - new PokemonSpecies(SpeciesId.PALDEA_WOOPER, 9, false, false, false, "Water Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 0.4, 11, AbilityId.POISON_POINT, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BLOODMOON_URSALUNA, 9, true, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.7, 333, AbilityId.MINDS_EYE, AbilityId.NONE, AbilityId.NONE, 555, 113, 70, 120, 135, 65, 52, 75, 50, 278, GrowthRate.MEDIUM_FAST, 50, false), //Marked as Sub-Legend, for casing purposes - ); -} diff --git a/src/data/pokemon/pokemon-data.ts b/src/data/pokemon/pokemon-data.ts index 972d7627bcd..0bd6af0bb04 100644 --- a/src/data/pokemon/pokemon-data.ts +++ b/src/data/pokemon/pokemon-data.ts @@ -3,7 +3,7 @@ import { loadBattlerTag, SerializableBattlerTag } from "#data/battler-tags"; import { allSpecies } from "#data/data-lists"; import type { Gender } from "#data/gender"; import { PokemonMove } from "#data/moves/pokemon-move"; -import { getPokemonSpeciesForm, type PokemonSpeciesForm } from "#data/pokemon-species"; +import type { PokemonSpeciesForm } from "#data/pokemon-species"; import type { TypeDamageMultiplier } from "#data/type"; import type { AbilityId } from "#enums/ability-id"; import type { BerryType } from "#enums/berry-type"; @@ -16,6 +16,7 @@ import type { IllusionData } from "#types/illusion-data"; import type { TurnMove } from "#types/turn-move"; import type { CoerceNullPropertiesToUndefined } from "#types/type-helpers"; import { isNullOrUndefined } from "#utils/common"; +import { getPokemonSpeciesForm } from "#utils/pokemon-utils"; /** * The type that {@linkcode PokemonSpeciesForm} is converted to when an object containing it serializes it. @@ -161,6 +162,7 @@ export class PokemonSummonData { if (key === "speciesForm" || key === "fusionSpeciesForm") { this[key] = deserializePokemonSpeciesForm(value); + continue; } if (key === "illusion" && typeof value === "object") { @@ -181,6 +183,7 @@ export class PokemonSummonData { } } this[key] = illusionData as IllusionData; + continue; } if (key === "moveset") { @@ -250,7 +253,6 @@ export class PokemonTempSummonData { * Only currently used for positioning the battle cursor. */ turnCount = 1; - /** * The number of turns this pokemon has spent in the active position since the start of the wave * without switching out. diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 6b3fcf70f80..5739492f96e 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1244,12 +1244,58 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("Breeders") .setPartyTemplateFunc(() => getWavePartyTemplate( - trainerPartyTemplates.FOUR_WEAKER, - trainerPartyTemplates.FIVE_WEAKER, - trainerPartyTemplates.SIX_WEAKER, + trainerPartyTemplates.FOUR_WEAK, + trainerPartyTemplates.FIVE_WEAK, + trainerPartyTemplates.SIX_WEAK, ), ) - .setSpeciesFilter(s => s.baseTotal < 450), + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TYROGUE, + SpeciesId.SMOOCHUM, + SpeciesId.AZURILL, + SpeciesId.BUDEW, + SpeciesId.CHINGLING, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.MANTYKE, + SpeciesId.TOXEL, + ], + [TrainerPoolTier.UNCOMMON]: [ + SpeciesId.DITTO, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.WYNAUT, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.AUDINO, + ], + [TrainerPoolTier.RARE]: [ + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.GALAR_PONYTA, + ], + [TrainerPoolTier.SUPER_RARE]: [ + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRIMER, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + ], + }), [TrainerType.CLERK]: new TrainerConfig(++t) .setHasGenders("Clerk Female") .setHasDouble("Colleagues") diff --git a/src/data/trainers/trainer-party-template.ts b/src/data/trainers/trainer-party-template.ts index d4e7fe7a261..0ad3d36dcfa 100644 --- a/src/data/trainers/trainer-party-template.ts +++ b/src/data/trainers/trainer-party-template.ts @@ -144,6 +144,7 @@ export const trainerPartyTemplates = { FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), + SIX_WEAK: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK), SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), diff --git a/src/enums/ui-mode.ts b/src/enums/ui-mode.ts index dcf6bd2a238..bc93e747be2 100644 --- a/src/enums/ui-mode.ts +++ b/src/enums/ui-mode.ts @@ -43,5 +43,6 @@ export enum UiMode { TEST_DIALOGUE, AUTO_COMPLETE, ADMIN, - MYSTERY_ENCOUNTER + MYSTERY_ENCOUNTER, + CHANGE_PASSWORD_FORM, } diff --git a/src/field/arena.ts b/src/field/arena.ts index 484450cc5df..ed2f1df9b12 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -145,7 +145,7 @@ export class Arena { ? BiomePoolTier.BOSS_SUPER_RARE : BiomePoolTier.BOSS_ULTRA_RARE; console.log(BiomePoolTier[tier]); - while (!this.pokemonPool[tier].length) { + while (!this.pokemonPool[tier]?.length) { console.log(`Downgraded rarity tier from ${BiomePoolTier[tier]} to ${BiomePoolTier[tier - 1]}`); tier--; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7aecc0c8e75..d4f332d887c 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -25,7 +25,6 @@ import { AutotomizedTag, BattlerTag, CritBoostTag, - DragonCheerTag, EncoreTag, ExposedTag, GroundedTag, @@ -61,7 +60,7 @@ import { } from "#data/pokemon-data"; import type { SpeciesFormChange } from "#data/pokemon-forms"; import type { PokemonSpeciesForm } from "#data/pokemon-species"; -import { getFusedSpeciesName, getPokemonSpeciesForm, PokemonSpecies } from "#data/pokemon-species"; +import { PokemonSpecies } from "#data/pokemon-species"; import { getRandomStatus, getStatusEffectOverlapText, Status } from "#data/status-effect"; import { getTerrainBlockMessage, TerrainType } from "#data/terrain"; import type { TypeDamageMultiplier } from "#data/type"; @@ -169,7 +168,7 @@ import { toDmgValue, } from "#utils/common"; import { getEnumValues } from "#utils/enums"; -import { getPokemonSpecies } from "#utils/pokemon-utils"; +import { getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; import { argbFromRgba, QuantizerCelebi, rgbaFromArgb } from "@material/material-color-utilities"; import i18next from "i18next"; import Phaser from "phaser"; @@ -726,7 +725,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { /** * Load all assets needed for this Pokemon's use in battle - * @param ignoreOverride - Whether to ignore overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `true` + * @param ignoreOverride - Whether to ignore overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `true` * @param useIllusion - Whether to consider this pokemon's active illusion; default `false` * @returns A promise that resolves once all the corresponding assets have been loaded. */ @@ -1033,7 +1032,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { /** * Return this Pokemon's {@linkcode PokemonSpeciesForm | SpeciesForm}. - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * and overrides `useIllusion`. * @param useIllusion - Whether to consider this Pokemon's illusion if present; default `false`. * @returns This Pokemon's {@linkcode PokemonSpeciesForm}. @@ -1089,7 +1088,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { /** * Return the {@linkcode PokemonSpeciesForm | SpeciesForm} of this Pokemon's fusion counterpart. - * @param ignoreOverride - Whether to ignore species overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore species overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @param useIllusion - Whether to consider the species of this Pokemon's illusion; default `false` * @returns The {@linkcode PokemonSpeciesForm} of this Pokemon's fusion counterpart. */ @@ -1390,8 +1389,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { const critBoostTag = source.getTag(CritBoostTag); if (critBoostTag) { // Dragon cheer only gives +1 crit stage to non-dragon types - critStage.value += - critBoostTag instanceof DragonCheerTag && !critBoostTag.typesOnAdd.includes(PokemonType.DRAGON) ? 1 : 2; + critStage.value += critBoostTag.critStages; } console.log(`crit stage: +${critStage.value}`); @@ -1661,7 +1659,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { /** * Return this Pokemon's {@linkcode Gender}. - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @param useIllusion - Whether to consider this pokemon's illusion if present; default `false` * @returns the {@linkcode Gender} of this {@linkcode Pokemon}. */ @@ -1677,7 +1675,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { /** * Return this Pokemon's fusion's {@linkcode Gender}. - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @param useIllusion - Whether to consider this pokemon's illusion if present; default `false` * @returns The {@linkcode Gender} of this {@linkcode Pokemon}'s fusion. */ @@ -1819,12 +1817,10 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { /** * Return all the {@linkcode PokemonMove}s that make up this Pokemon's moveset. * Takes into account player/enemy moveset overrides (which will also override PP count). - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @returns An array of {@linkcode PokemonMove}, as described above. */ getMoveset(ignoreOverride = false): PokemonMove[] { - const ret = !ignoreOverride && this.summonData.moveset ? this.summonData.moveset : this.moveset; - // Overrides moveset based on arrays specified in overrides.ts let overrideArray: MoveId | Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE @@ -1840,7 +1836,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { }); } - return ret; + return !ignoreOverride && this.summonData.moveset ? this.summonData.moveset : this.moveset; } /** @@ -1887,7 +1883,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * Evaluate and return this Pokemon's typing. * @param includeTeraType - Whether to use this Pokemon's tera type if Terastallized; default `false` * @param forDefend - Whether this Pokemon is currently receiving an attack; default `false` - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @param useIllusion - Whether to consider this Pokemon's illusion if present; default `false` * @returns An array of {@linkcode PokemonType}s corresponding to this Pokemon's typing (real or percieved). */ @@ -2010,7 +2006,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * @param type - The {@linkcode PokemonType} to check * @param includeTeraType - Whether to use this Pokemon's tera type if Terastallized; default `true` * @param forDefend - Whether this Pokemon is currently receiving an attack; default `false` - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @returns Whether this Pokemon is of the specified type. */ public isOfType(type: PokemonType, includeTeraType = true, forDefend = false, ignoreOverride = false): boolean { @@ -2023,7 +2019,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * Should rarely be called directly in favor of {@linkcode hasAbility} or {@linkcode hasAbilityWithAttr}, * both of which check both ability slots and account for suppression. * @see {@linkcode hasAbility} and {@linkcode hasAbilityWithAttr} are the intended ways to check abilities in most cases - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @returns The non-passive {@linkcode Ability} of this Pokemon. */ public getAbility(ignoreOverride = false): Ability { @@ -2205,7 +2201,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * Accounts for all the various effects which can disable or modify abilities. * @param ability - The {@linkcode Abilities | Ability} to check for * @param canApply - Whether to check if the ability is currently active; default `true` - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @returns Whether this {@linkcode Pokemon} has the given ability */ public hasAbility(ability: AbilityId, canApply = true, ignoreOverride = false): boolean { @@ -2220,7 +2216,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * Accounts for all the various effects which can disable or modify abilities. * @param attrType - The {@linkcode AbAttr | attribute} to check for * @param canApply - Whether to check if the ability is currently active; default `true` - * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode Moves.TRANSFORM | Transform}; default `false` + * @param ignoreOverride - Whether to ignore any overrides caused by {@linkcode MoveId.TRANSFORM | Transform}; default `false` * @returns Whether this Pokemon has an ability with the given {@linkcode AbAttr}. */ public hasAbilityWithAttr(attrType: AbAttrString, canApply = true, ignoreOverride = false): boolean { @@ -4470,7 +4466,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * Return the most recently executed {@linkcode TurnMove} this {@linkcode Pokemon} has used that is: * - Not {@linkcode MoveId.NONE} * - Non-virtual ({@linkcode MoveUseMode | useMode} < {@linkcode MoveUseMode.INDIRECT}) - * @param ignoreStruggle - Whether to additionally ignore {@linkcode Moves.STRUGGLE}; default `false` + * @param ignoreStruggle - Whether to additionally ignore {@linkcode MoveId.STRUGGLE}; default `false` * @param ignoreFollowUp - Whether to ignore moves with a use type of {@linkcode MoveUseMode.FOLLOW_UP} * (e.g. ones called by Copycat/Mirror Move); default `true`. * @returns The last move this Pokemon has used satisfying the aforementioned conditions, @@ -5098,6 +5094,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { */ resetWaveData(): void { this.waveData = new PokemonWaveData(); + this.tempSummonData.waveTurnCount = 1; } resetTera(): void { diff --git a/src/init/init.ts b/src/init/init.ts index 17b991be3a0..ba9738e2be8 100644 --- a/src/init/init.ts +++ b/src/init/init.ts @@ -2,10 +2,10 @@ import { initAbilities } from "#abilities/ability"; import { initBiomes } from "#balance/biomes"; import { initEggMoves } from "#balance/egg-moves"; import { initPokemonPrevolutions, initPokemonStarters } from "#balance/pokemon-evolutions"; +import { initSpecies } from "#balance/pokemon-species"; import { initChallenges } from "#data/challenge"; import { initTrainerTypeDialogue } from "#data/dialogue"; import { initPokemonForms } from "#data/pokemon-forms"; -import { initSpecies } from "#data/pokemon-species"; import { initModifierPools } from "#modifiers/init-modifier-pools"; import { initModifierTypes } from "#modifiers/modifier-type"; import { initMoves } from "#moves/move"; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 8e3987dad1e..d2b4a76ef10 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -120,6 +120,7 @@ export class LoadingScene extends SceneBase { this.loadImage("party_bg", "ui"); this.loadImage("party_bg_double", "ui"); + this.loadImage("party_bg_double_manage", "ui"); this.loadAtlas("party_slot_main", "ui"); this.loadAtlas("party_slot", "ui"); this.loadImage("party_slot_overlay_lv", "ui"); @@ -127,6 +128,8 @@ export class LoadingScene extends SceneBase { this.loadAtlas("party_slot_hp_overlay", "ui"); this.loadAtlas("party_pb", "ui"); this.loadAtlas("party_cancel", "ui"); + this.loadAtlas("party_discard", "ui"); + this.loadAtlas("party_transfer", "ui"); this.loadImage("summary_bg", "ui"); this.loadImage("summary_overlay_shiny", "ui"); diff --git a/src/phase-manager.ts b/src/phase-manager.ts index 850f0c564ea..aa01a0ffc10 100644 --- a/src/phase-manager.ts +++ b/src/phase-manager.ts @@ -322,7 +322,6 @@ export class PhaseManager { queue.splice(0, queue.length); } this.dynamicPhaseQueues.forEach(queue => queue.clear()); - this.currentPhase = null; this.standbyPhase = null; this.clearPhaseQueueSplice(); } diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index 8d199915385..2dbb74c4a85 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -58,12 +58,6 @@ export class BattleEndPhase extends BattlePhase { globalScene.phaseManager.unshiftNew("GameOverPhase", true); } - for (const pokemon of globalScene.getField()) { - if (pokemon) { - pokemon.tempSummonData.waveTurnCount = 1; - } - } - for (const pokemon of globalScene.getPokemonAllowedInBattle()) { applyAbAttrs("PostBattleAbAttr", { pokemon, victory: this.isVictory }); } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index cd7c7a8f48f..f88f9d0cad1 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -649,7 +649,6 @@ export class MovePhase extends BattlePhase { * Displays the move's usage text to the player as applicable for the move being used. */ public showMoveText(): void { - // No text for Moves.NONE, recharging/2-turn moves or interrupted moves if ( this.move.moveId === MoveId.NONE || this.pokemon.getTag(BattlerTagType.RECHARGING) || @@ -658,7 +657,6 @@ export class MovePhase extends BattlePhase { return; } - // Play message for magic coat reflection // TODO: This should be done by the move... globalScene.phaseManager.queueMessage( i18next.t(isReflected(this.useMode) ? "battle:magicCoatActivated" : "battle:useMove", { diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 6456bacd0e3..d6bd252c77d 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -99,8 +99,12 @@ export class SelectStarterPhase extends Phase { starterPokemon.generateFusionSpecies(true); } starterPokemon.setVisible(false); - applyChallenges(ChallengeType.STARTER_MODIFY, starterPokemon); + const chalApplied = applyChallenges(ChallengeType.STARTER_MODIFY, starterPokemon); party.push(starterPokemon); + if (chalApplied) { + // If any challenges modified the starter, it should update + loadPokemonAssets.push(starterPokemon.updateInfo()); + } loadPokemonAssets.push(starterPokemon.loadAssets()); }); overrideModifiers(); diff --git a/src/plugins/api/pokerogue-account-api.ts b/src/plugins/api/pokerogue-account-api.ts index 03f522e8dac..22f86413618 100644 --- a/src/plugins/api/pokerogue-account-api.ts +++ b/src/plugins/api/pokerogue-account-api.ts @@ -1,6 +1,7 @@ import { ApiBase } from "#api/api-base"; import { SESSION_ID_COOKIE_NAME } from "#app/constants"; import type { + AccountChangePwRequest, AccountInfoResponse, AccountLoginRequest, AccountLoginResponse, @@ -95,4 +96,19 @@ export class PokerogueAccountApi extends ApiBase { removeCookie(SESSION_ID_COOKIE_NAME); // we are always clearing the cookie. } + + public async changePassword(changePwData: AccountChangePwRequest) { + try { + const response = await this.doPost("/account/changepw", changePwData, "form-urlencoded"); + if (response.ok) { + return null; + } + console.warn("Change password failed!", response.status, response.statusText); + return response.text(); + } catch (err) { + console.warn("Change password failed!", err); + } + + return "Unknown error!"; + } } diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 89946b2691b..62fc73a10a3 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -79,13 +79,13 @@ const fonts: Array = [ face: new FontFace("emerald", "url(./fonts/pokemon-bw.ttf)", { unicodeRange: rangesByLanguage.japanese, }), - only: ["en", "es", "fr", "it", "de", "pt", "ko", "ja", "ca", "da", "tr", "ro", "ru"], + only: ["en", "es", "fr", "it", "de", "pt", "ko", "ja", "ca", "da", "tr", "ro", "ru", "tl"], }, { face: new FontFace("pkmnems", "url(./fonts/pokemon-bw.ttf)", { unicodeRange: rangesByLanguage.japanese, }), - only: ["en", "es", "fr", "it", "de", "pt", "ko", "ja", "ca", "da", "tr", "ro", "ru"], + only: ["en", "es", "fr", "it", "de", "pt", "ko", "ja", "ca", "da", "tr", "ro", "ru", "tl"], }, ]; @@ -191,6 +191,7 @@ export async function initI18n(): Promise { "tr", "ro", "ru", + "tl", ], backend: { loadPath(lng: string, [ns]: string[]) { diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 69c1539d944..0ddfedeff84 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -1,7 +1,6 @@ import { globalScene } from "#app/global-scene"; import type { Gender } from "#data/gender"; import { CustomPokemonData, PokemonBattleData, PokemonSummonData } from "#data/pokemon-data"; -import { getPokemonSpeciesForm } from "#data/pokemon-species"; import { Status } from "#data/status-effect"; import { BattleType } from "#enums/battle-type"; import type { BiomeId } from "#enums/biome-id"; @@ -14,7 +13,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { EnemyPokemon, Pokemon } from "#field/pokemon"; import { PokemonMove } from "#moves/pokemon-move"; import type { Variant } from "#sprites/variant"; -import { getPokemonSpecies } from "#utils/pokemon-utils"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; export class PokemonData { public id: number; diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 33087f2509e..32d9e0ee2be 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -981,6 +981,10 @@ export function setSetting(setting: string, value: number): boolean { label: "Română (Needs Help)", handler: () => changeLocaleHandler("ro"), }, + { + label: "Tagalog (Needs Help)", + handler: () => changeLocaleHandler("tl"), + }, { label: i18next.t("settings:back"), handler: () => cancelHandler(), diff --git a/src/system/version-migration/versions/v1_7_0.ts b/src/system/version-migration/versions/v1_7_0.ts index 9ba25bcbaac..69c640756ea 100644 --- a/src/system/version-migration/versions/v1_7_0.ts +++ b/src/system/version-migration/versions/v1_7_0.ts @@ -1,11 +1,10 @@ import { globalScene } from "#app/global-scene"; -import { getPokemonSpeciesForm } from "#data/pokemon-species"; import { DexAttr } from "#enums/dex-attr"; import type { SessionSaveData, SystemSaveData } from "#system/game-data"; import type { SessionSaveMigrator } from "#types/session-save-migrator"; import type { SystemSaveMigrator } from "#types/system-save-migrator"; import { isNullOrUndefined } from "#utils/common"; -import { getPokemonSpecies } from "#utils/pokemon-utils"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; /** * If a starter is caught, but the only forms registered as caught are not starterSelectable, diff --git a/src/typings/i18next.d.ts b/src/typings/i18next.d.ts index 0eaa1e6ff0f..1e1695f6b9a 100644 --- a/src/typings/i18next.d.ts +++ b/src/typings/i18next.d.ts @@ -3,6 +3,7 @@ import type { TOptions } from "i18next"; // Module declared to make referencing keys in the localization files type-safe. declare module "i18next" { interface TFunction { + // biome-ignore lint/style/useShorthandFunctionType: This needs to be an interface due to interface merging (key: string | string[], options?: TOptions & Record): string; } } diff --git a/src/typings/phaser/index.d.ts b/src/typings/phaser/index.d.ts index 26fbcff75bd..caddaedfc59 100644 --- a/src/typings/phaser/index.d.ts +++ b/src/typings/phaser/index.d.ts @@ -1,7 +1,7 @@ import "phaser"; declare module "phaser" { - namespace GameObjects { + namespace GameObjects { interface GameObject { width: number; @@ -16,45 +16,45 @@ declare module "phaser" { y: number; } - interface Container { + interface Container { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): this; - } - interface Sprite { + setPositionRelative(guideObject: any, x: number, y: number): this; + } + interface Sprite { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): this; - } - interface Image { + setPositionRelative(guideObject: any, x: number, y: number): this; + } + interface Image { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): this; - } - interface NineSlice { + setPositionRelative(guideObject: any, x: number, y: number): this; + } + interface NineSlice { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): this; - } - interface Text { + setPositionRelative(guideObject: any, x: number, y: number): this; + } + interface Text { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): this; - } - interface Rectangle { + setPositionRelative(guideObject: any, x: number, y: number): this; + } + interface Rectangle { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): this; - } - } + setPositionRelative(guideObject: any, x: number, y: number): this; + } + } - namespace Input { + namespace Input { namespace Gamepad { interface GamepadPlugin { /** diff --git a/src/ui/change-password-form-ui-handler.ts b/src/ui/change-password-form-ui-handler.ts new file mode 100644 index 00000000000..eccc67ffb04 --- /dev/null +++ b/src/ui/change-password-form-ui-handler.ts @@ -0,0 +1,124 @@ +import { globalScene } from "#app/global-scene"; +import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import { UiMode } from "#enums/ui-mode"; +import type { InputFieldConfig } from "#ui/form-modal-ui-handler"; +import { FormModalUiHandler } from "#ui/form-modal-ui-handler"; +import type { ModalConfig } from "#ui/modal-ui-handler"; +import i18next from "i18next"; + +export class ChangePasswordFormUiHandler extends FormModalUiHandler { + private readonly ERR_PASSWORD: string = "invalid password"; + private readonly ERR_ACCOUNT_EXIST: string = "account doesn't exist"; + private readonly ERR_PASSWORD_MISMATCH: string = "password doesn't match"; + + constructor(mode: UiMode | null = null) { + super(mode); + } + + setup(): void { + super.setup(); + } + + override getModalTitle(_config?: ModalConfig): string { + return i18next.t("menu:changePassword"); + } + + override getWidth(_config?: ModalConfig): number { + return 160; + } + + override getMargin(_config?: ModalConfig): [number, number, number, number] { + return [0, 0, 48, 0]; + } + + override getButtonLabels(_config?: ModalConfig): string[] { + return [i18next.t("settings:buttonSubmit"), i18next.t("menu:cancel")]; + } + + override getReadableErrorMessage(error: string): string { + const colonIndex = error?.indexOf(":"); + if (colonIndex > 0) { + error = error.slice(0, colonIndex); + } + switch (error) { + case this.ERR_PASSWORD: + return i18next.t("menu:invalidRegisterPassword"); + case this.ERR_ACCOUNT_EXIST: + return i18next.t("menu:accountNonExistent"); + case this.ERR_PASSWORD_MISMATCH: + return i18next.t("menu:passwordNotMatchingConfirmPassword"); + } + + return super.getReadableErrorMessage(error); + } + + override getInputFieldConfigs(): InputFieldConfig[] { + const inputFieldConfigs: InputFieldConfig[] = []; + inputFieldConfigs.push({ + label: i18next.t("menu:password"), + isPassword: true, + }); + inputFieldConfigs.push({ + label: i18next.t("menu:confirmPassword"), + isPassword: true, + }); + return inputFieldConfigs; + } + + override show(args: [ModalConfig, ...any]): boolean { + if (super.show(args)) { + const config = args[0]; + const originalSubmitAction = this.submitAction; + this.submitAction = () => { + if (globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { + // Prevent overlapping overrides on action modification + this.submitAction = originalSubmitAction; + this.sanitizeInputs(); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); + const onFail = (error: string | null) => { + globalScene.ui.setMode(UiMode.CHANGE_PASSWORD_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.playError(); + }; + const [passwordInput, confirmPasswordInput] = this.inputs; + if (!passwordInput?.text) { + return onFail(this.getReadableErrorMessage("invalid password")); + } + if (passwordInput.text !== confirmPasswordInput.text) { + return onFail(this.ERR_PASSWORD_MISMATCH); + } + + pokerogueApi.account.changePassword({ password: passwordInput.text }).then(error => { + if (!error && originalSubmitAction) { + globalScene.ui.playSelect(); + originalSubmitAction(); + // Only clear inputs if the action was successful + for (const input of this.inputs) { + input.setText(""); + } + } else { + onFail(error); + } + }); + } + }; + // Upon pressing cancel, the inputs should be cleared + const originalCancelAction = this.cancelAction; + this.cancelAction = () => { + globalScene.ui.playSelect(); + for (const input of this.inputs) { + input.setText(""); + } + originalCancelAction?.(); + }; + + return true; + } + + return false; + } + + override clear() { + super.clear(); + this.setMouseCursorStyle("default"); //reset cursor + } +} diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 203d98a86c7..5c547465de9 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -19,6 +19,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { protected inputs: InputText[]; protected errorMessage: Phaser.GameObjects.Text; protected submitAction: Function | null; + protected cancelAction: (() => void) | null; protected tween: Phaser.Tweens.Tween; protected formLabels: Phaser.GameObjects.Text[]; @@ -126,22 +127,37 @@ export abstract class FormModalUiHandler extends ModalUiHandler { }); } - show(args: any[]): boolean { + override show(args: any[]): boolean { if (super.show(args)) { this.inputContainers.map(ic => ic.setVisible(true)); const config = args[0] as FormModalConfig; this.submitAction = config.buttonActions.length ? config.buttonActions[0] : null; + this.cancelAction = config.buttonActions[1] ?? null; - if (this.buttonBgs.length) { - this.buttonBgs[0].off("pointerdown"); - this.buttonBgs[0].on("pointerdown", () => { - if (this.submitAction && globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { - this.submitAction(); + // #region: Override button pointerDown + // Override the pointerDown event for the buttonBgs to call the `submitAction` and `cancelAction` + // properties that we set above, allowing their behavior to change after this method terminates + // Some subclasses use this to add behavior to the submit and cancel action + + this.buttonBgs[0].off("pointerdown"); + this.buttonBgs[0].on("pointerdown", () => { + if (this.submitAction && globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { + this.submitAction(); + } + }); + const cancelBg = this.buttonBgs[1]; + if (cancelBg) { + cancelBg.off("pointerdown"); + cancelBg.on("pointerdown", () => { + // The seemingly redundant cancelAction check is intentionally left in as a defensive programming measure + if (this.cancelAction && globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { + this.cancelAction(); } }); } + //#endregion: Override pointerDown events this.modalContainer.y += 24; this.modalContainer.setAlpha(0); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index fa65cccab2f..30bf9eeff75 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -311,6 +311,17 @@ export class MenuUiHandler extends MessageUiHandler { }, keepOpen: true, }, + { + // Note: i18n key is under `menu`, not `menuUiHandler` to avoid duplication + label: i18next.t("menu:changePassword"), + handler: () => { + ui.setOverlayMode(UiMode.CHANGE_PASSWORD_FORM, { + buttonActions: [() => ui.revertMode(), () => ui.revertMode()], + }); + return true; + }, + keepOpen: true, + }, { label: i18next.t("menuUiHandler:consentPreferences"), handler: () => { diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index 228d80968b9..4d1456eec51 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -7,7 +7,7 @@ import { UiHandler } from "#ui/ui-handler"; import { addWindow, WindowVariant } from "#ui/ui-theme"; export interface ModalConfig { - buttonActions: Function[]; + buttonActions: ((...args: any[]) => any)[]; } export abstract class ModalUiHandler extends UiHandler { diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 50d88738d32..16eecf6993d 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -69,7 +69,7 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { if (context) { context.font = styleOptions.fontSize + "px " + styleOptions.fontFamily; - this.transferButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:transfer")).width; + this.transferButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:manageItems")).width; this.checkButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:checkTeam")).width; } @@ -81,7 +81,7 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { this.transferButtonContainer.setVisible(false); ui.add(this.transferButtonContainer); - const transferButtonText = addTextObject(-4, -2, i18next.t("modifierSelectUiHandler:transfer"), TextStyle.PARTY); + const transferButtonText = addTextObject(-4, -2, i18next.t("modifierSelectUiHandler:manageItems"), TextStyle.PARTY); transferButtonText.setName("text-transfer-btn"); transferButtonText.setOrigin(1, 0); this.transferButtonContainer.add(transferButtonText); @@ -601,7 +601,7 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { (globalScene.game.canvas.width - this.transferButtonWidth - this.checkButtonWidth) / 6 - 30, OPTION_BUTTON_YPOSITION + 4, ); - ui.showText(i18next.t("modifierSelectUiHandler:transferDesc")); + ui.showText(i18next.t("modifierSelectUiHandler:manageItemsDesc")); } else if (cursor === 2) { this.cursorObj.setPosition( (globalScene.game.canvas.width - this.checkButtonWidth) / 6 - 10, diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 915cc76fd73..0337e487200 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -103,6 +103,11 @@ export enum PartyUiMode { * This is generally used in for Mystery Encounter or special effects that require the player to select a Pokemon */ SELECT, + /** + * Indicates that the party UI is open to select a party member from which items will be discarded. + * This type of selection can be cancelled. + */ + DISCARD, } export enum PartyOption { @@ -121,6 +126,7 @@ export enum PartyOption { RELEASE, RENAME, SELECT, + DISCARD, SCROLL_UP = 1000, SCROLL_DOWN = 1001, FORM_CHANGE_ITEM = 2000, @@ -155,6 +161,7 @@ export class PartyUiHandler extends MessageUiHandler { private partySlotsContainer: Phaser.GameObjects.Container; private partySlots: PartySlot[]; private partyCancelButton: PartyCancelButton; + private partyDiscardModeButton: PartyDiscardModeButton; private partyMessageBox: Phaser.GameObjects.NineSlice; private moveInfoOverlay: MoveInfoOverlay; @@ -180,6 +187,8 @@ export class PartyUiHandler extends MessageUiHandler { private transferAll: boolean; private lastCursor = 0; + private lastLeftPokemonCursor = 0; + private lastRightPokemonCursor = 0; private selectCallback: PartySelectCallback | PartyModifierTransferSelectCallback | null; private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter; private moveSelectFilter: PokemonMoveSelectFilter; @@ -308,6 +317,12 @@ export class PartyUiHandler extends MessageUiHandler { this.iconAnimHandler = new PokemonIconAnimHandler(); this.iconAnimHandler.setup(); + const partyDiscardModeButton = new PartyDiscardModeButton(60, -globalScene.game.canvas.height / 15 - 1, this); + + partyContainer.add(partyDiscardModeButton); + + this.partyDiscardModeButton = partyDiscardModeButton; + // prepare move overlay. in case it appears to be too big, set the overlayScale to .5 const overlayScale = 1; this.moveInfoOverlay = new MoveInfoOverlay({ @@ -349,8 +364,18 @@ export class PartyUiHandler extends MessageUiHandler { this.showMovePp = args.length > 6 && args[6]; this.partyContainer.setVisible(true); - this.partyBg.setTexture(`party_bg${globalScene.currentBattle.double ? "_double" : ""}`); + if (this.isItemManageMode()) { + this.partyBg.setTexture(`party_bg${globalScene.currentBattle.double ? "_double_manage" : ""}`); + } else { + this.partyBg.setTexture(`party_bg${globalScene.currentBattle.double ? "_double" : ""}`); + } + this.populatePartySlots(); + // If we are currently transferring items, set the icon to its proper state and reveal the button. + if (this.isItemManageMode()) { + this.partyDiscardModeButton.toggleIcon(this.partyUiMode as PartyUiMode.MODIFIER_TRANSFER | PartyUiMode.DISCARD); + } + this.showPartyText(); this.setCursor(0); return true; @@ -595,7 +620,7 @@ export class PartyUiHandler extends MessageUiHandler { const option = this.options[this.optionsCursor]; if (button === Button.LEFT) { /** Decrease quantity for the current item and update UI */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + if (this.isItemManageMode()) { this.transferQuantities[option] = this.transferQuantities[option] === 1 ? this.transferQuantitiesMax[option] @@ -609,7 +634,7 @@ export class PartyUiHandler extends MessageUiHandler { if (button === Button.RIGHT) { /** Increase quantity for the current item and update UI */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + if (this.isItemManageMode()) { this.transferQuantities[option] = this.transferQuantities[option] === this.transferQuantitiesMax[option] ? 1 @@ -639,6 +664,45 @@ export class PartyUiHandler extends MessageUiHandler { return success; } + private processDiscardMenuInput(pokemon: PlayerPokemon) { + const ui = this.getUi(); + const option = this.options[this.optionsCursor]; + this.clearOptions(); + + this.blockInput = true; + this.showText(i18next.t("partyUiHandler:discardConfirmation"), null, () => { + this.blockInput = false; + ui.setModeWithoutClear( + UiMode.CONFIRM, + () => { + ui.setMode(UiMode.PARTY); + this.doDiscard(option, pokemon); + }, + () => { + ui.setMode(UiMode.PARTY); + this.showPartyText(); + }, + ); + }); + + return true; + } + + private doDiscard(option: PartyOption, pokemon: PlayerPokemon) { + const itemModifiers = this.getTransferrableItemsFromPokemon(pokemon); + this.clearOptions(); + + if (option === PartyOption.ALL) { + // Discard all currently held items + for (let i = 0; i < itemModifiers.length; i++) { + globalScene.tryDiscardHeldItemModifier(itemModifiers[i], this.transferQuantities[i]); + } + } else { + // Discard the currently selected item + globalScene.tryDiscardHeldItemModifier(itemModifiers[option], this.transferQuantities[option]); + } + } + private moveOptionCursor(button: Button.UP | Button.DOWN): boolean { if (button === Button.UP) { return this.setCursor(this.optionsCursor ? this.optionsCursor - 1 : this.options.length - 1); @@ -725,6 +789,10 @@ export class PartyUiHandler extends MessageUiHandler { return this.processModifierTransferModeInput(pokemon); } + if (this.partyUiMode === PartyUiMode.DISCARD) { + return this.processDiscardMenuInput(pokemon); + } + // options specific to the mode (moves) if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { return this.processRememberMoveModeInput(pokemon); @@ -759,6 +827,11 @@ export class PartyUiHandler extends MessageUiHandler { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeItemTrigger, false, true); } + // This is processed before the filter result since releasing does not depend on status. + if (option === PartyOption.RELEASE) { + return this.processReleaseOption(pokemon); + } + // If the pokemon is filtered out for this option, we cannot continue const filterResult = this.getFilterResult(option, pokemon); if (filterResult) { @@ -782,10 +855,6 @@ export class PartyUiHandler extends MessageUiHandler { // PartyUiMode.POST_BATTLE_SWITCH (SEND_OUT) // These are the options that need a callback - if (option === PartyOption.RELEASE) { - return this.processReleaseOption(pokemon); - } - if (this.partyUiMode === PartyUiMode.SPLICE) { if (option === PartyOption.SPLICE) { (this.selectCallback as PartyModifierSpliceSelectCallback)(this.transferCursor, this.cursor); @@ -864,7 +933,7 @@ export class PartyUiHandler extends MessageUiHandler { } if (button === Button.LEFT || button === Button.RIGHT) { - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + if (this.isItemManageMode()) { return this.processModifierTransferModeLeftRightInput(button); } } @@ -919,10 +988,22 @@ export class PartyUiHandler extends MessageUiHandler { return !(this.partyUiMode === PartyUiMode.FAINT_SWITCH || this.partyUiMode === PartyUiMode.REVIVAL_BLESSING); } + /** + * Return whether this UI handler is responsible for managing items. + * Used to ensure proper placement of mode toggle buttons in the UI, etc. + * @returns Whether the current handler is responsible for managing items. + */ + private isItemManageMode(): boolean { + return this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER || this.partyUiMode === PartyUiMode.DISCARD; + } + private processPartyActionInput(): boolean { const ui = this.getUi(); if (this.cursor < 6) { - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode) { + if ( + (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode) || + this.partyUiMode === PartyUiMode.DISCARD + ) { /** Initialize item quantities for the selected Pokemon */ const itemModifiers = globalScene.findModifiers( m => @@ -936,6 +1017,25 @@ export class PartyUiHandler extends MessageUiHandler { this.showOptions(); ui.playSelect(); } + + // Toggle item transfer mode to discard items or vice versa + if (this.cursor === 7) { + switch (this.partyUiMode) { + case PartyUiMode.DISCARD: + this.partyUiMode = PartyUiMode.MODIFIER_TRANSFER; + break; + case PartyUiMode.MODIFIER_TRANSFER: + this.partyUiMode = PartyUiMode.DISCARD; + break; + default: + ui.playError(); + return false; + } + this.partyDiscardModeButton.toggleIcon(this.partyUiMode); + ui.playSelect(); + return true; + } + // Pressing return button if (this.cursor === 6) { if (!this.allowCancel()) { @@ -956,6 +1056,7 @@ export class PartyUiHandler extends MessageUiHandler { this.clearTransfer(); ui.playSelect(); } else if (this.allowCancel()) { + this.partyDiscardModeButton.clear(); if (this.selectCallback) { const selectCallback = this.selectCallback; this.selectCallback = null; @@ -974,30 +1075,74 @@ export class PartyUiHandler extends MessageUiHandler { const slotCount = this.partySlots.length; const battlerCount = globalScene.currentBattle.getBattlerCount(); + if (this.lastCursor < battlerCount) { + this.lastLeftPokemonCursor = this.lastCursor; + } + if (this.lastCursor >= battlerCount && this.lastCursor < 6) { + this.lastRightPokemonCursor = this.lastCursor; + } + let success = false; switch (button) { + // Item manage mode adds an extra 8th "toggle mode" button to the UI, located *below* both active party members. + // The following logic serves to ensure its menu behaviour matches its in-game position, + // being selected when scrolling up from the first inactive party member or down from the last active one. case Button.UP: + if (this.isItemManageMode()) { + if (this.cursor === 1) { + success = this.setCursor(globalScene.currentBattle.double ? 0 : 7); + break; + } + if (this.cursor === 2) { + success = this.setCursor(globalScene.currentBattle.double ? 7 : 1); + break; + } + if (this.cursor === 6) { + success = this.setCursor(slotCount <= globalScene.currentBattle.getBattlerCount() ? 7 : slotCount - 1); + break; + } + if (this.cursor === 7) { + success = this.setCursor(globalScene.currentBattle.double && slotCount > 1 ? 1 : 0); + break; + } + } success = this.setCursor(this.cursor ? (this.cursor < 6 ? this.cursor - 1 : slotCount - 1) : 6); break; case Button.DOWN: + if (this.isItemManageMode()) { + if (this.cursor === 0) { + success = this.setCursor(globalScene.currentBattle.double && slotCount > 1 ? 1 : 7); + break; + } + if (this.cursor === 1) { + success = this.setCursor(globalScene.currentBattle.double ? 7 : slotCount > 2 ? 2 : 6); + break; + } + if (this.cursor === 7) { + success = this.setCursor( + slotCount > globalScene.currentBattle.getBattlerCount() ? globalScene.currentBattle.getBattlerCount() : 6, + ); + break; + } + } success = this.setCursor(this.cursor < 6 ? (this.cursor < slotCount - 1 ? this.cursor + 1 : 6) : 0); break; case Button.LEFT: - if (this.cursor >= battlerCount && this.cursor <= 6) { - success = this.setCursor(0); + if (this.cursor === 6) { + success = this.setCursor(this.isItemManageMode() ? 7 : this.lastLeftPokemonCursor); + } + if (this.cursor >= battlerCount && this.cursor < 6) { + success = this.setCursor(this.lastLeftPokemonCursor); } break; case Button.RIGHT: - if (slotCount === battlerCount) { + // Scrolling right from item transfer button or with no backup party members goes to cancel + if (this.cursor === 7 || slotCount <= battlerCount) { success = this.setCursor(6); break; } - if (battlerCount >= 2 && slotCount > battlerCount && this.getCursor() === 0 && this.lastCursor === 1) { - success = this.setCursor(2); - break; - } - if (slotCount > battlerCount && this.cursor < battlerCount) { - success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount); + if (this.cursor < battlerCount) { + success = this.setCursor(this.lastRightPokemonCursor || battlerCount); break; } } @@ -1044,11 +1189,15 @@ export class PartyUiHandler extends MessageUiHandler { this.partySlots[this.lastCursor].deselect(); } else if (this.lastCursor === 6) { this.partyCancelButton.deselect(); + } else if (this.lastCursor === 7) { + this.partyDiscardModeButton.deselect(); } if (cursor < 6) { this.partySlots[cursor].select(); } else if (cursor === 6) { this.partyCancelButton.select(); + } else if (cursor === 7) { + this.partyDiscardModeButton.select(); } } return changed; @@ -1143,14 +1292,16 @@ export class PartyUiHandler extends MessageUiHandler { optionsMessage = i18next.t("partyUiHandler:selectAnotherPokemonToSplice"); } break; + case PartyUiMode.DISCARD: + optionsMessage = i18next.t("partyUiHandler:changeQuantityDiscard"); } this.showText(optionsMessage, 0); this.updateOptions(); - /** When an item is being selected for transfer, the message box is taller as the message occupies two lines */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + /** When an item is being selected for transfer or discard, the message box is taller as the message occupies two lines */ + if (this.isItemManageMode()) { this.partyMessageBox.setSize(262 - Math.max(this.optionsBg.displayWidth - 56, 0), 42); } else { this.partyMessageBox.setSize(262 - Math.max(this.optionsBg.displayWidth - 56, 0), 30); @@ -1159,6 +1310,20 @@ export class PartyUiHandler extends MessageUiHandler { this.setCursor(0); } + showPartyText() { + switch (this.partyUiMode) { + case PartyUiMode.MODIFIER_TRANSFER: + this.showText(i18next.t("partyUiHandler:partyTransfer")); + break; + case PartyUiMode.DISCARD: + this.showText(i18next.t("partyUiHandler:partyDiscard")); + break; + default: + this.showText("", 0); + break; + } + } + private allowBatonModifierSwitch(): boolean { return !!( this.partyUiMode !== PartyUiMode.FAINT_SWITCH && @@ -1276,6 +1441,9 @@ export class PartyUiHandler extends MessageUiHandler { this.addCommonOptions(pokemon); } break; + case PartyUiMode.DISCARD: + this.updateOptionsWithModifierTransferMode(pokemon); + break; // TODO: This still needs to be broken up. // It could use a rework differentiating different kind of switches // to treat baton passing separately from switching on faint. @@ -1381,7 +1549,8 @@ export class PartyUiHandler extends MessageUiHandler { optionName = "↓"; } else if ( (this.partyUiMode !== PartyUiMode.REMEMBER_MOVE_MODIFIER && - (this.partyUiMode !== PartyUiMode.MODIFIER_TRANSFER || this.transferMode)) || + (this.partyUiMode !== PartyUiMode.MODIFIER_TRANSFER || this.transferMode) && + this.partyUiMode !== PartyUiMode.DISCARD) || option === PartyOption.CANCEL ) { switch (option) { @@ -1444,7 +1613,7 @@ export class PartyUiHandler extends MessageUiHandler { const itemModifiers = this.getItemModifiers(pokemon); const itemModifier = itemModifiers[option]; if ( - this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && + this.isItemManageMode() && this.transferQuantitiesMax[option] > 1 && !this.transferMode && itemModifier !== undefined && @@ -1474,7 +1643,6 @@ export class PartyUiHandler extends MessageUiHandler { optionText.x = 15 - this.optionsBg.width; } } - startTransfer(): void { this.transferMode = true; this.transferCursor = this.cursor; @@ -1608,7 +1776,7 @@ export class PartyUiHandler extends MessageUiHandler { this.eraseOptionsCursor(); this.partyMessageBox.setSize(262, 30); - this.showText("", 0); + this.showPartyText(); } eraseOptionsCursor() { @@ -1663,7 +1831,9 @@ class PartySlot extends Phaser.GameObjects.Container { ? -184 + (globalScene.currentBattle.double ? -40 : 0) + (28 + (globalScene.currentBattle.double ? 8 : 0)) * slotIndex - : -124 + (globalScene.currentBattle.double ? -8 : 0) + slotIndex * 64, + : partyUiMode === PartyUiMode.MODIFIER_TRANSFER + ? -124 + (globalScene.currentBattle.double ? -20 : 0) + slotIndex * 55 + : -124 + (globalScene.currentBattle.double ? -8 : 0) + slotIndex * 64, ); this.slotIndex = slotIndex; @@ -1918,7 +2088,6 @@ class PartySlot extends Phaser.GameObjects.Container { class PartyCancelButton extends Phaser.GameObjects.Container { private selected: boolean; - private partyCancelBg: Phaser.GameObjects.Sprite; private partyCancelPb: Phaser.GameObjects.Sprite; @@ -1965,3 +2134,96 @@ class PartyCancelButton extends Phaser.GameObjects.Container { this.partyCancelPb.setFrame("party_pb"); } } + +class PartyDiscardModeButton extends Phaser.GameObjects.Container { + private selected: boolean; + private transferIcon: Phaser.GameObjects.Sprite; + private discardIcon: Phaser.GameObjects.Sprite; + private textBox: Phaser.GameObjects.Text; + private party: PartyUiHandler; + + constructor(x: number, y: number, party: PartyUiHandler) { + super(globalScene, x, y); + + this.setup(party); + } + + setup(party: PartyUiHandler) { + this.transferIcon = globalScene.add.sprite(0, 0, "party_transfer"); + this.discardIcon = globalScene.add.sprite(0, 0, "party_discard"); + this.textBox = addTextObject(-8, -7, i18next.t("partyUiHandler:TRANSFER"), TextStyle.PARTY); + this.party = party; + + this.add(this.transferIcon); + this.add(this.discardIcon); + this.add(this.textBox); + + this.clear(); + } + + select() { + if (this.selected) { + return; + } + + this.selected = true; + + this.party.showText(i18next.t("partyUiHandler:changeMode")); + + this.transferIcon.setFrame("selected"); + this.discardIcon.setFrame("selected"); + } + + deselect() { + if (!this.selected) { + return; + } + + this.selected = false; + this.party.showPartyText(); + + this.transferIcon.setFrame("normal"); + this.discardIcon.setFrame("normal"); + } + + /** + * If the current mode deals with transferring items, toggle the discard items button's name and assets. + * @param partyMode - The current {@linkcode PartyUiMode} + * @remarks + * This will also reveal the button if it is currently hidden. + */ + public toggleIcon(partyMode: PartyUiMode.MODIFIER_TRANSFER | PartyUiMode.DISCARD): void { + this.setActive(true).setVisible(true); + switch (partyMode) { + case PartyUiMode.MODIFIER_TRANSFER: + this.transferIcon.setVisible(true); + this.discardIcon.setVisible(false); + this.textBox.setVisible(true); + this.textBox.setText(i18next.t("partyUiHandler:TRANSFER")); + this.setPosition( + globalScene.currentBattle.double ? 64 : 60, + globalScene.currentBattle.double ? -48 : -globalScene.game.canvas.height / 15 - 1, + ); + this.transferIcon.displayWidth = this.textBox.text.length * 9 + 3; + break; + case PartyUiMode.DISCARD: + this.transferIcon.setVisible(false); + this.discardIcon.setVisible(true); + this.textBox.setVisible(true); + this.textBox.setText(i18next.t("partyUiHandler:DISCARD")); + this.setPosition( + globalScene.currentBattle.double ? 64 : 60, + globalScene.currentBattle.double ? -48 : -globalScene.game.canvas.height / 15 - 1, + ); + this.discardIcon.displayWidth = this.textBox.text.length * 9 + 3; + break; + } + } + + clear() { + this.setActive(false).setVisible(false); + this.transferIcon.setVisible(false); + this.discardIcon.setVisible(false); + this.textBox.setVisible(false); + } +} diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 49ce5b64d9f..227b86c4d4d 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -25,7 +25,7 @@ import { getNatureName } from "#data/nature"; import type { SpeciesFormChange } from "#data/pokemon-forms"; import { pokemonFormChanges } from "#data/pokemon-forms"; import type { PokemonSpecies } from "#data/pokemon-species"; -import { getPokemonSpeciesForm, normalForm } from "#data/pokemon-species"; +import { normalForm } from "#data/pokemon-species"; import { AbilityAttr } from "#enums/ability-attr"; import type { AbilityId } from "#enums/ability-id"; import { BiomeId } from "#enums/biome-id"; @@ -56,7 +56,7 @@ import { addBBCodeTextObject, addTextObject, getTextColor, getTextStyleOptions } import { addWindow } from "#ui/ui-theme"; import { BooleanHolder, getLocalizedSpriteKey, isNullOrUndefined, padInt, rgbHexToRgba } from "#utils/common"; import { getEnumValues } from "#utils/enums"; -import { getPokemonSpecies } from "#utils/pokemon-utils"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; import { toTitleCase } from "#utils/strings"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 5d49e867b59..cd1dc312f4d 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -15,7 +15,7 @@ import { import { speciesTmMoves } from "#balance/tms"; import { allAbilities, allMoves, allSpecies } from "#data/data-lists"; import type { PokemonForm, PokemonSpecies } from "#data/pokemon-species"; -import { getPokemonSpeciesForm, getPokerusStarters, normalForm } from "#data/pokemon-species"; +import { normalForm } from "#data/pokemon-species"; import { AbilityAttr } from "#enums/ability-attr"; import { AbilityId } from "#enums/ability-id"; import { BiomeId } from "#enums/biome-id"; @@ -46,6 +46,7 @@ import { addWindow } from "#ui/ui-theme"; import { BooleanHolder, fixedInt, getLocalizedSpriteKey, padInt, randIntRange, rgbHexToRgba } from "#utils/common"; import type { StarterPreferences } from "#utils/data"; import { loadStarterPreferences } from "#utils/data"; +import { getPokemonSpeciesForm, getPokerusStarters } from "#utils/pokemon-utils"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 9c223adf837..bb1cc22e9fd 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -5,7 +5,6 @@ import { allMoves } from "#data/data-lists"; import { getEggTierForSpecies } from "#data/egg"; import type { EggHatchData } from "#data/egg-hatch-data"; import { Gender } from "#data/gender"; -import { getPokemonSpeciesForm } from "#data/pokemon-species"; import { PokemonType } from "#enums/pokemon-type"; import { SpeciesId } from "#enums/species-id"; import { TextStyle } from "#enums/text-style"; @@ -13,6 +12,7 @@ import type { PlayerPokemon } from "#field/pokemon"; import { PokemonInfoContainer } from "#ui/pokemon-info-container"; import { addTextObject } from "#ui/text"; import { padInt, rgbHexToRgba } from "#utils/common"; +import { getPokemonSpeciesForm } from "#utils/pokemon-utils"; import { argbFromRgba } from "@material/material-color-utilities"; /** diff --git a/src/ui/settings/settings-display-ui-handler.ts b/src/ui/settings/settings-display-ui-handler.ts index 3c261d6ddab..1a0481b8e8d 100644 --- a/src/ui/settings/settings-display-ui-handler.ts +++ b/src/ui/settings/settings-display-ui-handler.ts @@ -117,6 +117,12 @@ export class SettingsDisplayUiHandler extends AbstractSettingsUiHandler { label: "Română (Needs Help)", }; break; + case "tl": + this.settings[languageIndex].options[0] = { + value: "Tagalog", + label: "Tagalog (Needs Help)", + }; + break; default: this.settings[languageIndex].options[0] = { value: "English", diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 974f24e706f..5a8e6b803a8 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -24,7 +24,6 @@ import { Gender, getGenderColor, getGenderSymbol } from "#data/gender"; import { getNatureName } from "#data/nature"; import { pokemonFormChanges } from "#data/pokemon-forms"; import type { PokemonSpecies } from "#data/pokemon-species"; -import { getPokemonSpeciesForm, getPokerusStarters } from "#data/pokemon-species"; import { AbilityAttr } from "#enums/ability-attr"; import { AbilityId } from "#enums/ability-id"; import { Button } from "#enums/buttons"; @@ -72,6 +71,7 @@ import { } from "#utils/common"; import type { StarterPreferences } from "#utils/data"; import { loadStarterPreferences, saveStarterPreferences } from "#utils/data"; +import { getPokemonSpeciesForm, getPokerusStarters } from "#utils/pokemon-utils"; import { toTitleCase } from "#utils/strings"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; @@ -176,6 +176,10 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoYOffset: 0.5, starterInfoXPos: 26, }, + tl: { + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, }; const valueReductionMax = 2; @@ -331,6 +335,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { private natureLabel: Phaser.GameObjects.Text; private teraLabel: Phaser.GameObjects.Text; private goFilterLabel: Phaser.GameObjects.Text; + /** Group holding the UI elements appearing in the instructionsContainer */ + /* TODO: Uncomment this once our testing infra supports mocks of `Phaser.GameObject.Group` + private instructionElemGroup: Phaser.GameObjects.Group; + */ private starterSelectMessageBox: Phaser.GameObjects.NineSlice; private starterSelectMessageBoxContainer: Phaser.GameObjects.Container; @@ -403,70 +411,33 @@ export class StarterSelectUiHandler extends MessageUiHandler { const currentLanguage = i18next.resolvedLanguage ?? "en"; const langSettingKey = Object.keys(languageSettings).find(lang => currentLanguage.includes(lang)) ?? "en"; const textSettings = languageSettings[langSettingKey]; + /** Scaled canvas height */ + const sHeight = globalScene.scaledCanvas.height; + /** Scaled canvas width */ + const sWidth = globalScene.scaledCanvas.width; - this.starterSelectContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); - this.starterSelectContainer.setVisible(false); + this.starterSelectContainer = globalScene.add.container(0, -sHeight).setVisible(false); ui.add(this.starterSelectContainer); - const bgColor = globalScene.add.rectangle( - 0, - 0, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, - 0x006860, - ); - bgColor.setOrigin(0, 0); - this.starterSelectContainer.add(bgColor); + const bgColor = globalScene.add.rectangle(0, 0, sWidth, sHeight, 0x006860).setOrigin(0); - const starterSelectBg = globalScene.add.image(0, 0, "starter_select_bg"); - starterSelectBg.setOrigin(0, 0); - this.starterSelectContainer.add(starterSelectBg); - - this.shinyOverlay = globalScene.add.image(6, 6, "summary_overlay_shiny"); - this.shinyOverlay.setOrigin(0, 0); - this.shinyOverlay.setVisible(false); - this.starterSelectContainer.add(this.shinyOverlay); + const starterSelectBg = globalScene.add.image(0, 0, "starter_select_bg").setOrigin(0); + this.shinyOverlay = globalScene.add.image(6, 6, "summary_overlay_shiny").setOrigin(0).setVisible(false); const starterContainerWindow = addWindow(speciesContainerX, filterBarHeight + 1, 175, 161); - const starterContainerBg = globalScene.add.image( - speciesContainerX + 1, - filterBarHeight + 2, - "starter_container_bg", - ); - starterContainerBg.setOrigin(0, 0); - this.starterSelectContainer.add(starterContainerBg); - - this.starterSelectContainer.add( - addWindow( - teamWindowX, - teamWindowY - randomSelectionWindowHeight, - teamWindowWidth, - randomSelectionWindowHeight, - true, - ), - ); - this.starterSelectContainer.add(addWindow(teamWindowX, teamWindowY, teamWindowWidth, teamWindowHeight)); - this.starterSelectContainer.add( - addWindow(teamWindowX, teamWindowY + teamWindowHeight, teamWindowWidth, teamWindowWidth, true), - ); - this.starterSelectContainer.add(starterContainerWindow); + const starterContainerBg = globalScene.add + .image(speciesContainerX + 1, filterBarHeight + 2, "starter_container_bg") + .setOrigin(0); // Create and initialise filter bar this.filterBarContainer = globalScene.add.container(0, 0); this.filterBar = new FilterBar(Math.min(speciesContainerX, teamWindowX), 1, 210, filterBarHeight); // gen filter - const genOptions: DropDownOption[] = [ - new DropDownOption(1, new DropDownLabel(i18next.t("starterSelectUiHandler:gen1"))), - new DropDownOption(2, new DropDownLabel(i18next.t("starterSelectUiHandler:gen2"))), - new DropDownOption(3, new DropDownLabel(i18next.t("starterSelectUiHandler:gen3"))), - new DropDownOption(4, new DropDownLabel(i18next.t("starterSelectUiHandler:gen4"))), - new DropDownOption(5, new DropDownLabel(i18next.t("starterSelectUiHandler:gen5"))), - new DropDownOption(6, new DropDownLabel(i18next.t("starterSelectUiHandler:gen6"))), - new DropDownOption(7, new DropDownLabel(i18next.t("starterSelectUiHandler:gen7"))), - new DropDownOption(8, new DropDownLabel(i18next.t("starterSelectUiHandler:gen8"))), - new DropDownOption(9, new DropDownLabel(i18next.t("starterSelectUiHandler:gen9"))), - ]; + const genOptions: DropDownOption[] = Array.from( + { length: 9 }, + (_, i) => new DropDownOption(i + 1, new DropDownLabel(i18next.t(`starterSelectUiHandler:gen${i + 1}`))), + ); const genDropDown: DropDown = new DropDown(0, 0, genOptions, this.updateStarters, DropDownType.HYBRID); this.filterBar.addFilter(DropDownColumn.GEN, i18next.t("filterBar:genFilter"), genDropDown); @@ -489,21 +460,24 @@ export class StarterSelectUiHandler extends MessageUiHandler { ); // caught filter - const shiny1Sprite = globalScene.add.sprite(0, 0, "shiny_icons"); - shiny1Sprite.setOrigin(0.15, 0.2); - shiny1Sprite.setScale(0.6); - shiny1Sprite.setFrame(getVariantIcon(0)); - shiny1Sprite.setTint(getVariantTint(0)); - const shiny2Sprite = globalScene.add.sprite(0, 0, "shiny_icons"); - shiny2Sprite.setOrigin(0.15, 0.2); - shiny2Sprite.setScale(0.6); - shiny2Sprite.setFrame(getVariantIcon(1)); - shiny2Sprite.setTint(getVariantTint(1)); - const shiny3Sprite = globalScene.add.sprite(0, 0, "shiny_icons"); - shiny3Sprite.setOrigin(0.15, 0.2); - shiny3Sprite.setScale(0.6); - shiny3Sprite.setFrame(getVariantIcon(2)); - shiny3Sprite.setTint(getVariantTint(2)); + const shiny1Sprite = globalScene.add + .sprite(0, 0, "shiny_icons") + .setOrigin(0.15, 0.2) + .setScale(0.6) + .setFrame(getVariantIcon(0)) + .setTint(getVariantTint(0)); + const shiny2Sprite = globalScene.add + .sprite(0, 0, "shiny_icons") + .setOrigin(0.15, 0.2) + .setScale(0.6) + .setFrame(getVariantIcon(1)) + .setTint(getVariantTint(1)); + const shiny3Sprite = globalScene.add + .sprite(0, 0, "shiny_icons") + .setOrigin(0.15, 0.2) + .setScale(0.6) + .setFrame(getVariantIcon(2)) + .setTint(getVariantTint(2)); const caughtOptions = [ new DropDownOption("SHINY3", new DropDownLabel("", shiny3Sprite)), @@ -604,8 +578,6 @@ export class StarterSelectUiHandler extends MessageUiHandler { ); this.filterBarContainer.add(this.filterBar); - this.starterSelectContainer.add(this.filterBarContainer); - // Offset the generation filter dropdown to avoid covering the filtered pokemon this.filterBar.offsetHybridFilters(); @@ -621,15 +593,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { tone: [0.0, 0.0, 0.0, 0.0], ignoreTimeTint: true, }); - this.starterSelectContainer.add(this.pokemonSprite); - this.pokemonNumberText = addTextObject(17, 1, "0000", TextStyle.SUMMARY_DEX_NUM); - this.pokemonNumberText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonNumberText); + this.pokemonNumberText = addTextObject(17, 1, "0000", TextStyle.SUMMARY_DEX_NUM).setOrigin(0); - this.pokemonNameText = addTextObject(6, 112, "", TextStyle.SUMMARY); - this.pokemonNameText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonNameText); + this.pokemonNameText = addTextObject(6, 112, "", TextStyle.SUMMARY).setOrigin(0); this.pokemonGrowthRateLabelText = addTextObject( 8, @@ -637,18 +604,15 @@ export class StarterSelectUiHandler extends MessageUiHandler { i18next.t("starterSelectUiHandler:growthRate"), TextStyle.SUMMARY_ALT, { fontSize: "36px" }, + ) + .setOrigin(0) + .setVisible(false); + + this.pokemonGrowthRateText = addTextObject(34, 106, "", TextStyle.GROWTH_RATE_TYPE, { fontSize: "36px" }).setOrigin( + 0, ); - this.pokemonGrowthRateLabelText.setOrigin(0, 0); - this.pokemonGrowthRateLabelText.setVisible(false); - this.starterSelectContainer.add(this.pokemonGrowthRateLabelText); - this.pokemonGrowthRateText = addTextObject(34, 106, "", TextStyle.GROWTH_RATE_TYPE, { fontSize: "36px" }); - this.pokemonGrowthRateText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonGrowthRateText); - - this.pokemonGenderText = addTextObject(96, 112, "", TextStyle.SUMMARY_ALT); - this.pokemonGenderText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonGenderText); + this.pokemonGenderText = addTextObject(96, 112, "", TextStyle.SUMMARY_ALT).setOrigin(0); this.pokemonUncaughtText = addTextObject( 6, @@ -656,9 +620,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { i18next.t("starterSelectUiHandler:uncaught"), TextStyle.SUMMARY_ALT, { fontSize: "56px" }, - ); - this.pokemonUncaughtText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonUncaughtText); + ).setOrigin(0); // The position should be set per language const starterInfoXPos = textSettings?.starterInfoXPos || 31; @@ -673,19 +635,15 @@ export class StarterSelectUiHandler extends MessageUiHandler { i18next.t("starterSelectUiHandler:ability"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }, - ); - this.pokemonAbilityLabelText.setOrigin(0, 0); - this.pokemonAbilityLabelText.setVisible(false); - - this.starterSelectContainer.add(this.pokemonAbilityLabelText); + ) + .setOrigin(0) + .setVisible(false); this.pokemonAbilityText = addTextObject(starterInfoXPos, 127 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize, - }); - this.pokemonAbilityText.setOrigin(0, 0); - this.pokemonAbilityText.setInteractive(new Phaser.Geom.Rectangle(0, 0, 250, 55), Phaser.Geom.Rectangle.Contains); - - this.starterSelectContainer.add(this.pokemonAbilityText); + }) + .setOrigin(0) + .setInteractive(new Phaser.Geom.Rectangle(0, 0, 250, 55), Phaser.Geom.Rectangle.Contains); this.pokemonPassiveLabelText = addTextObject( 6, @@ -693,29 +651,27 @@ export class StarterSelectUiHandler extends MessageUiHandler { i18next.t("starterSelectUiHandler:passive"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }, - ); - this.pokemonPassiveLabelText.setOrigin(0, 0); - this.pokemonPassiveLabelText.setVisible(false); - this.starterSelectContainer.add(this.pokemonPassiveLabelText); + ) + .setOrigin(0) + .setVisible(false); this.pokemonPassiveText = addTextObject(starterInfoXPos, 136 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize, - }); - this.pokemonPassiveText.setOrigin(0, 0); - this.pokemonPassiveText.setInteractive(new Phaser.Geom.Rectangle(0, 0, 250, 55), Phaser.Geom.Rectangle.Contains); - this.starterSelectContainer.add(this.pokemonPassiveText); + }) + .setOrigin(0) + .setInteractive(new Phaser.Geom.Rectangle(0, 0, 250, 55), Phaser.Geom.Rectangle.Contains); - this.pokemonPassiveDisabledIcon = globalScene.add.sprite(starterInfoXPos, 137 + starterInfoYOffset, "icon_stop"); - this.pokemonPassiveDisabledIcon.setOrigin(0, 0.5); - this.pokemonPassiveDisabledIcon.setScale(0.35); - this.pokemonPassiveDisabledIcon.setVisible(false); - this.starterSelectContainer.add(this.pokemonPassiveDisabledIcon); + this.pokemonPassiveDisabledIcon = globalScene.add + .sprite(starterInfoXPos, 137 + starterInfoYOffset, "icon_stop") + .setOrigin(0, 0.5) + .setScale(0.35) + .setVisible(false); - this.pokemonPassiveLockedIcon = globalScene.add.sprite(starterInfoXPos, 137 + starterInfoYOffset, "icon_lock"); - this.pokemonPassiveLockedIcon.setOrigin(0, 0.5); - this.pokemonPassiveLockedIcon.setScale(0.42, 0.38); - this.pokemonPassiveLockedIcon.setVisible(false); - this.starterSelectContainer.add(this.pokemonPassiveLockedIcon); + this.pokemonPassiveLockedIcon = globalScene.add + .sprite(starterInfoXPos, 137 + starterInfoYOffset, "icon_lock") + .setOrigin(0, 0.5) + .setScale(0.42, 0.38) + .setVisible(false); this.pokemonNatureLabelText = addTextObject( 6, @@ -723,16 +679,13 @@ export class StarterSelectUiHandler extends MessageUiHandler { i18next.t("starterSelectUiHandler:nature"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize }, - ); - this.pokemonNatureLabelText.setOrigin(0, 0); - this.pokemonNatureLabelText.setVisible(false); - this.starterSelectContainer.add(this.pokemonNatureLabelText); + ) + .setOrigin(0) + .setVisible(false); this.pokemonNatureText = addBBCodeTextObject(starterInfoXPos, 145 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize, - }); - this.pokemonNatureText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonNatureText); + }).setOrigin(0); this.pokemonMoveContainers = []; this.pokemonMoveBgs = []; @@ -742,54 +695,34 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.pokemonEggMoveBgs = []; this.pokemonEggMoveLabels = []; - this.valueLimitLabel = addTextObject(teamWindowX + 17, 150, "0/10", TextStyle.STARTER_VALUE_LIMIT); - this.valueLimitLabel.setOrigin(0.5, 0); - this.starterSelectContainer.add(this.valueLimitLabel); - - const startLabel = addTextObject(teamWindowX + 17, 162, i18next.t("common:start"), TextStyle.TOOLTIP_CONTENT); - startLabel.setOrigin(0.5, 0); - this.starterSelectContainer.add(startLabel); - - this.startCursorObj = globalScene.add.nineslice( - teamWindowX + 4, - 160, - "select_cursor", - undefined, - 26, - 15, - 6, - 6, - 6, - 6, + this.valueLimitLabel = addTextObject(teamWindowX + 17, 150, "0/10", TextStyle.STARTER_VALUE_LIMIT).setOrigin( + 0.5, + 0, ); - this.startCursorObj.setVisible(false); - this.startCursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(this.startCursorObj); + + const startLabel = addTextObject( + teamWindowX + 17, + 162, + i18next.t("common:start"), + TextStyle.TOOLTIP_CONTENT, + ).setOrigin(0.5, 0); + + this.startCursorObj = globalScene.add + .nineslice(teamWindowX + 4, 160, "select_cursor", undefined, 26, 15, 6, 6, 6, 6) + .setVisible(false) + .setOrigin(0); const randomSelectLabel = addTextObject( teamWindowX + 17, 23, i18next.t("starterSelectUiHandler:randomize"), TextStyle.TOOLTIP_CONTENT, - ); - randomSelectLabel.setOrigin(0.5, 0); - this.starterSelectContainer.add(randomSelectLabel); + ).setOrigin(0.5, 0); - this.randomCursorObj = globalScene.add.nineslice( - teamWindowX + 4, - 21, - "select_cursor", - undefined, - 26, - 15, - 6, - 6, - 6, - 6, - ); - this.randomCursorObj.setVisible(false); - this.randomCursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(this.randomCursorObj); + this.randomCursorObj = globalScene.add + .nineslice(teamWindowX + 4, 21, "select_cursor", undefined, 26, 15, 6, 6, 6, 6) + .setVisible(false) + .setOrigin(0); const starterSpecies: SpeciesId[] = []; @@ -803,7 +736,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { for (let i = 0; i < POKERUS_STARTER_COUNT; i++) { const cursorObj = globalScene.add.image(0, 0, "select_cursor_pokerus"); cursorObj.setVisible(false); - cursorObj.setOrigin(0, 0); + cursorObj.setOrigin(0); starterBoxContainer.add(cursorObj); this.pokerusCursorObjs.push(cursorObj); } @@ -812,21 +745,21 @@ export class StarterSelectUiHandler extends MessageUiHandler { for (let i = 0; i < 6; i++) { const cursorObj = globalScene.add.image(0, 0, "select_cursor_highlight"); cursorObj.setVisible(false); - cursorObj.setOrigin(0, 0); + cursorObj.setOrigin(0); starterBoxContainer.add(cursorObj); this.starterCursorObjs.push(cursorObj); } - this.cursorObj = globalScene.add.image(0, 0, "select_cursor"); - this.cursorObj.setOrigin(0, 0); - this.starterIconsCursorObj = globalScene.add.image(289, 64, "select_gen_cursor"); - this.starterIconsCursorObj.setName("starter-icons-cursor"); - this.starterIconsCursorObj.setVisible(false); - this.starterIconsCursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(this.starterIconsCursorObj); + this.cursorObj = globalScene.add.image(0, 0, "select_cursor").setOrigin(0); + this.starterIconsCursorObj = globalScene.add + .image(289, 64, "select_gen_cursor") + .setName("starter-icons-cursor") + .setVisible(false) + .setOrigin(0); starterBoxContainer.add(this.cursorObj); + // TODO: Apply the same logic done in the pokedex to only have 81 containers whose sprites are cycled for (const species of allSpecies) { if (!speciesStarterCosts.hasOwnProperty(species.speciesId) || !species.isObtainable()) { continue; @@ -842,109 +775,74 @@ export class StarterSelectUiHandler extends MessageUiHandler { starterBoxContainer.add(starterContainer); } - this.starterSelectContainer.add(starterBoxContainer); - this.starterIcons = []; for (let i = 0; i < 6; i++) { - const icon = globalScene.add.sprite(teamWindowX + 7, calcStarterIconY(i), "pokemon_icons_0"); - icon.setScale(0.5); - icon.setOrigin(0, 0); - icon.setFrame("unknown"); - this.starterSelectContainer.add(icon); + const icon = globalScene.add + .sprite(teamWindowX + 7, calcStarterIconY(i), "pokemon_icons_0") + .setScale(0.5) + .setOrigin(0) + .setFrame("unknown"); this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.PASSIVE); this.starterIcons.push(icon); } - this.type1Icon = globalScene.add.sprite(8, 98, getLocalizedSpriteKey("types")); - this.type1Icon.setScale(0.5); - this.type1Icon.setOrigin(0, 0); - this.starterSelectContainer.add(this.type1Icon); + this.type1Icon = globalScene.add.sprite(8, 98, getLocalizedSpriteKey("types")).setScale(0.5).setOrigin(0); - this.type2Icon = globalScene.add.sprite(26, 98, getLocalizedSpriteKey("types")); - this.type2Icon.setScale(0.5); - this.type2Icon.setOrigin(0, 0); - this.starterSelectContainer.add(this.type2Icon); + this.type2Icon = globalScene.add.sprite(26, 98, getLocalizedSpriteKey("types")).setScale(0.5).setOrigin(0); this.pokemonLuckLabelText = addTextObject(8, 89, i18next.t("common:luckIndicator"), TextStyle.WINDOW_ALT, { fontSize: "56px", - }); - this.pokemonLuckLabelText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonLuckLabelText); + }).setOrigin(0); this.pokemonLuckText = addTextObject( 8 + this.pokemonLuckLabelText.displayWidth + 2, 89, "0", TextStyle.LUCK_VALUE, - { - fontSize: "56px", - }, - ); - this.pokemonLuckText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonLuckText); + { fontSize: "56px" }, + ).setOrigin(0); // Candy icon and count - this.pokemonCandyContainer = globalScene.add.container(4.5, 18); + this.pokemonCandyContainer = globalScene.add + .container(4.5, 18) + .setInteractive(new Phaser.Geom.Rectangle(0, 0, 30, 20), Phaser.Geom.Rectangle.Contains); + this.pokemonCandyIcon = globalScene.add.sprite(0, 0, "candy").setScale(0.5).setOrigin(0); + this.pokemonCandyOverlayIcon = globalScene.add.sprite(0, 0, "candy_overlay").setScale(0.5).setOrigin(0); + this.pokemonCandyDarknessOverlay = globalScene.add + .sprite(0, 0, "candy") + .setScale(0.5) + .setOrigin(0) + .setTint(0x000000) + .setAlpha(0.5); - this.pokemonCandyIcon = globalScene.add.sprite(0, 0, "candy"); - this.pokemonCandyIcon.setScale(0.5); - this.pokemonCandyIcon.setOrigin(0, 0); - this.pokemonCandyContainer.add(this.pokemonCandyIcon); - - this.pokemonCandyOverlayIcon = globalScene.add.sprite(0, 0, "candy_overlay"); - this.pokemonCandyOverlayIcon.setScale(0.5); - this.pokemonCandyOverlayIcon.setOrigin(0, 0); - this.pokemonCandyContainer.add(this.pokemonCandyOverlayIcon); - - this.pokemonCandyDarknessOverlay = globalScene.add.sprite(0, 0, "candy"); - this.pokemonCandyDarknessOverlay.setScale(0.5); - this.pokemonCandyDarknessOverlay.setOrigin(0, 0); - this.pokemonCandyDarknessOverlay.setTint(0x000000); - this.pokemonCandyDarknessOverlay.setAlpha(0.5); - this.pokemonCandyContainer.add(this.pokemonCandyDarknessOverlay); - - this.pokemonCandyCountText = addTextObject(9.5, 0, "x0", TextStyle.WINDOW_ALT, { fontSize: "56px" }); - this.pokemonCandyCountText.setOrigin(0, 0); - this.pokemonCandyContainer.add(this.pokemonCandyCountText); - - this.pokemonCandyContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, 30, 20), Phaser.Geom.Rectangle.Contains); - this.starterSelectContainer.add(this.pokemonCandyContainer); + this.pokemonCandyCountText = addTextObject(9.5, 0, "x0", TextStyle.WINDOW_ALT, { fontSize: "56px" }).setOrigin(0); + this.pokemonCandyContainer.add([ + this.pokemonCandyIcon, + this.pokemonCandyOverlayIcon, + this.pokemonCandyDarknessOverlay, + this.pokemonCandyCountText, + ]); this.pokemonFormText = addTextObject(6, 42, "Form", TextStyle.WINDOW_ALT, { fontSize: "42px", - }); - this.pokemonFormText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonFormText); + }).setOrigin(0); - this.pokemonCaughtHatchedContainer = globalScene.add.container(2, 25); - this.pokemonCaughtHatchedContainer.setScale(0.5); - this.starterSelectContainer.add(this.pokemonCaughtHatchedContainer); + this.pokemonCaughtHatchedContainer = globalScene.add.container(2, 25).setScale(0.5); - const pokemonCaughtIcon = globalScene.add.sprite(1, 0, "items", "pb"); - pokemonCaughtIcon.setOrigin(0, 0); - pokemonCaughtIcon.setScale(0.75); - this.pokemonCaughtHatchedContainer.add(pokemonCaughtIcon); + const pokemonCaughtIcon = globalScene.add.sprite(1, 0, "items", "pb").setOrigin(0).setScale(0.75); - this.pokemonCaughtCountText = addTextObject(24, 4, "0", TextStyle.SUMMARY_ALT); - this.pokemonCaughtCountText.setOrigin(0, 0); - this.pokemonCaughtHatchedContainer.add(this.pokemonCaughtCountText); - - this.pokemonHatchedIcon = globalScene.add.sprite(1, 14, "egg_icons"); - this.pokemonHatchedIcon.setOrigin(0.15, 0.2); - this.pokemonHatchedIcon.setScale(0.8); - this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedIcon); - - this.pokemonShinyIcon = globalScene.add.sprite(14, 76, "shiny_icons"); - this.pokemonShinyIcon.setOrigin(0.15, 0.2); - this.pokemonShinyIcon.setScale(1); - this.pokemonCaughtHatchedContainer.add(this.pokemonShinyIcon); - - this.pokemonHatchedCountText = addTextObject(24, 19, "0", TextStyle.SUMMARY_ALT); - this.pokemonHatchedCountText.setOrigin(0, 0); - this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText); - - this.pokemonMovesContainer = globalScene.add.container(102, 16); - this.pokemonMovesContainer.setScale(0.375); + this.pokemonCaughtCountText = addTextObject(24, 4, "0", TextStyle.SUMMARY_ALT).setOrigin(0); + this.pokemonHatchedIcon = globalScene.add.sprite(1, 14, "egg_icons").setOrigin(0.15, 0.2).setScale(0.8); + this.pokemonShinyIcon = globalScene.add.sprite(14, 76, "shiny_icons").setOrigin(0.15, 0.2).setScale(1); + this.pokemonHatchedCountText = addTextObject(24, 19, "0", TextStyle.SUMMARY_ALT).setOrigin(0); + this.pokemonMovesContainer = globalScene.add.container(102, 16).setScale(0.375); + this.pokemonCaughtHatchedContainer.add([ + pokemonCaughtIcon, + this.pokemonCaughtCountText, + this.pokemonHatchedIcon, + this.pokemonShinyIcon, + this.pokemonHatchedCountText, + ]); for (let m = 0; m < 4; m++) { const moveContainer = globalScene.add.container(0, 14 * m); @@ -958,8 +856,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.pokemonMoveBgs.push(moveBg); this.pokemonMoveLabels.push(moveLabel); - moveContainer.add(moveBg); - moveContainer.add(moveLabel); + moveContainer.add([moveBg, moveLabel]); this.pokemonMoveContainers.push(moveContainer); this.pokemonMovesContainer.add(moveContainer); @@ -970,18 +867,18 @@ export class StarterSelectUiHandler extends MessageUiHandler { 56, "(+0)", TextStyle.MOVE_LABEL, - ); - this.pokemonAdditionalMoveCountLabel.setOrigin(0.5, 0); + ).setOrigin(0.5, 0); this.pokemonMovesContainer.add(this.pokemonAdditionalMoveCountLabel); - this.starterSelectContainer.add(this.pokemonMovesContainer); + this.pokemonEggMovesContainer = globalScene.add.container(102, 85).setScale(0.375); - this.pokemonEggMovesContainer = globalScene.add.container(102, 85); - this.pokemonEggMovesContainer.setScale(0.375); - - const eggMovesLabel = addTextObject(-46, 0, i18next.t("starterSelectUiHandler:eggMoves"), TextStyle.WINDOW_ALT); - eggMovesLabel.setOrigin(0.5, 0); + const eggMovesLabel = addTextObject( + -46, + 0, + i18next.t("starterSelectUiHandler:eggMoves"), + TextStyle.WINDOW_ALT, + ).setOrigin(0.5, 0); this.pokemonEggMovesContainer.add(eggMovesLabel); @@ -997,143 +894,103 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.pokemonEggMoveBgs.push(eggMoveBg); this.pokemonEggMoveLabels.push(eggMoveLabel); - eggMoveContainer.add(eggMoveBg); - eggMoveContainer.add(eggMoveLabel); + eggMoveContainer.add([eggMoveBg, eggMoveLabel]); this.pokemonEggMoveContainers.push(eggMoveContainer); this.pokemonEggMovesContainer.add(eggMoveContainer); } - this.starterSelectContainer.add(this.pokemonEggMovesContainer); - - this.teraIcon = globalScene.add.sprite(85, 63, "button_tera"); - this.teraIcon.setName("terrastallize-icon"); - this.teraIcon.setFrame("fire"); - this.starterSelectContainer.add(this.teraIcon); + this.teraIcon = globalScene.add.sprite(85, 63, "button_tera").setName("terrastallize-icon").setFrame("fire"); // The font size should be set per language const instructionTextSize = textSettings.instructionTextSize; - this.instructionsContainer = globalScene.add.container(4, 156); - this.instructionsContainer.setVisible(true); - this.starterSelectContainer.add(this.instructionsContainer); + this.instructionsContainer = globalScene.add.container(4, 156).setVisible(true); + + const iRowX = this.instructionRowX; + const iRowY = this.instructionRowY; + const iRowTextX = iRowX + this.instructionRowTextOffset; // instruction rows that will be pushed into the container dynamically based on need // creating new sprites since they will be added to the scene later - this.shinyIconElement = new Phaser.GameObjects.Sprite( - globalScene, - this.instructionRowX, - this.instructionRowY, - "keyboard", - "R.png", - ); - this.shinyIconElement.setName("sprite-shiny-icon-element"); - this.shinyIconElement.setScale(0.675); - this.shinyIconElement.setOrigin(0.0, 0.0); + this.shinyIconElement = new Phaser.GameObjects.Sprite(globalScene, iRowX, iRowY, "keyboard", "R.png") + .setName("sprite-shiny-icon-element") + .setScale(0.675) + .setOrigin(0); this.shinyLabel = addTextObject( - this.instructionRowX + this.instructionRowTextOffset, - this.instructionRowY, + iRowTextX, + iRowY, i18next.t("starterSelectUiHandler:cycleShiny"), TextStyle.INSTRUCTIONS_TEXT, - { fontSize: instructionTextSize }, - ); - this.shinyLabel.setName("text-shiny-label"); + { + fontSize: instructionTextSize, + }, + ).setName("text-shiny-label"); - this.formIconElement = new Phaser.GameObjects.Sprite( - globalScene, - this.instructionRowX, - this.instructionRowY, - "keyboard", - "F.png", - ); - this.formIconElement.setName("sprite-form-icon-element"); - this.formIconElement.setScale(0.675); - this.formIconElement.setOrigin(0.0, 0.0); + this.formIconElement = new Phaser.GameObjects.Sprite(globalScene, iRowX, iRowY, "keyboard", "F.png") + .setName("sprite-form-icon-element") + .setScale(0.675) + .setOrigin(0); this.formLabel = addTextObject( - this.instructionRowX + this.instructionRowTextOffset, - this.instructionRowY, + iRowTextX, + iRowY, i18next.t("starterSelectUiHandler:cycleForm"), TextStyle.INSTRUCTIONS_TEXT, - { fontSize: instructionTextSize }, - ); - this.formLabel.setName("text-form-label"); + { + fontSize: instructionTextSize, + }, + ).setName("text-form-label"); - this.genderIconElement = new Phaser.GameObjects.Sprite( - globalScene, - this.instructionRowX, - this.instructionRowY, - "keyboard", - "G.png", - ); - this.genderIconElement.setName("sprite-gender-icon-element"); - this.genderIconElement.setScale(0.675); - this.genderIconElement.setOrigin(0.0, 0.0); + this.genderIconElement = new Phaser.GameObjects.Sprite(globalScene, iRowX, iRowY, "keyboard", "G.png") + .setName("sprite-gender-icon-element") + .setScale(0.675) + .setOrigin(0); this.genderLabel = addTextObject( - this.instructionRowX + this.instructionRowTextOffset, - this.instructionRowY, + iRowTextX, + iRowY, i18next.t("starterSelectUiHandler:cycleGender"), TextStyle.INSTRUCTIONS_TEXT, { fontSize: instructionTextSize }, - ); - this.genderLabel.setName("text-gender-label"); + ).setName("text-gender-label"); - this.abilityIconElement = new Phaser.GameObjects.Sprite( - globalScene, - this.instructionRowX, - this.instructionRowY, - "keyboard", - "E.png", - ); - this.abilityIconElement.setName("sprite-ability-icon-element"); - this.abilityIconElement.setScale(0.675); - this.abilityIconElement.setOrigin(0.0, 0.0); + this.abilityIconElement = new Phaser.GameObjects.Sprite(globalScene, iRowX, iRowY, "keyboard", "E.png") + .setName("sprite-ability-icon-element") + .setScale(0.675) + .setOrigin(0); this.abilityLabel = addTextObject( - this.instructionRowX + this.instructionRowTextOffset, - this.instructionRowY, + iRowTextX, + iRowY, i18next.t("starterSelectUiHandler:cycleAbility"), TextStyle.INSTRUCTIONS_TEXT, { fontSize: instructionTextSize }, - ); - this.abilityLabel.setName("text-ability-label"); + ).setName("text-ability-label"); - this.natureIconElement = new Phaser.GameObjects.Sprite( - globalScene, - this.instructionRowX, - this.instructionRowY, - "keyboard", - "N.png", - ); - this.natureIconElement.setName("sprite-nature-icon-element"); - this.natureIconElement.setScale(0.675); - this.natureIconElement.setOrigin(0.0, 0.0); + this.natureIconElement = new Phaser.GameObjects.Sprite(globalScene, iRowX, iRowY, "keyboard", "N.png") + .setName("sprite-nature-icon-element") + .setScale(0.675) + .setOrigin(0); this.natureLabel = addTextObject( - this.instructionRowX + this.instructionRowTextOffset, - this.instructionRowY, + iRowTextX, + iRowY, i18next.t("starterSelectUiHandler:cycleNature"), TextStyle.INSTRUCTIONS_TEXT, { fontSize: instructionTextSize }, - ); - this.natureLabel.setName("text-nature-label"); + ).setName("text-nature-label"); - this.teraIconElement = new Phaser.GameObjects.Sprite( - globalScene, - this.instructionRowX, - this.instructionRowY, - "keyboard", - "V.png", - ); - this.teraIconElement.setName("sprite-tera-icon-element"); - this.teraIconElement.setScale(0.675); - this.teraIconElement.setOrigin(0.0, 0.0); + this.teraIconElement = new Phaser.GameObjects.Sprite(globalScene, iRowX, iRowY, "keyboard", "V.png") + .setName("sprite-tera-icon-element") + .setScale(0.675) + .setOrigin(0); this.teraLabel = addTextObject( - this.instructionRowX + this.instructionRowTextOffset, - this.instructionRowY, + iRowTextX, + iRowY, i18next.t("starterSelectUiHandler:cycleTera"), TextStyle.INSTRUCTIONS_TEXT, - { fontSize: instructionTextSize }, - ); - this.teraLabel.setName("text-tera-label"); + { + fontSize: instructionTextSize, + }, + ).setName("text-tera-label"); this.goFilterIconElement = new Phaser.GameObjects.Sprite( globalScene, @@ -1141,48 +998,57 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.filterInstructionRowY, "keyboard", "C.png", - ); - this.goFilterIconElement.setName("sprite-goFilter-icon-element"); - this.goFilterIconElement.setScale(0.675); - this.goFilterIconElement.setOrigin(0.0, 0.0); + ) + .setName("sprite-goFilter-icon-element") + .setScale(0.675) + .setOrigin(0); this.goFilterLabel = addTextObject( this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY, i18next.t("starterSelectUiHandler:goFilter"), TextStyle.INSTRUCTIONS_TEXT, { fontSize: instructionTextSize }, - ); - this.goFilterLabel.setName("text-goFilter-label"); + ).setName("text-goFilter-label"); + + /** TODO: Uncomment this and update `this.hideInstructions` once our testing infra supports mocks of `Phaser.GameObject.Group` */ + /* + this.instructionElemGroup = globalScene.add.group([ + this.shinyIconElement, + this.shinyLabel, + this.formIconElement, + this.formLabel, + this.genderIconElement, + this.genderLabel, + this.abilityIconElement, + this.abilityLabel, + this.natureIconElement, + this.natureLabel, + this.teraIconElement, + this.teraLabel, + this.goFilterIconElement, + this.goFilterLabel, + ]); + */ this.hideInstructions(); - this.filterInstructionsContainer = globalScene.add.container(50, 5); - this.filterInstructionsContainer.setVisible(true); - this.starterSelectContainer.add(this.filterInstructionsContainer); + this.filterInstructionsContainer = globalScene.add.container(50, 5).setVisible(true); - this.starterSelectMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); - this.starterSelectMessageBoxContainer.setVisible(false); - this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); + this.starterSelectMessageBoxContainer = globalScene.add.container(0, sHeight).setVisible(false); - this.starterSelectMessageBox = addWindow(1, -1, 318, 28); - this.starterSelectMessageBox.setOrigin(0, 1); + this.starterSelectMessageBox = addWindow(1, -1, 318, 28).setOrigin(0, 1); this.starterSelectMessageBoxContainer.add(this.starterSelectMessageBox); - this.message = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); - this.message.setOrigin(0, 0); + this.message = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }).setOrigin(0); this.starterSelectMessageBoxContainer.add(this.message); // arrow icon for the message box this.initPromptSprite(this.starterSelectMessageBoxContainer); - this.statsContainer = new StatsContainer(6, 16); + this.statsContainer = new StatsContainer(6, 16).setVisible(false); globalScene.add.existing(this.statsContainer); - this.statsContainer.setVisible(false); - - this.starterSelectContainer.add(this.statsContainer); - // add the info overlay last to be the top most ui element and prevent the IVs from overlaying this const overlayScale = 1; this.moveInfoOverlay = new MoveInfoOverlay({ @@ -1191,10 +1057,65 @@ export class StarterSelectUiHandler extends MessageUiHandler { x: 1, y: globalScene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, }); - this.starterSelectContainer.add(this.moveInfoOverlay); - // Filter bar sits above everything, except the tutorial overlay and message box - this.starterSelectContainer.bringToTop(this.filterBarContainer); + this.starterSelectContainer.add([ + bgColor, + starterSelectBg, + this.shinyOverlay, + starterContainerBg, + addWindow( + teamWindowX, + teamWindowY - randomSelectionWindowHeight, + teamWindowWidth, + randomSelectionWindowHeight, + true, + ), + addWindow(teamWindowX, teamWindowY, teamWindowWidth, teamWindowHeight), + addWindow(teamWindowX, teamWindowY + teamWindowHeight, teamWindowWidth, teamWindowWidth, true), + starterContainerWindow, + this.pokemonSprite, + this.pokemonNumberText, + this.pokemonNameText, + this.pokemonGrowthRateLabelText, + this.pokemonGrowthRateText, + this.pokemonGenderText, + this.pokemonUncaughtText, + this.pokemonAbilityLabelText, + this.pokemonAbilityText, + this.pokemonPassiveLabelText, + this.pokemonPassiveText, + this.pokemonPassiveDisabledIcon, + this.pokemonPassiveLockedIcon, + this.pokemonNatureLabelText, + this.pokemonNatureText, + this.valueLimitLabel, + startLabel, + this.startCursorObj, + randomSelectLabel, + this.randomCursorObj, + this.starterIconsCursorObj, + starterBoxContainer, + ...this.starterIcons, + this.type1Icon, + this.type2Icon, + this.pokemonLuckLabelText, + this.pokemonLuckText, + this.pokemonCandyContainer, + this.pokemonFormText, + this.pokemonCaughtHatchedContainer, + this.pokemonMovesContainer, + this.pokemonEggMovesContainer, + this.teraIcon, + this.instructionsContainer, + this.filterInstructionsContainer, + this.starterSelectMessageBoxContainer, + this.statsContainer, + this.moveInfoOverlay, + // Filter bar sits above everything, except the tutorial overlay and message box. + // Do not put anything below this unless it must appear below the filter bar. + this.filterBarContainer, + ]); + this.initTutorialOverlay(this.starterSelectContainer); this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); @@ -1386,7 +1307,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.starterSelectMessageBox.setSize(318, singleLine ? 28 : 42); if (moveToTop) { - this.starterSelectMessageBox.setOrigin(0, 0); + this.starterSelectMessageBox.setOrigin(0); this.starterSelectMessageBoxContainer.setY(0); this.message.setY(4); } else { @@ -1920,9 +1841,9 @@ export class StarterSelectUiHandler extends MessageUiHandler { true, ); if (!isDupe && isValidForChallenge && isOverValueLimit) { - const cursorObj = this.starterCursorObjs[this.starterSpecies.length]; - cursorObj.setVisible(true); - cursorObj.setPosition(this.cursorObj.x, this.cursorObj.y); + this.starterCursorObjs[this.starterSpecies.length] + .setVisible(true) + .setPosition(this.cursorObj.x, this.cursorObj.y); this.addToParty( this.lastSpecies, this.dexAttrCursor, @@ -2405,9 +2326,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.playSound("se/sparkle"); // Cycle tint based on current sprite tint const tint = getVariantTint(newVariant); - this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant)); - this.pokemonShinyIcon.setTint(tint); - this.pokemonShinyIcon.setVisible(true); + this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant)).setTint(tint).setVisible(true); starterAttributes.shiny = true; } else { @@ -2449,8 +2368,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { }); // Cycle tint based on current sprite tint const tint = getVariantTint(newVariant as Variant); - this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant)); - this.pokemonShinyIcon.setTint(tint); + this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant)).setTint(tint); success = true; } } @@ -2771,56 +2689,64 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.checkIconId(this.starterIcons[index], species, props.female, props.formIndex, props.shiny, props.variant); } - switchMoveHandler(i: number, newMove: MoveId, move: MoveId) { - const speciesId = this.lastSpecies.speciesId; - const existingMoveIndex = this.starterMoveset?.indexOf(newMove)!; // TODO: is this bang correct? - this.starterMoveset![i] = newMove; // TODO: is this bang correct? - if (existingMoveIndex > -1) { - this.starterMoveset![existingMoveIndex] = move; // TODO: is this bang correct? + /** + * Puts a move at the requested index in the current highlighted Pokemon's moveset. + * If the move was already present in the moveset, swap its position with the one at the requested index. + * + * @remarks + * ⚠️ {@linkcode starterMoveset | this.starterMoveset} **must not be null when this method is called** + * @param targetIndex - The index to place the move + * @param newMove - The move to place in the moveset + * @param previousMove - The move that was previously in the spot + */ + switchMoveHandler(targetIndex: number, newMove: MoveId, previousMove: MoveId) { + const starterMoveset = this.starterMoveset; + if (isNullOrUndefined(starterMoveset)) { + console.warn("Trying to update a non-existing moveset"); + return; } - const props: DexAttrProps = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor); + + const speciesId = this.lastSpecies.speciesId; + const existingMoveIndex = starterMoveset.indexOf(newMove); + starterMoveset[targetIndex] = newMove; + if (existingMoveIndex !== -1) { + starterMoveset[existingMoveIndex] = previousMove; + } + const updatedMoveset = starterMoveset.slice() as StarterMoveset; + const formIndex = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor).formIndex; + const starterData = globalScene.gameData.starterData[speciesId]; // species has different forms if (pokemonFormLevelMoves.hasOwnProperty(speciesId)) { - // starterMoveData doesn't have base form moves or is using the single form format - if ( - !globalScene.gameData.starterData[speciesId].moveset || - Array.isArray(globalScene.gameData.starterData[speciesId].moveset) - ) { - globalScene.gameData.starterData[speciesId].moveset = { - [props.formIndex]: this.starterMoveset?.slice(0) as StarterMoveset, - }; - } - const starterMoveData = globalScene.gameData.starterData[speciesId].moveset; - - // starterMoveData doesn't have active form moves - if (!starterMoveData.hasOwnProperty(props.formIndex)) { - globalScene.gameData.starterData[speciesId].moveset[props.formIndex] = this.starterMoveset?.slice( - 0, - ) as StarterMoveset; - } - - // does the species' starter move data have its form's starter moves and has it been updated - if (starterMoveData.hasOwnProperty(props.formIndex)) { - // active form move hasn't been updated - if (starterMoveData[props.formIndex][existingMoveIndex] !== newMove) { - globalScene.gameData.starterData[speciesId].moveset[props.formIndex] = this.starterMoveset?.slice( - 0, - ) as StarterMoveset; - } + // Species has forms with different movesets + if (!starterData.moveset || Array.isArray(starterData.moveset)) { + starterData.moveset = {}; } + starterData.moveset[formIndex] = updatedMoveset; } else { - globalScene.gameData.starterData[speciesId].moveset = this.starterMoveset?.slice(0) as StarterMoveset; + starterData.moveset = updatedMoveset; } this.setSpeciesDetails(this.lastSpecies, { forSeen: false }); - // switch moves of starter if exists - if (this.starterMovesets.length) { - Array.from({ length: this.starterSpecies.length }, (_, i) => { - const starterSpecies = this.starterSpecies[i]; - if (starterSpecies.speciesId === speciesId) { - this.starterMovesets[i] = this.starterMoveset!; // TODO: is this bang correct? - } - }); + this.updateSelectedStarterMoveset(speciesId); + } + + /** + * Update the starter moveset for the given species if it is part of the selected starters. + * + * @remarks + * It is safe to call with a species that is not part of the selected starters. + * + * @param id - The species ID to update the moveset for + */ + private updateSelectedStarterMoveset(id: SpeciesId): void { + if (this.starterMoveset === null) { + return; + } + + for (const [index, species] of this.starterSpecies.entries()) { + if (species.speciesId === id) { + this.starterMovesets[index] = this.starterMoveset; + } } } @@ -2863,12 +2789,14 @@ export class StarterSelectUiHandler extends MessageUiHandler { } else { iconPath = globalScene.inputController?.getIconForLatestInputRecorded(iconSetting); } - // @ts-expect-error: TODO can iconPath actually be undefined? - iconElement.setTexture(gamepadType, iconPath); - iconElement.setPosition(this.instructionRowX, this.instructionRowY); - controlLabel.setPosition(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY); - iconElement.setVisible(true); - controlLabel.setVisible(true); + // The bang for iconPath is correct as long the cases in the above switch statement handle all `SettingKeyboard` values enabled in touch mode + iconElement + .setTexture(gamepadType, iconPath!) + .setPosition(this.instructionRowX, this.instructionRowY) + .setVisible(true); + controlLabel + .setPosition(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY) + .setVisible(true); this.instructionsContainer.add([iconElement, controlLabel]); this.instructionRowY += 8; if (this.instructionRowY >= 24) { @@ -2892,11 +2820,13 @@ export class StarterSelectUiHandler extends MessageUiHandler { } else { iconPath = globalScene.inputController?.getIconForLatestInputRecorded(iconSetting); } - iconElement.setTexture(gamepadType, iconPath); - iconElement.setPosition(this.filterInstructionRowX, this.filterInstructionRowY); - controlLabel.setPosition(this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY); - iconElement.setVisible(true); - controlLabel.setVisible(true); + iconElement + .setTexture(gamepadType, iconPath) + .setPosition(this.filterInstructionRowX, this.filterInstructionRowY) + .setVisible(true); + controlLabel + .setPosition(this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY) + .setVisible(true); this.filterInstructionsContainer.add([iconElement, controlLabel]); this.filterInstructionRowY += 8; if (this.filterInstructionRowY >= 24) { @@ -2994,8 +2924,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.filteredStarterContainers = []; this.validStarterContainers = []; + // biome-ignore-start lint/nursery/useIterableCallbackReturn: benign this.pokerusCursorObjs.forEach(cursor => cursor.setVisible(false)); this.starterCursorObjs.forEach(cursor => cursor.setVisible(false)); + // biome-ignore-end lint/nursery/useIterableCallbackReturn: benign this.filterBar.updateFilterLabels(); @@ -3018,7 +2950,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.gameData.getSpeciesDexAttrProps(species, tempFormProps), true, ); - allFormsValid = allFormsValid || isValidForChallenge; + allFormsValid ||= isValidForChallenge; } } else { const isValidForChallenge = checkStarterValidForChallenge( @@ -3282,6 +3214,9 @@ export class StarterSelectUiHandler extends MessageUiHandler { override destroy(): void { // Without this the reference gets hung up and no startercontainers get GCd this.starterContainers = []; + /* TODO: Uncomment this once our testing infra supports mocks of `Phaser.GameObject.Group` + this.instructionElemGroup.destroy(true); + */ } updateScroll = () => { @@ -3303,28 +3238,28 @@ export class StarterSelectUiHandler extends MessageUiHandler { container.setVisible(false); if (this.pokerusSpecies.includes(container.species)) { - this.pokerusCursorObjs[pokerusCursorIndex].setPosition(pos.x - 1, pos.y + 1); - this.pokerusCursorObjs[pokerusCursorIndex].setVisible(false); + this.pokerusCursorObjs[pokerusCursorIndex].setPosition(pos.x - 1, pos.y + 1).setVisible(false); pokerusCursorIndex++; } if (this.starterSpecies.includes(container.species)) { - this.starterCursorObjs[this.starterSpecies.indexOf(container.species)].setPosition(pos.x - 1, pos.y + 1); - this.starterCursorObjs[this.starterSpecies.indexOf(container.species)].setVisible(false); + this.starterCursorObjs[this.starterSpecies.indexOf(container.species)] + .setPosition(pos.x - 1, pos.y + 1) + .setVisible(false); } return; } container.setVisible(true); if (this.pokerusSpecies.includes(container.species)) { - this.pokerusCursorObjs[pokerusCursorIndex].setPosition(pos.x - 1, pos.y + 1); - this.pokerusCursorObjs[pokerusCursorIndex].setVisible(true); + this.pokerusCursorObjs[pokerusCursorIndex].setPosition(pos.x - 1, pos.y + 1).setVisible(true); pokerusCursorIndex++; } if (this.starterSpecies.includes(container.species)) { - this.starterCursorObjs[this.starterSpecies.indexOf(container.species)].setPosition(pos.x - 1, pos.y + 1); - this.starterCursorObjs[this.starterSpecies.indexOf(container.species)].setVisible(true); + this.starterCursorObjs[this.starterSpecies.indexOf(container.species)] + .setPosition(pos.x - 1, pos.y + 1) + .setVisible(true); } const speciesId = container.species.speciesId; @@ -3400,8 +3335,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { ? (this.starterPreferences[species.speciesId].variant as Variant) : defaultProps.variant; const tint = getVariantTint(variant); - this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); - this.pokemonShinyIcon.setTint(tint); + this.pokemonShinyIcon.setFrame(getVariantIcon(variant)).setTint(tint); this.setSpecies(species); this.updateInstructions(); } @@ -3429,8 +3363,11 @@ export class StarterSelectUiHandler extends MessageUiHandler { } moveStarterIconsCursor(index: number): void { - this.starterIconsCursorObj.x = this.starterIcons[index].x + this.starterIconsCursorXOffset; - this.starterIconsCursorObj.y = this.starterIcons[index].y + this.starterIconsCursorYOffset; + this.starterIconsCursorObj.setPositionRelative( + this.starterIcons[index], + this.starterIconsCursorXOffset, + this.starterIconsCursorYOffset, + ); if (this.starterSpecies.length > 0) { this.starterIconsCursorObj.setVisible(true); this.setSpecies(this.starterSpecies[index]); @@ -3521,9 +3458,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { const colorScheme = starterColors[species.speciesId]; const luck = globalScene.gameData.getDexAttrLuck(this.speciesStarterDexEntry.caughtAttr); - this.pokemonLuckText.setVisible(!!luck); - this.pokemonLuckText.setText(luck.toString()); - this.pokemonLuckText.setTint(getVariantTint(Math.min(luck - 1, 2) as Variant)); + this.pokemonLuckText + .setVisible(!!luck) + .setText(luck.toString()) + .setTint(getVariantTint(Math.min(luck - 1, 2) as Variant)); this.pokemonLuckLabelText.setVisible(this.pokemonLuckText.visible); //Growth translate @@ -3532,10 +3470,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { if (i18next.exists("growth:" + growthAux)) { growthReadable = i18next.t(("growth:" + growthAux) as any); } - this.pokemonGrowthRateText.setText(growthReadable); - - this.pokemonGrowthRateText.setColor(getGrowthRateColor(species.growthRate)); - this.pokemonGrowthRateText.setShadowColor(getGrowthRateColor(species.growthRate, true)); + this.pokemonGrowthRateText + .setText(growthReadable) + .setColor(getGrowthRateColor(species.growthRate)) + .setShadowColor(getGrowthRateColor(species.growthRate, true)); this.pokemonGrowthRateLabelText.setVisible(true); this.pokemonUncaughtText.setVisible(false); this.pokemonAbilityLabelText.setVisible(true); @@ -3553,16 +3491,13 @@ export class StarterSelectUiHandler extends MessageUiHandler { const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); const variant = defaultProps.variant; const tint = getVariantTint(variant); - this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); - this.pokemonShinyIcon.setTint(tint); - this.pokemonShinyIcon.setVisible(defaultProps.shiny); + this.pokemonShinyIcon.setFrame(getVariantIcon(variant)).setTint(tint).setVisible(defaultProps.shiny); this.pokemonCaughtHatchedContainer.setVisible(true); this.pokemonFormText.setVisible(true); if (pokemonPrevolutions.hasOwnProperty(species.speciesId)) { this.pokemonCaughtHatchedContainer.setY(16); - this.pokemonShinyIcon.setY(135); - this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); + this.pokemonShinyIcon.setY(135).setFrame(getVariantIcon(variant)); [this.pokemonCandyContainer, this.pokemonHatchedIcon, this.pokemonHatchedCountText].map(c => c.setVisible(false), ); @@ -3573,7 +3508,6 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); this.pokemonCandyCountText.setText(`×${globalScene.gameData.starterData[species.speciesId].candyCount}`); - this.pokemonCandyContainer.setVisible(true); this.pokemonFormText.setY(42); this.pokemonHatchedIcon.setVisible(true); this.pokemonHatchedCountText.setVisible(true); @@ -3582,14 +3516,16 @@ export class StarterSelectUiHandler extends MessageUiHandler { const candyCropY = 16 - 16 * (currentFriendship / friendshipCap); this.pokemonCandyDarknessOverlay.setCrop(0, 0, 16, candyCropY); - this.pokemonCandyContainer.on("pointerover", () => { - globalScene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true); - this.activeTooltip = "CANDY"; - }); - this.pokemonCandyContainer.on("pointerout", () => { - globalScene.ui.hideTooltip(); - this.activeTooltip = undefined; - }); + this.pokemonCandyContainer + .setVisible(true) + .on("pointerover", () => { + globalScene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true); + this.activeTooltip = "CANDY"; + }) + .on("pointerout", () => { + globalScene.ui.hideTooltip(); + this.activeTooltip = undefined; + }); } // Pause the animation when the species is selected @@ -3646,6 +3582,11 @@ export class StarterSelectUiHandler extends MessageUiHandler { }); } + if (!isNullOrUndefined(props.formIndex)) { + // If switching forms while the pokemon is in the team, update its moveset + this.updateSelectedStarterMoveset(species.speciesId); + } + const speciesForm = getPokemonSpeciesForm(species.speciesId, props.formIndex); this.setTypeIcons(speciesForm.type1, speciesForm.type2); @@ -3846,19 +3787,21 @@ export class StarterSelectUiHandler extends MessageUiHandler { const assetLoadCancelled = new BooleanHolder(false); this.assetLoadCancelled = assetLoadCancelled; + female ??= false; if (shouldUpdateSprite) { - species.loadAssets(female!, formIndex, shiny, variant, true).then(() => { - // TODO: is this bang correct? + species.loadAssets(female, formIndex, shiny, variant, true).then(() => { if (assetLoadCancelled.value) { return; } this.assetLoadCancelled = null; this.speciesLoaded.set(species.speciesId, true); - this.pokemonSprite.play(species.getSpriteKey(female!, formIndex, shiny, variant)); // TODO: is this bang correct? - this.pokemonSprite.setPipelineData("shiny", shiny); - this.pokemonSprite.setPipelineData("variant", variant); - this.pokemonSprite.setPipelineData("spriteKey", species.getSpriteKey(female!, formIndex, shiny, variant)); // TODO: is this bang correct? - this.pokemonSprite.setVisible(!this.statsMode); + // Note: Bangs are correct due to `female ??= false` above + this.pokemonSprite + .play(species.getSpriteKey(female!, formIndex, shiny, variant)) + .setPipelineData("shiny", shiny) + .setPipelineData("variant", variant) + .setPipelineData("spriteKey", species.getSpriteKey(female!, formIndex, shiny, variant)) + .setVisible(!this.statsMode); }); } else { this.pokemonSprite.setVisible(!this.statsMode); @@ -3871,7 +3814,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { const starterSprite = currentFilteredContainer.icon as Phaser.GameObjects.Sprite; starterSprite.setTexture( species.getIconAtlasKey(formIndex, shiny, variant), - species.getIconId(female!, formIndex, shiny, variant), + species.getIconId(female, formIndex, shiny, variant), ); currentFilteredContainer.checkIconId(female, formIndex, shiny, variant); } @@ -3917,9 +3860,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { if (dexEntry.caughtAttr && species.malePercent !== null) { const gender = !female ? Gender.MALE : Gender.FEMALE; - this.pokemonGenderText.setText(getGenderSymbol(gender)); - this.pokemonGenderText.setColor(getGenderColor(gender)); - this.pokemonGenderText.setShadowColor(getGenderColor(gender, true)); + this.pokemonGenderText + .setText(getGenderSymbol(gender)) + .setColor(getGenderColor(gender)) + .setShadowColor(getGenderColor(gender, true)); } else { this.pokemonGenderText.setText(""); } @@ -3931,13 +3875,12 @@ export class StarterSelectUiHandler extends MessageUiHandler { } else { ability = allAbilities[this.lastSpecies.getAbility(abilityIndex!)]; // TODO: is this bang correct? } - this.pokemonAbilityText.setText(ability.name); const isHidden = abilityIndex === (this.lastSpecies.ability2 ? 2 : 1); - this.pokemonAbilityText.setColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD)); - this.pokemonAbilityText.setShadowColor( - this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD, true), - ); + this.pokemonAbilityText + .setText(ability.name) + .setColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD)) + .setShadowColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD, true)); const passiveAttr = globalScene.gameData.starterData[species.speciesId].passiveAttr; const passiveAbility = allAbilities[this.lastSpecies.getPassiveAbility(formIndex)]; @@ -3964,14 +3907,16 @@ export class StarterSelectUiHandler extends MessageUiHandler { const textStyle = isUnlocked && isEnabled ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GRAY; const textAlpha = isUnlocked && isEnabled ? 1 : 0.5; - this.pokemonPassiveLabelText.setVisible(true); - this.pokemonPassiveLabelText.setColor(this.getTextColor(TextStyle.SUMMARY_ALT)); - this.pokemonPassiveLabelText.setShadowColor(this.getTextColor(TextStyle.SUMMARY_ALT, true)); - this.pokemonPassiveText.setVisible(true); - this.pokemonPassiveText.setText(passiveAbility.name); - this.pokemonPassiveText.setColor(this.getTextColor(textStyle)); - this.pokemonPassiveText.setAlpha(textAlpha); - this.pokemonPassiveText.setShadowColor(this.getTextColor(textStyle, true)); + this.pokemonPassiveLabelText + .setVisible(true) + .setColor(this.getTextColor(TextStyle.SUMMARY_ALT)) + .setShadowColor(this.getTextColor(TextStyle.SUMMARY_ALT, true)); + this.pokemonPassiveText + .setVisible(true) + .setText(passiveAbility.name) + .setColor(this.getTextColor(textStyle)) + .setAlpha(textAlpha) + .setShadowColor(this.getTextColor(textStyle, true)); if (this.activeTooltip === "PASSIVE") { globalScene.ui.editTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`); @@ -3992,10 +3937,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { x: this.pokemonPassiveText.x + this.pokemonPassiveText.displayWidth + 1, y: this.pokemonPassiveText.y + this.pokemonPassiveText.displayHeight / 2, }; - this.pokemonPassiveDisabledIcon.setVisible(isUnlocked && !isEnabled); - this.pokemonPassiveDisabledIcon.setPosition(iconPosition.x, iconPosition.y); - this.pokemonPassiveLockedIcon.setVisible(!isUnlocked); - this.pokemonPassiveLockedIcon.setPosition(iconPosition.x, iconPosition.y); + this.pokemonPassiveDisabledIcon + .setVisible(isUnlocked && !isEnabled) + .setPosition(iconPosition.x, iconPosition.y); + this.pokemonPassiveLockedIcon.setVisible(!isUnlocked).setPosition(iconPosition.x, iconPosition.y); } else if (this.activeTooltip === "PASSIVE") { // No passive and passive tooltip is active > hide it globalScene.ui.hideTooltip(); @@ -4073,8 +4018,9 @@ export class StarterSelectUiHandler extends MessageUiHandler { } } else { this.shinyOverlay.setVisible(false); - this.pokemonNumberText.setColor(this.getTextColor(TextStyle.SUMMARY)); - this.pokemonNumberText.setShadowColor(this.getTextColor(TextStyle.SUMMARY, true)); + this.pokemonNumberText + .setColor(this.getTextColor(TextStyle.SUMMARY)) + .setShadowColor(this.getTextColor(TextStyle.SUMMARY, true)); this.pokemonGenderText.setText(""); this.pokemonAbilityText.setText(""); this.pokemonPassiveText.setText(""); @@ -4107,8 +4053,9 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.pokemonEggMovesContainer.setVisible(!!this.speciesStarterDexEntry?.caughtAttr && hasEggMoves); - this.pokemonAdditionalMoveCountLabel.setText(`(+${Math.max(this.speciesStarterMoves.length - 4, 0)})`); - this.pokemonAdditionalMoveCountLabel.setVisible(this.speciesStarterMoves.length > 4); + this.pokemonAdditionalMoveCountLabel + .setText(`(+${Math.max(this.speciesStarterMoves.length - 4, 0)})`) + .setVisible(this.speciesStarterMoves.length > 4); this.tryUpdateValue(); @@ -4117,14 +4064,12 @@ export class StarterSelectUiHandler extends MessageUiHandler { setTypeIcons(type1: PokemonType | null, type2: PokemonType | null): void { if (type1 !== null) { - this.type1Icon.setVisible(true); - this.type1Icon.setFrame(PokemonType[type1].toLowerCase()); + this.type1Icon.setVisible(true).setFrame(PokemonType[type1].toLowerCase()); } else { this.type1Icon.setVisible(false); } if (type2 !== null) { - this.type2Icon.setVisible(true); - this.type2Icon.setFrame(PokemonType[type2].toLowerCase()); + this.type2Icon.setVisible(true).setFrame(PokemonType[type2].toLowerCase()); } else { this.type2Icon.setVisible(false); } @@ -4142,17 +4087,18 @@ export class StarterSelectUiHandler extends MessageUiHandler { const species = this.starterSpecies[s]; const currentDexAttr = this.getCurrentDexProps(species.speciesId); const props = globalScene.gameData.getSpeciesDexAttrProps(species, currentDexAttr); - this.starterIcons[s].setTexture(species.getIconAtlasKey(props.formIndex, props.shiny, props.variant)); - this.starterIcons[s].setFrame(species.getIconId(props.female, props.formIndex, props.shiny, props.variant)); + this.starterIcons[s] + .setTexture(species.getIconAtlasKey(props.formIndex, props.shiny, props.variant)) + .setFrame(species.getIconId(props.female, props.formIndex, props.shiny, props.variant)); this.checkIconId(this.starterIcons[s], species, props.female, props.formIndex, props.shiny, props.variant); if (s >= index) { - this.starterCursorObjs[s].setPosition(this.starterCursorObjs[s + 1].x, this.starterCursorObjs[s + 1].y); - this.starterCursorObjs[s].setVisible(this.starterCursorObjs[s + 1].visible); + this.starterCursorObjs[s] + .setPosition(this.starterCursorObjs[s + 1].x, this.starterCursorObjs[s + 1].y) + .setVisible(this.starterCursorObjs[s + 1].visible); } } this.starterCursorObjs[this.starterSpecies.length].setVisible(false); - this.starterIcons[this.starterSpecies.length].setTexture("pokemon_icons_0"); - this.starterIcons[this.starterSpecies.length].setFrame("unknown"); + this.starterIcons[this.starterSpecies.length].setTexture("pokemon_icons_0").setFrame("unknown"); if (this.starterIconsCursorObj.visible) { if (this.starterIconsCursorIndex === this.starterSpecies.length) { @@ -4173,7 +4119,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { if (this.filteredStarterContainers.length > 0) { // Back to the first Pokemon if there is one this.cursorObj.setVisible(true); - this.setCursor(0 + this.scrollCursor * 9); + this.setCursor(this.scrollCursor * 9); } else { // Back to filters this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); @@ -4208,8 +4154,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { break; } if (baseStarterValue - starterValue > 0) { - starter.label.setColor(this.getTextColor(textStyle)); - starter.label.setShadowColor(this.getTextColor(textStyle, true)); + starter.label.setColor(this.getTextColor(textStyle)).setShadowColor(this.getTextColor(textStyle, true)); } } @@ -4228,16 +4173,15 @@ export class StarterSelectUiHandler extends MessageUiHandler { if (newValueStr.startsWith("0.")) { newValueStr = newValueStr.slice(1); } - this.valueLimitLabel.setText(`${newValueStr}/${valueLimit}`); - this.valueLimitLabel.setColor(this.getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK)); - this.valueLimitLabel.setShadowColor( - this.getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK, true), - ); + this.valueLimitLabel + .setText(`${newValueStr}/${valueLimit}`) + .setColor(this.getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK)) + .setShadowColor(this.getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK, true)); if (overLimit) { globalScene.time.delayedCall(fixedInt(500), () => this.tryUpdateValue()); return false; } - let isPartyValid: boolean = this.isPartyValid(); + let isPartyValid = this.isPartyValid(); if (addingToParty) { const species = this.filteredStarterContainers[this.cursor].species; const isNewPokemonValid = checkStarterValidForChallenge( @@ -4245,7 +4189,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false, ); - isPartyValid = isPartyValid || isNewPokemonValid; + isPartyValid ||= isNewPokemonValid; } /** @@ -4420,7 +4364,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false, ); - canStart = canStart || isValidForChallenge; + canStart ||= isValidForChallenge; } return canStart; } @@ -4532,6 +4476,8 @@ export class StarterSelectUiHandler extends MessageUiHandler { } hideInstructions(): void { + // TODO: uncomment this and delete the rest of the method once our testing infra supports mocks of `Phaser.GameObject.Group` + // this.instructionElemGroup.setVisible(false); this.shinyIconElement.setVisible(false); this.shinyLabel.setVisible(false); this.formIconElement.setVisible(false); @@ -4581,8 +4527,9 @@ export class StarterSelectUiHandler extends MessageUiHandler { console.log( `${species.name}'s icon ${icon.frame.name} does not match getIconId with female: ${female}, formIndex: ${formIndex}, shiny: ${shiny}, variant: ${variant}`, ); - icon.setTexture(species.getIconAtlasKey(formIndex, false, variant)); - icon.setFrame(species.getIconId(female, formIndex, false, variant)); + icon + .setTexture(species.getIconAtlasKey(formIndex, false, variant)) + .setFrame(species.getIconId(female, formIndex, false, variant)); } } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 4c8f0613122..847294dcfc6 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -13,6 +13,7 @@ import { BallUiHandler } from "#ui/ball-ui-handler"; import { BattleMessageUiHandler } from "#ui/battle-message-ui-handler"; import type { BgmBar } from "#ui/bgm-bar"; import { GameChallengesUiHandler } from "#ui/challenges-select-ui-handler"; +import { ChangePasswordFormUiHandler } from "#ui/change-password-form-ui-handler"; import { CommandUiHandler } from "#ui/command-ui-handler"; import { ConfirmUiHandler } from "#ui/confirm-ui-handler"; import { EggGachaUiHandler } from "#ui/egg-gacha-ui-handler"; @@ -102,6 +103,7 @@ const noTransitionModes = [ UiMode.ADMIN, UiMode.MYSTERY_ENCOUNTER, UiMode.RUN_INFO, + UiMode.CHANGE_PASSWORD_FORM, ]; export class UI extends Phaser.GameObjects.Container { @@ -172,6 +174,7 @@ export class UI extends Phaser.GameObjects.Container { new AutoCompleteUiHandler(), new AdminUiHandler(), new MysteryEncounterUiHandler(), + new ChangePasswordFormUiHandler(), ]; } diff --git a/src/utils/common.ts b/src/utils/common.ts index 64e6d6fed1c..aac1ef359e6 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -440,6 +440,7 @@ export function hasAllLocalizedSprites(lang?: string): boolean { case "ja": case "ca": case "ru": + case "tl": return true; default: return false; diff --git a/src/utils/pokemon-utils.ts b/src/utils/pokemon-utils.ts index da39cfe11ad..8de0a3bfcf1 100644 --- a/src/utils/pokemon-utils.ts +++ b/src/utils/pokemon-utils.ts @@ -1,6 +1,9 @@ +import { globalScene } from "#app/global-scene"; +import { POKERUS_STARTER_COUNT, speciesStarterCosts } from "#balance/starters"; import { allSpecies } from "#data/data-lists"; -import type { PokemonSpecies } from "#data/pokemon-species"; +import type { PokemonSpecies, PokemonSpeciesForm } from "#data/pokemon-species"; import type { SpeciesId } from "#enums/species-id"; +import { randSeedItem } from "./common"; /** * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode SpeciesId} enum given @@ -19,3 +22,104 @@ export function getPokemonSpecies(species: SpeciesId | SpeciesId[]): PokemonSpec } return allSpecies[species - 1]; } + +/** + * Method to get the daily list of starters with Pokerus. + * @returns A list of starters with Pokerus + */ +export function getPokerusStarters(): PokemonSpecies[] { + const pokerusStarters: PokemonSpecies[] = []; + const date = new Date(); + date.setUTCHours(0, 0, 0, 0); + globalScene.executeWithSeedOffset( + () => { + while (pokerusStarters.length < POKERUS_STARTER_COUNT) { + const randomSpeciesId = Number.parseInt(randSeedItem(Object.keys(speciesStarterCosts)), 10); + const species = getPokemonSpecies(randomSpeciesId); + if (!pokerusStarters.includes(species)) { + pokerusStarters.push(species); + } + } + }, + 0, + date.getTime().toString(), + ); + return pokerusStarters; +} + +export function getFusedSpeciesName(speciesAName: string, speciesBName: string): string { + const fragAPattern = /([a-z]{2}.*?[aeiou(?:y$)\-']+)(.*?)$/i; + const fragBPattern = /([a-z]{2}.*?[aeiou(?:y$)\-'])(.*?)$/i; + + const [speciesAPrefixMatch, speciesBPrefixMatch] = [speciesAName, speciesBName].map(n => /^(?:[^ ]+) /.exec(n)); + const [speciesAPrefix, speciesBPrefix] = [speciesAPrefixMatch, speciesBPrefixMatch].map(m => (m ? m[0] : "")); + + if (speciesAPrefix) { + speciesAName = speciesAName.slice(speciesAPrefix.length); + } + if (speciesBPrefix) { + speciesBName = speciesBName.slice(speciesBPrefix.length); + } + + const [speciesASuffixMatch, speciesBSuffixMatch] = [speciesAName, speciesBName].map(n => / (?:[^ ]+)$/.exec(n)); + const [speciesASuffix, speciesBSuffix] = [speciesASuffixMatch, speciesBSuffixMatch].map(m => (m ? m[0] : "")); + + if (speciesASuffix) { + speciesAName = speciesAName.slice(0, -speciesASuffix.length); + } + if (speciesBSuffix) { + speciesBName = speciesBName.slice(0, -speciesBSuffix.length); + } + + const splitNameA = speciesAName.split(/ /g); + const splitNameB = speciesBName.split(/ /g); + + const fragAMatch = fragAPattern.exec(speciesAName); + const fragBMatch = fragBPattern.exec(speciesBName); + + let fragA: string; + let fragB: string; + + fragA = splitNameA.length === 1 ? (fragAMatch ? fragAMatch[1] : speciesAName) : splitNameA[splitNameA.length - 1]; + + if (splitNameB.length === 1) { + if (fragBMatch) { + const lastCharA = fragA.slice(fragA.length - 1); + const prevCharB = fragBMatch[1].slice(fragBMatch.length - 1); + fragB = (/[-']/.test(prevCharB) ? prevCharB : "") + fragBMatch[2] || prevCharB; + if (lastCharA === fragB[0]) { + if (/[aiu]/.test(lastCharA)) { + fragB = fragB.slice(1); + } else { + const newCharMatch = new RegExp(`[^${lastCharA}]`).exec(fragB); + if (newCharMatch?.index !== undefined && newCharMatch.index > 0) { + fragB = fragB.slice(newCharMatch.index); + } + } + } + } else { + fragB = speciesBName; + } + } else { + fragB = splitNameB[splitNameB.length - 1]; + } + + if (splitNameA.length > 1) { + fragA = `${splitNameA.slice(0, splitNameA.length - 1).join(" ")} ${fragA}`; + } + + fragB = `${fragB.slice(0, 1).toLowerCase()}${fragB.slice(1)}`; + + return `${speciesAPrefix || speciesBPrefix}${fragA}${fragB}${speciesBSuffix || speciesASuffix}`; +} + +export function getPokemonSpeciesForm(species: SpeciesId, formIndex: number): PokemonSpeciesForm { + const retSpecies: PokemonSpecies = + species >= 2000 + ? allSpecies.find(s => s.speciesId === species)! // TODO: is the bang correct? + : allSpecies[species - 1]; + if (formIndex < retSpecies.forms?.length) { + return retSpecies.forms[formIndex]; + } + return retSpecies; +} diff --git a/src/vite.env.d.ts b/src/vite.env.d.ts index a2acc658a10..68159908730 100644 --- a/src/vite.env.d.ts +++ b/src/vite.env.d.ts @@ -1,16 +1,16 @@ /// interface ImportMetaEnv { - readonly VITE_PORT?: string; - readonly VITE_BYPASS_LOGIN?: string; - readonly VITE_BYPASS_TUTORIAL?: string; - readonly VITE_API_BASE_URL?: string; - readonly VITE_SERVER_URL?: string; - readonly VITE_DISCORD_CLIENT_ID?: string; - readonly VITE_GOOGLE_CLIENT_ID?: string; - readonly VITE_I18N_DEBUG?: string; + readonly VITE_PORT?: string; + readonly VITE_BYPASS_LOGIN?: string; + readonly VITE_BYPASS_TUTORIAL?: string; + readonly VITE_API_BASE_URL?: string; + readonly VITE_SERVER_URL?: string; + readonly VITE_DISCORD_CLIENT_ID?: string; + readonly VITE_GOOGLE_CLIENT_ID?: string; + readonly VITE_I18N_DEBUG?: string; } interface ImportMeta { - readonly env: ImportMetaEnv + readonly env: ImportMetaEnv; } diff --git a/test/@types/vitest.d.ts b/test/@types/vitest.d.ts index 58b36580727..7b756c45a57 100644 --- a/test/@types/vitest.d.ts +++ b/test/@types/vitest.d.ts @@ -1,26 +1,139 @@ -import type { Pokemon } from "#field/pokemon"; +import type { TerrainType } from "#app/data/terrain"; +import type { AbilityId } from "#enums/ability-id"; +import type { BattlerTagType } from "#enums/battler-tag-type"; +import type { MoveId } from "#enums/move-id"; import type { PokemonType } from "#enums/pokemon-type"; -import type { expect } from "vitest"; +import type { BattleStat, EffectiveStat, Stat } from "#enums/stat"; +import type { StatusEffect } from "#enums/status-effect"; +import type { WeatherType } from "#enums/weather-type"; +import type { Pokemon } from "#field/pokemon"; +import type { ToHaveEffectiveStatMatcherOptions } from "#test/test-utils/matchers/to-have-effective-stat"; +import type { expectedStatusType } from "#test/test-utils/matchers/to-have-status-effect"; import type { toHaveTypesOptions } from "#test/test-utils/matchers/to-have-types"; +import type { TurnMove } from "#types/turn-move"; +import type { AtLeastOne } from "#types/type-helpers"; +import type { expect } from "vitest"; +import type Overrides from "#app/overrides"; +import type { PokemonMove } from "#moves/pokemon-move"; declare module "vitest" { interface Assertion { /** - * Matcher to check if an array contains EXACTLY the given items (in any order). + * Check whether an array contains EXACTLY the given items (in any order). * - * Different from {@linkcode expect.arrayContaining} as the latter only requires the array contain - * _at least_ the listed items. + * Different from {@linkcode expect.arrayContaining} as the latter only checks for subset equality + * (as opposed to full equality). * - * @param expected - The expected contents of the array, in any order. + * @param expected - The expected contents of the array, in any order * @see {@linkcode expect.arrayContaining} */ toEqualArrayUnsorted(expected: E[]): void; + /** - * Matcher to check if a {@linkcode Pokemon}'s current typing includes the given types. + * Check whether a {@linkcode Pokemon}'s current typing includes the given types. * - * @param expected - The expected types (in any order). - * @param options - The options passed to the matcher. + * @param expected - The expected types (in any order) + * @param options - The options passed to the matcher */ - toHaveTypes(expected: PokemonType[], options?: toHaveTypesOptions): void; + toHaveTypes(expected: [PokemonType, ...PokemonType[]], options?: toHaveTypesOptions): void; + + /** + * Matcher to check the contents of a {@linkcode Pokemon}'s move history. + * + * @param expectedValue - The expected value; can be a {@linkcode MoveId} or a partially filled {@linkcode TurnMove} + * containing the desired properties to check + * @param index - The index of the move history entry to check, in order from most recent to least recent. + * Default `0` (last used move) + * @see {@linkcode Pokemon.getLastXMoves} + */ + toHaveUsedMove(expected: MoveId | AtLeastOne, index?: number): void; + + /** + * Check whether a {@linkcode Pokemon}'s effective stat is as expected + * (checked after all stat value modifications). + * + * @param stat - The {@linkcode EffectiveStat} to check + * @param expectedValue - The expected value of {@linkcode stat} + * @param options - (Optional) The {@linkcode ToHaveEffectiveStatMatcherOptions} + * @remarks + * If you want to check the stat **before** modifiers are applied, use {@linkcode Pokemon.getStat} instead. + */ + toHaveEffectiveStat(stat: EffectiveStat, expectedValue: number, options?: ToHaveEffectiveStatMatcherOptions): void; + + /** + * Check whether a {@linkcode Pokemon} has taken a specific amount of damage. + * @param expectedDamageTaken - The expected amount of damage taken + * @param roundDown - Whether to round down {@linkcode expectedDamageTaken} with {@linkcode toDmgValue}; default `true` + */ + toHaveTakenDamage(expectedDamageTaken: number, roundDown?: boolean): void; + + /** + * Check whether the current {@linkcode WeatherType} is as expected. + * @param expectedWeatherType - The expected {@linkcode WeatherType} + */ + toHaveWeather(expectedWeatherType: WeatherType): void; + + /** + * Check whether the current {@linkcode TerrainType} is as expected. + * @param expectedTerrainType - The expected {@linkcode TerrainType} + */ + toHaveTerrain(expectedTerrainType: TerrainType): void; + + /** + * Check whether a {@linkcode Pokemon} is at full HP. + */ + toHaveFullHp(): void; + + /** + * Check whether a {@linkcode Pokemon} has a specific {@linkcode StatusEffect | non-volatile status effect}. + * @param expectedStatusEffect - The {@linkcode StatusEffect} the Pokemon is expected to have, + * or a partially filled {@linkcode Status} containing the desired properties + */ + toHaveStatusEffect(expectedStatusEffect: expectedStatusType): void; + + /** + * Check whether a {@linkcode Pokemon} has a specific {@linkcode Stat} stage. + * @param stat - The {@linkcode BattleStat} to check + * @param expectedStage - The expected stat stage value of {@linkcode stat} + */ + toHaveStatStage(stat: BattleStat, expectedStage: number): void; + + /** + * Check whether a {@linkcode Pokemon} has a specific {@linkcode BattlerTagType}. + * @param expectedBattlerTagType - The expected {@linkcode BattlerTagType} + */ + toHaveBattlerTag(expectedBattlerTagType: BattlerTagType): void; + + /** + * Check whether a {@linkcode Pokemon} has applied a specific {@linkcode AbilityId}. + * @param expectedAbilityId - The expected {@linkcode AbilityId} + */ + toHaveAbilityApplied(expectedAbilityId: AbilityId): void; + + /** + * Check whether a {@linkcode Pokemon} has a specific amount of {@linkcode Stat.HP | HP}. + * @param expectedHp - The expected amount of {@linkcode Stat.HP | HP} to have + */ + toHaveHp(expectedHp: number): void; + + /** + * Check whether a {@linkcode Pokemon} is currently fainted (as determined by {@linkcode Pokemon.isFainted}). + * @remarks + * When checking whether an enemy wild Pokemon is fainted, one must reference it in a variable _before_ the fainting effect occurs + * as otherwise the Pokemon will be GC'ed and rendered `undefined`. + */ + toHaveFainted(): void; + + /** + * Check whether a {@linkcode Pokemon} has consumed the given amount of PP for one of its moves. + * @param expectedValue - The {@linkcode MoveId} of the {@linkcode PokemonMove} that should have consumed PP + * @param ppUsed - The numerical amount of PP that should have been consumed, + * or `all` to indicate the move should be _out_ of PP + * @remarks + * If the Pokemon's moveset has been set via {@linkcode Overrides.MOVESET_OVERRIDE}/{@linkcode Overrides.OPP_MOVESET_OVERRIDE}, + * does not contain {@linkcode expectedMove} + * or contains the desired move more than once, this will fail the test. + */ + toHaveUsedPP(expectedMove: MoveId, ppUsed: number | "all"): void; } -} \ No newline at end of file +} diff --git a/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts index d1b9ba4cbbb..cf5a501bbc5 100644 --- a/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Analytic", () => { it("should increase damage if the user moves last", async () => { await game.classicMode.startBattle([SpeciesId.ARCEUS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/abilities/anger-point.test.ts b/test/abilities/anger-point.test.ts index 84a22449dae..4031ff702a9 100644 --- a/test/abilities/anger-point.test.ts +++ b/test/abilities/anger-point.test.ts @@ -36,7 +36,7 @@ describe("Ability - Anger Point", () => { it("should set the user's attack stage to +6 when hit by a critical hit", async () => { game.override.enemyAbility(AbilityId.ANGER_POINT).moveset(MoveId.FALSE_SWIPE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); // minimize the enemy's attack stage to ensure it is always set to +6 enemy.setStatStage(Stat.ATK, -6); @@ -53,7 +53,7 @@ describe("Ability - Anger Point", () => { .enemyAbility(AbilityId.ANGER_POINT) .ability(AbilityId.SKILL_LINK); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getCriticalHitResult").mockReturnValueOnce(true); const angerPointSpy = vi.spyOn(PostReceiveCritStatStageChangeAbAttr.prototype, "apply"); game.move.select(MoveId.BULLET_SEED); @@ -68,7 +68,7 @@ describe("Ability - Anger Point", () => { .enemyHasPassiveAbility(true) .moveset(MoveId.FALSE_SWIPE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getCriticalHitResult").mockReturnValueOnce(true); enemy.setStatStage(Stat.ATK, 6); game.move.select(MoveId.FALSE_SWIPE); diff --git a/test/abilities/beast-boost.test.ts b/test/abilities/beast-boost.test.ts index 193de9b7669..aeb4d854b1a 100644 --- a/test/abilities/beast-boost.test.ts +++ b/test/abilities/beast-boost.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Beast Boost", () => { it("should prefer highest stat to boost its corresponding stat stage by 1 when winning a battle", async () => { await game.classicMode.startBattle([SpeciesId.SLOWBRO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // Set the pokemon's highest stat to DEF, so it should be picked by Beast Boost vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([10000, 100, 1000, 200, 100, 100]); console.log(playerPokemon.stats); @@ -54,7 +54,7 @@ describe("Abilities - Beast Boost", () => { await game.classicMode.startBattle([SpeciesId.SLOWBRO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // If the opponent uses Guard Split, the pokemon's second highest stat (SPATK) should be chosen vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([10000, 100, 201, 200, 100, 100]); @@ -72,7 +72,7 @@ describe("Abilities - Beast Boost", () => { // Order preference follows the order of EFFECTIVE_STAT await game.classicMode.startBattle([SpeciesId.SLOWBRO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // Set up tie between SPATK, SPDEF, and SPD, where SPATK should win vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([10000, 1, 1, 100, 100, 100]); diff --git a/test/abilities/competitive.test.ts b/test/abilities/competitive.test.ts index 1a083705e5c..3c511b85b14 100644 --- a/test/abilities/competitive.test.ts +++ b/test/abilities/competitive.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Competitive", () => { it("lower atk and def by 1 via tickle, then increase spatk by 4 via competitive", async () => { await game.classicMode.startBattle([SpeciesId.FLYGON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); @@ -49,7 +49,7 @@ describe("Abilities - Competitive", () => { game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.FLYGON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(TurnInitPhase); @@ -62,7 +62,7 @@ describe("Abilities - Competitive", () => { game.override.startingHeldItems([{ name: "WHITE_HERB" }]); await game.classicMode.startBattle([SpeciesId.FLYGON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); diff --git a/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts index df72c25054a..e7a1ae1e3d0 100644 --- a/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Contrary", () => { it("should invert stat changes when applied", async () => { await game.classicMode.startBattle([SpeciesId.SLOWBRO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); }); @@ -43,7 +43,7 @@ describe("Abilities - Contrary", () => { game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).moveset([MoveId.TAIL_WHIP]); await game.classicMode.startBattle([SpeciesId.SLOWBRO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); @@ -57,7 +57,7 @@ describe("Abilities - Contrary", () => { game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).enemyMoveset(MoveId.HOWL).moveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.SLOWBRO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); diff --git a/test/abilities/cud-chew.test.ts b/test/abilities/cud-chew.test.ts index 5f15de04cae..f68141096eb 100644 --- a/test/abilities/cud-chew.test.ts +++ b/test/abilities/cud-chew.test.ts @@ -43,7 +43,7 @@ describe("Abilities - Cud Chew", () => { it("stores inside summonData at end of turn", async () => { await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; // needed to allow sitrus procs game.move.select(MoveId.SPLASH); @@ -71,7 +71,7 @@ describe("Abilities - Cud Chew", () => { game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); // Dip below half to eat berry farigiraf.hp = farigiraf.getMaxHp() / 2 - 1; @@ -120,7 +120,7 @@ describe("Abilities - Cud Chew", () => { .enemyMoveset(MoveId.TEATIME); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; // needed to allow berry procs game.move.select(MoveId.STUFF_CHEEKS); @@ -148,7 +148,7 @@ describe("Abilities - Cud Chew", () => { it("should reset both arrays on switch", async () => { await game.classicMode.startBattle([SpeciesId.FARIGIRAF, SpeciesId.GIRAFARIG]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; // eat berry turn 1, switch out turn 2 @@ -177,7 +177,7 @@ describe("Abilities - Cud Chew", () => { game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; game.move.select(MoveId.SPLASH); @@ -199,7 +199,7 @@ describe("Abilities - Cud Chew", () => { const apply = vi.spyOn(CudChewConsumeBerryAbAttr.prototype, "apply"); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; game.move.select(MoveId.SPLASH); @@ -225,7 +225,7 @@ describe("Abilities - Cud Chew", () => { game.override.enemyAbility(AbilityId.UNNERVE); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; game.move.select(MoveId.SPLASH); @@ -243,7 +243,7 @@ describe("Abilities - Cud Chew", () => { game.override.enemyMoveset(MoveId.INCINERATE); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = farigiraf.getMaxHp() / 4; game.move.select(MoveId.SPLASH); @@ -262,7 +262,7 @@ describe("Abilities - Cud Chew", () => { .startingHeldItems([]); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); game.move.select(MoveId.BUG_BITE); await game.toNextTurn(); @@ -278,7 +278,7 @@ describe("Abilities - Cud Chew", () => { game.override.passiveAbility(AbilityId.RIPEN); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; game.move.select(MoveId.SPLASH); @@ -294,7 +294,7 @@ describe("Abilities - Cud Chew", () => { game.override.enemyLevel(1); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); - const farigiraf = game.scene.getPlayerPokemon()!; + const farigiraf = game.field.getPlayerPokemon(); farigiraf.hp = 1; game.move.select(MoveId.HYPER_VOICE); @@ -307,7 +307,7 @@ describe("Abilities - Cud Chew", () => { // reload and the berry should still be there await game.reload.reloadSession(); - const farigirafReloaded = game.scene.getPlayerPokemon()!; + const farigirafReloaded = game.field.getPlayerPokemon(); expect(farigirafReloaded.summonData.berriesEatenLast).toEqual([BerryType.SITRUS]); const wave1Hp = farigirafReloaded.hp; diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index bbf1a368573..c651a341c42 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -125,7 +125,7 @@ describe("Abilities - Dancer", () => { game.override.battleStyle("double").moveset(MoveId.SPLASH).enemyMoveset([MoveId.SWORDS_DANCE, MoveId.FAKE_OUT]); await game.classicMode.startBattle([SpeciesId.ORICORIO]); - const oricorio = game.scene.getPlayerPokemon()!; + const oricorio = game.field.getPlayerPokemon(); expect(oricorio).toBeDefined(); // get faked out and copy swords dance diff --git a/test/abilities/defiant.test.ts b/test/abilities/defiant.test.ts index 29c386ff093..f1e62701b9d 100644 --- a/test/abilities/defiant.test.ts +++ b/test/abilities/defiant.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Defiant", () => { it("lower atk and def by 1 via tickle, then increase atk by 4 via defiant", async () => { await game.classicMode.startBattle([SpeciesId.FLYGON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); @@ -48,7 +48,7 @@ describe("Abilities - Defiant", () => { game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.FLYGON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(TurnInitPhase); @@ -61,7 +61,7 @@ describe("Abilities - Defiant", () => { game.override.startingHeldItems([{ name: "WHITE_HERB" }]); await game.classicMode.startBattle([SpeciesId.FLYGON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index c88f7415bb1..15dd1897864 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -145,7 +145,7 @@ describe("Abilities - Desolate Land", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); - vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); + vi.spyOn(game.field.getPlayerPokemon(), "randBattleSeedInt").mockReturnValue(0); vi.spyOn(globalScene, "randBattleSeedInt").mockReturnValue(0); const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index bf271c81e4d..4745d6ab609 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -37,7 +37,7 @@ describe("Abilities - Disguise", () => { it("takes no damage from attacking move and transforms to Busted form, takes 1/8 max HP damage from the disguise breaking", async () => { await game.classicMode.startBattle(); - const mimikyu = game.scene.getEnemyPokemon()!; + const mimikyu = game.field.getEnemyPokemon(); const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); @@ -54,7 +54,7 @@ describe("Abilities - Disguise", () => { it("doesn't break disguise when attacked with ineffective move", async () => { await game.classicMode.startBattle(); - const mimikyu = game.scene.getEnemyPokemon()!; + const mimikyu = game.field.getEnemyPokemon(); expect(mimikyu.formIndex).toBe(disguisedForm); @@ -69,7 +69,7 @@ describe("Abilities - Disguise", () => { game.override.moveset([MoveId.SURGING_STRIKES]).enemyLevel(5); await game.classicMode.startBattle(); - const mimikyu = game.scene.getEnemyPokemon()!; + const mimikyu = game.field.getEnemyPokemon(); const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); @@ -91,7 +91,7 @@ describe("Abilities - Disguise", () => { it("takes effects from status moves and damage from status effects", async () => { await game.classicMode.startBattle(); - const mimikyu = game.scene.getEnemyPokemon()!; + const mimikyu = game.field.getEnemyPokemon(); expect(mimikyu.hp).toBe(mimikyu.getMaxHp()); game.move.select(MoveId.TOXIC_THREAD); @@ -109,7 +109,7 @@ describe("Abilities - Disguise", () => { await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]); - const mimikyu = game.scene.getPlayerPokemon()!; + const mimikyu = game.field.getPlayerPokemon(); const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); @@ -154,7 +154,7 @@ describe("Abilities - Disguise", () => { await game.classicMode.startBattle(); - const mimikyu = game.scene.getPlayerPokemon()!; + const mimikyu = game.field.getPlayerPokemon(); expect(mimikyu.formIndex).toBe(bustedForm); @@ -175,7 +175,7 @@ describe("Abilities - Disguise", () => { await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]); - const mimikyu1 = game.scene.getPlayerPokemon()!; + const mimikyu1 = game.field.getPlayerPokemon(); expect(mimikyu1.formIndex).toBe(bustedForm); @@ -190,7 +190,7 @@ describe("Abilities - Disguise", () => { game.override.enemyMoveset([MoveId.ENDURE]); await game.classicMode.startBattle(); - const mimikyu = game.scene.getEnemyPokemon()!; + const mimikyu = game.field.getEnemyPokemon(); mimikyu.hp = 1; game.move.select(MoveId.SHADOW_SNEAK); @@ -205,7 +205,7 @@ describe("Abilities - Disguise", () => { await game.classicMode.startBattle(); - const mimikyu = game.scene.getEnemyPokemon()!; + const mimikyu = game.field.getEnemyPokemon(); const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); @@ -225,6 +225,6 @@ describe("Abilities - Disguise", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.formIndex).toBe(disguisedForm); + expect(game.field.getEnemyPokemon().formIndex).toBe(disguisedForm); }); }); diff --git a/test/abilities/dry-skin.test.ts b/test/abilities/dry-skin.test.ts index 01602150710..ad88c5aa377 100644 --- a/test/abilities/dry-skin.test.ts +++ b/test/abilities/dry-skin.test.ts @@ -35,7 +35,7 @@ describe("Abilities - Dry Skin", () => { it("during sunlight, lose 1/8 of maximum health at the end of each turn", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); // first turn game.move.select(MoveId.SUNNY_DAY); @@ -52,7 +52,7 @@ describe("Abilities - Dry Skin", () => { it("during rain, gain 1/8 of maximum health at the end of each turn", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1; @@ -72,7 +72,7 @@ describe("Abilities - Dry Skin", () => { game.override.moveset([MoveId.FLAMETHROWER]); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); const initialHP = 1000; enemy.hp = initialHP; @@ -95,7 +95,7 @@ describe("Abilities - Dry Skin", () => { it("opposing water attacks heal 1/4 of maximum health and deal no damage", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1; @@ -109,7 +109,7 @@ describe("Abilities - Dry Skin", () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1; @@ -123,7 +123,7 @@ describe("Abilities - Dry Skin", () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1; @@ -145,7 +145,7 @@ describe("Abilities - Dry Skin", () => { it("opposing water moves still heal regardless of accuracy check", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.WATER_GUN); enemy.hp = enemy.hp - 1; diff --git a/test/abilities/early-bird.test.ts b/test/abilities/early-bird.test.ts index 97ce02e5e62..a7318fd8c6e 100644 --- a/test/abilities/early-bird.test.ts +++ b/test/abilities/early-bird.test.ts @@ -37,7 +37,7 @@ describe("Abilities - Early Bird", () => { it("reduces Rest's sleep time to 1 turn", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); game.move.select(MoveId.BELLY_DRUM); await game.toNextTurn(); @@ -62,7 +62,7 @@ describe("Abilities - Early Bird", () => { it("reduces 3-turn sleep to 1 turn", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.status = new Status(StatusEffect.SLEEP, 0, 4); game.move.select(MoveId.SPLASH); @@ -81,7 +81,7 @@ describe("Abilities - Early Bird", () => { it("reduces 1-turn sleep to 0 turns", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.status = new Status(StatusEffect.SLEEP, 0, 2); game.move.select(MoveId.SPLASH); diff --git a/test/abilities/flash-fire.test.ts b/test/abilities/flash-fire.test.ts index d9f0e194d9c..a9d837e6e40 100644 --- a/test/abilities/flash-fire.test.ts +++ b/test/abilities/flash-fire.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Flash Fire", () => { game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.BLISSEY]); - const blissey = game.scene.getPlayerPokemon()!; + const blissey = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -50,7 +50,7 @@ describe("Abilities - Flash Fire", () => { game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.PROTECT]); await game.classicMode.startBattle([SpeciesId.BLISSEY]); - const blissey = game.scene.getPlayerPokemon()!; + const blissey = game.field.getPlayerPokemon(); game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to(TurnEndPhase); @@ -61,7 +61,7 @@ describe("Abilities - Flash Fire", () => { game.override.enemyMoveset([MoveId.WILL_O_WISP]).moveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.BLISSEY]); - const blissey = game.scene.getPlayerPokemon()!; + const blissey = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.move.forceHit(); @@ -76,7 +76,7 @@ describe("Abilities - Flash Fire", () => { game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH).statusEffect(StatusEffect.FREEZE); await game.classicMode.startBattle([SpeciesId.BLISSEY]); - const blissey = game.scene.getPlayerPokemon()!; + const blissey = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); @@ -95,8 +95,8 @@ describe("Abilities - Flash Fire", () => { game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnEndPhase); - const chansey = game.scene.getPlayerPokemon()!; - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.CHANSEY); + const chansey = game.field.getPlayerPokemon(); + expect(game.field.getPlayerPokemon().species.speciesId).toBe(SpeciesId.CHANSEY); expect(chansey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined(); }); @@ -107,7 +107,7 @@ describe("Abilities - Flash Fire", () => { .enemyAbility(AbilityId.FLASH_FIRE) .ability(AbilityId.NONE); await game.classicMode.startBattle([SpeciesId.BLISSEY]); - const blissey = game.scene.getPlayerPokemon()!; + const blissey = game.field.getPlayerPokemon(); const initialHP = 1000; blissey.hp = initialHP; @@ -137,7 +137,7 @@ describe("Abilities - Flash Fire", () => { .enemySpecies(SpeciesId.BLISSEY); await game.classicMode.startBattle([SpeciesId.RATTATA]); - const blissey = game.scene.getEnemyPokemon()!; + const blissey = game.field.getEnemyPokemon(); const initialHP = 1000; blissey.hp = initialHP; diff --git a/test/abilities/flower-gift.test.ts b/test/abilities/flower-gift.test.ts index 2fc67b098b7..01459cd4e1e 100644 --- a/test/abilities/flower-gift.test.ts +++ b/test/abilities/flower-gift.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Flower Gift", () => { game.move.select(MoveId.SPLASH); - expect(game.scene.getPlayerPokemon()?.formIndex).toBe(OVERCAST_FORM); + expect(game.field.getPlayerPokemon().formIndex).toBe(OVERCAST_FORM); }; /** @@ -169,7 +169,7 @@ describe("Abilities - Flower Gift", () => { game.override.weather(WeatherType.HARSH_SUN); await game.classicMode.startBattle([SpeciesId.CHERRIM]); - const cherrim = game.scene.getPlayerPokemon()!; + const cherrim = game.field.getPlayerPokemon(); expect(cherrim.formIndex).toBe(SUNSHINE_FORM); game.move.select(MoveId.SPLASH); @@ -188,7 +188,7 @@ describe("Abilities - Flower Gift", () => { await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]); - const cherrim = game.scene.getPlayerPokemon()!; + const cherrim = game.field.getPlayerPokemon(); expect(cherrim.formIndex).toBe(SUNSHINE_FORM); @@ -215,7 +215,7 @@ describe("Abilities - Flower Gift", () => { game.override.weather(WeatherType.SUNNY); await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]); - const cherrim = game.scene.getPlayerPokemon()!; + const cherrim = game.field.getPlayerPokemon(); expect(cherrim.formIndex).toBe(SUNSHINE_FORM); diff --git a/test/abilities/flower-veil.test.ts b/test/abilities/flower-veil.test.ts index 46478a3dd9c..44274d86a1b 100644 --- a/test/abilities/flower-veil.test.ts +++ b/test/abilities/flower-veil.test.ts @@ -46,7 +46,7 @@ describe("Abilities - Flower Veil", () => { .moveset([MoveId.REST, MoveId.SPLASH]) .startingHeldItems([{ name: "FLAME_ORB" }]); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); game.move.select(MoveId.REST); await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -74,7 +74,7 @@ describe("Abilities - Flower Veil", () => { await game.move.selectEnemyMove(MoveId.YAWN, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); expect(user.getTag(BattlerTagType.DROWSY)).toBeFalsy(); expect(ally.getTag(BattlerTagType.DROWSY)).toBeFalsy(); }); @@ -87,7 +87,7 @@ describe("Abilities - Flower Veil", () => { game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.THUNDER_WAVE); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + expect(game.field.getPlayerPokemon().status).toBeUndefined(); }); it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => { @@ -155,7 +155,7 @@ describe("Abilities - Flower Veil", () => { it("should prevent the drops while retaining the boosts from spicy extract", async () => { game.override.enemyMoveset([MoveId.SPICY_EXTRACT]).moveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.ATK)).toBe(2); diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index 644927186f4..87d1d20acdb 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Forecast", () => { game.move.select(MoveId.SPLASH); - expect(game.scene.getPlayerPokemon()?.formIndex).toBe(NORMAL_FORM); + expect(game.field.getPlayerPokemon().formIndex).toBe(NORMAL_FORM); }; beforeAll(() => { @@ -186,14 +186,14 @@ describe("Abilities - Forecast", () => { game.move.select(MoveId.RAIN_DANCE); await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getPlayerPokemon()?.formIndex).toBe(RAINY_FORM); - expect(game.scene.getEnemyPokemon()?.formIndex).not.toBe(RAINY_FORM); + expect(game.field.getPlayerPokemon().formIndex).toBe(RAINY_FORM); + expect(game.field.getEnemyPokemon().formIndex).not.toBe(RAINY_FORM); }); it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => { game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.RAIN); await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.PIKACHU]); - const castform = game.scene.getPlayerPokemon()!; + const castform = game.field.getPlayerPokemon(); expect(castform.formIndex).toBe(RAINY_FORM); @@ -233,7 +233,7 @@ describe("Abilities - Forecast", () => { game.doSwitchPokemon(1); await game.phaseInterceptor.to(PostSummonPhase); - const castform = game.scene.getPlayerPokemon()!; + const castform = game.field.getPlayerPokemon(); // Damage phase should come first await game.phaseInterceptor.to(DamageAnimPhase); @@ -248,7 +248,7 @@ describe("Abilities - Forecast", () => { game.override.weather(WeatherType.RAIN); await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]); - const castform = game.scene.getPlayerPokemon()!; + const castform = game.field.getPlayerPokemon(); expect(castform.formIndex).toBe(RAINY_FORM); @@ -263,14 +263,14 @@ describe("Abilities - Forecast", () => { it("should trigger player's form change when summoned at the same time as an enemy with a weather changing ability", async () => { game.override.enemyAbility(AbilityId.DROUGHT); await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]); - const castform = game.scene.getPlayerPokemon()!; + const castform = game.field.getPlayerPokemon(); expect(castform.formIndex).toBe(SUNNY_FORM); }); it("should trigger enemy's form change when summoned at the same time as a player with a weather changing ability", async () => { game.override.ability(AbilityId.DROUGHT).enemySpecies(SpeciesId.CASTFORM).enemyAbility(AbilityId.FORECAST); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const castform = game.scene.getEnemyPokemon()!; + const castform = game.field.getEnemyPokemon(); expect(castform.formIndex).toBe(SUNNY_FORM); }); }); diff --git a/test/abilities/good-as-gold.test.ts b/test/abilities/good-as-gold.test.ts index 7fc1ad85b53..c6b6faf8349 100644 --- a/test/abilities/good-as-gold.test.ts +++ b/test/abilities/good-as-gold.test.ts @@ -43,7 +43,7 @@ describe("Abilities - Good As Gold", () => { game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); diff --git a/test/abilities/gorilla-tactics.test.ts b/test/abilities/gorilla-tactics.test.ts index 83e6cdb156e..01acd2295ab 100644 --- a/test/abilities/gorilla-tactics.test.ts +++ b/test/abilities/gorilla-tactics.test.ts @@ -40,7 +40,7 @@ describe("Abilities - Gorilla Tactics", () => { it("boosts the Pokémon's Attack by 50%, but limits the Pokémon to using only one move", async () => { await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); - const darmanitan = game.scene.getPlayerPokemon()!; + const darmanitan = game.field.getPlayerPokemon(); const initialAtkStat = darmanitan.getStat(Stat.ATK); game.move.select(MoveId.SPLASH); @@ -86,7 +86,7 @@ describe("Abilities - Gorilla Tactics", () => { vi.spyOn(RandomMoveAttr.prototype, "getMoveOverride").mockReturnValue(MoveId.TACKLE); await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); - const darmanitan = game.scene.getPlayerPokemon()!; + const darmanitan = game.field.getPlayerPokemon(); game.move.select(MoveId.METRONOME); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/abilities/gulp-missile.test.ts b/test/abilities/gulp-missile.test.ts index faf30adae33..865a319251f 100644 --- a/test/abilities/gulp-missile.test.ts +++ b/test/abilities/gulp-missile.test.ts @@ -52,7 +52,7 @@ describe("Abilities - Gulp Missile", () => { it("changes to Gulping Form if HP is over half when Surf or Dive is used", async () => { await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); game.move.select(MoveId.DIVE); await game.toNextTurn(); @@ -66,7 +66,7 @@ describe("Abilities - Gulp Missile", () => { it("changes to Gorging Form if HP is under half when Surf or Dive is used", async () => { await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.49); expect(cramorant.getHpRatio()).toBe(0.49); @@ -80,7 +80,7 @@ describe("Abilities - Gulp Missile", () => { it("changes to base form when switched out after Surf or Dive is used", async () => { await game.classicMode.startBattle([SpeciesId.CRAMORANT, SpeciesId.MAGIKARP]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); game.move.select(MoveId.SURF); await game.toNextTurn(); @@ -95,7 +95,7 @@ describe("Abilities - Gulp Missile", () => { it("changes form during Dive's charge turn", async () => { await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -108,7 +108,7 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "damageAndUpdate"); game.move.select(MoveId.SURF); @@ -121,7 +121,7 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.TAIL_WHIP); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); game.move.select(MoveId.SURF); @@ -140,8 +140,8 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const cramorant = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "damageAndUpdate"); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); @@ -164,8 +164,8 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const cramorant = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "damageAndUpdate"); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.45); @@ -188,7 +188,7 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.SURF); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("BerryPhase", false); @@ -201,8 +201,8 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.TACKLE).enemyAbility(AbilityId.MAGIC_GUARD); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const cramorant = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); @@ -225,7 +225,7 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.THUNDERBOLT); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); game.move.select(MoveId.SURF); await game.phaseInterceptor.to("FaintPhase"); @@ -233,7 +233,7 @@ describe("Abilities - Gulp Missile", () => { expect(cramorant.hp).toBe(0); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeUndefined(); expect(cramorant.formIndex).toBe(NORMAL_FORM); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.DEF)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.DEF)).toBe(-1); }); it("doesn't trigger if user is behind a substitute", async () => { @@ -244,21 +244,21 @@ describe("Abilities - Gulp Missile", () => { await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.formIndex).toBe(GULPING_FORM); + expect(game.field.getPlayerPokemon().formIndex).toBe(GULPING_FORM); game.move.select(MoveId.SUBSTITUTE); await game.move.selectEnemyMove(MoveId.POWER_TRIP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.formIndex).toBe(GULPING_FORM); + expect(game.field.getPlayerPokemon().formIndex).toBe(GULPING_FORM); }); it("cannot be suppressed", async () => { game.override.enemyMoveset(MoveId.GASTRO_ACID); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); game.move.select(MoveId.SURF); @@ -278,7 +278,7 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyMoveset(MoveId.SKILL_SWAP); await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - const cramorant = game.scene.getPlayerPokemon()!; + const cramorant = game.field.getPlayerPokemon(); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); game.move.select(MoveId.SURF); @@ -301,6 +301,6 @@ describe("Abilities - Gulp Missile", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnStartPhase"); - expect(game.scene.getEnemyPokemon()?.hasAbility(AbilityId.GULP_MISSILE)).toBe(false); + expect(game.field.getEnemyPokemon().hasAbility(AbilityId.GULP_MISSILE)).toBe(false); }); }); diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts index d27ee491fed..ec4c02c7b91 100644 --- a/test/abilities/harvest.test.ts +++ b/test/abilities/harvest.test.ts @@ -19,7 +19,7 @@ describe("Abilities - Harvest", () => { let game: GameManager; const getPlayerBerries = () => - game.scene.getModifiers(BerryModifier, true).filter(b => b.pokemonId === game.scene.getPlayerPokemon()?.id); + game.scene.getModifiers(BerryModifier, true).filter(b => b.pokemonId === game.field.getPlayerPokemon().id); /** Check whether the player's Modifiers contains the specified berries and nothing else. */ function expectBerriesContaining(...berries: ModifierOverride[]): void { @@ -64,11 +64,11 @@ describe("Abilities - Harvest", () => { await game.move.selectEnemyMove(MoveId.NUZZLE); await game.phaseInterceptor.to("BerryPhase"); expect(getPlayerBerries()).toHaveLength(0); - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(1); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toHaveLength(1); await game.phaseInterceptor.to("TurnEndPhase"); expectBerriesContaining({ name: "BERRY", type: BerryType.LUM, count: 1 }); - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toEqual([]); }); it("tracks berries eaten while disabled/not present", async () => { @@ -82,7 +82,7 @@ describe("Abilities - Harvest", () => { .enemyAbility(AbilityId.NEUTRALIZING_GAS); await game.classicMode.startBattle([SpeciesId.MILOTIC]); - const milotic = game.scene.getPlayerPokemon()!; + const milotic = game.field.getPlayerPokemon(); expect(milotic).toBeDefined(); // Chug a few berries without harvest (should get tracked) @@ -122,7 +122,7 @@ describe("Abilities - Harvest", () => { .ability(AbilityId.BALL_FETCH); // don't actually need harvest for this test await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const regieleki = game.scene.getPlayerPokemon()!; + const regieleki = game.field.getPlayerPokemon(); regieleki.hp = 1; game.move.select(MoveId.SPLASH); @@ -150,7 +150,7 @@ describe("Abilities - Harvest", () => { .enemyAbility(AbilityId.COMPOUND_EYES); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const regieleki = game.scene.getPlayerPokemon()!; + const regieleki = game.field.getPlayerPokemon(); regieleki.hp = regieleki.getMaxHp() / 4 + 1; game.move.select(MoveId.SPLASH); @@ -161,7 +161,7 @@ describe("Abilities - Harvest", () => { // ate 1 berry and recovered it expect(regieleki.battleData.berriesEaten).toEqual([]); expect(getPlayerBerries()).toEqual([expect.objectContaining({ berryType: BerryType.PETAYA, stackCount: 1 })]); - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.SPATK)).toBe(1); // heal up so harvest doesn't proc and kill enemy game.move.select(MoveId.EARTHQUAKE); @@ -170,13 +170,13 @@ describe("Abilities - Harvest", () => { await game.toNextWave(); expectBerriesContaining({ name: "BERRY", count: 1, type: BerryType.PETAYA }); - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.SPATK)).toBe(1); await game.reload.reloadSession(); expect(regieleki.battleData.berriesEaten).toEqual([]); expectBerriesContaining({ name: "BERRY", count: 1, type: BerryType.PETAYA }); - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.SPATK)).toBe(1); }); it("cannot restore capped berries", async () => { @@ -187,7 +187,7 @@ describe("Abilities - Harvest", () => { game.override.startingHeldItems(initBerries); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const feebas = game.scene.getPlayerPokemon()!; + const feebas = game.field.getPlayerPokemon(); feebas.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; game.move.select(MoveId.SPLASH); @@ -215,7 +215,7 @@ describe("Abilities - Harvest", () => { game.override.startingHeldItems(initBerries); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; game.move.select(MoveId.SPLASH); @@ -234,7 +234,7 @@ describe("Abilities - Harvest", () => { await game.move.selectEnemyMove(MoveId.INCINERATE); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toEqual([]); }); it("cannot restore knocked off berries", async () => { @@ -245,7 +245,7 @@ describe("Abilities - Harvest", () => { await game.move.selectEnemyMove(MoveId.KNOCK_OFF); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toEqual([]); }); it("can restore berries eaten by Teatime", async () => { @@ -257,7 +257,7 @@ describe("Abilities - Harvest", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toEqual([]); expectBerriesContaining(...initBerries); }); @@ -271,8 +271,8 @@ describe("Abilities - Harvest", () => { await game.phaseInterceptor.to("BerryPhase"); // pluck triggers harvest for neither side - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); - expect(game.scene.getEnemyPokemon()?.battleData.berriesEaten).toEqual([]); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toEqual([]); + expect(game.field.getEnemyPokemon().battleData.berriesEaten).toEqual([]); expect(getPlayerBerries()).toEqual([]); }); @@ -293,7 +293,7 @@ describe("Abilities - Harvest", () => { await game.phaseInterceptor.to("TurnEndPhase", false); // won't trigger harvest since we didn't lose the berry (it just doesn't ever add it to the array) - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toEqual([]); expectBerriesContaining(...initBerries); }); @@ -303,7 +303,7 @@ describe("Abilities - Harvest", () => { await game.classicMode.startBattle([SpeciesId.MEOWSCARADA]); // pre damage - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.hp = 1; // steal a sitrus and immediately consume it @@ -326,7 +326,7 @@ describe("Abilities - Harvest", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toBe([]); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toBe([]); expect(getPlayerBerries()).toEqual([]); }); @@ -339,7 +339,7 @@ describe("Abilities - Harvest", () => { game.move.select(MoveId.NATURAL_GIFT); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(0); + expect(game.field.getPlayerPokemon().battleData.berriesEaten).toHaveLength(0); expectBerriesContaining(...initBerries); }); }); diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index c151836d76d..52f47535bf4 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -46,7 +46,7 @@ describe("Abilities - Healer", () => { game.override.moveset([MoveId.SPLASH, MoveId.LUNAR_DANCE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); // Only want one magikarp to have the ability vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); game.move.select(MoveId.SPLASH); diff --git a/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts index 63f877a3567..25e9be12809 100644 --- a/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -40,7 +40,7 @@ describe("Abilities - Heatproof", () => { it("reduces Fire type damage by half", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); const initialHP = 1000; enemy.hp = initialHP; @@ -63,7 +63,7 @@ describe("Abilities - Heatproof", () => { game.override.enemyStatusEffect(StatusEffect.BURN).enemySpecies(SpeciesId.ABRA); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); diff --git a/test/abilities/honey-gather.test.ts b/test/abilities/honey-gather.test.ts index 8dfd2c189f8..e2f356470ae 100644 --- a/test/abilities/honey-gather.test.ts +++ b/test/abilities/honey-gather.test.ts @@ -62,7 +62,7 @@ describe("Abilities - Honey Gather", () => { game.scene.money = 1000; // something weird is going on with the test framework, so this is required to prevent a crash - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "scene", "get").mockReturnValue(game.scene); // Expects next wave so run must succeed vi.spyOn(Overrides, "RUN_SUCCESS_OVERRIDE", "get").mockReturnValue(true); diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index 74ee01f02ef..5280df7b9de 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -35,7 +35,7 @@ describe("Abilities - Hustle", () => { it("increases the user's Attack stat by 50%", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; + const pikachu = game.field.getPlayerPokemon(); const atk = pikachu.stats[Stat.ATK]; vi.spyOn(pikachu, "getEffectiveStat"); @@ -49,7 +49,7 @@ describe("Abilities - Hustle", () => { it("lowers the accuracy of the user's physical moves by 20%", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; + const pikachu = game.field.getPlayerPokemon(); vi.spyOn(pikachu, "getAccuracyMultiplier"); @@ -61,7 +61,7 @@ describe("Abilities - Hustle", () => { it("does not affect non-physical moves", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; + const pikachu = game.field.getPlayerPokemon(); const spatk = pikachu.stats[Stat.SPATK]; vi.spyOn(pikachu, "getEffectiveStat"); @@ -78,8 +78,8 @@ describe("Abilities - Hustle", () => { game.override.startingLevel(100).enemyLevel(30); await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const pikachu = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(pikachu, "getAccuracyMultiplier"); vi.spyOn(allMoves[MoveId.FISSURE], "calculateBattleAccuracy"); diff --git a/test/abilities/hyper-cutter.test.ts b/test/abilities/hyper-cutter.test.ts index 8a509d026b6..51244532c79 100644 --- a/test/abilities/hyper-cutter.test.ts +++ b/test/abilities/hyper-cutter.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Hyper Cutter", () => { it("only prevents ATK drops", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); diff --git a/test/abilities/ice-face.test.ts b/test/abilities/ice-face.test.ts index 9b3020b67a7..2410cd8492f 100644 --- a/test/abilities/ice-face.test.ts +++ b/test/abilities/ice-face.test.ts @@ -44,7 +44,7 @@ describe("Abilities - Ice Face", () => { await game.phaseInterceptor.to(MoveEndPhase); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.isFullHp()).toBe(true); expect(eiscue.formIndex).toBe(noiceForm); @@ -57,7 +57,7 @@ describe("Abilities - Ice Face", () => { game.move.select(MoveId.SURGING_STRIKES); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeDefined(); // First hit @@ -85,7 +85,7 @@ describe("Abilities - Ice Face", () => { await game.phaseInterceptor.to(MoveEndPhase); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); expect(eiscue.formIndex).toBe(icefaceForm); @@ -99,7 +99,7 @@ describe("Abilities - Ice Face", () => { await game.phaseInterceptor.to(MoveEndPhase); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); expect(eiscue.formIndex).toBe(icefaceForm); @@ -114,7 +114,7 @@ describe("Abilities - Ice Face", () => { await game.phaseInterceptor.to(MoveEndPhase); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.isFullHp()).toBe(true); expect(eiscue.formIndex).toBe(noiceForm); @@ -134,7 +134,7 @@ describe("Abilities - Ice Face", () => { game.move.select(MoveId.SNOWSCAPE); await game.phaseInterceptor.to(TurnEndPhase); - let eiscue = game.scene.getPlayerPokemon()!; + let eiscue = game.field.getPlayerPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeUndefined(); expect(eiscue.formIndex).toBe(noiceForm); @@ -146,7 +146,7 @@ describe("Abilities - Ice Face", () => { game.doSwitchPokemon(1); await game.phaseInterceptor.to(QuietFormChangePhase); - eiscue = game.scene.getPlayerPokemon()!; + eiscue = game.field.getPlayerPokemon(); expect(eiscue.formIndex).toBe(icefaceForm); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); @@ -158,7 +158,7 @@ describe("Abilities - Ice Face", () => { await game.classicMode.startBattle([SpeciesId.EISCUE]); game.move.select(MoveId.HAIL); - const eiscue = game.scene.getPlayerPokemon()!; + const eiscue = game.field.getPlayerPokemon(); await game.phaseInterceptor.to(QuietFormChangePhase); @@ -179,7 +179,7 @@ describe("Abilities - Ice Face", () => { game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to(TurnEndPhase); - let eiscue = game.scene.getPlayerPokemon()!; + let eiscue = game.field.getPlayerPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeUndefined(); expect(eiscue.formIndex).toBe(noiceForm); @@ -206,7 +206,7 @@ describe("Abilities - Ice Face", () => { await game.classicMode.startBattle([SpeciesId.EISCUE]); - const eiscue = game.scene.getPlayerPokemon()!; + const eiscue = game.field.getPlayerPokemon(); expect(eiscue.formIndex).toBe(noiceForm); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeUndefined(); @@ -229,7 +229,7 @@ describe("Abilities - Ice Face", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.formIndex).toBe(icefaceForm); + expect(game.field.getEnemyPokemon().formIndex).toBe(icefaceForm); }); it("cannot be suppressed", async () => { @@ -241,7 +241,7 @@ describe("Abilities - Ice Face", () => { await game.phaseInterceptor.to(TurnEndPhase); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); expect(eiscue.formIndex).toBe(icefaceForm); @@ -257,7 +257,7 @@ describe("Abilities - Ice Face", () => { await game.phaseInterceptor.to(TurnEndPhase); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeDefined(); expect(eiscue.formIndex).toBe(icefaceForm); @@ -269,10 +269,10 @@ describe("Abilities - Ice Face", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const eiscue = game.scene.getEnemyPokemon()!; + const eiscue = game.field.getEnemyPokemon(); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeDefined(); expect(eiscue.formIndex).toBe(icefaceForm); - expect(game.scene.getPlayerPokemon()!.hasAbility(AbilityId.TRACE)).toBe(true); + expect(game.field.getPlayerPokemon().hasAbility(AbilityId.TRACE)).toBe(true); }); }); diff --git a/test/abilities/illuminate.test.ts b/test/abilities/illuminate.test.ts index 814b7dc64b7..3cf0bc90702 100644 --- a/test/abilities/illuminate.test.ts +++ b/test/abilities/illuminate.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Illuminate", () => { await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); expect(player.getStatStage(Stat.ACC)).toBe(0); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index e48cd9e9b78..2343a11cb74 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -35,8 +35,8 @@ describe("Abilities - Illusion", () => { it("creates illusion at the start", async () => { await game.classicMode.startBattle([SpeciesId.ZOROARK, SpeciesId.FEEBAS]); - const zoroark = game.scene.getPlayerPokemon()!; - const zorua = game.scene.getEnemyPokemon()!; + const zoroark = game.field.getPlayerPokemon(); + const zorua = game.field.getEnemyPokemon(); expect(!!zoroark.summonData.illusion).equals(true); expect(!!zorua.summonData.illusion).equals(true); @@ -48,7 +48,7 @@ describe("Abilities - Illusion", () => { await game.phaseInterceptor.to("TurnEndPhase"); - const zorua = game.scene.getEnemyPokemon()!; + const zorua = game.field.getEnemyPokemon(); expect(!!zorua.summonData.illusion).equals(false); expect(zorua.name).equals("Zorua"); @@ -60,7 +60,7 @@ describe("Abilities - Illusion", () => { await game.phaseInterceptor.to("TurnEndPhase"); - const zorua = game.scene.getEnemyPokemon()!; + const zorua = game.field.getEnemyPokemon(); expect(!!zorua.summonData.illusion).equals(false); }); @@ -69,7 +69,7 @@ describe("Abilities - Illusion", () => { game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS); await game.classicMode.startBattle([SpeciesId.KOFFING]); - const zorua = game.scene.getEnemyPokemon()!; + const zorua = game.field.getEnemyPokemon(); expect(!!zorua.summonData.illusion).equals(false); }); @@ -85,15 +85,15 @@ describe("Abilities - Illusion", () => { game.doSwitchPokemon(1); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.summonData.illusion).toBeFalsy(); + expect(game.field.getPlayerPokemon().summonData.illusion).toBeFalsy(); }); it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { game.override.enemyMoveset([MoveId.FLAMETHROWER, MoveId.PSYCHIC, MoveId.TACKLE]); await game.classicMode.startBattle([SpeciesId.ZOROARK, SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; - const zoroark = game.scene.getPlayerPokemon()!; + const enemy = game.field.getEnemyPokemon(); + const zoroark = game.field.getPlayerPokemon(); const flameThrower = enemy.getMoveset()[0]!.getMove(); const psychic = enemy.getMoveset()[1]!.getMove(); @@ -125,7 +125,7 @@ describe("Abilities - Illusion", () => { await game.move.forceEnemyMove(MoveId.WILL_O_WISP); await game.toEndOfTurn(); - const zoroark = game.scene.getPlayerPokemon()!; + const zoroark = game.field.getPlayerPokemon(); expect(!!zoroark.summonData.illusion).equals(true); }); @@ -143,7 +143,7 @@ describe("Abilities - Illusion", () => { await game.phaseInterceptor.to("TurnEndPhase"); - const zoroark = game.scene.getPlayerPokemon()!; + const zoroark = game.field.getPlayerPokemon(); expect(zoroark.summonData.illusion?.name).equals("Axew"); expect(zoroark.getNameToRender(true)).equals("axew nickname"); @@ -155,7 +155,7 @@ describe("Abilities - Illusion", () => { it("breaks when suppressed", async () => { game.override.moveset(MoveId.GASTRO_ACID); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const zorua = game.scene.getEnemyPokemon()!; + const zorua = game.field.getEnemyPokemon(); expect(!!zorua.summonData?.illusion).toBe(true); diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 9f3678850a1..a093fbbe6c6 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -58,8 +58,8 @@ describe("Abilities - Infiltrator", () => { ])("should bypass the target's $effectName", async ({ tagType, move }) => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const preScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; @@ -74,8 +74,8 @@ describe("Abilities - Infiltrator", () => { it("should bypass the target's Safeguard", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); @@ -90,8 +90,8 @@ describe("Abilities - Infiltrator", () => { it.todo("should bypass the target's Mist", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.scene.arena.addTag(ArenaTagType.MIST, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); @@ -105,8 +105,8 @@ describe("Abilities - Infiltrator", () => { it("should bypass the target's Substitute", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.addTag(BattlerTagType.SUBSTITUTE, 1, MoveId.NONE, enemy.id); diff --git a/test/abilities/intrepid-sword.test.ts b/test/abilities/intrepid-sword.test.ts index 75a1ab14e82..4cd8f5e394b 100644 --- a/test/abilities/intrepid-sword.test.ts +++ b/test/abilities/intrepid-sword.test.ts @@ -32,8 +32,8 @@ describe("Abilities - Intrepid Sword", () => { it("should raise ATK stat stage by 1 on entry", async () => { await game.classicMode.runToSummon([SpeciesId.ZACIAN]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); await game.phaseInterceptor.to(CommandPhase, false); diff --git a/test/abilities/magic-bounce.test.ts b/test/abilities/magic-bounce.test.ts index 3b4185e848f..c15690c3f5d 100644 --- a/test/abilities/magic-bounce.test.ts +++ b/test/abilities/magic-bounce.test.ts @@ -42,7 +42,7 @@ describe("Abilities - Magic Bounce", () => { game.move.use(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce moves while the target is in the semi-invulnerable state", async () => { @@ -53,7 +53,7 @@ describe("Abilities - Magic Bounce", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(0); }); it("should individually bounce back multi-target moves", async () => { @@ -70,12 +70,12 @@ describe("Abilities - Magic Bounce", () => { it("should still bounce back a move that would otherwise fail", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); + game.field.getEnemyPokemon().setStatStage(Stat.ATK, -6); game.move.use(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce back a move that was just bounced", async () => { @@ -85,7 +85,7 @@ describe("Abilities - Magic Bounce", () => { game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should receive the stat change after reflecting a move back to a mirror armor user", async () => { @@ -95,7 +95,7 @@ describe("Abilities - Magic Bounce", () => { game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce back a move from a mold breaker user", async () => { @@ -105,7 +105,7 @@ describe("Abilities - Magic Bounce", () => { game.move.use(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should bounce back a spread status move against both pokemon", async () => { @@ -156,7 +156,7 @@ describe("Abilities - Magic Bounce", () => { game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); + expect(game.field.getEnemyPokemon().getTag(BattlerTagType.CURSED)).toBeDefined(); }); // TODO: enable when Magic Bounce is fixed to properly reset the hit count @@ -164,8 +164,8 @@ describe("Abilities - Magic Bounce", () => { game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]).enemyMoveset([MoveId.TACKLE, MoveId.GROWL]); // game.override.ability(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); // Give the player MOLD_BREAKER for this turn to bypass Magic Bounce. const playerAbilitySpy = game.field.mockAbility(playerPokemon, AbilityId.MOLD_BREAKER); @@ -194,8 +194,8 @@ describe("Abilities - Magic Bounce", () => { .enemyAbility(AbilityId.MAGIC_BOUNCE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); // turn 1 game.move.select(MoveId.GROWL); @@ -237,7 +237,7 @@ describe("Abilities - Magic Bounce", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(stomping_tantrum, "calculateBattlePower"); // Spore gets reflected back onto us @@ -260,35 +260,35 @@ describe("Abilities - Magic Bounce", () => { // Turn 1 - thunder wave immunity test game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + expect(game.field.getPlayerPokemon().status).toBeUndefined(); // Turn 2 - soundproof immunity test game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(0); }); it("should bounce back a move before the accuracy check", async () => { game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const attacker = game.scene.getPlayerPokemon()!; + const attacker = game.field.getPlayerPokemon(); vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + expect(game.field.getPlayerPokemon().status?.effect).toBe(StatusEffect.SLEEP); }); it("should take the accuracy of the magic bounce user into account", async () => { game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const opponent = game.scene.getEnemyPokemon()!; + const opponent = game.field.getEnemyPokemon(); vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + expect(game.field.getPlayerPokemon().status).toBeUndefined(); }); it("should always apply the leftmost available target's magic bounce when bouncing moves like sticky webs in doubles", async () => { @@ -332,14 +332,14 @@ describe("Abilities - Magic Bounce", () => { await game.move.selectEnemyMove(MoveId.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); - expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.TOXIC); + expect(game.field.getPlayerPokemon().status).toBeUndefined(); game.override.ability(AbilityId.NO_GUARD); game.move.select(MoveId.CHARM); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-2); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-2); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(0); }); }); diff --git a/test/abilities/mimicry.test.ts b/test/abilities/mimicry.test.ts index c04860d1fcd..44416387f6e 100644 --- a/test/abilities/mimicry.test.ts +++ b/test/abilities/mimicry.test.ts @@ -47,44 +47,44 @@ describe("Abilities - Mimicry", () => { }); it("Pokemon should revert back to its original, root type once terrain ends", async () => { - game.override - .moveset([MoveId.SPLASH, MoveId.TRANSFORM]) - .enemyAbility(AbilityId.MIMICRY) - .enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); + game.override.enemyAbility(AbilityId.MIMICRY); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(MoveId.TRANSFORM); - await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); + const playerPokemon = game.field.getPlayerPokemon(); + + game.move.use(MoveId.SKILL_SWAP); + await game.move.forceEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); - expect(playerPokemon?.getTypes().includes(PokemonType.PSYCHIC)).toBe(true); + + expect(playerPokemon.getTypes()).toEqual([PokemonType.PSYCHIC]); if (game.scene.arena.terrain) { game.scene.arena.terrain.turnsLeft = 1; } - game.move.select(MoveId.SPLASH); - await game.move.selectEnemyMove(MoveId.SPLASH); + game.move.use(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - expect(playerPokemon?.getTypes().includes(PokemonType.ELECTRIC)).toBe(true); + + expect(playerPokemon.getTypes()).toEqual([PokemonType.ELECTRIC]); }); it("If the Pokemon is under the effect of a type-adding move and an equivalent terrain activates, the move's effect disappears", async () => { game.override.enemyMoveset([MoveId.FORESTS_CURSE, MoveId.GRASSY_TERRAIN]); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const playerPokemon = game.scene.getPlayerPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.FORESTS_CURSE); await game.toNextTurn(); - expect(playerPokemon?.summonData.addedType).toBe(PokemonType.GRASS); + expect(playerPokemon.summonData.addedType).toBe(PokemonType.GRASS); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.GRASSY_TERRAIN); await game.phaseInterceptor.to("TurnEndPhase"); - expect(playerPokemon?.summonData.addedType).toBeNull(); - expect(playerPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); + expect(playerPokemon.summonData.addedType).toBeNull(); + expect(playerPokemon.getTypes()).toEqual([PokemonType.GRASS]); }); }); diff --git a/test/abilities/mirror-armor.test.ts b/test/abilities/mirror-armor.test.ts index b2f9c9dc8fa..b2bd9be4755 100644 --- a/test/abilities/mirror-armor.test.ts +++ b/test/abilities/mirror-armor.test.ts @@ -40,8 +40,8 @@ describe("Ability - Mirror Armor", () => { game.override.ability(AbilityId.MIRROR_ARMOR).enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Enemy has intimidate, enemy should lose -1 atk game.move.select(MoveId.SPLASH); @@ -56,8 +56,8 @@ describe("Ability - Mirror Armor", () => { game.override.enemyAbility(AbilityId.MIRROR_ARMOR).ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Enemy has intimidate, enemy should lose -1 atk game.move.select(MoveId.SPLASH); @@ -112,8 +112,8 @@ describe("Ability - Mirror Armor", () => { game.override.ability(AbilityId.MIRROR_ARMOR).enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense game.move.select(MoveId.SPLASH); @@ -153,8 +153,8 @@ describe("Ability - Mirror Armor", () => { game.override.enemyAbility(AbilityId.MIRROR_ARMOR).ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense game.move.select(MoveId.TICKLE); @@ -171,8 +171,8 @@ describe("Ability - Mirror Armor", () => { game.override.enemyAbility(AbilityId.WHITE_SMOKE).ability(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats game.move.select(MoveId.SPLASH); @@ -189,8 +189,8 @@ describe("Ability - Mirror Armor", () => { game.override.ability(AbilityId.WHITE_SMOKE).enemyAbility(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats game.move.select(MoveId.TICKLE); @@ -207,8 +207,8 @@ describe("Ability - Mirror Armor", () => { game.override.ability(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Enemy uses octolock, player loses stats at end of turn game.move.select(MoveId.SPLASH); @@ -225,8 +225,8 @@ describe("Ability - Mirror Armor", () => { game.override.enemyAbility(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); // Player uses octolock, enemy loses stats at end of turn game.move.select(MoveId.OCTOLOCK); @@ -243,8 +243,8 @@ describe("Ability - Mirror Armor", () => { game.override.enemyAbility(AbilityId.MIRROR_ARMOR).ability(AbilityId.MIRROR_ARMOR).ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); @@ -258,8 +258,8 @@ describe("Ability - Mirror Armor", () => { game.override.ability(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const userPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const userPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.STICKY_WEB, BattlerIndex.PLAYER); diff --git a/test/abilities/moody.test.ts b/test/abilities/moody.test.ts index 80879837bce..d1f8aa2e351 100644 --- a/test/abilities/moody.test.ts +++ b/test/abilities/moody.test.ts @@ -35,7 +35,7 @@ describe("Abilities - Moody", () => { it("should increase one stat stage by 2 and decrease a different stat stage by 1", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); @@ -52,7 +52,7 @@ describe("Abilities - Moody", () => { it("should only increase one stat stage by 2 if all stat stages are at -6", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // Set all stat stages to -6 vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(-6)); @@ -70,7 +70,7 @@ describe("Abilities - Moody", () => { it("should only decrease one stat stage by 1 stage if all stat stages are at 6", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // Set all stat stages to 6 vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(6)); diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index 28b90042969..042a8ddd058 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -41,7 +41,7 @@ describe("Abilities - Moxie", () => { const moveToUse = MoveId.AERIAL_ACE; await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.MIGHTYENA]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/abilities/mummy.test.ts b/test/abilities/mummy.test.ts index e3843f9c112..57105bc3468 100644 --- a/test/abilities/mummy.test.ts +++ b/test/abilities/mummy.test.ts @@ -37,7 +37,7 @@ describe("Abilities - Mummy", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.MUMMY); + expect(game.field.getEnemyPokemon().getAbility().id).toBe(AbilityId.MUMMY); }); it("should not change the enemy's ability hit by a non-contact move", async () => { @@ -47,6 +47,6 @@ describe("Abilities - Mummy", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.field.getEnemyPokemon().getAbility().id).toBe(AbilityId.BALL_FETCH); }); }); diff --git a/test/abilities/mycelium-might.test.ts b/test/abilities/mycelium-might.test.ts index 41da6b5c693..c3b7b4753b6 100644 --- a/test/abilities/mycelium-might.test.ts +++ b/test/abilities/mycelium-might.test.ts @@ -42,12 +42,12 @@ describe("Abilities - Mycelium Might", () => { * https://www.smogon.com/forums/threads/scarlet-violet-battle-mechanics-research.3709545/page-24 */ - it("will move last in its priority bracket and ignore protective abilities", async () => { + it("should move last in its priority bracket and ignore protective abilities", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); - const enemyIndex = enemyPokemon?.getBattlerIndex(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerIndex = game.field.getPlayerPokemon().getBattlerIndex(); + const enemyIndex = enemyPokemon.getBattlerIndex(); game.move.select(MoveId.BABY_DOLL_EYES); @@ -62,16 +62,16 @@ describe("Abilities - Mycelium Might", () => { await game.phaseInterceptor.to(TurnEndPhase); // Despite the opponent's ability (Clear Body), its ATK stat stage is still reduced. - expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); }); - it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { + it("should still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); - const enemyIndex = enemyPokemon?.getBattlerIndex(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerIndex = game.field.getPlayerPokemon().getBattlerIndex(); + const enemyIndex = enemyPokemon.getBattlerIndex(); game.move.select(MoveId.BABY_DOLL_EYES); @@ -85,14 +85,14 @@ describe("Abilities - Mycelium Might", () => { expect(commandOrder).toEqual([playerIndex, enemyIndex]); await game.phaseInterceptor.to(TurnEndPhase); // Despite the opponent's ability (Clear Body), its ATK stat stage is still reduced. - expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); }); - it("will not affect non-status moves", async () => { + it("should not affect non-status moves", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); - const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); + const playerIndex = game.field.getPlayerPokemon().getBattlerIndex(); + const enemyIndex = game.field.getEnemyPokemon().getBattlerIndex(); game.move.select(MoveId.QUICK_ATTACK); diff --git a/test/abilities/neutralizing-gas.test.ts b/test/abilities/neutralizing-gas.test.ts index 560b7af72e7..555e5f8a19c 100644 --- a/test/abilities/neutralizing-gas.test.ts +++ b/test/abilities/neutralizing-gas.test.ts @@ -46,7 +46,7 @@ describe("Abilities - Neutralizing Gas", () => { await game.phaseInterceptor.to("TurnEndPhase"); // Intimidate is suppressed, so the attack stat should not be lowered - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(0); }); it("should allow the user's passive to activate", async () => { @@ -56,7 +56,7 @@ describe("Abilities - Neutralizing Gas", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(1); }); it.todo("should activate before other abilities", async () => { @@ -68,7 +68,7 @@ describe("Abilities - Neutralizing Gas", () => { await game.phaseInterceptor.to("TurnEndPhase"); // Intimidate is suppressed even when the user's speed is lower - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(0); }); it("should activate other abilities when removed", async () => { @@ -79,15 +79,15 @@ describe("Abilities - Neutralizing Gas", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemyPokemon = game.scene.getEnemyPokemon(); - expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(0); - expect(enemyPokemon?.getStatStage(Stat.DEF)).toBe(0); + const enemyPokemon = game.field.getEnemyPokemon(); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Enemy removes user's ability, so both abilities are activated - expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(1); - expect(enemyPokemon?.getStatStage(Stat.DEF)).toBe(1); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); + expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(1); }); it("should not activate the user's other ability when removed", async () => { @@ -95,13 +95,13 @@ describe("Abilities - Neutralizing Gas", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); // Neutralising gas user's passive is still active - const enemyPokemon = game.scene.getEnemyPokemon(); - expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); + const enemyPokemon = game.field.getEnemyPokemon(); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Intimidate did not reactivate after neutralizing gas was removed - expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); }); it("should only deactivate when all setters are off the field", async () => { @@ -164,7 +164,7 @@ describe("Abilities - Neutralizing Gas", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); - vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); + vi.spyOn(game.field.getPlayerPokemon(), "randBattleSeedInt").mockReturnValue(0); vi.spyOn(globalScene, "randBattleSeedInt").mockReturnValue(0); const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; @@ -178,7 +178,7 @@ describe("Abilities - Neutralizing Gas", () => { game.override.battleStyle("single").ability(AbilityId.NEUTRALIZING_GAS).enemyAbility(AbilityId.DELTA_STREAM); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); const weatherChangeAttr = enemy.getAbilityAttrs("PostSummonWeatherChangeAbAttr", false)[0]; const weatherChangeSpy = vi.spyOn(weatherChangeAttr, "apply"); @@ -186,7 +186,7 @@ describe("Abilities - Neutralizing Gas", () => { game.move.select(MoveId.SPLASH); await game.killPokemon(enemy); - await game.killPokemon(game.scene.getPlayerPokemon()!); + await game.killPokemon(game.field.getPlayerPokemon()); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); expect(weatherChangeSpy).not.toHaveBeenCalled(); diff --git a/test/abilities/normal-move-type-change.test.ts b/test/abilities/normal-move-type-change.test.ts index fdf9ef0f9f2..11ea7a2e5f0 100644 --- a/test/abilities/normal-move-type-change.test.ts +++ b/test/abilities/normal-move-type-change.test.ts @@ -58,10 +58,10 @@ describe.each([ it(`should change Normal-type attacks to ${tyName} type and boost their power`, async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const typeSpy = vi.spyOn(playerPokemon, "getMoveType"); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemySpy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); const powerSpy = vi.spyOn(allMoves[MoveId.TACKLE], "calculateBattlePower"); @@ -103,10 +103,10 @@ describe.each([ await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const tySpy = vi.spyOn(playerPokemon, "getMoveType"); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyEffectivenessSpy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); enemyPokemon.hp = Math.floor(enemyPokemon.getMaxHp() * 0.8); @@ -137,7 +137,7 @@ describe.each([ await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const tySpy = vi.spyOn(playerPokemon, "getMoveType"); game.move.select(move); @@ -149,10 +149,10 @@ describe.each([ it("should affect all hits of a Normal-type multi-hit move", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const tySpy = vi.spyOn(playerPokemon, "getMoveType"); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.FURY_SWIPES); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -183,7 +183,7 @@ describe.each([ expect(boost, "power boost should be defined").toBeDefined(); const powerSpy = vi.spyOn(testMoveInstance, "calculateBattlePower"); - const typeSpy = vi.spyOn(game.scene.getPlayerPokemon()!, "getMoveType"); + const typeSpy = vi.spyOn(game.field.getPlayerPokemon(), "getMoveType"); game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(typeSpy, "type was not changed").toHaveLastReturnedWith(ty); diff --git a/test/abilities/oblivious.test.ts b/test/abilities/oblivious.test.ts index 6b9598903c5..02056251992 100644 --- a/test/abilities/oblivious.test.ts +++ b/test/abilities/oblivious.test.ts @@ -39,14 +39,14 @@ describe("Abilities - Oblivious", () => { .moveset(MoveId.SKILL_SWAP) .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon(); - enemy?.addTag(BattlerTagType.TAUNT); - expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeTruthy(); + const enemy = game.field.getEnemyPokemon(); + enemy.addTag(BattlerTagType.TAUNT); + expect(enemy.getTag(BattlerTagType.TAUNT)).toBeDefined(); game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); - expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeFalsy(); + expect(enemy.getTag(BattlerTagType.TAUNT)).toBeUndefined(); }); it("should remove infatuation when gained", async () => { @@ -56,14 +56,15 @@ describe("Abilities - Oblivious", () => { .moveset(MoveId.SKILL_SWAP) .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon(); - vi.spyOn(enemy!, "isOppositeGender").mockReturnValue(true); - enemy?.addTag(BattlerTagType.INFATUATED, 5, MoveId.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined - expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeTruthy(); + + const enemy = game.field.getEnemyPokemon(); + vi.spyOn(enemy, "isOppositeGender").mockReturnValue(true); + enemy.addTag(BattlerTagType.INFATUATED, 5, MoveId.JUDGMENT, game.field.getPlayerPokemon().id); // sourceID needs to be defined + expect(enemy.getTag(BattlerTagType.INFATUATED)).toBeTruthy(); game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); - expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeFalsy(); + expect(enemy.getTag(BattlerTagType.INFATUATED)).toBeFalsy(); }); }); diff --git a/test/abilities/parental-bond.test.ts b/test/abilities/parental-bond.test.ts index 51c15ea32b1..a72fc82260f 100644 --- a/test/abilities/parental-bond.test.ts +++ b/test/abilities/parental-bond.test.ts @@ -42,8 +42,8 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); let enemyStartingHp = enemyPokemon.hp; @@ -66,7 +66,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.POWER_UP_PUNCH); @@ -81,7 +81,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.BABY_DOLL_EYES); @@ -95,7 +95,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.DOUBLE_HIT); await game.move.forceHit(); @@ -110,7 +110,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SELF_DESTRUCT); @@ -124,7 +124,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.ROLLOUT); await game.move.forceHit(); @@ -139,7 +139,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to("BerryPhase", false); @@ -152,8 +152,8 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.COUNTER); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -185,7 +185,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("DamageAnimPhase", false); @@ -199,7 +199,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.MIND_BLOWN); @@ -218,8 +218,8 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.BURN_UP); @@ -239,7 +239,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.HYPER_BEAM); await game.move.forceHit(); @@ -259,8 +259,8 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.ANCHOR_SHOT); await game.move.forceHit(); @@ -283,8 +283,8 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SMACK_DOWN); await game.move.forceHit(); @@ -304,7 +304,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.U_TURN); await game.move.forceHit(); @@ -321,8 +321,8 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.WAKE_UP_SLAP); await game.move.forceHit(); @@ -342,7 +342,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.TACKLE); @@ -356,7 +356,7 @@ describe("Abilities - Parental Bond", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.WATER_GUN); @@ -369,7 +369,7 @@ describe("Abilities - Parental Bond", () => { game.override.enemyLevel(1000).moveset(MoveId.FUTURE_SIGHT); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "damageAndUpdate"); game.move.select(MoveId.FUTURE_SIGHT); diff --git a/test/abilities/perish-body.test.ts b/test/abilities/perish-body.test.ts index 251d29abe36..50ba2f86c39 100644 --- a/test/abilities/perish-body.test.ts +++ b/test/abilities/perish-body.test.ts @@ -34,55 +34,55 @@ describe("Abilities - Perish Song", () => { it("should trigger when hit with damaging move", async () => { await game.classicMode.startBattle(); - const cursola = game.scene.getPlayerPokemon(); - const magikarp = game.scene.getEnemyPokemon(); + const cursola = game.field.getPlayerPokemon(); + const magikarp = game.field.getEnemyPokemon(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); - expect(cursola?.summonData.tags[0].turnCount).toBe(3); - expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + expect(cursola.summonData.tags[0].turnCount).toBe(3); + expect(magikarp.summonData.tags[0].turnCount).toBe(3); }); it("should trigger even when fainting", async () => { game.override.enemyLevel(100).startingLevel(1); await game.classicMode.startBattle([SpeciesId.CURSOLA, SpeciesId.FEEBAS]); - const magikarp = game.scene.getEnemyPokemon(); + const magikarp = game.field.getEnemyPokemon(); game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); - expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + expect(magikarp.summonData.tags[0].turnCount).toBe(3); }); it("should not activate if attacker already has perish song", async () => { game.override.enemyMoveset([MoveId.PERISH_SONG, MoveId.AQUA_JET, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.CURSOLA]); - const feebas = game.scene.getPlayerPokemon(); - const magikarp = game.scene.getEnemyPokemon(); + const feebas = game.field.getPlayerPokemon(); + const magikarp = game.field.getEnemyPokemon(); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.PERISH_SONG); await game.toNextTurn(); - expect(feebas?.summonData.tags[0].turnCount).toBe(3); - expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + expect(feebas.summonData.tags[0].turnCount).toBe(3); + expect(magikarp.summonData.tags[0].turnCount).toBe(3); game.doSwitchPokemon(1); await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - const cursola = game.scene.getPlayerPokemon(); - expect(cursola?.summonData.tags.length).toBe(0); - expect(magikarp?.summonData.tags[0].turnCount).toBe(2); + const cursola = game.field.getPlayerPokemon(); + expect(cursola.summonData.tags.length).toBe(0); + expect(magikarp.summonData.tags[0].turnCount).toBe(2); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.AQUA_JET); await game.toNextTurn(); - expect(cursola?.summonData.tags.length).toBe(0); - expect(magikarp?.summonData.tags[0].turnCount).toBe(1); + expect(cursola.summonData.tags.length).toBe(0); + expect(magikarp.summonData.tags[0].turnCount).toBe(1); }); it("should activate if cursola already has perish song, but not reset its counter", async () => { @@ -91,22 +91,22 @@ describe("Abilities - Perish Song", () => { .moveset([MoveId.WHIRLWIND, MoveId.SPLASH]) .startingWave(5); await game.classicMode.startBattle([SpeciesId.CURSOLA]); - const cursola = game.scene.getPlayerPokemon(); + const cursola = game.field.getPlayerPokemon(); game.move.select(MoveId.WHIRLWIND); await game.move.selectEnemyMove(MoveId.PERISH_SONG); await game.toNextTurn(); - const magikarp = game.scene.getEnemyPokemon(); - expect(cursola?.summonData.tags[0].turnCount).toBe(3); - expect(magikarp?.summonData.tags.length).toBe(0); + const magikarp = game.field.getEnemyPokemon(); + expect(cursola.summonData.tags[0].turnCount).toBe(3); + expect(magikarp.summonData.tags.length).toBe(0); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.AQUA_JET); await game.toNextTurn(); - expect(cursola?.summonData.tags[0].turnCount).toBe(2); - expect(magikarp?.summonData.tags.length).toBe(1); - expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + expect(cursola.summonData.tags[0].turnCount).toBe(2); + expect(magikarp.summonData.tags.length).toBe(1); + expect(magikarp.summonData.tags[0].turnCount).toBe(3); }); }); diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index f4461a562ea..ea2e1e20c17 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -42,10 +42,10 @@ describe("Abilities - Protosynthesis", () => { .startingLevel(100) .enemyLevel(100); await game.classicMode.startBattle([SpeciesId.MEW]); - const mew = game.scene.getPlayerPokemon()!; + const mew = game.field.getPlayerPokemon(); // Nature of starting mon is randomized. We need to fix it to a neutral nature for the automated test. mew.setNature(Nature.HARDY); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); const def_before_boost = mew.getEffectiveStat( Stat.DEF, undefined, diff --git a/test/abilities/quick-draw.test.ts b/test/abilities/quick-draw.test.ts index d3914e24268..ce5873af3a8 100644 --- a/test/abilities/quick-draw.test.ts +++ b/test/abilities/quick-draw.test.ts @@ -43,8 +43,8 @@ describe("Abilities - Quick Draw", () => { test("makes pokemon going first in its priority bracket", async () => { await game.classicMode.startBattle(); - const pokemon = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const pokemon = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); pokemon.hp = 1; enemy.hp = 1; @@ -65,8 +65,8 @@ describe("Abilities - Quick Draw", () => { async () => { await game.classicMode.startBattle(); - const pokemon = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const pokemon = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); pokemon.hp = 1; enemy.hp = 1; @@ -85,8 +85,8 @@ describe("Abilities - Quick Draw", () => { await game.classicMode.startBattle(); - const pokemon = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const pokemon = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); pokemon.hp = 1; enemy.hp = 1; diff --git a/test/abilities/sap-sipper.test.ts b/test/abilities/sap-sipper.test.ts index a1c034ab126..95f9841d924 100644 --- a/test/abilities/sap-sipper.test.ts +++ b/test/abilities/sap-sipper.test.ts @@ -45,7 +45,7 @@ describe("Abilities - Sap Sipper", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const initialEnemyHp = enemyPokemon.hp; game.move.select(moveToUse); @@ -63,7 +63,7 @@ describe("Abilities - Sap Sipper", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(moveToUse); @@ -86,7 +86,7 @@ describe("Abilities - Sap Sipper", () => { expect(game.scene.arena.terrain).toBeDefined(); expect(game.scene.arena.terrain!.terrainType).toBe(TerrainType.GRASSY); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(0); }); it("activate once against multi-hit grass attacks", async () => { @@ -96,7 +96,7 @@ describe("Abilities - Sap Sipper", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const initialEnemyHp = enemyPokemon.hp; game.move.select(moveToUse); @@ -114,7 +114,7 @@ describe("Abilities - Sap Sipper", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(moveToUse); @@ -140,7 +140,7 @@ describe("Abilities - Sap Sipper", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const initialEnemyHp = enemyPokemon.hp; game.move.select(moveToUse); @@ -156,7 +156,7 @@ describe("Abilities - Sap Sipper", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.LEAF_BLADE); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/abilities/shield-dust.test.ts b/test/abilities/shield-dust.test.ts index 025b415dbc0..a34056e00e9 100644 --- a/test/abilities/shield-dust.test.ts +++ b/test/abilities/shield-dust.test.ts @@ -38,8 +38,8 @@ describe("Abilities - Shield Dust", () => { it("Shield Dust", async () => { await game.classicMode.startBattle([SpeciesId.PIDGEOT]); - game.scene.getEnemyPokemon()!.stats[Stat.SPDEF] = 10000; - expect(game.scene.getPlayerPokemon()!.formIndex).toBe(0); + game.field.getEnemyPokemon().stats[Stat.SPDEF] = 10000; + expect(game.field.getPlayerPokemon().formIndex).toBe(0); game.move.select(MoveId.AIR_SLASH); diff --git a/test/abilities/shields-down.test.ts b/test/abilities/shields-down.test.ts index 0323a4afbec..98a1cfffa8e 100644 --- a/test/abilities/shields-down.test.ts +++ b/test/abilities/shields-down.test.ts @@ -66,7 +66,7 @@ describe("Abilities - SHIELDS DOWN", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + expect(game.field.getPlayerPokemon().status).toBe(undefined); }); test("should still ignore non-volatile status moves used by a pokemon with mold breaker", async () => { @@ -78,7 +78,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.move.selectEnemyMove(MoveId.SPORE); await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + expect(game.field.getPlayerPokemon().status).toBe(undefined); }); test("should ignore non-volatile secondary status effects", async () => { @@ -89,7 +89,7 @@ describe("Abilities - SHIELDS DOWN", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + expect(game.field.getPlayerPokemon().status).toBe(undefined); }); test("should ignore status moves even through mold breaker", async () => { @@ -101,7 +101,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); + expect(game.field.getPlayerPokemon().status).toBe(undefined); }); // toxic spikes currently does not poison flying types when gravity is in effect @@ -122,9 +122,9 @@ describe("Abilities - SHIELDS DOWN", () => { await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.MINIOR); - expect(game.scene.getPlayerPokemon()!.species.formIndex).toBe(0); - expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.POISON); + expect(game.field.getPlayerPokemon().species.speciesId).toBe(SpeciesId.MINIOR); + expect(game.field.getPlayerPokemon().species.formIndex).toBe(0); + expect(game.field.getPlayerPokemon().status?.effect).toBe(StatusEffect.POISON); }); test("should ignore yawn", async () => { @@ -136,7 +136,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.move.selectEnemyMove(MoveId.YAWN); await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getPlayerPokemon()!.findTag(tag => tag.tagType === BattlerTagType.DROWSY)).toBe(undefined); + expect(game.field.getPlayerPokemon().findTag(tag => tag.tagType === BattlerTagType.DROWSY)).toBe(undefined); }); test("should not ignore volatile status effects", async () => { @@ -149,7 +149,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getPlayerPokemon()!.findTag(tag => tag.tagType === BattlerTagType.CONFUSED)).not.toBe(undefined); + expect(game.field.getPlayerPokemon().findTag(tag => tag.tagType === BattlerTagType.CONFUSED)).not.toBe(undefined); }); // the `NoTransformAbilityAbAttr` attribute is not checked anywhere, so this test cannot pass. @@ -162,7 +162,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.SLEEP); }); test("should not prevent minior from receiving the fainted status effect in trainer battles", async () => { @@ -173,7 +173,7 @@ describe("Abilities - SHIELDS DOWN", () => { .startingWave(5) .enemySpecies(SpeciesId.MINIOR); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const minior = game.scene.getEnemyPokemon()!; + const minior = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDERBOLT); await game.toNextTurn(); diff --git a/test/abilities/simple.test.ts b/test/abilities/simple.test.ts index 39f1b579a19..fe065e37cfe 100644 --- a/test/abilities/simple.test.ts +++ b/test/abilities/simple.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Simple", () => { it("should double stat changes when applied", async () => { await game.classicMode.startBattle([SpeciesId.SLOWBRO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-2); }); diff --git a/test/abilities/speed-boost.test.ts b/test/abilities/speed-boost.test.ts index ff0beaf74a0..b087be29460 100644 --- a/test/abilities/speed-boost.test.ts +++ b/test/abilities/speed-boost.test.ts @@ -40,7 +40,7 @@ describe("Abilities - Speed Boost", () => { it("should increase speed by 1 stage at end of turn", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); @@ -53,7 +53,7 @@ describe("Abilities - Speed Boost", () => { game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); game.move.select(MoveId.SPLASH); @@ -69,13 +69,13 @@ describe("Abilities - Speed Boost", () => { game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!).toBe(ninjask); + expect(game.field.getPlayerPokemon()).toBe(ninjask); expect(ninjask.getStatStage(Stat.SPD)).toBe(0); game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!).toBe(shuckle); + expect(game.field.getPlayerPokemon()).toBe(shuckle); expect(shuckle.getStatStage(Stat.SPD)).toBe(0); game.move.select(MoveId.SPLASH); @@ -88,7 +88,7 @@ describe("Abilities - Speed Boost", () => { game.doSwitchPokemon(1); await game.toNextTurn(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); game.move.select(MoveId.SPLASH); @@ -109,7 +109,7 @@ describe("Abilities - Speed Boost", () => { await game.phaseInterceptor.to(AttemptRunPhase); await game.toNextTurn(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); game.move.select(MoveId.SPLASH); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 71796d376a3..5b4e38f7099 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -40,8 +40,8 @@ describe("Abilities - Stall", () => { it("Pokemon with Stall should move last in its priority bracket regardless of speed", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); - const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); + const playerIndex = game.field.getPlayerPokemon().getBattlerIndex(); + const enemyIndex = game.field.getEnemyPokemon().getBattlerIndex(); game.move.select(MoveId.QUICK_ATTACK); @@ -58,8 +58,8 @@ describe("Abilities - Stall", () => { it("Pokemon with Stall will go first if a move that is in a higher priority bracket than the opponent's move is used", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); - const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); + const playerIndex = game.field.getPlayerPokemon().getBattlerIndex(); + const enemyIndex = game.field.getEnemyPokemon().getBattlerIndex(); game.move.select(MoveId.TACKLE); @@ -77,8 +77,8 @@ describe("Abilities - Stall", () => { game.override.ability(AbilityId.STALL); await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); - const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); + const playerIndex = game.field.getPlayerPokemon().getBattlerIndex(); + const enemyIndex = game.field.getEnemyPokemon().getBattlerIndex(); game.move.select(MoveId.TACKLE); diff --git a/test/abilities/steely-spirit.test.ts b/test/abilities/steely-spirit.test.ts index 072566fdb96..5fbb11a4bfd 100644 --- a/test/abilities/steely-spirit.test.ts +++ b/test/abilities/steely-spirit.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Steely Spirit", () => { it("increases Steel-type moves' power used by the user and its allies by 50%", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.SHUCKLE]); const boostSource = game.scene.getPlayerField()[1]; - const enemyToCheck = game.scene.getEnemyPokemon()!; + const enemyToCheck = game.field.getEnemyPokemon(); vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[AbilityId.STEELY_SPIRIT]); @@ -54,7 +54,7 @@ describe("Abilities - Steely Spirit", () => { it("stacks if multiple users with this ability are on the field.", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.PIKACHU]); - const enemyToCheck = game.scene.getEnemyPokemon()!; + const enemyToCheck = game.field.getEnemyPokemon(); game.scene.getPlayerField().forEach(p => { vi.spyOn(p, "getAbility").mockReturnValue(allAbilities[AbilityId.STEELY_SPIRIT]); @@ -74,7 +74,7 @@ describe("Abilities - Steely Spirit", () => { it("does not take effect when suppressed", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.SHUCKLE]); const boostSource = game.scene.getPlayerField()[1]; - const enemyToCheck = game.scene.getEnemyPokemon()!; + const enemyToCheck = game.field.getEnemyPokemon(); vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[AbilityId.STEELY_SPIRIT]); expect(boostSource.hasAbility(AbilityId.STEELY_SPIRIT)).toBe(true); diff --git a/test/abilities/super-luck.test.ts b/test/abilities/super-luck.test.ts index a0f5293b036..fd6e3d75f76 100644 --- a/test/abilities/super-luck.test.ts +++ b/test/abilities/super-luck.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Super Luck", () => { it("should increase the user's crit stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); const critSpy = vi.spyOn(enemy, "getCritStage"); // crit stage is called on enemy game.move.select(MoveId.TACKLE); diff --git a/test/abilities/synchronize.test.ts b/test/abilities/synchronize.test.ts index c95ae1b7828..048f9663db9 100644 --- a/test/abilities/synchronize.test.ts +++ b/test/abilities/synchronize.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Synchronize", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + expect(game.field.getPlayerPokemon().status).toBeUndefined(); expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); }); @@ -48,8 +48,8 @@ describe("Abilities - Synchronize", () => { game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.PARALYSIS); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.PARALYSIS); + expect(game.field.getPlayerPokemon().status?.effect).toBe(StatusEffect.PARALYSIS); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.PARALYSIS); expect(game.phaseInterceptor.log).toContain("ShowAbilityPhase"); }); @@ -60,8 +60,8 @@ describe("Abilities - Synchronize", () => { await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status?.effect).toBeUndefined(); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + expect(game.field.getPlayerPokemon().status?.effect).toBeUndefined(); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.SLEEP); expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); }); @@ -76,8 +76,8 @@ describe("Abilities - Synchronize", () => { game.doSwitchPokemon(1); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.POISON); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBeUndefined(); + expect(game.field.getPlayerPokemon().status?.effect).toBe(StatusEffect.POISON); + expect(game.field.getEnemyPokemon().status?.effect).toBeUndefined(); expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); }); @@ -87,8 +87,8 @@ describe("Abilities - Synchronize", () => { game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status?.effect).toBeUndefined(); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.PARALYSIS); + expect(game.field.getPlayerPokemon().status?.effect).toBeUndefined(); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.PARALYSIS); expect(game.phaseInterceptor.log).toContain("ShowAbilityPhase"); }); }); diff --git a/test/abilities/tera-shell.test.ts b/test/abilities/tera-shell.test.ts index 385fabe1a54..4183cd4d0a6 100644 --- a/test/abilities/tera-shell.test.ts +++ b/test/abilities/tera-shell.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Tera Shell", () => { it("should change the effectiveness of non-resisted attacks when the source is at full HP", async () => { await game.classicMode.startBattle([SpeciesId.SNORLAX]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); vi.spyOn(playerPokemon, "getMoveEffectiveness"); game.move.select(MoveId.SPLASH); @@ -57,7 +57,7 @@ describe("Abilities - Tera Shell", () => { await game.classicMode.startBattle([SpeciesId.SNORLAX]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); vi.spyOn(playerPokemon, "getMoveEffectiveness"); game.move.select(MoveId.SPLASH); @@ -71,7 +71,7 @@ describe("Abilities - Tera Shell", () => { await game.classicMode.startBattle([SpeciesId.AGGRON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); vi.spyOn(playerPokemon, "getMoveEffectiveness"); game.move.select(MoveId.SPLASH); @@ -85,7 +85,7 @@ describe("Abilities - Tera Shell", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); game.move.select(MoveId.SPLASH); @@ -100,7 +100,7 @@ describe("Abilities - Tera Shell", () => { await game.classicMode.startBattle([SpeciesId.SNORLAX]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); game.move.select(MoveId.SPLASH); diff --git a/test/abilities/trace.test.ts b/test/abilities/trace.test.ts index 4211234a451..3a4809a4e7e 100644 --- a/test/abilities/trace.test.ts +++ b/test/abilities/trace.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Trace", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.field.getPlayerPokemon().getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should activate a copied post-summon ability", async () => { @@ -48,6 +48,6 @@ describe("Abilities - Trace", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); }); diff --git a/test/abilities/truant.test.ts b/test/abilities/truant.test.ts new file mode 100644 index 00000000000..0d71cd393b0 --- /dev/null +++ b/test/abilities/truant.test.ts @@ -0,0 +1,72 @@ +import { getPokemonNameWithAffix } from "#app/messages"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { MoveResult } from "#enums/move-result"; +import { SpeciesId } from "#enums/species-id"; +import { GameManager } from "#test/test-utils/game-manager"; +import i18next from "i18next"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Ability - Truant", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleStyle("single") + .criticalHits(false) + .moveset([MoveId.SPLASH, MoveId.TACKLE]) + .ability(AbilityId.TRUANT) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); + }); + + it("should loaf around and prevent using moves every other turn", async () => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); + + // Turn 1: Splash succeeds + game.move.select(MoveId.SPLASH); + await game.toNextTurn(); + + expect(player.getLastXMoves(1)[0]).toEqual( + expect.objectContaining({ move: MoveId.SPLASH, result: MoveResult.SUCCESS }), + ); + + // Turn 2: Truant activates, cancelling tackle and displaying message + game.move.select(MoveId.TACKLE); + await game.toNextTurn(); + + expect(player.getLastXMoves(1)[0]).toEqual(expect.objectContaining({ move: MoveId.NONE, result: MoveResult.FAIL })); + expect(enemy.hp).toBe(enemy.getMaxHp()); + expect(game.textInterceptor.logs).toContain( + i18next.t("battlerTags:truantLapse", { + pokemonNameWithAffix: getPokemonNameWithAffix(player), + }), + ); + + // Turn 3: Truant didn't activate, tackle worked + game.move.select(MoveId.TACKLE); + await game.toNextTurn(); + + expect(player.getLastXMoves(1)[0]).toEqual( + expect.objectContaining({ move: MoveId.TACKLE, result: MoveResult.SUCCESS }), + ); + expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); + }); +}); diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index 686a6c20904..c10dd404ab9 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -64,7 +64,7 @@ describe("Abilities - Unburden", () => { game.override.enemyMoveset(MoveId.FALSE_SWIPE); await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -80,7 +80,7 @@ describe("Abilities - Unburden", () => { game.override.enemyMoveset(MoveId.FALSE_SWIPE).startingModifier([{ name: "BERRY_POUCH", count: 5850 }]); await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -95,9 +95,9 @@ describe("Abilities - Unburden", () => { it("should activate for the target, and not the stealer, when a berry is stolen", async () => { await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); @@ -113,7 +113,7 @@ describe("Abilities - Unburden", () => { it("should activate when an item is knocked off", async () => { await game.classicMode.startBattle([SpeciesId.TREECKO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); @@ -129,7 +129,7 @@ describe("Abilities - Unburden", () => { game.override.ability(AbilityId.MAGICIAN).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items await game.classicMode.startBattle([SpeciesId.TREECKO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); @@ -145,7 +145,7 @@ describe("Abilities - Unburden", () => { game.override.enemyAbility(AbilityId.PICKPOCKET).enemyHeldItems([]); // Remove opponent's full stacks of held items so it can steal player's held items await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -161,7 +161,7 @@ describe("Abilities - Unburden", () => { game.override.moveset(MoveId.THIEF).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items await game.classicMode.startBattle([SpeciesId.TREECKO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); @@ -177,11 +177,11 @@ describe("Abilities - Unburden", () => { game.override.startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]); await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const gripClaw = playerPokemon.getHeldItems()[0] as ContactHeldItemTransferChanceModifier; vi.spyOn(gripClaw, "chance", "get").mockReturnValue(100); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); @@ -197,7 +197,7 @@ describe("Abilities - Unburden", () => { game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS).enemyMoveset(MoveId.FALSE_SWIPE); await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -214,7 +214,7 @@ describe("Abilities - Unburden", () => { game.override.moveset(MoveId.STUFF_CHEEKS); await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerHeldItemCt = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -292,7 +292,7 @@ describe("Abilities - Unburden", () => { game.override.enemyMoveset([MoveId.FALSE_SWIPE, MoveId.WORRY_SEED]); await game.classicMode.startBattle([SpeciesId.PURRLOIN]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -317,7 +317,7 @@ describe("Abilities - Unburden", () => { game.override.startingHeldItems([{ name: "REVIVER_SEED" }]).enemyMoveset([MoveId.WING_ATTACK]); await game.classicMode.startBattle([SpeciesId.TREECKO]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -334,7 +334,7 @@ describe("Abilities - Unburden", () => { game.override.enemyMoveset([MoveId.SPLASH, MoveId.THIEF]); await game.classicMode.startBattle([SpeciesId.TREECKO, SpeciesId.FEEBAS]); - const treecko = game.scene.getPlayerPokemon()!; + const treecko = game.field.getPlayerPokemon(); const treeckoInitialHeldItems = getHeldItemCount(treecko); const initialSpeed = treecko.getStat(Stat.SPD); @@ -348,7 +348,7 @@ describe("Abilities - Unburden", () => { await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!).toBe(treecko); + expect(game.field.getPlayerPokemon()).toBe(treecko); expect(getHeldItemCount(treecko)).toBeLessThan(treeckoInitialHeldItems); expect(treecko.getEffectiveStat(Stat.SPD)).toBe(initialSpeed); }); diff --git a/test/abilities/unseen-fist.test.ts b/test/abilities/unseen-fist.test.ts index 01b573fe66c..3c0fa3f8c60 100644 --- a/test/abilities/unseen-fist.test.ts +++ b/test/abilities/unseen-fist.test.ts @@ -55,7 +55,7 @@ describe("Abilities - Unseen Fist", () => { await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, enemyPokemon.id); game.move.select(MoveId.TACKLE); @@ -77,10 +77,10 @@ async function testUnseenFistHitResult( await game.classicMode.startBattle(); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); expect(leadPokemon).not.toBe(undefined); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon).not.toBe(undefined); const enemyStartingHp = enemyPokemon.hp; diff --git a/test/abilities/volt-absorb.test.ts b/test/abilities/volt-absorb.test.ts index 921d56f075b..9ba76028703 100644 --- a/test/abilities/volt-absorb.test.ts +++ b/test/abilities/volt-absorb.test.ts @@ -42,7 +42,7 @@ describe("Abilities - Volt Absorb", () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(moveToUse); @@ -62,7 +62,7 @@ describe("Abilities - Volt Absorb", () => { await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; @@ -83,7 +83,7 @@ describe("Abilities - Volt Absorb", () => { await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; diff --git a/test/abilities/wandering-spirit.test.ts b/test/abilities/wandering-spirit.test.ts index 63c2550b198..44e2cd61236 100644 --- a/test/abilities/wandering-spirit.test.ts +++ b/test/abilities/wandering-spirit.test.ts @@ -38,8 +38,8 @@ describe("Abilities - Wandering Spirit", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.WANDERING_SPIRIT); + expect(game.field.getPlayerPokemon().getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.field.getEnemyPokemon().getAbility().id).toBe(AbilityId.WANDERING_SPIRIT); }); it("should not exchange abilities when hit with a non-contact move", async () => { @@ -49,8 +49,8 @@ describe("Abilities - Wandering Spirit", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.WANDERING_SPIRIT); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.field.getPlayerPokemon().getAbility().id).toBe(AbilityId.WANDERING_SPIRIT); + expect(game.field.getEnemyPokemon().getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should activate post-summon abilities", async () => { @@ -60,6 +60,6 @@ describe("Abilities - Wandering Spirit", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); }); diff --git a/test/abilities/wimp-out.test.ts b/test/abilities/wimp-out.test.ts index a1c19a12fd4..1e129f34a19 100644 --- a/test/abilities/wimp-out.test.ts +++ b/test/abilities/wimp-out.test.ts @@ -70,7 +70,7 @@ describe("Abilities - Wimp Out", () => { game.override.passiveAbility(AbilityId.REGENERATOR).startingLevel(5).enemyLevel(100); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - const wimpod = game.scene.getPlayerPokemon()!; + const wimpod = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -84,7 +84,7 @@ describe("Abilities - Wimp Out", () => { game.override.enemyAbility(AbilityId.WIMP_OUT); await game.classicMode.startBattle([SpeciesId.GOLISOPOD, SpeciesId.TYRUNT]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.hp *= 0.52; game.move.select(MoveId.FALSE_SWIPE); @@ -97,7 +97,7 @@ describe("Abilities - Wimp Out", () => { it("Does not trigger when HP already below half", async () => { await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - const wimpod = game.scene.getPlayerPokemon()!; + const wimpod = game.field.getPlayerPokemon(); wimpod.hp = 5; game.move.select(MoveId.SPLASH); @@ -117,7 +117,7 @@ describe("Abilities - Wimp Out", () => { await game.phaseInterceptor.to("TurnEndPhase"); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.getTag(BattlerTagType.TRAPPED)).toBeUndefined(); + expect(game.field.getPlayerPokemon().getTag(BattlerTagType.TRAPPED)).toBeUndefined(); expect(game.scene.getPlayerParty()[1].getTag(BattlerTagType.TRAPPED)).toBeUndefined(); confirmSwitch(); }); @@ -130,7 +130,7 @@ describe("Abilities - Wimp Out", () => { game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const hasFled = enemyPokemon.switchOutStatus; expect(hasFled).toBe(false); confirmSwitch(); @@ -139,17 +139,17 @@ describe("Abilities - Wimp Out", () => { it("If this Ability does not activate due to being hit by U-turn or Volt Switch, the user of that move will be switched out.", async () => { game.override.startingLevel(190).startingWave(8).enemyMoveset([MoveId.U_TURN]); await game.classicMode.startBattle([SpeciesId.GOLISOPOD, SpeciesId.TYRUNT]); - const RIVAL_NINJASK1 = game.scene.getEnemyPokemon()?.id; + const RIVAL_NINJASK1 = game.field.getEnemyPokemon().id; game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); - expect(game.scene.getEnemyPokemon()?.id !== RIVAL_NINJASK1); + expect(game.field.getEnemyPokemon().id !== RIVAL_NINJASK1); }); it("Dragon Tail and Circle Throw switch out Pokémon before the Ability activates.", async () => { game.override.startingLevel(69).enemyMoveset([MoveId.DRAGON_TAIL]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - const wimpod = game.scene.getPlayerPokemon()!; + const wimpod = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -159,7 +159,7 @@ describe("Abilities - Wimp Out", () => { await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).not.toBe(SpeciesId.WIMPOD); + expect(game.field.getPlayerPokemon().species.speciesId).not.toBe(SpeciesId.WIMPOD); }); it("triggers when recoil damage is taken", async () => { @@ -177,7 +177,7 @@ describe("Abilities - Wimp Out", () => { game.override.moveset([MoveId.SUBSTITUTE]).enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - const wimpod = game.scene.getPlayerPokemon()!; + const wimpod = game.field.getPlayerPokemon(); wimpod.hp *= 0.52; game.move.select(MoveId.SUBSTITUTE); @@ -208,7 +208,7 @@ describe("Abilities - Wimp Out", () => { .startingHeldItems([{ name: "SHELL_BELL", count: 4 }]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - const wimpod = game.scene.getPlayerPokemon()!; + const wimpod = game.field.getPlayerPokemon(); wimpod.damageAndUpdate(toDmgValue(wimpod.getMaxHp() * 0.4)); @@ -219,7 +219,7 @@ describe("Abilities - Wimp Out", () => { expect(game.scene.getPlayerParty()[1]).toBe(wimpod); expect(wimpod.hp).toBeGreaterThan(toDmgValue(wimpod.getMaxHp() / 2)); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.TYRUNT); + expect(game.field.getPlayerPokemon().species.speciesId).toBe(SpeciesId.TYRUNT); }, ); @@ -227,7 +227,7 @@ describe("Abilities - Wimp Out", () => { game.override.weather(WeatherType.HAIL).enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -240,7 +240,7 @@ describe("Abilities - Wimp Out", () => { game.override.enemyAbility(AbilityId.SHEER_FORCE).enemyMoveset(MoveId.SLUDGE_BOMB).startingLevel(95); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.ENDURE); await game.phaseInterceptor.to("TurnEndPhase"); @@ -252,7 +252,7 @@ describe("Abilities - Wimp Out", () => { game.override.statusEffect(StatusEffect.POISON).enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -265,7 +265,7 @@ describe("Abilities - Wimp Out", () => { game.override.statusEffect(StatusEffect.SLEEP).enemyAbility(AbilityId.BAD_DREAMS); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.52; + game.field.getPlayerPokemon().hp *= 0.52; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -277,7 +277,7 @@ describe("Abilities - Wimp Out", () => { it("Wimp Out will activate due to leech seed", async () => { game.override.enemyMoveset([MoveId.LEECH_SEED]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.52; + game.field.getPlayerPokemon().hp *= 0.52; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -289,7 +289,7 @@ describe("Abilities - Wimp Out", () => { it("Wimp Out will activate due to curse damage", async () => { game.override.enemySpecies(SpeciesId.DUSKNOIR).enemyMoveset([MoveId.CURSE]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.52; + game.field.getPlayerPokemon().hp *= 0.52; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -301,7 +301,7 @@ describe("Abilities - Wimp Out", () => { it("Wimp Out will activate due to salt cure damage", async () => { game.override.enemySpecies(SpeciesId.NACLI).enemyMoveset([MoveId.SALT_CURE]).enemyLevel(1); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.7; + game.field.getPlayerPokemon().hp *= 0.7; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -313,7 +313,7 @@ describe("Abilities - Wimp Out", () => { it("Wimp Out will activate due to damaging trap damage", async () => { game.override.enemySpecies(SpeciesId.MAGIKARP).enemyMoveset([MoveId.WHIRLPOOL]).enemyLevel(1); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.55; + game.field.getPlayerPokemon().hp *= 0.55; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -331,14 +331,14 @@ describe("Abilities - Wimp Out", () => { .weather(WeatherType.HAIL) .statusEffect(StatusEffect.POISON); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerParty()[0].getHpRatio()).toEqual(0.51); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.WIMPOD); + expect(game.field.getPlayerPokemon().species.speciesId).toBe(SpeciesId.WIMPOD); }); it("Wimp Out activating should not cancel a double battle", async () => { @@ -369,7 +369,7 @@ describe("Abilities - Wimp Out", () => { .enemyMoveset([MoveId.SPLASH]) .enemyLevel(1); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.THUNDER_PUNCH); game.doSelectPartyPokemon(1); @@ -391,7 +391,7 @@ describe("Abilities - Wimp Out", () => { it("Wimp Out will activate due to Nightmare", async () => { game.override.enemyMoveset([MoveId.NIGHTMARE]).statusEffect(StatusEffect.SLEEP); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.65; + game.field.getPlayerPokemon().hp *= 0.65; game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); @@ -417,13 +417,13 @@ describe("Abilities - Wimp Out", () => { game.override.enemyMoveset(MoveId.BULLET_SEED).enemyAbility(AbilityId.SKILL_LINK); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.turnData.hitsLeft).toBe(0); expect(enemyPokemon.turnData.hitCount).toBe(5); confirmSwitch(); @@ -433,13 +433,13 @@ describe("Abilities - Wimp Out", () => { game.override.enemyMoveset(MoveId.TACKLE).enemyHeldItems([{ name: "MULTI_LENS", count: 1 }]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.turnData.hitsLeft).toBe(0); expect(enemyPokemon.turnData.hitCount).toBe(2); confirmSwitch(); @@ -448,13 +448,13 @@ describe("Abilities - Wimp Out", () => { game.override.enemyMoveset(MoveId.TACKLE).enemyAbility(AbilityId.PARENTAL_BOND); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.scene.getPlayerPokemon()!.hp *= 0.51; + game.field.getPlayerPokemon().hp *= 0.51; game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.turnData.hitsLeft).toBe(0); expect(enemyPokemon.turnData.hitCount).toBe(2); confirmSwitch(); @@ -466,7 +466,7 @@ describe("Abilities - Wimp Out", () => { async () => { game.override.moveset([MoveId.SWORDS_DANCE]).enemyMoveset([MoveId.SWAGGER]); await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.hp *= 0.51; playerPokemon.setStatStage(Stat.ATK, 6); playerPokemon.addTag(BattlerTagType.CONFUSED); @@ -486,7 +486,7 @@ describe("Abilities - Wimp Out", () => { game.override.enemyAbility(AbilityId.WIMP_OUT).startingLevel(5850).startingWave(10); await game.classicMode.startBattle([SpeciesId.GOLISOPOD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // Use 2 turns of False Swipe due to opponent's health bar shield game.move.select(MoveId.FALSE_SWIPE); diff --git a/test/abilities/wind-power.test.ts b/test/abilities/wind-power.test.ts index 377a8052e13..5aaec25e19a 100644 --- a/test/abilities/wind-power.test.ts +++ b/test/abilities/wind-power.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Wind Power", () => { it("becomes charged when hit by wind moves", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const shiftry = game.scene.getEnemyPokemon()!; + const shiftry = game.field.getEnemyPokemon(); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); @@ -47,7 +47,7 @@ describe("Abilities - Wind Power", () => { game.override.ability(AbilityId.WIND_POWER).enemySpecies(SpeciesId.MAGIKARP); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); - const shiftry = game.scene.getPlayerPokemon()!; + const shiftry = game.field.getPlayerPokemon(); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); @@ -61,8 +61,8 @@ describe("Abilities - Wind Power", () => { game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_POWER); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); - const magikarp = game.scene.getEnemyPokemon()!; - const shiftry = game.scene.getPlayerPokemon()!; + const magikarp = game.field.getEnemyPokemon(); + const shiftry = game.field.getPlayerPokemon(); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); expect(magikarp.getTag(BattlerTagType.CHARGED)).toBeUndefined(); @@ -79,7 +79,7 @@ describe("Abilities - Wind Power", () => { game.override.enemySpecies(SpeciesId.MAGIKARP); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); - const shiftry = game.scene.getPlayerPokemon()!; + const shiftry = game.field.getPlayerPokemon(); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); diff --git a/test/abilities/wind-rider.test.ts b/test/abilities/wind-rider.test.ts index be30acb0f64..9480bb437fb 100644 --- a/test/abilities/wind-rider.test.ts +++ b/test/abilities/wind-rider.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Wind Rider", () => { it("takes no damage from wind moves and its ATK stat stage is raised by 1 when hit by one", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const shiftry = game.scene.getEnemyPokemon()!; + const shiftry = game.field.getEnemyPokemon(); expect(shiftry.getStatStage(Stat.ATK)).toBe(0); @@ -48,7 +48,7 @@ describe("Abilities - Wind Rider", () => { game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_RIDER); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); - const shiftry = game.scene.getPlayerPokemon()!; + const shiftry = game.field.getPlayerPokemon(); expect(shiftry.getStatStage(Stat.ATK)).toBe(0); @@ -63,8 +63,8 @@ describe("Abilities - Wind Rider", () => { game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_RIDER); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); - const magikarp = game.scene.getEnemyPokemon()!; - const shiftry = game.scene.getPlayerPokemon()!; + const magikarp = game.field.getEnemyPokemon(); + const shiftry = game.field.getPlayerPokemon(); expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(magikarp.getStatStage(Stat.ATK)).toBe(0); @@ -81,8 +81,8 @@ describe("Abilities - Wind Rider", () => { game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_RIDER); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); - const magikarp = game.scene.getEnemyPokemon()!; - const shiftry = game.scene.getPlayerPokemon()!; + const magikarp = game.field.getEnemyPokemon(); + const shiftry = game.field.getPlayerPokemon(); expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(magikarp.getStatStage(Stat.ATK)).toBe(0); @@ -99,7 +99,7 @@ describe("Abilities - Wind Rider", () => { game.override.enemySpecies(SpeciesId.MAGIKARP); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); - const shiftry = game.scene.getPlayerPokemon()!; + const shiftry = game.field.getPlayerPokemon(); expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(shiftry.isFullHp()).toBe(true); diff --git a/test/abilities/zen-mode.test.ts b/test/abilities/zen-mode.test.ts index 24d53bda7b6..f3ea7d78398 100644 --- a/test/abilities/zen-mode.test.ts +++ b/test/abilities/zen-mode.test.ts @@ -38,7 +38,7 @@ describe("Abilities - ZEN MODE", () => { it("shouldn't change form when taking damage if not dropping below 50% HP", async () => { await game.classicMode.startBattle([SpeciesId.DARMANITAN]); - const darmanitan = game.scene.getPlayerPokemon()!; + const darmanitan = game.field.getPlayerPokemon(); expect(darmanitan.formIndex).toBe(baseForm); game.move.select(MoveId.SPLASH); @@ -52,7 +52,7 @@ describe("Abilities - ZEN MODE", () => { it("should change form when falling below 50% HP", async () => { await game.classicMode.startBattle([SpeciesId.DARMANITAN]); - const darmanitan = game.scene.getPlayerPokemon()!; + const darmanitan = game.field.getPlayerPokemon(); darmanitan.hp = darmanitan.getMaxHp() / 2 + 1; expect(darmanitan.formIndex).toBe(baseForm); @@ -65,7 +65,7 @@ describe("Abilities - ZEN MODE", () => { it("should stay zen mode when fainted", async () => { await game.classicMode.startBattle([SpeciesId.DARMANITAN, SpeciesId.CHARIZARD]); - const darmanitan = game.scene.getPlayerPokemon()!; + const darmanitan = game.field.getPlayerPokemon(); darmanitan.hp = darmanitan.getMaxHp() / 2 + 1; expect(darmanitan.formIndex).toBe(baseForm); diff --git a/test/abilities/zero-to-hero.test.ts b/test/abilities/zero-to-hero.test.ts index cb0fe75d11b..d9fa3580da2 100644 --- a/test/abilities/zero-to-hero.test.ts +++ b/test/abilities/zero-to-hero.test.ts @@ -62,7 +62,7 @@ describe("Abilities - ZERO TO HERO", () => { it("should swap to Hero form when switching out during a battle", async () => { await game.classicMode.startBattle([SpeciesId.PALAFIN, SpeciesId.FEEBAS]); - const palafin = game.scene.getPlayerPokemon()!; + const palafin = game.field.getPlayerPokemon(); expect(palafin.formIndex).toBe(baseForm); game.doSwitchPokemon(1); @@ -73,7 +73,7 @@ describe("Abilities - ZERO TO HERO", () => { it("should not swap to Hero form if switching due to faint", async () => { await game.classicMode.startBattle([SpeciesId.PALAFIN, SpeciesId.FEEBAS]); - const palafin = game.scene.getPlayerPokemon()!; + const palafin = game.field.getPlayerPokemon(); expect(palafin.formIndex).toBe(baseForm); game.move.select(MoveId.SPLASH); @@ -90,7 +90,7 @@ describe("Abilities - ZERO TO HERO", () => { await game.classicMode.startBattle([SpeciesId.PALAFIN, SpeciesId.FEEBAS]); - const palafin = game.scene.getPlayerPokemon()!; + const palafin = game.field.getPlayerPokemon(); expect(palafin.formIndex).toBe(heroForm); game.move.select(MoveId.SPLASH); diff --git a/test/arena/arena-gravity.test.ts b/test/arena/arena-gravity.test.ts index b08dcf0c9b0..02b49d7711f 100644 --- a/test/arena/arena-gravity.test.ts +++ b/test/arena/arena-gravity.test.ts @@ -84,7 +84,7 @@ describe("Arena - Gravity", () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pidgeot = game.scene.getEnemyPokemon()!; + const pidgeot = game.field.getEnemyPokemon(); vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Try earthquake on 1st turn (fails!); @@ -113,7 +113,7 @@ describe("Arena - Gravity", () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pidgeot = game.scene.getEnemyPokemon()!; + const pidgeot = game.field.getEnemyPokemon(); vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Setup Gravity on 1st turn @@ -136,8 +136,8 @@ describe("Arena - Gravity", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const charizard = game.scene.getPlayerPokemon()!; - const snorlax = game.scene.getEnemyPokemon()!; + const charizard = game.field.getPlayerPokemon(); + const snorlax = game.field.getEnemyPokemon(); game.move.select(MoveId.SPLASH); diff --git a/test/arena/psychic-terrain.test.ts b/test/arena/psychic-terrain.test.ts index 82232cd8d05..6d42ed0d3ac 100644 --- a/test/arena/psychic-terrain.test.ts +++ b/test/arena/psychic-terrain.test.ts @@ -42,7 +42,7 @@ describe("Arena - Psychic Terrain", () => { game.move.select(MoveId.DARK_VOID); await game.toEndOfTurn(); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.SLEEP); }); it("Rain Dance with Prankster is not blocked", async () => { diff --git a/test/arena/weather-hail.test.ts b/test/arena/weather-hail.test.ts index b3ff8de3d42..edc01b3348f 100644 --- a/test/arena/weather-hail.test.ts +++ b/test/arena/weather-hail.test.ts @@ -52,8 +52,8 @@ describe("Weather - Hail", () => { await game.phaseInterceptor.to("TurnEndPhase"); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - Math.max(Math.floor(enemyPokemon.getMaxHp() / 16), 1)); @@ -66,8 +66,8 @@ describe("Weather - Hail", () => { await game.phaseInterceptor.to("TurnEndPhase"); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - Math.max(Math.floor(enemyPokemon.getMaxHp() / 16), 1)); diff --git a/test/arena/weather-sandstorm.test.ts b/test/arena/weather-sandstorm.test.ts index f5cf44458c5..69c741d53c5 100644 --- a/test/arena/weather-sandstorm.test.ts +++ b/test/arena/weather-sandstorm.test.ts @@ -51,8 +51,8 @@ describe("Weather - Sandstorm", () => { await game.phaseInterceptor.to("TurnEndPhase"); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - Math.max(Math.floor(enemyPokemon.getMaxHp() / 16), 1)); @@ -80,11 +80,11 @@ describe("Weather - Sandstorm", () => { it("increases Rock type Pokemon Sp.Def by 50%", async () => { await game.classicMode.startBattle([SpeciesId.ROCKRUFF]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerSpdef = playerPokemon.getStat(Stat.SPDEF); expect(playerPokemon.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(playerSpdef * 1.5)); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemySpdef = enemyPokemon.getStat(Stat.SPDEF); expect(enemyPokemon.getEffectiveStat(Stat.SPDEF)).toBe(enemySpdef); }); diff --git a/test/arena/weather-strong-winds.test.ts b/test/arena/weather-strong-winds.test.ts index 8d2d1ee0a75..1800027f59c 100644 --- a/test/arena/weather-strong-winds.test.ts +++ b/test/arena/weather-strong-winds.test.ts @@ -36,8 +36,8 @@ describe("Weather - Strong Winds", () => { game.override.enemySpecies(SpeciesId.RAYQUAZA); await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const pikachu = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDERBOLT); @@ -47,8 +47,8 @@ describe("Weather - Strong Winds", () => { it("electric type move is neutral for flying type pokemon", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const pikachu = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDERBOLT); @@ -58,8 +58,8 @@ describe("Weather - Strong Winds", () => { it("ice type move is neutral for flying type pokemon", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const pikachu = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.ICE_BEAM); @@ -69,8 +69,8 @@ describe("Weather - Strong Winds", () => { it("rock type move is neutral for flying type pokemon", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const pikachu = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const pikachu = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.ROCK_SLIDE); @@ -83,7 +83,7 @@ describe("Weather - Strong Winds", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1; game.move.use(MoveId.SPLASH); diff --git a/test/battle/ability-swap.test.ts b/test/battle/ability-swap.test.ts index 4ce60e1f0b2..6d8ae8b5551 100644 --- a/test/battle/ability-swap.test.ts +++ b/test/battle/ability-swap.test.ts @@ -37,10 +37,10 @@ describe("Test Ability Swapping", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); game.move.select(MoveId.SPLASH); - game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.INTIMIDATE]); + game.field.getPlayerPokemon().setTempAbility(allAbilities[AbilityId.INTIMIDATE]); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should remove primal weather when the setter's ability is removed", async () => { @@ -48,7 +48,7 @@ describe("Test Ability Swapping", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); game.move.select(MoveId.SPLASH); - game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.BALL_FETCH]); + game.field.getPlayerPokemon().setTempAbility(allAbilities[AbilityId.BALL_FETCH]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.weather?.weatherType).toBeUndefined(); @@ -59,10 +59,10 @@ describe("Test Ability Swapping", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); game.move.select(MoveId.SPLASH); - game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.BALL_FETCH]); + game.field.getPlayerPokemon().setTempAbility(allAbilities[AbilityId.BALL_FETCH]); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); // would be 2 if passive activated again + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(1); // would be 2 if passive activated again }); // Pickup and Honey Gather are special cases as they're the only abilities to be Unsuppressable but not Unswappable @@ -73,6 +73,6 @@ describe("Test Ability Swapping", () => { game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); }); diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index 47afb582a5a..0ee23cd6418 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -35,8 +35,8 @@ describe("Battle order", () => { it("opponent faster than player 50 vs 150", async () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set playerPokemon's speed to 50 vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set enemyPokemon's speed to 150 @@ -54,8 +54,8 @@ describe("Battle order", () => { it("Player faster than opponent 150 vs 50", async () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set playerPokemon's speed to 150 vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set enemyPokemon's speed to 50 diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index ff5090e5f8d..3dd154cf4eb 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -293,7 +293,7 @@ describe("Phase - Battle Phase", () => { .startingHeldItems([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]); await game.classicMode.startBattle(); - game.scene.getPlayerPokemon()!.hp = 1; + game.field.getPlayerPokemon().hp = 1; game.move.select(moveToUse); await game.phaseInterceptor.to(BattleEndPhase); diff --git a/test/battle/damage-calculation.test.ts b/test/battle/damage-calculation.test.ts index ca01830abd0..fac7c624f99 100644 --- a/test/battle/damage-calculation.test.ts +++ b/test/battle/damage-calculation.test.ts @@ -38,10 +38,10 @@ describe("Battle Mechanics - Damage Calculation", () => { it("Tackle deals expected base damage", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); vi.spyOn(playerPokemon, "getEffectiveStat").mockReturnValue(80); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "getEffectiveStat").mockReturnValue(90); // expected base damage = [(2*level/5 + 2) * power * playerATK / enemyDEF / 50] + 2 @@ -56,7 +56,7 @@ describe("Battle Mechanics - Damage Calculation", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const aggron = game.scene.getEnemyPokemon()!; + const aggron = game.field.getEnemyPokemon(); game.move.select(MoveId.TACKLE); @@ -75,7 +75,7 @@ describe("Battle Mechanics - Damage Calculation", () => { dmg_redux_modifier.stackCount = 1000; await game.scene.addEnemyModifier(modifierTypes.ENEMY_DAMAGE_REDUCTION().newModifier() as EnemyPersistentModifier); - const aggron = game.scene.getEnemyPokemon()!; + const aggron = game.field.getEnemyPokemon(); game.move.select(MoveId.TACKLE); @@ -89,8 +89,8 @@ describe("Battle Mechanics - Damage Calculation", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const magikarp = game.scene.getPlayerPokemon()!; - const dragonite = game.scene.getEnemyPokemon()!; + const magikarp = game.field.getPlayerPokemon(); + const dragonite = game.field.getEnemyPokemon(); expect(dragonite.getAttackDamage({ source: magikarp, move: allMoves[MoveId.DRAGON_RAGE] }).damage).toBe(40); }); @@ -100,8 +100,8 @@ describe("Battle Mechanics - Damage Calculation", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const magikarp = game.scene.getPlayerPokemon()!; - const aggron = game.scene.getEnemyPokemon()!; + const magikarp = game.field.getPlayerPokemon(); + const aggron = game.field.getEnemyPokemon(); expect(aggron.getAttackDamage({ source: magikarp, move: allMoves[MoveId.FISSURE] }).damage).toBe(aggron.hp); }); @@ -111,7 +111,7 @@ describe("Battle Mechanics - Damage Calculation", () => { await game.classicMode.startBattle([SpeciesId.SHEDINJA]); - const shedinja = game.scene.getPlayerPokemon()!; + const shedinja = game.field.getPlayerPokemon(); game.move.select(MoveId.JUMP_KICK); @@ -126,7 +126,7 @@ describe("Battle Mechanics - Damage Calculation", () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const charizard = game.scene.getEnemyPokemon()!; + const charizard = game.field.getEnemyPokemon(); if (charizard.getMaxHp() % 2 === 1) { expect(charizard.hp).toBeGreaterThan(charizard.getMaxHp() / 2); diff --git a/test/battle/inverse-battle.test.ts b/test/battle/inverse-battle.test.ts index 9ba2df9bc44..66a21e80009 100644 --- a/test/battle/inverse-battle.test.ts +++ b/test/battle/inverse-battle.test.ts @@ -43,7 +43,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.THUNDERBOLT); @@ -58,7 +58,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.THUNDERBOLT); @@ -73,7 +73,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.THUNDERBOLT); @@ -89,7 +89,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const charizard = game.scene.getEnemyPokemon()!; + const charizard = game.field.getEnemyPokemon(); const maxHp = charizard.getMaxHp(); const damage_prediction = Math.max(Math.round(charizard.getMaxHp() / 32), 1); @@ -111,7 +111,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -126,7 +126,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = enemy.getMaxHp() - 1; game.move.select(MoveId.WATER_GUN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -140,7 +140,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.WILL_O_WISP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -155,7 +155,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.NUZZLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -169,7 +169,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDER_WAVE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -184,7 +184,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - expect(game.scene.getEnemyPokemon()?.waveData.abilitiesApplied).toContain(AbilityId.ANTICIPATION); + expect(game.field.getEnemyPokemon().waveData.abilitiesApplied).toContain(AbilityId.ANTICIPATION); }); it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { @@ -192,7 +192,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); game.move.select(MoveId.CONVERSION_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -207,7 +207,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FLYING_PRESS); @@ -222,7 +222,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.TACKLE); @@ -237,7 +237,7 @@ describe("Inverse Battle", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FORESIGHT); diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index 0a7c71c95e7..b0dfbf19794 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -80,7 +80,7 @@ describe("Boss Pokemon / Shields", () => { await game.classicMode.startBattle([SpeciesId.MEWTWO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const segmentHp = enemyPokemon.getMaxHp() / enemyPokemon.bossSegments; expect(enemyPokemon.isBoss()).toBe(true); expect(enemyPokemon.bossSegments).toBe(3); @@ -191,7 +191,7 @@ describe("Boss Pokemon / Shields", () => { await game.classicMode.startBattle([SpeciesId.MEWTWO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.isBoss()).toBe(true); expect(enemyPokemon.bossSegments).toBe(2); expect(getTotalStatStageBoosts(enemyPokemon)).toBe(0); diff --git a/test/data/status-effect.test.ts b/test/data/status-effect.test.ts index ebfd9066b3c..20e164ce4d7 100644 --- a/test/data/status-effect.test.ts +++ b/test/data/status-effect.test.ts @@ -331,8 +331,8 @@ describe("Status Effects", () => { await game.move.forceStatusActivation(true); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.isFullHp()).toBe(true); - expect(game.scene.getPlayerPokemon()!.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + expect(game.field.getEnemyPokemon().isFullHp()).toBe(true); + expect(game.field.getPlayerPokemon().getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); }); }); @@ -365,7 +365,7 @@ describe("Status Effects", () => { it("should last the appropriate number of turns", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.status = new Status(StatusEffect.SLEEP, 0, 4); game.move.select(MoveId.SPLASH); @@ -422,7 +422,7 @@ describe("Status Effects", () => { it("should not inflict a 0 HP mon with a status", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.hp = 0; expect(player.trySetStatus(StatusEffect.BURN)).toBe(false); diff --git a/test/endless-boss.test.ts b/test/endless-boss.test.ts index 707d164d4d0..2a4ac9ddc7d 100644 --- a/test/endless-boss.test.ts +++ b/test/endless-boss.test.ts @@ -34,10 +34,10 @@ describe("Endless Boss", () => { expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor); expect(game.scene.arena.biomeType).toBe(BiomeId.END); - const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); - expect(eternatus?.hasPassive()).toBe(false); - expect(eternatus?.formIndex).toBe(0); + const eternatus = game.field.getEnemyPokemon(); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); + expect(eternatus.hasPassive()).toBe(false); + expect(eternatus.formIndex).toBe(0); }); it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Endless`, async () => { @@ -46,10 +46,10 @@ describe("Endless Boss", () => { expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major); expect(game.scene.arena.biomeType).toBe(BiomeId.END); - const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); - expect(eternatus?.hasPassive()).toBe(false); - expect(eternatus?.formIndex).toBe(1); + const eternatus = game.field.getEnemyPokemon(); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); + expect(eternatus.hasPassive()).toBe(false); + expect(eternatus.formIndex).toBe(1); }); it(`should spawn a minor boss every ${EndlessBossWave.Minor} waves in END biome in Spliced Endless`, async () => { @@ -58,10 +58,10 @@ describe("Endless Boss", () => { expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor); expect(game.scene.arena.biomeType).toBe(BiomeId.END); - const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); - expect(eternatus?.hasPassive()).toBe(false); - expect(eternatus?.formIndex).toBe(0); + const eternatus = game.field.getEnemyPokemon(); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); + expect(eternatus.hasPassive()).toBe(false); + expect(eternatus.formIndex).toBe(0); }); it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Spliced Endless`, async () => { @@ -70,10 +70,10 @@ describe("Endless Boss", () => { expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major); expect(game.scene.arena.biomeType).toBe(BiomeId.END); - const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); - expect(eternatus?.hasPassive()).toBe(false); - expect(eternatus?.formIndex).toBe(1); + const eternatus = game.field.getEnemyPokemon(); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); + expect(eternatus.hasPassive()).toBe(false); + expect(eternatus.formIndex).toBe(1); }); it(`should NOT spawn major or minor boss outside wave ${EndlessBossWave.Minor}s in END biome`, async () => { @@ -81,6 +81,6 @@ describe("Endless Boss", () => { await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.ENDLESS); expect(game.scene.currentBattle.waveIndex).not.toBe(EndlessBossWave.Minor); - expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(SpeciesId.ETERNATUS); + expect(game.field.getEnemyPokemon().species.speciesId).not.toBe(SpeciesId.ETERNATUS); }); }); diff --git a/test/enemy-command.test.ts b/test/enemy-command.test.ts index 12281179e0d..e7687ae9641 100644 --- a/test/enemy-command.test.ts +++ b/test/enemy-command.test.ts @@ -61,7 +61,7 @@ describe("Enemy Commands - Move Selection", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.aiType = AiType.SMART_RANDOM; const moveChoices: MoveChoiceSet = {}; @@ -85,7 +85,7 @@ describe("Enemy Commands - Move Selection", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.aiType = AiType.SMART_RANDOM; const moveChoices: MoveChoiceSet = {}; diff --git a/test/evolution.test.ts b/test/evolution.test.ts index 172a4e5d3aa..afe557ff2c0 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -64,7 +64,7 @@ describe("Evolution", () => { it("should handle illegal abilityIndex values", async () => { await game.classicMode.runToSummon([SpeciesId.SQUIRTLE]); - const squirtle = game.scene.getPlayerPokemon()!; + const squirtle = game.field.getPlayerPokemon(); squirtle.abilityIndex = 5; await squirtle.evolve(pokemonEvolutions[SpeciesId.SQUIRTLE][0], squirtle.getSpeciesForm()); @@ -74,7 +74,7 @@ describe("Evolution", () => { it("should handle nincada's unique evolution", async () => { await game.classicMode.runToSummon([SpeciesId.NINCADA]); - const nincada = game.scene.getPlayerPokemon()!; + const nincada = game.field.getPlayerPokemon(); nincada.abilityIndex = 2; nincada.metBiome = -1; nincada.gender = 1; @@ -107,12 +107,12 @@ describe("Evolution", () => { await game.classicMode.startBattle([SpeciesId.TOTODILE]); - const totodile = game.scene.getPlayerPokemon()!; + const totodile = game.field.getPlayerPokemon(); const hpBefore = totodile.hp; expect(totodile.hp).toBe(totodile.getMaxHp()); - const golem = game.scene.getEnemyPokemon()!; + const golem = game.field.getEnemyPokemon(); golem.hp = 1; expect(golem.hp).toBe(1); @@ -135,14 +135,14 @@ describe("Evolution", () => { await game.classicMode.startBattle([SpeciesId.CYNDAQUIL]); - const cyndaquil = game.scene.getPlayerPokemon()!; + const cyndaquil = game.field.getPlayerPokemon(); cyndaquil.hp = Math.floor(cyndaquil.getMaxHp() / 2); const hpBefore = cyndaquil.hp; const maxHpBefore = cyndaquil.getMaxHp(); expect(cyndaquil.hp).toBe(Math.floor(cyndaquil.getMaxHp() / 2)); - const golem = game.scene.getEnemyPokemon()!; + const golem = game.field.getEnemyPokemon(); golem.hp = 1; expect(golem.hp).toBe(1); @@ -167,7 +167,7 @@ describe("Evolution", () => { * 1, 2 or 3, it's a 4 family maushold */ await game.classicMode.startBattle([SpeciesId.TANDEMAUS]); // starts us off with a tandemaus - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.level = 25; // tandemaus evolves at level 25 vi.spyOn(Utils, "randSeedInt").mockReturnValue(0); // setting the random generator to be 0 to force a three family maushold const threeForm = playerPokemon.getEvolution()!; diff --git a/test/field/pokemon.test.ts b/test/field/pokemon.test.ts index baa50556473..02058ad6cb1 100644 --- a/test/field/pokemon.test.ts +++ b/test/field/pokemon.test.ts @@ -28,7 +28,7 @@ describe("Spec - Pokemon", () => { it("should not crash when trying to set status of undefined", async () => { await game.classicMode.runToSummon([SpeciesId.ABRA]); - const pkm = game.scene.getPlayerPokemon()!; + const pkm = game.field.getPlayerPokemon(); expect(pkm).toBeDefined(); expect(pkm.trySetStatus(undefined)).toBe(false); @@ -50,7 +50,7 @@ describe("Spec - Pokemon", () => { }); it("should append a new pokemon by default", async () => { - const zubat = scene.getEnemyPokemon()!; + const zubat = game.field.getEnemyPokemon(); zubat.addToParty(PokeballType.LUXURY_BALL); const party = scene.getPlayerParty(); @@ -62,7 +62,7 @@ describe("Spec - Pokemon", () => { it("should put a new pokemon into the passed slotIndex", async () => { const slotIndex = 1; - const zubat = scene.getEnemyPokemon()!; + const zubat = game.field.getEnemyPokemon(); zubat.addToParty(PokeballType.LUXURY_BALL, slotIndex); const party = scene.getPlayerParty(); @@ -78,7 +78,7 @@ describe("Spec - Pokemon", () => { await game.classicMode.startBattle([SpeciesId.ROTOM]); - const fanRotom = game.scene.getPlayerPokemon()!; + const fanRotom = game.field.getPlayerPokemon(); expect(fanRotom.compatibleTms).not.toContain(MoveId.BLIZZARD); expect(fanRotom.compatibleTms).toContain(MoveId.AIR_SLASH); diff --git a/test/final-boss.test.ts b/test/final-boss.test.ts index 2180979899a..81b5f7816d6 100644 --- a/test/final-boss.test.ts +++ b/test/final-boss.test.ts @@ -41,7 +41,7 @@ describe("Final Boss", () => { expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic); expect(game.scene.arena.biomeType).toBe(BiomeId.END); - expect(game.scene.getEnemyPokemon()!.species.speciesId).toBe(SpeciesId.ETERNATUS); + expect(game.field.getEnemyPokemon().species.speciesId).toBe(SpeciesId.ETERNATUS); }); it("should NOT spawn Eternatus before wave 200 in END biome", async () => { @@ -50,7 +50,7 @@ describe("Final Boss", () => { expect(game.scene.currentBattle.waveIndex).not.toBe(FinalWave.Classic); expect(game.scene.arena.biomeType).toBe(BiomeId.END); - expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(SpeciesId.ETERNATUS); + expect(game.field.getEnemyPokemon().species.speciesId).not.toBe(SpeciesId.ETERNATUS); }); it("should NOT spawn Eternatus outside of END biome", async () => { @@ -59,13 +59,13 @@ describe("Final Boss", () => { expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic); expect(game.scene.arena.biomeType).not.toBe(BiomeId.END); - expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(SpeciesId.ETERNATUS); + expect(game.field.getEnemyPokemon().species.speciesId).not.toBe(SpeciesId.ETERNATUS); }); it("should initially spawn in regular form without passive & 4 boss segments", async () => { await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.CLASSIC); - const eternatus = game.scene.getEnemyPokemon()!; + const eternatus = game.field.getEnemyPokemon(); expect(eternatus.formIndex).toBe(0); expect(eternatus.bossSegments).toBe(4); expect(eternatus.bossSegmentIndex).toBe(3); @@ -77,7 +77,7 @@ describe("Final Boss", () => { await game.runToFinalBossEncounter([SpeciesId.KYUREM], GameModes.CLASSIC); // phase 1 - const eternatus = game.scene.getEnemyPokemon()!; + const eternatus = game.field.getEnemyPokemon(); const phase1Hp = eternatus.getMaxHp(); game.move.use(MoveId.DRAGON_PULSE); @@ -100,7 +100,7 @@ describe("Final Boss", () => { await game.runToFinalBossEncounter([SpeciesId.SALAZZLE], GameModes.CLASSIC); // Eternatus phase 1 - const eternatus = game.scene.getEnemyPokemon()!; + const eternatus = game.field.getEnemyPokemon(); const phase1Hp = eternatus.getMaxHp(); game.move.use(MoveId.WILL_O_WISP); diff --git a/test/internals.test.ts b/test/internals.test.ts index bb33b01c265..98262a6db25 100644 --- a/test/internals.test.ts +++ b/test/internals.test.ts @@ -24,7 +24,7 @@ describe("Internals", () => { it("should provide Eevee with 3 defined abilities", async () => { await game.classicMode.runToSummon([SpeciesId.EEVEE]); - const eevee = game.scene.getPlayerPokemon()!; + const eevee = game.field.getPlayerPokemon(); expect(eevee.getSpeciesForm().getAbilityCount()).toBe(3); @@ -35,7 +35,7 @@ describe("Internals", () => { it("should set Eeeve abilityIndex between 0-2", async () => { await game.classicMode.runToSummon([SpeciesId.EEVEE]); - const eevee = game.scene.getPlayerPokemon()!; + const eevee = game.field.getPlayerPokemon(); expect(eevee.abilityIndex).toBeGreaterThanOrEqual(0); expect(eevee.abilityIndex).toBeLessThanOrEqual(2); diff --git a/test/items/dire-hit.test.ts b/test/items/dire-hit.test.ts index fe7fabd3c4c..6d4bc7524eb 100644 --- a/test/items/dire-hit.test.ts +++ b/test/items/dire-hit.test.ts @@ -42,7 +42,7 @@ describe("Items - Dire Hit", () => { it("should raise CRIT stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.GASTLY]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "getCritStage"); diff --git a/test/items/eviolite.test.ts b/test/items/eviolite.test.ts index 2e64135d264..9268226661b 100644 --- a/test/items/eviolite.test.ts +++ b/test/items/eviolite.test.ts @@ -28,7 +28,7 @@ describe("Items - Eviolite", () => { it("should provide 50% boost to DEF and SPDEF for unevolved, unfused pokemon", async () => { await game.classicMode.startBattle([SpeciesId.PICHU]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { const statValue = new NumberHolder(partyMember.getStat(stat, false)); @@ -49,7 +49,7 @@ describe("Items - Eviolite", () => { it("should not provide a boost for fully evolved, unfused pokemon", async () => { await game.classicMode.startBattle([SpeciesId.RAICHU]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { const statValue = new NumberHolder(partyMember.getStat(stat, false)); @@ -199,7 +199,7 @@ describe("Items - Eviolite", () => { await game.classicMode.startBattle([randItem(gMaxablePokemon)]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { const statValue = new NumberHolder(partyMember.getStat(stat, false)); diff --git a/test/items/exp-booster.test.ts b/test/items/exp-booster.test.ts index dd2c8eb0c2b..1740b56693b 100644 --- a/test/items/exp-booster.test.ts +++ b/test/items/exp-booster.test.ts @@ -29,7 +29,7 @@ describe("EXP Modifier Items", () => { game.override.startingHeldItems([{ name: "LUCKY_EGG", count: 3 }, { name: "GOLDEN_EGG" }]); await game.classicMode.startBattle(); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); partyMember.exp = 100; const expHolder = new NumberHolder(partyMember.exp); game.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, expHolder); diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index c38294d07a4..485f35ed10a 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -34,7 +34,7 @@ describe("Items - Leek", () => { it("should raise CRIT stage by 2 when held by FARFETCHD", async () => { await game.classicMode.startBattle([SpeciesId.FARFETCHD]); - const enemyMember = game.scene.getEnemyPokemon()!; + const enemyMember = game.field.getEnemyPokemon(); vi.spyOn(enemyMember, "getCritStage"); @@ -48,7 +48,7 @@ describe("Items - Leek", () => { it("should raise CRIT stage by 2 when held by GALAR_FARFETCHD", async () => { await game.classicMode.startBattle([SpeciesId.GALAR_FARFETCHD]); - const enemyMember = game.scene.getEnemyPokemon()!; + const enemyMember = game.field.getEnemyPokemon(); vi.spyOn(enemyMember, "getCritStage"); @@ -62,7 +62,7 @@ describe("Items - Leek", () => { it("should raise CRIT stage by 2 when held by SIRFETCHD", async () => { await game.classicMode.startBattle([SpeciesId.SIRFETCHD]); - const enemyMember = game.scene.getEnemyPokemon()!; + const enemyMember = game.field.getEnemyPokemon(); vi.spyOn(enemyMember, "getCritStage"); @@ -90,7 +90,7 @@ describe("Items - Leek", () => { partyMember.fusionGender = ally.gender; partyMember.fusionLuck = ally.luck; - const enemyMember = game.scene.getEnemyPokemon()!; + const enemyMember = game.field.getEnemyPokemon(); vi.spyOn(enemyMember, "getCritStage"); @@ -118,7 +118,7 @@ describe("Items - Leek", () => { partyMember.fusionGender = ally.gender; partyMember.fusionLuck = ally.luck; - const enemyMember = game.scene.getEnemyPokemon()!; + const enemyMember = game.field.getEnemyPokemon(); vi.spyOn(enemyMember, "getCritStage"); @@ -132,7 +132,7 @@ describe("Items - Leek", () => { it("should not raise CRIT stage when held by a Pokemon outside of FARFETCHD line", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemyMember = game.scene.getEnemyPokemon()!; + const enemyMember = game.field.getEnemyPokemon(); vi.spyOn(enemyMember, "getCritStage"); diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index bed40b1c83a..6ae4094799b 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -40,7 +40,7 @@ describe("Items - Leftovers", () => { // Make sure leftovers are there expect(game.scene.modifiers[0].type.id).toBe("LEFTOVERS"); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); // We should have full hp expect(leadPokemon.isFullHp()).toBe(true); diff --git a/test/items/multi-lens.test.ts b/test/items/multi-lens.test.ts index e3cf39e4933..b69a07033c9 100644 --- a/test/items/multi-lens.test.ts +++ b/test/items/multi-lens.test.ts @@ -46,7 +46,7 @@ describe("Items - Multi Lens", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const spy = vi.spyOn(enemyPokemon, "getAttackDamage"); vi.spyOn(enemyPokemon, "getBaseDamage").mockReturnValue(100); @@ -67,7 +67,7 @@ describe("Items - Multi Lens", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -79,7 +79,7 @@ describe("Items - Multi Lens", () => { it("should apply secondary effects on each hit", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.TRAILBLAZE); @@ -90,7 +90,7 @@ describe("Items - Multi Lens", () => { it("should not enhance multi-hit moves", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.TACHYON_CUTTER); @@ -120,8 +120,8 @@ describe("Items - Multi Lens", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); const spy = vi.spyOn(enemyPokemon, "getAttackDamage"); game.move.select(MoveId.SEISMIC_TOSS); @@ -145,7 +145,7 @@ describe("Items - Multi Lens", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -164,7 +164,7 @@ describe("Items - Multi Lens", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -184,7 +184,7 @@ describe("Items - Multi Lens", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -196,7 +196,7 @@ describe("Items - Multi Lens", () => { game.override.enemyLevel(1000); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "damageAndUpdate"); game.move.select(MoveId.FUTURE_SIGHT); diff --git a/test/items/reviver-seed.test.ts b/test/items/reviver-seed.test.ts index 268c5497899..45d41459f06 100644 --- a/test/items/reviver-seed.test.ts +++ b/test/items/reviver-seed.test.ts @@ -51,7 +51,7 @@ describe("Items - Reviver Seed", () => { ])("should activate the holder's reviver seed from a $moveType", async ({ move }) => { game.override.enemyLevel(100).startingLevel(1).enemyMoveset(move); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.hp - 1); const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; @@ -66,7 +66,7 @@ describe("Items - Reviver Seed", () => { it("should activate the holder's reviver seed from confusion self-hit", async () => { game.override.enemyLevel(1).startingLevel(100).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.hp - 1); player.addTag(BattlerTagType.CONFUSED, 3); @@ -95,7 +95,7 @@ describe("Items - Reviver Seed", () => { .moveset(move) .enemyMoveset(MoveId.ENDURE); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.damageAndUpdate(enemy.hp - 1); game.move.select(move); @@ -119,7 +119,7 @@ describe("Items - Reviver Seed", () => { .enemyAbility(AbilityId.LIQUID_OOZE) .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.GASTLY, SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.hp - 1); const playerSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; @@ -140,9 +140,9 @@ describe("Items - Reviver Seed", () => { .startingHeldItems([]) // reset held items to nothing so user doesn't revive and not trigger Destiny Bond .enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.hp - 1); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.DESTINY_BOND); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/items/scope-lens.test.ts b/test/items/scope-lens.test.ts index 578b0576aaa..7bc2dd7356b 100644 --- a/test/items/scope-lens.test.ts +++ b/test/items/scope-lens.test.ts @@ -33,7 +33,7 @@ describe("Items - Scope Lens", () => { it("should raise CRIT stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.GASTLY]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "getCritStage"); diff --git a/test/items/temp-stat-stage-booster.test.ts b/test/items/temp-stat-stage-booster.test.ts index 806ff20df6c..f95fe553faf 100644 --- a/test/items/temp-stat-stage-booster.test.ts +++ b/test/items/temp-stat-stage-booster.test.ts @@ -41,7 +41,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { it("should provide a x1.3 stat stage multiplier", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); vi.spyOn(partyMember, "getStatStageMultiplier"); @@ -57,7 +57,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); vi.spyOn(partyMember, "getAccuracyMultiplier"); @@ -77,7 +77,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { it("should increase existing stat stage multiplier by 3/10 for the rest of the boosters", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); vi.spyOn(partyMember, "getStatStageMultiplier"); @@ -102,7 +102,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); vi.spyOn(partyMember, "getStatStageMultiplier"); vi.spyOn(partyMember, "getAccuracyMultiplier"); diff --git a/test/items/toxic-orb.test.ts b/test/items/toxic-orb.test.ts index a1888a6aa1d..664ddd437e4 100644 --- a/test/items/toxic-orb.test.ts +++ b/test/items/toxic-orb.test.ts @@ -42,7 +42,7 @@ describe("Items - Toxic orb", () => { it("should badly poison the holder", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); expect(player.getHeldItems()[0].type.id).toBe("TOXIC_ORB"); game.move.select(MoveId.SPLASH); diff --git a/test/matchers.setup.ts b/test/matchers.setup.ts index 03d9dd342e4..03b29302916 100644 --- a/test/matchers.setup.ts +++ b/test/matchers.setup.ts @@ -1,5 +1,18 @@ import { toEqualArrayUnsorted } from "#test/test-utils/matchers/to-equal-array-unsorted"; +import { toHaveAbilityApplied } from "#test/test-utils/matchers/to-have-ability-applied"; +import { toHaveBattlerTag } from "#test/test-utils/matchers/to-have-battler-tag"; +import { toHaveEffectiveStat } from "#test/test-utils/matchers/to-have-effective-stat"; +import { toHaveFainted } from "#test/test-utils/matchers/to-have-fainted"; +import { toHaveFullHp } from "#test/test-utils/matchers/to-have-full-hp"; +import { toHaveHp } from "#test/test-utils/matchers/to-have-hp"; +import { toHaveStatStage } from "#test/test-utils/matchers/to-have-stat-stage"; +import { toHaveStatusEffect } from "#test/test-utils/matchers/to-have-status-effect"; +import { toHaveTakenDamage } from "#test/test-utils/matchers/to-have-taken-damage"; +import { toHaveTerrain } from "#test/test-utils/matchers/to-have-terrain"; import { toHaveTypes } from "#test/test-utils/matchers/to-have-types"; +import { toHaveUsedMove } from "#test/test-utils/matchers/to-have-used-move"; +import { toHaveUsedPP } from "#test/test-utils/matchers/to-have-used-pp"; +import { toHaveWeather } from "#test/test-utils/matchers/to-have-weather"; import { expect } from "vitest"; /* @@ -10,4 +23,17 @@ import { expect } from "vitest"; expect.extend({ toEqualArrayUnsorted, toHaveTypes, + toHaveUsedMove, + toHaveEffectiveStat, + toHaveTakenDamage, + toHaveWeather, + toHaveTerrain, + toHaveFullHp, + toHaveStatusEffect, + toHaveStatStage, + toHaveBattlerTag, + toHaveAbilityApplied, + toHaveHp, + toHaveFainted, + toHaveUsedPP, }); diff --git a/test/misc.test.ts b/test/misc.test.ts index 96407b78470..a77ac1f5c91 100644 --- a/test/misc.test.ts +++ b/test/misc.test.ts @@ -1,5 +1,4 @@ import { GameManager } from "#test/test-utils/game-manager"; -import { waitUntil } from "#test/test-utils/game-manager-utils"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -36,19 +35,6 @@ describe("Test misc", () => { expect(spy).toHaveBeenCalled(); }); - // it.skip("test apifetch mock async", async () => { - // const spy = vi.fn(); - // await apiFetch("https://localhost:8080/account/info").then(response => { - // expect(response.status).toBe(200); - // expect(response.ok).toBe(true); - // return response.json(); - // }).then(data => { - // spy(); // Call the spy function - // expect(data).toEqual({ "username": "greenlamp", "lastSessionSlot": 0 }); - // }); - // expect(spy).toHaveBeenCalled(); - // }); - it("test fetch mock sync", async () => { const response = await fetch("https://localhost:8080/account/info"); const data = await response.json(); @@ -62,19 +48,4 @@ describe("Test misc", () => { const data = await game.scene.cachedFetch("./battle-anims/splishy-splash.json"); expect(data).toBeDefined(); }); - - it("testing wait phase queue", async () => { - const fakeScene = { - phaseQueue: [1, 2, 3], // Initially not empty - }; - setTimeout(() => { - fakeScene.phaseQueue = []; - }, 500); - const spy = vi.fn(); - await waitUntil(() => fakeScene.phaseQueue.length === 0).then(result => { - expect(result).toBe(true); - spy(); // Call the spy function - }); - expect(spy).toHaveBeenCalled(); - }); }); diff --git a/test/moves/ability-ignore-moves.test.ts b/test/moves/ability-ignore-moves.test.ts index 750d8fe2f20..e3a7c7db12f 100644 --- a/test/moves/ability-ignore-moves.test.ts +++ b/test/moves/ability-ignore-moves.test.ts @@ -77,7 +77,7 @@ describe("Moves - Ability-Ignoring Moves", () => { await game.toEndOfTurn(); expect(enemy.isFainted()).toBe(false); - expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0].move).toBe(MoveId.SUNSTEEL_STRIKE); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].move).toBe(MoveId.SUNSTEEL_STRIKE); }); // TODO: Verify this behavior on cart diff --git a/test/moves/alluring-voice.test.ts b/test/moves/alluring-voice.test.ts index dc01cc1a54e..cc89a106c16 100644 --- a/test/moves/alluring-voice.test.ts +++ b/test/moves/alluring-voice.test.ts @@ -38,7 +38,7 @@ describe("Moves - Alluring Voice", () => { it("should confuse the opponent if their stat stages were raised", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.use(MoveId.ALLURING_VOICE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/assist.test.ts b/test/moves/assist.test.ts index 52467c2ba98..ab0a8106457 100644 --- a/test/moves/assist.test.ts +++ b/test/moves/assist.test.ts @@ -51,18 +51,18 @@ describe("Moves - Assist", () => { // Player_2 uses Sketch, copies Swords Dance, Player_1 uses Assist, uses Player_2's Sketched Swords Dance await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(2); // Stat raised from Assist -> Swords Dance + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(2); // Stat raised from Assist -> Swords Dance }); it("should fail if there are no allies", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const feebas = game.scene.getPlayerPokemon()!; + const feebas = game.field.getPlayerPokemon(); game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); game.move.select(MoveId.ASSIST, 0); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if ally has no usable moves and user has usable moves", async () => { @@ -82,7 +82,7 @@ describe("Moves - Assist", () => { game.move.select(MoveId.PROTECT, 1); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should apply secondary effects of a move", async () => { @@ -96,6 +96,6 @@ describe("Moves - Assist", () => { game.move.select(MoveId.ASSIST, 1); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // should receive recoil damage from Wood Hammer + expect(game.field.getPlayerPokemon().isFullHp()).toBeFalsy(); // should receive recoil damage from Wood Hammer }); }); diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index 0f7dc526b2d..1b39b1c4fef 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -42,9 +42,9 @@ describe("Moves - Astonish", () => { test("move effect should cancel the target's move on the turn it applies", async () => { await game.classicMode.startBattle([SpeciesId.MEOWSCARADA]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.ASTONISH); diff --git a/test/moves/autotomize.test.ts b/test/moves/autotomize.test.ts index a8a7309e03e..85ea9c3852f 100644 --- a/test/moves/autotomize.test.ts +++ b/test/moves/autotomize.test.ts @@ -38,7 +38,7 @@ describe("Moves - Autotomize", () => { const threeAutotomizeDracozoltWeight = 0.1; await game.classicMode.startBattle([SpeciesId.DRACOZOLT]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getWeight()).toBe(baseDracozoltWeight); game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); @@ -62,7 +62,7 @@ describe("Moves - Autotomize", () => { const autotomizeAegislashWeight = 0.1; await game.classicMode.startBattle([SpeciesId.AEGISLASH]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); @@ -98,7 +98,7 @@ describe("Moves - Autotomize", () => { const autotomizeLightGroudonWeight = 425; game.override.ability(AbilityId.LIGHT_METAL); await game.classicMode.startBattle([SpeciesId.GROUDON]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getWeight()).toBe(baseLightGroudonWeight); game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); diff --git a/test/moves/baneful-bunker.test.ts b/test/moves/baneful-bunker.test.ts index da2a8e0418a..07fb74ce6a8 100644 --- a/test/moves/baneful-bunker.test.ts +++ b/test/moves/baneful-bunker.test.ts @@ -5,7 +5,7 @@ import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - Baneful Bunker", () => { let phaserGame: Phaser.Game; @@ -26,55 +26,51 @@ describe("Moves - Baneful Bunker", () => { game.override .battleStyle("single") - .moveset(MoveId.SLASH) - .enemySpecies(SpeciesId.SNORLAX) + .moveset([MoveId.SLASH, MoveId.FLASH_CANNON]) + .enemySpecies(SpeciesId.TOXAPEX) .enemyAbility(AbilityId.INSOMNIA) .enemyMoveset(MoveId.BANEFUL_BUNKER) .startingLevel(100) .enemyLevel(100); }); - test("should protect the user and poison attackers that make contact", async () => { - await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + function expectProtected() { + expect(game.scene.getEnemyPokemon()?.hp).toBe(game.scene.getEnemyPokemon()?.getMaxHp()); + expect(game.scene.getPlayerPokemon()?.status?.effect).toBe(StatusEffect.POISON); + } + + it("should protect the user and poison attackers that make contact", async () => { + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); game.move.select(MoveId.SLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); - expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy(); + + expectProtected(); }); - test("should protect the user and poison attackers that make contact, regardless of accuracy checks", async () => { + + it("should ignore accuracy checks", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(MoveId.SLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("MoveEffectPhase"); - + await game.phaseInterceptor.to("MoveEndPhase"); // baneful bunker await game.move.forceMiss(); + await game.phaseInterceptor.to("BerryPhase", false); - expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy(); + + expectProtected(); }); - test("should not poison attackers that don't make contact", async () => { - game.override.moveset(MoveId.FLASH_CANNON); + it("should block non-contact moves without poisoning attackers", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const charizard = game.field.getPlayerPokemon(); + const toxapex = game.field.getEnemyPokemon(); game.move.select(MoveId.FLASH_CANNON); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("MoveEffectPhase"); - - await game.move.forceMiss(); await game.phaseInterceptor.to("BerryPhase", false); - expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeFalsy(); + + expect(toxapex.hp).toBe(toxapex.getMaxHp()); + expect(charizard.status?.effect).toBeUndefined(); }); }); diff --git a/test/moves/baton-pass.test.ts b/test/moves/baton-pass.test.ts index ef1979b223d..f9bd92a63cd 100644 --- a/test/moves/baton-pass.test.ts +++ b/test/moves/baton-pass.test.ts @@ -42,7 +42,7 @@ describe("Moves - Baton Pass", () => { game.move.select(MoveId.NASTY_PLOT); await game.toNextTurn(); - let playerPokemon = game.scene.getPlayerPokemon()!; + let playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getStatStage(Stat.SPATK)).toEqual(2); @@ -52,7 +52,7 @@ describe("Moves - Baton Pass", () => { await game.phaseInterceptor.to("TurnEndPhase"); // assert - playerPokemon = game.scene.getPlayerPokemon()!; + playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.species.speciesId).toEqual(SpeciesId.SHUCKLE); expect(playerPokemon.getStatStage(Stat.SPATK)).toEqual(2); }); @@ -73,7 +73,7 @@ describe("Moves - Baton Pass", () => { await game.phaseInterceptor.to("PostSummonPhase", false); // check buffs are still there - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.SPATK)).toEqual(2); + expect(game.field.getEnemyPokemon().getStatStage(Stat.SPATK)).toEqual(2); // confirm that a switch actually happened. can't use species because I // can't find a way to override trainer parties with more than 1 pokemon species expect(game.phaseInterceptor.log.slice(-4)).toEqual([ @@ -105,7 +105,7 @@ describe("Moves - Baton Pass", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.FIRE_SPIN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/moves/beak-blast.test.ts b/test/moves/beak-blast.test.ts index 71d2d957bed..4d28e7fd0ab 100644 --- a/test/moves/beak-blast.test.ts +++ b/test/moves/beak-blast.test.ts @@ -40,8 +40,8 @@ describe("Moves - Beak Blast", () => { it("should add a charge effect that burns attackers on contact", async () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.BEAK_BLAST); @@ -57,8 +57,8 @@ describe("Moves - Beak Blast", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.BEAK_BLAST); @@ -74,8 +74,8 @@ describe("Moves - Beak Blast", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.BEAK_BLAST); @@ -91,7 +91,7 @@ describe("Moves - Beak Blast", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.BEAK_BLAST); @@ -104,8 +104,8 @@ describe("Moves - Beak Blast", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.BEAK_BLAST); @@ -120,8 +120,8 @@ describe("Moves - Beak Blast", () => { it("should still burn the enemy if the user is knocked out", async () => { game.override.ability(AbilityId.BALL_FETCH); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; - const user = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); + const user = game.field.getPlayerPokemon(); user.hp = 1; game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("BerryPhase", false); @@ -133,7 +133,7 @@ describe("Moves - Beak Blast", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("BerryPhase", false); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.status?.effect).not.toBe(StatusEffect.BURN); }); }); diff --git a/test/moves/beat-up.test.ts b/test/moves/beat-up.test.ts index 79d672bd0ed..cfb3d35bed5 100644 --- a/test/moves/beat-up.test.ts +++ b/test/moves/beat-up.test.ts @@ -43,8 +43,8 @@ describe("Moves - Beat Up", () => { SpeciesId.EEVEE, ]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); let enemyStartingHp = enemyPokemon.hp; game.move.select(MoveId.BEAT_UP); @@ -71,7 +71,7 @@ describe("Moves - Beat Up", () => { SpeciesId.EEVEE, ]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.scene.getPlayerParty()[1].trySetStatus(StatusEffect.BURN); diff --git a/test/moves/belly-drum.test.ts b/test/moves/belly-drum.test.ts index 9cbb7adb1ae..827030c14aa 100644 --- a/test/moves/belly-drum.test.ts +++ b/test/moves/belly-drum.test.ts @@ -44,7 +44,7 @@ describe("Moves - BELLY DRUM", () => { test("raises the user's ATK stat stage to its max, at the cost of 1/2 of its maximum HP", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); game.move.select(MoveId.BELLY_DRUM); @@ -57,7 +57,7 @@ describe("Moves - BELLY DRUM", () => { test("will still take effect if an uninvolved stat stage is at max", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); // Here - Stat.ATK -> -3 and Stat.SPATK -> 6 @@ -75,7 +75,7 @@ describe("Moves - BELLY DRUM", () => { test("fails if the pokemon's ATK stat stage is at its maximum", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.setStatStage(Stat.ATK, 6); @@ -89,7 +89,7 @@ describe("Moves - BELLY DRUM", () => { test("fails if the user's health is less than 1/2", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; diff --git a/test/moves/burning-jealousy.test.ts b/test/moves/burning-jealousy.test.ts index 62f41790582..33ff855f31e 100644 --- a/test/moves/burning-jealousy.test.ts +++ b/test/moves/burning-jealousy.test.ts @@ -40,7 +40,7 @@ describe("Moves - Burning Jealousy", () => { it("should burn the opponent if their stat stages were raised", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.BURNING_JEALOUSY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -53,7 +53,7 @@ describe("Moves - Burning Jealousy", () => { game.override.starterSpecies(0).battleStyle("double"); await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.ABRA]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.BURNING_JEALOUSY); game.move.select(MoveId.GROWL, 1); @@ -67,7 +67,7 @@ describe("Moves - Burning Jealousy", () => { game.override.enemySpecies(SpeciesId.DITTO).enemyAbility(AbilityId.IMPOSTER).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.BURNING_JEALOUSY); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/camouflage.test.ts b/test/moves/camouflage.test.ts index badab8ec4a5..b3f87be4715 100644 --- a/test/moves/camouflage.test.ts +++ b/test/moves/camouflage.test.ts @@ -37,7 +37,7 @@ describe("Moves - Camouflage", () => { it("Camouflage should look at terrain first when selecting a type to change into", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.CAMOUFLAGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/ceaseless-edge.test.ts b/test/moves/ceaseless-edge.test.ts index 56d7c97ea68..64f4cf15511 100644 --- a/test/moves/ceaseless-edge.test.ts +++ b/test/moves/ceaseless-edge.test.ts @@ -42,7 +42,7 @@ describe("Moves - Ceaseless Edge", () => { test("move should hit and apply spikes", async () => { await game.classicMode.startBattle([SpeciesId.ILLUMISE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyStartingHp = enemyPokemon.hp; @@ -64,7 +64,7 @@ describe("Moves - Ceaseless Edge", () => { game.override.startingHeldItems([{ name: "MULTI_LENS" }]); await game.classicMode.startBattle([SpeciesId.ILLUMISE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyStartingHp = enemyPokemon.hp; diff --git a/test/moves/chilly-reception.test.ts b/test/moves/chilly-reception.test.ts index 948b42cb3f2..096454132f3 100644 --- a/test/moves/chilly-reception.test.ts +++ b/test/moves/chilly-reception.test.ts @@ -44,7 +44,7 @@ describe("Moves - Chilly Reception", () => { await game.toEndOfTurn(); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); - expect(game.scene.getPlayerPokemon()).toBe(meowth); + expect(game.field.getPlayerPokemon()).toBe(meowth); expect(slowking.isOnField()).toBe(false); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); expect(game.textInterceptor.logs).toContain( @@ -60,7 +60,7 @@ describe("Moves - Chilly Reception", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); }); it("should still switch out even if weather cannot be changed", async () => { @@ -85,7 +85,7 @@ describe("Moves - Chilly Reception", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()).toBe(meowth); + expect(game.field.getPlayerPokemon()).toBe(meowth); expect(slowking.isOnField()).toBe(false); }); @@ -95,7 +95,7 @@ describe("Moves - Chilly Reception", () => { expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.SNOW); - const slowking = game.scene.getPlayerPokemon()!; + const slowking = game.field.getPlayerPokemon(); game.move.select(MoveId.SNOWSCAPE); await game.toNextTurn(); @@ -108,7 +108,7 @@ describe("Moves - Chilly Reception", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()).toBe(slowking); + expect(game.field.getPlayerPokemon()).toBe(slowking); expect(slowking.getLastXMoves()[0].result).toBe(MoveResult.FAIL); expect(game.textInterceptor.logs).toContain( i18next.t("moveTriggers:chillyReception", { pokemonName: getPokemonNameWithAffix(slowking) }), @@ -126,7 +126,7 @@ describe("Moves - Chilly Reception", () => { await game.toEndOfTurn(); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); - expect(game.scene.getPlayerPokemon()).toBe(meowth); + expect(game.field.getPlayerPokemon()).toBe(meowth); expect(slowking.isOnField()).toBe(false); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); expect(game.textInterceptor.logs).not.toContain( diff --git a/test/moves/clangorous-soul.test.ts b/test/moves/clangorous-soul.test.ts index 82a0d383f65..2f1c7a18f50 100644 --- a/test/moves/clangorous-soul.test.ts +++ b/test/moves/clangorous-soul.test.ts @@ -41,7 +41,7 @@ describe("Moves - Clangorous Soul", () => { it("raises the user's ATK, DEF, SPATK, SPDEF, and SPD stat stages by 1 each at the cost of 1/3 of its maximum HP", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); game.move.select(MoveId.CLANGOROUS_SOUL); @@ -58,7 +58,7 @@ describe("Moves - Clangorous Soul", () => { it("will still take effect if one or more of the involved stat stages are not at max", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); //Here - Stat.SPD -> 0 and Stat.SPDEF -> 4 @@ -81,7 +81,7 @@ describe("Moves - Clangorous Soul", () => { it("fails if all stat stages involved are at max", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.setStatStage(Stat.ATK, 6); leadPokemon.setStatStage(Stat.DEF, 6); @@ -103,7 +103,7 @@ describe("Moves - Clangorous Soul", () => { it("fails if the user's health is less than 1/3", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 91e941e2845..bfe4dd2f954 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -45,7 +45,7 @@ describe("Moves - Copycat", () => { game.move.select(MoveId.COPYCAT); // Last successful move should be Swords Dance await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(4); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(4); }); it("should fail when the last move used is not a valid Copycat move", async () => { @@ -58,7 +58,7 @@ describe("Moves - Copycat", () => { game.move.select(MoveId.COPYCAT); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should copy the called move when the last move successfully calls another", async () => { @@ -70,7 +70,7 @@ describe("Moves - Copycat", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); // Player moves first so enemy can copy Swords Dance await game.toNextTurn(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); expect(enemy.getLastXMoves()[0]).toMatchObject({ move: MoveId.SWORDS_DANCE, result: MoveResult.SUCCESS, @@ -87,6 +87,6 @@ describe("Moves - Copycat", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.SPDEF)).toBe(-2); + expect(game.field.getEnemyPokemon().getStatStage(Stat.SPDEF)).toBe(-2); }); }); diff --git a/test/moves/court-change.test.ts b/test/moves/court-change.test.ts new file mode 100644 index 00000000000..a27854c12be --- /dev/null +++ b/test/moves/court-change.test.ts @@ -0,0 +1,85 @@ +import { AbilityId } from "#enums/ability-id"; +import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { Stat } from "#enums/stat"; +import { StatusEffect } from "#enums/status-effect"; +import { GameManager } from "#test/test-utils/game-manager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Move - Court Change", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(AbilityId.BALL_FETCH) + .criticalHits(false) + .enemyAbility(AbilityId.STURDY) + .startingLevel(100) + .battleStyle("single") + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); + }); + + it("should swap combined Pledge effects to the opposite side", async () => { + game.override.battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.SHUCKLE]); + + const regieleki = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + + game.move.use(MoveId.WATER_PLEDGE); + game.move.use(MoveId.GRASS_PLEDGE, 1); + await game.toNextTurn(); + + // enemy team will be in the swamp and slowed + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.ENEMY)).toBeDefined(); + expect(enemyPokemon.getEffectiveStat(Stat.SPD)).toBe(enemyPokemon.getStat(Stat.SPD) / 4); + + game.move.use(MoveId.COURT_CHANGE); + game.move.use(MoveId.SPLASH, 1); + await game.toEndOfTurn(); + + // own team should now be in the swamp and slowed + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.ENEMY)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); + expect(regieleki.getEffectiveStat(Stat.SPD)).toBe(regieleki.getStat(Stat.SPD) / 4); + }); + + it("should swap safeguard to the enemy side ", async () => { + game.override.enemyMoveset(MoveId.TOXIC_THREAD); + await game.classicMode.startBattle([SpeciesId.NINJASK]); + + const ninjask = game.field.getPlayerPokemon(); + + game.move.use(MoveId.SAFEGUARD); + await game.move.forceEnemyMove(MoveId.TOXIC_THREAD); + await game.toNextTurn(); + + // Ninjask will not be poisoned because of Safeguard + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER)).toBeDefined(); + expect(ninjask.status?.effect).toBeUndefined(); + + game.move.use(MoveId.COURT_CHANGE); + await game.toEndOfTurn(); + + // Ninjask should now be poisoned due to lack of Safeguard + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.ENEMY)).toBeDefined(); + expect(ninjask.status?.effect).toBe(StatusEffect.POISON); + }); +}); diff --git a/test/moves/crafty-shield.test.ts b/test/moves/crafty-shield.test.ts index d0c148c1f41..0e067a07214 100644 --- a/test/moves/crafty-shield.test.ts +++ b/test/moves/crafty-shield.test.ts @@ -1,12 +1,14 @@ import { AbilityId } from "#enums/ability-id"; +import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; -import { BerryPhase } from "#phases/berry-phase"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - Crafty Shield", () => { let phaserGame: Phaser.Game; @@ -27,68 +29,100 @@ describe("Moves - Crafty Shield", () => { game.override .battleStyle("double") - .moveset([MoveId.CRAFTY_SHIELD, MoveId.SPLASH, MoveId.SWORDS_DANCE]) - .enemySpecies(SpeciesId.SNORLAX) - .enemyMoveset([MoveId.GROWL]) + .enemySpecies(SpeciesId.DUSKNOIR) + .enemyMoveset(MoveId.GROWL) .enemyAbility(AbilityId.INSOMNIA) .startingLevel(100) .enemyLevel(100); }); - test("should protect the user and allies from status moves", async () => { + it("should protect the user and allies from status moves", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const [charizard, blastoise] = game.scene.getPlayerField(); + game.move.use(MoveId.CRAFTY_SHIELD, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.GROWL); + await game.move.forceEnemyMove(MoveId.GROWL); - game.move.select(MoveId.CRAFTY_SHIELD); - game.move.select(MoveId.SPLASH, 1); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(BerryPhase, false); - - leadPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); + expect(charizard.getStatStage(Stat.ATK)).toBe(0); + expect(blastoise.getStatStage(Stat.ATK)).toBe(0); }); - test("should not protect the user and allies from attack moves", async () => { - game.override.enemyMoveset([MoveId.TACKLE]); - + it("should not protect the user and allies from attack moves", async () => { + game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const [charizard, blastoise] = game.scene.getPlayerField(); - game.move.select(MoveId.CRAFTY_SHIELD); - game.move.select(MoveId.SPLASH, 1); + game.move.use(MoveId.CRAFTY_SHIELD, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(BerryPhase, false); - - expect(leadPokemon.some(p => p.hp < p.getMaxHp())).toBeTruthy(); + expect(charizard.isFullHp()).toBe(false); + expect(blastoise.isFullHp()).toBe(false); }); - test("should protect the user and allies from moves that ignore other protection", async () => { - game.override.enemySpecies(SpeciesId.DUSCLOPS).enemyMoveset([MoveId.CURSE]); - + it("should not block entry hazards and field-targeted moves", async () => { + game.override.enemyMoveset([MoveId.PERISH_SONG, MoveId.TOXIC_SPIKES]); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const [charizard, blastoise] = game.scene.getPlayerField(); - game.move.select(MoveId.CRAFTY_SHIELD); - game.move.select(MoveId.SPLASH, 1); + game.move.use(MoveId.CRAFTY_SHIELD, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.PERISH_SONG); + await game.move.forceEnemyMove(MoveId.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(BerryPhase, false); - - leadPokemon.forEach(p => expect(p.getTag(BattlerTagType.CURSED)).toBeUndefined()); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.PLAYER)).toBeDefined(); + expect(charizard.getTag(BattlerTagType.PERISH_SONG)).toBeDefined(); + expect(blastoise.getTag(BattlerTagType.PERISH_SONG)).toBeDefined(); }); - test("should not block allies' self-targeted moves", async () => { + it("should protect the user and allies from moves that ignore other protection", async () => { + game.override.moveset(MoveId.CURSE); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const [charizard, blastoise] = game.scene.getPlayerField(); - game.move.select(MoveId.CRAFTY_SHIELD); - game.move.select(MoveId.SWORDS_DANCE, 1); + game.move.use(MoveId.CRAFTY_SHIELD, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.CURSE, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.CURSE, BattlerIndex.PLAYER_2); - await game.phaseInterceptor.to(BerryPhase, false); + await game.toEndOfTurn(); - expect(leadPokemon[0].getStatStage(Stat.ATK)).toBe(0); - expect(leadPokemon[1].getStatStage(Stat.ATK)).toBe(2); + expect(charizard.getTag(BattlerTagType.CURSED)).toBeUndefined(); + expect(blastoise.getTag(BattlerTagType.CURSED)).toBeUndefined(); + + const [dusknoir1, dusknoir2] = game.scene.getEnemyField(); + expect(dusknoir1).toHaveFullHp(); + expect(dusknoir2).toHaveFullHp(); + }); + + it("should not block allies' self or ally-targeted moves", async () => { + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); + + const [charizard, blastoise] = game.scene.getPlayerField(); + + game.move.use(MoveId.CRAFTY_SHIELD, BattlerIndex.PLAYER); + game.move.use(MoveId.SWORDS_DANCE, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(charizard.getStatStage(Stat.ATK)).toBe(0); + expect(blastoise.getStatStage(Stat.ATK)).toBe(2); + + game.move.use(MoveId.HOWL, BattlerIndex.PLAYER); + game.move.use(MoveId.CRAFTY_SHIELD, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(charizard.getStatStage(Stat.ATK)).toBe(1); + expect(blastoise.getStatStage(Stat.ATK)).toBe(3); }); }); diff --git a/test/moves/destiny-bond.test.ts b/test/moves/destiny-bond.test.ts index 48bd29fe662..9c397717335 100644 --- a/test/moves/destiny-bond.test.ts +++ b/test/moves/destiny-bond.test.ts @@ -48,15 +48,15 @@ describe("Moves - Destiny Bond", () => { game.override.moveset(moveToUse); await game.classicMode.startBattle(defaultParty); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(moveToUse); await game.setTurnOrder(enemyFirst); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.isFainted()).toBe(true); - expect(playerPokemon?.isFainted()).toBe(true); + expect(enemyPokemon.isFainted()).toBe(true); + expect(playerPokemon.isFainted()).toBe(true); }); it("should KO the opponent on the next turn", async () => { @@ -65,24 +65,24 @@ describe("Moves - Destiny Bond", () => { game.override.moveset([MoveId.SPLASH, moveToUse]); await game.classicMode.startBattle(defaultParty); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint game.move.select(MoveId.SPLASH); await game.setTurnOrder(playerFirst); await game.toNextTurn(); - expect(enemyPokemon?.isFainted()).toBe(false); - expect(playerPokemon?.isFainted()).toBe(false); + expect(enemyPokemon.isFainted()).toBe(false); + expect(enemyPokemon.isFainted()).toBe(false); // Turn 2: Player KO's the enemy before the enemy's turn game.move.select(moveToUse); await game.setTurnOrder(playerFirst); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.isFainted()).toBe(true); - expect(playerPokemon?.isFainted()).toBe(true); + expect(enemyPokemon.isFainted()).toBe(true); + expect(playerPokemon.isFainted()).toBe(true); }); it("should fail if used twice in a row", async () => { @@ -91,24 +91,24 @@ describe("Moves - Destiny Bond", () => { game.override.moveset([MoveId.SPLASH, moveToUse]); await game.classicMode.startBattle(defaultParty); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint game.move.select(MoveId.SPLASH); await game.setTurnOrder(enemyFirst); await game.toNextTurn(); - expect(enemyPokemon?.isFainted()).toBe(false); - expect(playerPokemon?.isFainted()).toBe(false); + expect(enemyPokemon.isFainted()).toBe(false); + expect(enemyPokemon.isFainted()).toBe(false); // Turn 2: Enemy should fail Destiny Bond then get KO'd game.move.select(moveToUse); await game.setTurnOrder(enemyFirst); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.isFainted()).toBe(true); - expect(playerPokemon?.isFainted()).toBe(false); + expect(enemyPokemon.isFainted()).toBe(true); + expect(playerPokemon.isFainted()).toBe(false); }); it("should not KO the opponent if the user dies to weather", async () => { @@ -118,15 +118,15 @@ describe("Moves - Destiny Bond", () => { game.override.moveset(moveToUse).ability(AbilityId.SAND_STREAM); await game.classicMode.startBattle(defaultParty); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(moveToUse); await game.setTurnOrder(enemyFirst); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.isFainted()).toBe(true); - expect(playerPokemon?.isFainted()).toBe(false); + expect(enemyPokemon.isFainted()).toBe(true); + expect(playerPokemon.isFainted()).toBe(false); }); it("should not KO the opponent if the user had another turn", async () => { @@ -135,25 +135,25 @@ describe("Moves - Destiny Bond", () => { game.override.moveset([MoveId.SPORE, moveToUse]); await game.classicMode.startBattle(defaultParty); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint game.move.select(MoveId.SPORE); await game.setTurnOrder(enemyFirst); await game.toNextTurn(); - expect(enemyPokemon?.isFainted()).toBe(false); - expect(playerPokemon?.isFainted()).toBe(false); - expect(enemyPokemon?.status?.effect).toBe(StatusEffect.SLEEP); + expect(enemyPokemon.isFainted()).toBe(false); + expect(playerPokemon.isFainted()).toBe(false); + expect(enemyPokemon.status?.effect).toBe(StatusEffect.SLEEP); // Turn 2: Enemy should skip a turn due to sleep, then get KO'd game.move.select(moveToUse); await game.setTurnOrder(enemyFirst); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.isFainted()).toBe(true); - expect(playerPokemon?.isFainted()).toBe(false); + expect(enemyPokemon.isFainted()).toBe(true); + expect(playerPokemon.isFainted()).toBe(false); }); it("should not KO an ally", async () => { @@ -171,10 +171,10 @@ describe("Moves - Destiny Bond", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon0?.isFainted()).toBe(false); - expect(enemyPokemon1?.isFainted()).toBe(false); - expect(playerPokemon0?.isFainted()).toBe(true); - expect(playerPokemon1?.isFainted()).toBe(false); + expect(enemyPokemon0.isFainted()).toBe(false); + expect(enemyPokemon1.isFainted()).toBe(false); + expect(playerPokemon0.isFainted()).toBe(true); + expect(playerPokemon1.isFainted()).toBe(false); }); it("should not cause a crash if the user is KO'd by Ceaseless Edge", async () => { @@ -184,15 +184,15 @@ describe("Moves - Destiny Bond", () => { game.override.moveset(moveToUse); await game.classicMode.startBattle(defaultParty); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(moveToUse); await game.setTurnOrder(enemyFirst); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.isFainted()).toBe(true); - expect(playerPokemon?.isFainted()).toBe(true); + expect(enemyPokemon.isFainted()).toBe(true); + expect(playerPokemon.isFainted()).toBe(true); // Ceaseless Edge spikes effect should still activate const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag; @@ -235,20 +235,20 @@ describe("Moves - Destiny Bond", () => { game.override.moveset(moveToUse).startingHeldItems([{ name: "REVIVER_SEED" }]); await game.classicMode.startBattle(defaultParty); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(moveToUse); await game.setTurnOrder(enemyFirst); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.isFainted()).toBe(true); - expect(playerPokemon?.isFainted()).toBe(true); + expect(enemyPokemon.isFainted()).toBe(true); + expect(playerPokemon.isFainted()).toBe(true); // Check that the Tackle user's Reviver Seed did not activate const revSeeds = game.scene .getModifiers(PokemonInstantReviveModifier) - .filter(m => m.pokemonId === playerPokemon?.id); + .filter(m => m.pokemonId === playerPokemon.id); expect(revSeeds.length).toBe(1); }); }); diff --git a/test/moves/diamond-storm.test.ts b/test/moves/diamond-storm.test.ts index 9de7409ca18..ffd3c62420e 100644 --- a/test/moves/diamond-storm.test.ts +++ b/test/moves/diamond-storm.test.ts @@ -41,6 +41,6 @@ describe("Moves - Diamond Storm", () => { game.move.select(MoveId.DIAMOND_STORM); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.DEF)).toBe(2); + expect(game.field.getPlayerPokemon().getStatStage(Stat.DEF)).toBe(2); }); }); diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 2cb8ae05963..fcc593b75da 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -38,8 +38,8 @@ describe("Moves - Dig", () => { it("should make the user semi-invulnerable, then attack over 2 turns", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); @@ -62,7 +62,7 @@ describe("Moves - Dig", () => { game.override.moveset([]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.changeMoveset(playerPokemon, MoveId.DIG); game.move.select(MoveId.DIG); @@ -80,8 +80,8 @@ describe("Moves - Dig", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DIG); @@ -95,7 +95,7 @@ describe("Moves - Dig", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.DIG); @@ -110,8 +110,8 @@ describe("Moves - Dig", () => { it("should cause the user to take double damage from Earthquake", async () => { await game.classicMode.startBattle([SpeciesId.DONDOZO]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); const preDigEarthquakeDmg = playerPokemon.getAttackDamage({ source: enemyPokemon, diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index 5543c16fecf..9b5763bf90b 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -132,7 +132,7 @@ describe("Moves - Disable", () => { vi.spyOn(RandomMoveAttr.prototype, "getMoveOverride").mockReturnValue(MoveId.ABSORB); await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const playerMon = game.scene.getPlayerPokemon()!; + const playerMon = game.field.getPlayerPokemon(); playerMon.pushMoveHistory({ move: MoveId.SPLASH, targets: [BattlerIndex.ENEMY], useMode: MoveUseMode.NORMAL }); game.scene.currentBattle.lastMove = MoveId.SPLASH; @@ -141,7 +141,7 @@ describe("Moves - Disable", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - const enemyMon = game.scene.getEnemyPokemon()!; + const enemyMon = game.field.getEnemyPokemon(); expect(enemyMon.isMoveRestricted(moveId), `calling move ${MoveId[moveId]} was not disabled`).toBe(true); expect(enemyMon.getLastXMoves(-1)).toHaveLength(2); const calledMove = enemyMon.getLastXMoves()[0].move; diff --git a/test/moves/dive.test.ts b/test/moves/dive.test.ts index c34f3dc54dc..6464cb110b4 100644 --- a/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -38,8 +38,8 @@ describe("Moves - Dive", () => { it("should make the user semi-invulnerable, then attack over 2 turns", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DIVE); @@ -64,8 +64,8 @@ describe("Moves - Dive", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DIVE); @@ -79,7 +79,7 @@ describe("Moves - Dive", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.DIVE); @@ -96,8 +96,8 @@ describe("Moves - Dive", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DIVE); @@ -113,8 +113,8 @@ describe("Moves - Dive", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DIVE); diff --git a/test/moves/doodle.test.ts b/test/moves/doodle.test.ts index c4380720f20..8b90d120b24 100644 --- a/test/moves/doodle.test.ts +++ b/test/moves/doodle.test.ts @@ -39,7 +39,7 @@ describe("Moves - Doodle", () => { game.move.select(MoveId.DOODLE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.field.getPlayerPokemon().getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should copy the opponent's ability to itself and its ally in doubles", async () => { @@ -64,6 +64,6 @@ describe("Moves - Doodle", () => { await game.phaseInterceptor.to("BerryPhase"); // Enemies should have been intimidated twice - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-2); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-2); }); }); diff --git a/test/moves/double-team.test.ts b/test/moves/double-team.test.ts index 9276a0956e8..6d471df2d57 100644 --- a/test/moves/double-team.test.ts +++ b/test/moves/double-team.test.ts @@ -36,8 +36,8 @@ describe("Moves - Double Team", () => { it("raises the user's EVA stat stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const ally = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const ally = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getAccuracyMultiplier"); expect(ally.getStatStage(Stat.EVA)).toBe(0); diff --git a/test/moves/dragon-rage.test.ts b/test/moves/dragon-rage.test.ts index 1b850ade488..c90e2b78abd 100644 --- a/test/moves/dragon-rage.test.ts +++ b/test/moves/dragon-rage.test.ts @@ -47,7 +47,7 @@ describe("Moves - Dragon Rage", () => { await game.classicMode.startBattle(); partyPokemon = game.scene.getPlayerParty()[0]; - enemyPokemon = game.scene.getEnemyPokemon()!; + enemyPokemon = game.field.getEnemyPokemon(); }); it("ignores weaknesses", async () => { diff --git a/test/moves/dragon-tail.test.ts b/test/moves/dragon-tail.test.ts index 487647784f7..1cea6f908a0 100644 --- a/test/moves/dragon-tail.test.ts +++ b/test/moves/dragon-tail.test.ts @@ -41,7 +41,7 @@ describe("Moves - Dragon Tail", () => { it("should cause opponent to flee, and not crash", async () => { await game.classicMode.startBattle([SpeciesId.DRATINI]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DRAGON_TAIL); @@ -59,8 +59,8 @@ describe("Moves - Dragon Tail", () => { game.override.enemyAbility(AbilityId.ROUGH_SKIN); await game.classicMode.startBattle([SpeciesId.DRATINI]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.DRAGON_TAIL); @@ -132,7 +132,7 @@ describe("Moves - Dragon Tail", () => { game.override.enemyAbility(AbilityId.SUCTION_CUPS); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.DRAGON_TAIL); await game.phaseInterceptor.to("TurnEndPhase"); @@ -149,7 +149,7 @@ describe("Moves - Dragon Tail", () => { await game.toNextTurn(); // Make sure the enemy switched to a healthy Pokemon - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); expect(enemy).toBeDefined(); expect(enemy.isFullHp()).toBe(true); @@ -171,7 +171,7 @@ describe("Moves - Dragon Tail", () => { await game.toNextTurn(); // Make sure the enemy field is not empty and has a revived Pokemon - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); expect(enemy).toBeDefined(); expect(enemy.hp).toBe(Math.floor(enemy.getMaxHp() / 2)); expect(game.scene.getEnemyField().length).toBe(1); @@ -189,7 +189,7 @@ describe("Moves - Dragon Tail", () => { await game.toNextTurn(); // Make sure the player's field is not empty and has a revived Pokemon - const dratini = game.scene.getPlayerPokemon()!; + const dratini = game.field.getPlayerPokemon(); expect(dratini).toBeDefined(); expect(dratini.hp).toBe(Math.floor(dratini.getMaxHp() / 2)); expect(game.scene.getPlayerField().length).toBe(1); diff --git a/test/moves/electrify.test.ts b/test/moves/electrify.test.ts index 19a2fdfb7a2..10ae2fcd939 100644 --- a/test/moves/electrify.test.ts +++ b/test/moves/electrify.test.ts @@ -36,8 +36,8 @@ describe("Moves - Electrify", () => { it("should convert attacks to Electric type", async () => { await game.classicMode.startBattle([SpeciesId.EXCADRILL]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "getMoveType"); game.move.select(MoveId.ELECTRIFY); @@ -54,8 +54,8 @@ describe("Moves - Electrify", () => { await game.classicMode.startBattle([SpeciesId.EXCADRILL]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getPlayerPokemon(); vi.spyOn(enemyPokemon, "getMoveType"); game.move.select(MoveId.ELECTRIFY); diff --git a/test/moves/electro-shot.test.ts b/test/moves/electro-shot.test.ts index e5031fefb3d..4b1303fc930 100644 --- a/test/moves/electro-shot.test.ts +++ b/test/moves/electro-shot.test.ts @@ -38,8 +38,8 @@ describe("Moves - Electro Shot", () => { it("should increase the user's Sp. Atk on the first turn, then attack on the second turn", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.ELECTRO_SHOT); @@ -68,8 +68,8 @@ describe("Moves - Electro Shot", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.ELECTRO_SHOT); @@ -91,7 +91,7 @@ describe("Moves - Electro Shot", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.ELECTRO_SHOT); diff --git a/test/moves/encore.test.ts b/test/moves/encore.test.ts index 1b0e2ed03f2..0840346c3b1 100644 --- a/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -39,7 +39,7 @@ describe("Moves - Encore", () => { it("should prevent the target from using any move except the last used move", async () => { await game.classicMode.startBattle([SpeciesId.SNORLAX]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.ENCORE); await game.move.selectEnemyMove(MoveId.SPLASH); @@ -67,8 +67,8 @@ describe("Moves - Encore", () => { await game.classicMode.startBattle([SpeciesId.SNORLAX]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); if (delay) { game.move.select(MoveId.SPLASH); @@ -92,23 +92,23 @@ describe("Moves - Encore", () => { game.override.moveset([MoveId.ENCORE, MoveId.TORMENT, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemyPokemon = game.scene.getEnemyPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.ENCORE); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.getTag(BattlerTagType.ENCORE)).toBeDefined(); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)).toBeDefined(); await game.toNextTurn(); game.move.select(MoveId.TORMENT); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon?.getTag(BattlerTagType.TORMENT)).toBeDefined(); + expect(enemyPokemon.getTag(BattlerTagType.TORMENT)).toBeDefined(); await game.toNextTurn(); game.move.select(MoveId.SPLASH); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); - const lastMove = enemyPokemon?.getLastXMoves()[0]; + const lastMove = enemyPokemon.getLastXMoves()[0]; expect(lastMove?.move).toBe(MoveId.STRUGGLE); }); }); diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index 71a16ef4cc1..1bac3c5d6ff 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -1,9 +1,10 @@ import { AbilityId } from "#enums/ability-id"; +import { HitResult } from "#enums/hit-result"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Endure", () => { let phaserGame: Phaser.Game; @@ -22,7 +23,7 @@ describe("Moves - Endure", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([MoveId.THUNDER, MoveId.BULLET_SEED, MoveId.TOXIC, MoveId.SHEER_COLD]) + .moveset([MoveId.THUNDER, MoveId.BULLET_SEED, MoveId.SHEER_COLD]) .ability(AbilityId.SKILL_LINK) .startingLevel(100) .battleStyle("single") @@ -32,55 +33,52 @@ describe("Moves - Endure", () => { .enemyMoveset(MoveId.ENDURE); }); - it("should let the pokemon survive with 1 HP", async () => { + it("should let the pokemon survive with 1 HP from attacks", async () => { await game.classicMode.startBattle([SpeciesId.ARCEUS]); game.move.select(MoveId.THUNDER); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.hp).toBe(1); + expect(game.field.getEnemyPokemon().hp).toBe(1); }); - it("should let the pokemon survive with 1 HP when hit with a multihit move", async () => { + it("should let the pokemon survive with 1 HP from multi-strike moves", async () => { await game.classicMode.startBattle([SpeciesId.ARCEUS]); game.move.select(MoveId.BULLET_SEED); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.hp).toBe(1); + expect(game.field.getEnemyPokemon().hp).toBe(1); }); it("should let the pokemon survive against OHKO moves", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.SHEER_COLD); await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemy.isFainted()).toBeFalsy(); + expect(enemy.hp).toBe(1); }); // comprehensive indirect damage test copied from Reviver Seed test it.each([ - { moveType: "Damaging Move Chip Damage", move: MoveId.SALT_CURE }, - { moveType: "Chip Damage", move: MoveId.LEECH_SEED }, - { moveType: "Trapping Chip Damage", move: MoveId.WHIRLPOOL }, - { moveType: "Status Effect Damage", move: MoveId.TOXIC }, + { moveType: "Damaging Move Chip", move: MoveId.SALT_CURE }, + { moveType: "Status Move Chip", move: MoveId.LEECH_SEED }, + { moveType: "Partial Trapping move", move: MoveId.WHIRLPOOL }, + { moveType: "Status Effect", move: MoveId.TOXIC }, { moveType: "Weather", move: MoveId.SANDSTORM }, - ])("should not prevent fainting from $moveType", async ({ move }) => { - game.override - .enemyLevel(1) - .startingLevel(100) - .enemySpecies(SpeciesId.MAGIKARP) - .moveset(move) - .enemyMoveset(MoveId.ENDURE); + ])("should not prevent fainting from $moveType Damage", async ({ move }) => { + game.override.moveset(move).enemyLevel(100); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; - enemy.damageAndUpdate(enemy.hp - 1); + const enemy = game.field.getEnemyPokemon(); + enemy.hp = 2; + // force attack to do 1 dmg (for salt cure) + vi.spyOn(enemy, "getAttackDamage").mockReturnValue({ cancelled: false, result: HitResult.EFFECTIVE, damage: 1 }); game.move.select(move); await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemy.isFainted()).toBeTruthy(); + expect(enemy.isFainted()).toBe(true); }); }); diff --git a/test/moves/entrainment.test.ts b/test/moves/entrainment.test.ts index c96cacc8d0b..8d5d69458cb 100644 --- a/test/moves/entrainment.test.ts +++ b/test/moves/entrainment.test.ts @@ -38,7 +38,7 @@ describe("Moves - Entrainment", () => { game.move.select(MoveId.ENTRAINMENT); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.ADAPTABILITY); + expect(game.field.getEnemyPokemon().getAbility().id).toBe(AbilityId.ADAPTABILITY); }); it("should activate post-summon abilities", async () => { @@ -48,6 +48,6 @@ describe("Moves - Entrainment", () => { game.move.select(MoveId.ENTRAINMENT); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); }); diff --git a/test/moves/fake-out.test.ts b/test/moves/fake-out.test.ts index 8db73681f05..22ff8e2c304 100644 --- a/test/moves/fake-out.test.ts +++ b/test/moves/fake-out.test.ts @@ -33,7 +33,7 @@ describe("Moves - Fake Out", () => { it("should only work the first turn a pokemon is sent out in a battle", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const corv = game.scene.getEnemyPokemon()!; + const corv = game.field.getEnemyPokemon(); game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); @@ -52,14 +52,14 @@ describe("Moves - Fake Out", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); // set hp to 1 for easy knockout - game.scene.getEnemyPokemon()!.hp = 1; + game.field.getEnemyPokemon().hp = 1; game.move.select(MoveId.FAKE_OUT); await game.toNextWave(); game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); - const corv = game.scene.getEnemyPokemon()!; + const corv = game.field.getEnemyPokemon(); expect(corv).toBeDefined(); expect(corv?.hp).toBeLessThan(corv?.getMaxHp()); }); @@ -69,14 +69,14 @@ describe("Moves - Fake Out", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); // set hp to 1 for easy knockout - game.scene.getEnemyPokemon()!.hp = 1; + game.field.getEnemyPokemon().hp = 1; game.move.select(MoveId.FAKE_OUT); await game.toNextWave(); game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); - const corv = game.scene.getEnemyPokemon()!; + const corv = game.field.getEnemyPokemon(); expect(corv).toBeDefined(); expect(corv.hp).toBeLessThan(corv.getMaxHp()); }); @@ -87,7 +87,7 @@ describe("Moves - Fake Out", () => { game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); - const corv = game.scene.getEnemyPokemon()!; + const corv = game.field.getEnemyPokemon(); expect(corv.hp).toBeLessThan(corv.getMaxHp()); corv.hp = corv.getMaxHp(); diff --git a/test/moves/false-swipe.test.ts b/test/moves/false-swipe.test.ts index 30547036e69..40408ad523b 100644 --- a/test/moves/false-swipe.test.ts +++ b/test/moves/false-swipe.test.ts @@ -36,8 +36,8 @@ describe("Moves - False Swipe", () => { it("should reduce the target to 1 HP", async () => { await game.classicMode.startBattle([SpeciesId.MILOTIC]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); diff --git a/test/moves/fell-stinger.test.ts b/test/moves/fell-stinger.test.ts index 9f482202c47..ede70b7af9b 100644 --- a/test/moves/fell-stinger.test.ts +++ b/test/moves/fell-stinger.test.ts @@ -41,7 +41,7 @@ describe("Moves - Fell Stinger", () => { game.override.enemyMoveset([MoveId.DOUBLE_EDGE]); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -53,7 +53,7 @@ describe("Moves - Fell Stinger", () => { game.override.enemyMoveset(MoveId.SPLASH).enemyStatusEffect(StatusEffect.BURN); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -65,7 +65,7 @@ describe("Moves - Fell Stinger", () => { game.override.weather(WeatherType.HAIL); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.FELL_STINGER); @@ -78,7 +78,7 @@ describe("Moves - Fell Stinger", () => { game.override.enemyPassiveAbility(AbilityId.STURDY).enemyAbility(AbilityId.DRY_SKIN).weather(WeatherType.HARSH_SUN); await game.challengeMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.FELL_STINGER); @@ -91,7 +91,7 @@ describe("Moves - Fell Stinger", () => { game.override.enemyAbility(AbilityId.BALL_FETCH).enemyHeldItems([{ name: "REVIVER_SEED" }]); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("TurnEndPhase"); @@ -106,7 +106,7 @@ describe("Moves - Fell Stinger", () => { vi.spyOn(fellStinger, "power", "get").mockReturnValue(50000); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Salt Cure, enemy splashes and does nothing @@ -129,7 +129,7 @@ describe("Moves - Fell Stinger", () => { vi.spyOn(allMoves[MoveId.FELL_STINGER], "power", "get").mockReturnValue(50000); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Bind, enemy splashes and does nothing @@ -152,7 +152,7 @@ describe("Moves - Fell Stinger", () => { vi.spyOn(allMoves[MoveId.FELL_STINGER], "power", "get").mockReturnValue(50000); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Leech Seed, enemy splashes and does nothing @@ -173,11 +173,11 @@ describe("Moves - Fell Stinger", () => { game.override.enemyAbility(AbilityId.KLUTZ); await game.classicMode.startBattle([SpeciesId.LEAVANNY]); - const leadPokemon = game.scene.getPlayerPokemon(); + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("TurnEndPhase"); - expect(leadPokemon?.getStatStage(Stat.ATK)).toBe(3); + expect(leadPokemon.getStatStage(Stat.ATK)).toBe(3); }); }); diff --git a/test/moves/fillet-away.test.ts b/test/moves/fillet-away.test.ts index c4c87e1d00e..e6eb003c9ea 100644 --- a/test/moves/fillet-away.test.ts +++ b/test/moves/fillet-away.test.ts @@ -42,7 +42,7 @@ describe("Moves - FILLET AWAY", () => { test("raises the user's ATK, SPATK, and SPD stat stages by 2 each, at the cost of 1/2 of its maximum HP", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); game.move.select(MoveId.FILLET_AWAY); @@ -57,7 +57,7 @@ describe("Moves - FILLET AWAY", () => { test("still takes effect if one or more of the involved stat stages are not at max", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); //Here - Stat.SPD -> 0 and Stat.SPATK -> 3 @@ -76,7 +76,7 @@ describe("Moves - FILLET AWAY", () => { test("fails if all stat stages involved are at max", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.setStatStage(Stat.ATK, 6); leadPokemon.setStatStage(Stat.SPATK, 6); @@ -94,7 +94,7 @@ describe("Moves - FILLET AWAY", () => { test("fails if the user's health is less than 1/2", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; diff --git a/test/moves/fissure.test.ts b/test/moves/fissure.test.ts index 8a8673811ce..b22b81906a6 100644 --- a/test/moves/fissure.test.ts +++ b/test/moves/fissure.test.ts @@ -43,7 +43,7 @@ describe("Moves - Fissure", () => { await game.classicMode.startBattle(); partyPokemon = game.scene.getPlayerParty()[0]; - enemyPokemon = game.scene.getEnemyPokemon()!; + enemyPokemon = game.field.getEnemyPokemon(); }); it("ignores damage modification from abilities, for example FUR_COAT", async () => { diff --git a/test/moves/flower-shield.test.ts b/test/moves/flower-shield.test.ts index 425d0443ca7..5fc671895d3 100644 --- a/test/moves/flower-shield.test.ts +++ b/test/moves/flower-shield.test.ts @@ -38,8 +38,8 @@ describe("Moves - Flower Shield", () => { game.override.enemySpecies(SpeciesId.CHERRIM); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const cherrim = game.scene.getEnemyPokemon()!; - const magikarp = game.scene.getPlayerPokemon()!; + const cherrim = game.field.getEnemyPokemon(); + const magikarp = game.field.getPlayerPokemon(); expect(magikarp.getStatStage(Stat.DEF)).toBe(0); expect(cherrim.getStatStage(Stat.DEF)).toBe(0); @@ -78,8 +78,8 @@ describe("Moves - Flower Shield", () => { game.override.enemySpecies(SpeciesId.PARAS).enemyMoveset(MoveId.DIG).enemyLevel(50); await game.classicMode.startBattle([SpeciesId.CHERRIM]); - const paras = game.scene.getEnemyPokemon()!; - const cherrim = game.scene.getPlayerPokemon()!; + const paras = game.field.getEnemyPokemon(); + const cherrim = game.field.getPlayerPokemon(); expect(paras.getStatStage(Stat.DEF)).toBe(0); expect(cherrim.getStatStage(Stat.DEF)).toBe(0); @@ -97,8 +97,8 @@ describe("Moves - Flower Shield", () => { game.override.enemySpecies(SpeciesId.MAGIKARP); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; - const ally = game.scene.getPlayerPokemon()!; + const enemy = game.field.getEnemyPokemon(); + const ally = game.field.getPlayerPokemon(); expect(enemy.getStatStage(Stat.DEF)).toBe(0); expect(ally.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index 3682fce3d0c..dc40b4a439b 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -41,8 +41,8 @@ describe("Moves - Fly", () => { it("should make the user semi-invulnerable, then attack over 2 turns", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.FLY); @@ -67,8 +67,8 @@ describe("Moves - Fly", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.FLY); @@ -82,7 +82,7 @@ describe("Moves - Fly", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.FLY); @@ -99,8 +99,8 @@ describe("Moves - Fly", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.FLY); diff --git a/test/moves/focus-punch.test.ts b/test/moves/focus-punch.test.ts index c67053ef7ec..9a76dbec0db 100644 --- a/test/moves/focus-punch.test.ts +++ b/test/moves/focus-punch.test.ts @@ -41,8 +41,8 @@ describe("Moves - Focus Punch", () => { it("should deal damage at the end of turn if uninterrupted", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); const enemyStartingHp = enemyPokemon.hp; @@ -65,8 +65,8 @@ describe("Moves - Focus Punch", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); const enemyStartingHp = enemyPokemon.hp; @@ -89,8 +89,8 @@ describe("Moves - Focus Punch", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.FOCUS_PUNCH); diff --git a/test/moves/foresight.test.ts b/test/moves/foresight.test.ts index c3b29d8fabb..7de628ba172 100644 --- a/test/moves/foresight.test.ts +++ b/test/moves/foresight.test.ts @@ -33,7 +33,7 @@ describe("Moves - Foresight", () => { it("should allow Normal and Fighting moves to hit Ghost types", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.QUICK_ATTACK); await game.toNextTurn(); @@ -57,7 +57,7 @@ describe("Moves - Foresight", () => { game.override.enemyMoveset([MoveId.MINIMIZE]); await game.classicMode.startBattle(); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); vi.spyOn(pokemon, "getAccuracyMultiplier"); game.move.select(MoveId.FORESIGHT); diff --git a/test/moves/forests-curse.test.ts b/test/moves/forests-curse.test.ts index 4467a5c4037..db88c1f79c4 100644 --- a/test/moves/forests-curse.test.ts +++ b/test/moves/forests-curse.test.ts @@ -35,13 +35,13 @@ describe("Moves - Forest's Curse", () => { it("will replace the added type from Trick Or Treat", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemyPokemon = game.scene.getEnemyPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemyPokemon!.summonData.addedType).toBe(PokemonType.GHOST); + expect(enemyPokemon.summonData.addedType).toBe(PokemonType.GHOST); game.move.select(MoveId.FORESTS_CURSE); await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemyPokemon?.summonData.addedType).toBe(PokemonType.GRASS); + expect(enemyPokemon.summonData.addedType).toBe(PokemonType.GRASS); }); }); diff --git a/test/moves/freeze-dry.test.ts b/test/moves/freeze-dry.test.ts index 5d84d6be795..0b22d4f0997 100644 --- a/test/moves/freeze-dry.test.ts +++ b/test/moves/freeze-dry.test.ts @@ -36,7 +36,7 @@ describe("Moves - Freeze-Dry", () => { it("should deal 2x damage to pure water types", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -50,7 +50,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemySpecies(SpeciesId.WINGULL); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -64,7 +64,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemySpecies(SpeciesId.VOLCANION); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -85,7 +85,7 @@ describe("Moves - Freeze-Dry", () => { .moveset([MoveId.SOAK, MoveId.FREEZE_DRY]); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.SOAK); @@ -103,7 +103,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemySpecies(SpeciesId.QUAGSIRE); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FORESTS_CURSE); @@ -120,7 +120,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemySpecies(SpeciesId.SKARMORY); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.teraType = PokemonType.WATER; enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); @@ -136,7 +136,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemySpecies(SpeciesId.PELIPPER); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.teraType = PokemonType.FIRE; enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); @@ -152,7 +152,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemySpecies(SpeciesId.TERAPAGOS).enemyAbility(AbilityId.TERA_SHELL); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.SOAK); @@ -169,7 +169,7 @@ describe("Moves - Freeze-Dry", () => { game.override.ability(AbilityId.NORMALIZE); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -183,7 +183,7 @@ describe("Moves - Freeze-Dry", () => { game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.SHIELDON); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -197,7 +197,7 @@ describe("Moves - Freeze-Dry", () => { game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.JELLICENT); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -211,7 +211,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemyMoveset([MoveId.ELECTRIFY]); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -225,7 +225,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(SpeciesId.GYARADOS); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -239,7 +239,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(SpeciesId.BARBOACH); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -253,7 +253,7 @@ describe("Moves - Freeze-Dry", () => { game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(SpeciesId.FLAPPLE); await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -269,7 +269,7 @@ describe("Moves - Freeze-Dry", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -285,7 +285,7 @@ describe("Moves - Freeze-Dry", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -301,7 +301,7 @@ describe("Moves - Freeze-Dry", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); @@ -318,7 +318,7 @@ describe("Moves - Freeze-Dry", () => { await game.challengeMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(MoveId.FREEZE_DRY); diff --git a/test/moves/freezy-frost.test.ts b/test/moves/freezy-frost.test.ts index 8a8a47013ca..e25c29c9302 100644 --- a/test/moves/freezy-frost.test.ts +++ b/test/moves/freezy-frost.test.ts @@ -37,8 +37,8 @@ describe("Moves - Freezy Frost", () => { it("should clear stat changes of user and opponent", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const user = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const user = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.HOWL); await game.toNextTurn(); @@ -56,7 +56,7 @@ describe("Moves - Freezy Frost", () => { it("should clear all stat changes even when enemy uses the move", async () => { game.override.enemyMoveset(MoveId.FREEZY_FROST); await game.classicMode.startBattle([SpeciesId.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it. - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); game.move.select(MoveId.HOWL); await game.toNextTurn(); diff --git a/test/moves/fusion-bolt.test.ts b/test/moves/fusion-bolt.test.ts index aa8073c4c1f..9594dcfd15c 100644 --- a/test/moves/fusion-bolt.test.ts +++ b/test/moves/fusion-bolt.test.ts @@ -37,7 +37,7 @@ describe("Moves - Fusion Bolt", () => { it("should not make contact", async () => { await game.classicMode.startBattle([SpeciesId.ZEKROM]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); const initialHp = partyMember.hp; game.move.select(fusionBolt); diff --git a/test/moves/fusion-flare.test.ts b/test/moves/fusion-flare.test.ts index be8ce4eeec4..dd8ae11683d 100644 --- a/test/moves/fusion-flare.test.ts +++ b/test/moves/fusion-flare.test.ts @@ -37,7 +37,7 @@ describe("Moves - Fusion Flare", () => { it("should thaw freeze status condition", async () => { await game.classicMode.startBattle([SpeciesId.RESHIRAM]); - const partyMember = game.scene.getPlayerPokemon()!; + const partyMember = game.field.getPlayerPokemon(); game.move.select(fusionFlare); diff --git a/test/moves/geomancy.test.ts b/test/moves/geomancy.test.ts index b01ad756f9b..df5bb1b4b97 100644 --- a/test/moves/geomancy.test.ts +++ b/test/moves/geomancy.test.ts @@ -37,7 +37,7 @@ describe("Moves - Geomancy", () => { it("should boost the user's stats on the second turn of use", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); const affectedStats: EffectiveStat[] = [Stat.SPATK, Stat.SPDEF, Stat.SPD]; game.move.select(MoveId.GEOMANCY); @@ -58,7 +58,7 @@ describe("Moves - Geomancy", () => { it("should execute over 2 turns between waves", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); const affectedStats: EffectiveStat[] = [Stat.SPATK, Stat.SPDEF, Stat.SPD]; game.move.select(MoveId.GEOMANCY); diff --git a/test/moves/gigaton-hammer.test.ts b/test/moves/gigaton-hammer.test.ts index 6043f9d7f51..e5009310de6 100644 --- a/test/moves/gigaton-hammer.test.ts +++ b/test/moves/gigaton-hammer.test.ts @@ -35,7 +35,7 @@ describe("Moves - Gigaton Hammer", () => { it("can't be used two turns in a row", async () => { await game.classicMode.startBattle(); - const enemy1 = game.scene.getEnemyPokemon()!; + const enemy1 = game.field.getEnemyPokemon(); game.move.select(MoveId.GIGATON_HAMMER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -49,7 +49,7 @@ describe("Moves - Gigaton Hammer", () => { game.move.select(MoveId.GIGATON_HAMMER); await game.toNextTurn(); - const enemy2 = game.scene.getEnemyPokemon()!; + const enemy2 = game.field.getEnemyPokemon(); expect(enemy2.hp).toBe(enemy2.getMaxHp()); }); @@ -58,7 +58,7 @@ describe("Moves - Gigaton Hammer", () => { game.override.startingWave(4); await game.classicMode.startBattle(); - const enemy1 = game.scene.getEnemyPokemon()!; + const enemy1 = game.field.getEnemyPokemon(); game.move.select(MoveId.GIGATON_HAMMER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -72,7 +72,7 @@ describe("Moves - Gigaton Hammer", () => { game.move.select(MoveId.GIGATON_HAMMER); await game.toNextTurn(); - const enemy2 = game.scene.getEnemyPokemon()!; + const enemy2 = game.field.getEnemyPokemon(); expect(enemy2.hp).toBeLessThan(enemy2.getMaxHp()); }); diff --git a/test/moves/glaive-rush.test.ts b/test/moves/glaive-rush.test.ts index f20abd68500..c16bd338932 100644 --- a/test/moves/glaive-rush.test.ts +++ b/test/moves/glaive-rush.test.ts @@ -35,7 +35,7 @@ describe("Moves - Glaive Rush", () => { it("takes double damage from attacks", async () => { await game.classicMode.startBattle([SpeciesId.KLINK]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1000; game.move.select(MoveId.SHADOW_SNEAK); @@ -50,7 +50,7 @@ describe("Moves - Glaive Rush", () => { it("always gets hit by attacks", async () => { await game.classicMode.startBattle([SpeciesId.KLINK]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1000; allMoves[MoveId.AVALANCHE].accuracy = 0; @@ -63,8 +63,8 @@ describe("Moves - Glaive Rush", () => { game.override.startingHeldItems([{ name: "MULTI_LENS", count: 2 }]).enemyMoveset([MoveId.AVALANCHE]); await game.classicMode.startBattle([SpeciesId.KLINK]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1000; player.hp = 1000; @@ -83,8 +83,8 @@ describe("Moves - Glaive Rush", () => { game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); await game.classicMode.startBattle([SpeciesId.KLINK]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1000; player.hp = 1000; @@ -108,8 +108,8 @@ describe("Moves - Glaive Rush", () => { game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); await game.classicMode.startBattle([SpeciesId.KLINK, SpeciesId.FEEBAS]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1000; allMoves[MoveId.SHADOW_SNEAK].accuracy = 0; @@ -131,8 +131,8 @@ describe("Moves - Glaive Rush", () => { .enemyMoveset([MoveId.GLAIVE_RUSH, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.KLINK]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.hp = 1000; player.hp = 1000; diff --git a/test/moves/growth.test.ts b/test/moves/growth.test.ts index 5737f32d891..4c892f0dee2 100644 --- a/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -35,7 +35,7 @@ describe("Moves - Growth", () => { it("should raise SPATK stat stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.MIGHTYENA]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index 6f5df077d9f..cc75024bfbf 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -1,7 +1,9 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#enums/battler-index"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; +import { WeatherType } from "#enums/weather-type"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,68 +25,66 @@ describe("Moves - Grudge", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([MoveId.EMBER, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .criticalHits(false) - .enemySpecies(SpeciesId.SHEDINJA) - .enemyAbility(AbilityId.WONDER_GUARD) - .enemyMoveset([MoveId.GRUDGE, MoveId.SPLASH]); + .enemySpecies(SpeciesId.RATTATA) + .startingLevel(100) + .enemyAbility(AbilityId.NO_GUARD); }); - it("should reduce the PP of the Pokemon's move to 0 when the user has fainted", async () => { + it("should reduce the PP of an attack that faints the user to 0", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(MoveId.EMBER); - await game.move.selectEnemyMove(MoveId.GRUDGE); + const feebas = game.field.getPlayerPokemon(); + const ratatta = game.field.getEnemyPokemon(); + + game.move.use(MoveId.GUILLOTINE); + await game.move.forceEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("BerryPhase"); + await game.phaseInterceptor.to("FaintPhase"); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.EMBER); - - expect(playerMove?.getPpRatio()).toBe(0); + // Ratatta should have fainted and consumed all of Guillotine's PP + expect(ratatta).toHaveFainted(); + expect(feebas).toHaveUsedPP(MoveId.GUILLOTINE, "all"); }); it("should remain in effect until the user's next move", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(MoveId.SPLASH); - await game.move.selectEnemyMove(MoveId.GRUDGE); + const feebas = game.field.getPlayerPokemon(); + const ratatta = game.field.getEnemyPokemon(); + + game.move.use(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(MoveId.EMBER); - await game.move.selectEnemyMove(MoveId.SPLASH); + expect(ratatta).toHaveBattlerTag(BattlerTagType.GRUDGE); + + game.move.use(MoveId.GUILLOTINE); + await game.move.forceEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); - await game.phaseInterceptor.to("BerryPhase"); + await game.toEndOfTurn(); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.EMBER); - - expect(playerMove?.getPpRatio()).toBe(0); + expect(ratatta).toHaveFainted(); + expect(feebas).toHaveUsedPP(MoveId.GUILLOTINE, "all"); }); - it("should not reduce the opponent's PP if the user dies to weather/indirect damage", async () => { + it("should not reduce PP if the user dies to weather/indirect damage", async () => { // Opponent will be reduced to 1 HP by False Swipe, then faint to Sandstorm - game.override - .moveset([MoveId.FALSE_SWIPE]) - .startingLevel(100) - .ability(AbilityId.SAND_STREAM) - .enemySpecies(SpeciesId.RATTATA); - await game.classicMode.startBattle([SpeciesId.GEODUDE]); + game.override.weather(WeatherType.SANDSTORM); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemyPokemon = game.scene.getEnemyPokemon(); - const playerPokemon = game.scene.getPlayerPokemon(); + const feebas = game.field.getPlayerPokemon(); + const ratatta = game.field.getEnemyPokemon(); - game.move.select(MoveId.FALSE_SWIPE); - await game.move.selectEnemyMove(MoveId.GRUDGE); + game.move.use(MoveId.FALSE_SWIPE); + await game.move.forceEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("BerryPhase"); + await game.toEndOfTurn(); - expect(enemyPokemon?.isFainted()).toBe(true); - - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.FALSE_SWIPE); - expect(playerMove?.getPpRatio()).toBeGreaterThan(0); + expect(ratatta).toHaveFainted(); + expect(feebas).toHaveUsedPP(MoveId.FALSE_SWIPE, 1); }); }); diff --git a/test/moves/guard-split.test.ts b/test/moves/guard-split.test.ts index fa5dc162a6c..316807f68aa 100644 --- a/test/moves/guard-split.test.ts +++ b/test/moves/guard-split.test.ts @@ -36,8 +36,8 @@ describe("Moves - Guard Split", () => { game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.INDEEDEE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const avgDef = Math.floor((player.getStat(Stat.DEF, false) + enemy.getStat(Stat.DEF, false)) / 2); const avgSpDef = Math.floor((player.getStat(Stat.SPDEF, false) + enemy.getStat(Stat.SPDEF, false)) / 2); @@ -56,8 +56,8 @@ describe("Moves - Guard Split", () => { game.override.enemyMoveset([MoveId.GUARD_SPLIT]); await game.classicMode.startBattle([SpeciesId.INDEEDEE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const avgDef = Math.floor((player.getStat(Stat.DEF, false) + enemy.getStat(Stat.DEF, false)) / 2); const avgSpDef = Math.floor((player.getStat(Stat.SPDEF, false) + enemy.getStat(Stat.SPDEF, false)) / 2); diff --git a/test/moves/guard-swap.test.ts b/test/moves/guard-swap.test.ts index e7f8ed1df91..4d30c437a66 100644 --- a/test/moves/guard-swap.test.ts +++ b/test/moves/guard-swap.test.ts @@ -36,8 +36,8 @@ describe("Moves - Guard Swap", () => { it("should swap the user's DEF and SPDEF stat stages with the target's", async () => { await game.classicMode.startBattle([SpeciesId.INDEEDEE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); diff --git a/test/moves/hard-press.test.ts b/test/moves/hard-press.test.ts index f269373e697..70563052b98 100644 --- a/test/moves/hard-press.test.ts +++ b/test/moves/hard-press.test.ts @@ -49,7 +49,7 @@ describe("Moves - Hard Press", () => { it("should return 50 power if target HP ratio is at 50%", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); const targetHpRatio = 0.5; - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); @@ -62,7 +62,7 @@ describe("Moves - Hard Press", () => { it("should return 1 power if target HP ratio is at 1%", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); const targetHpRatio = 0.01; - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); @@ -75,7 +75,7 @@ describe("Moves - Hard Press", () => { it("should return 1 power if target HP ratio is less than 1%", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); const targetHpRatio = 0.005; - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); diff --git a/test/moves/haze.test.ts b/test/moves/haze.test.ts index 179a06fba09..1e16b499fa2 100644 --- a/test/moves/haze.test.ts +++ b/test/moves/haze.test.ts @@ -36,8 +36,8 @@ describe("Moves - Haze", () => { it("should reset all stat changes of all Pokemon on field", async () => { await game.classicMode.startBattle([SpeciesId.RATTATA]); - const user = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const user = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); expect(user.getStatStage(Stat.ATK)).toBe(0); expect(enemy.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/moves/heal-block.test.ts b/test/moves/heal-block.test.ts index fc814fda4bc..4c8e6395171 100644 --- a/test/moves/heal-block.test.ts +++ b/test/moves/heal-block.test.ts @@ -38,8 +38,8 @@ describe("Moves - Heal Block", () => { it("shouldn't stop damage from HP-drain attacks, just HP restoration", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); player.damageAndUpdate(player.getMaxHp() - 1); @@ -56,8 +56,8 @@ describe("Moves - Heal Block", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.ABSORB); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -70,7 +70,7 @@ describe("Moves - Heal Block", () => { it("should prevent Wish from restoring HP", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const player = game.field.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.hp = 1; @@ -94,7 +94,7 @@ describe("Moves - Heal Block", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.getMaxHp() - 1); @@ -107,7 +107,7 @@ describe("Moves - Heal Block", () => { it("should prevent healing from heal-over-time moves", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.getMaxHp() - 1); @@ -123,7 +123,7 @@ describe("Moves - Heal Block", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.getMaxHp() - 1); @@ -138,7 +138,7 @@ describe("Moves - Heal Block", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.damageAndUpdate(player.getMaxHp() - 1); game.move.select(MoveId.SPLASH); diff --git a/test/moves/heart-swap.test.ts b/test/moves/heart-swap.test.ts index e876ec06646..f192f74558d 100644 --- a/test/moves/heart-swap.test.ts +++ b/test/moves/heart-swap.test.ts @@ -36,8 +36,8 @@ describe("Moves - Heart Swap", () => { it("should swap all of the user's stat stages with the target's", async () => { await game.classicMode.startBattle([SpeciesId.MANAPHY]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); diff --git a/test/moves/hyper-beam.test.ts b/test/moves/hyper-beam.test.ts index 510dac5f662..c61d503d627 100644 --- a/test/moves/hyper-beam.test.ts +++ b/test/moves/hyper-beam.test.ts @@ -40,8 +40,8 @@ describe("Moves - Hyper Beam", () => { it("should force the user to recharge on the next turn (and only that turn)", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.HYPER_BEAM); diff --git a/test/moves/imprison.test.ts b/test/moves/imprison.test.ts index ed2213bbc7b..3e971707d6e 100644 --- a/test/moves/imprison.test.ts +++ b/test/moves/imprison.test.ts @@ -33,7 +33,7 @@ describe("Moves - Imprison", () => { it("Pokemon under Imprison cannot use shared moves", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.TRANSFORM); await game.move.selectEnemyMove(MoveId.IMPRISON); @@ -60,7 +60,7 @@ describe("Moves - Imprison", () => { it("Imprison applies to Pokemon switched into Battle", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]); - const playerPokemon1 = game.scene.getPlayerPokemon()!; + const playerPokemon1 = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.IMPRISON); @@ -74,7 +74,7 @@ describe("Moves - Imprison", () => { game.doSwitchPokemon(1); await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - const playerPokemon2 = game.scene.getPlayerPokemon()!; + const playerPokemon2 = game.field.getPlayerPokemon(); const imprisonBattlerTag2 = playerPokemon2.getTag(BattlerTagType.IMPRISON); expect(playerPokemon1).not.toEqual(playerPokemon2); expect(imprisonBattlerTag2).toBeDefined(); @@ -84,8 +84,8 @@ describe("Moves - Imprison", () => { game.override.moveset([MoveId.SPLASH, MoveId.IMPRISON]); await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.IMPRISON); await game.move.selectEnemyMove(MoveId.GROWL); await game.toNextTurn(); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index c34626f5e76..27318105783 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -50,7 +50,7 @@ describe("Moves - Instruct", () => { game.override.moveset(MoveId.INSTRUCT).enemyLevel(1000); // ensures shuckle no die await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.changeMoveset(enemy, MoveId.SONIC_BOOM); game.move.select(MoveId.INSTRUCT); @@ -60,7 +60,7 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("MovePhase"); // enemy attacks us await game.phaseInterceptor.to("MovePhase", false); // instruct let currentPhase = game.scene.phaseManager.getCurrentPhase() as MovePhase; - expect(currentPhase.pokemon).toBe(game.scene.getPlayerPokemon()); + expect(currentPhase.pokemon).toBe(game.field.getPlayerPokemon()); await game.phaseInterceptor.to("MoveEndPhase"); await game.phaseInterceptor.to("MovePhase", false); // enemy repeats move @@ -70,14 +70,14 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("TurnEndPhase", false); instructSuccess(enemy, MoveId.SONIC_BOOM); - expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); + expect(game.field.getPlayerPokemon().getInverseHp()).toBe(40); }); it("should repeat enemy's move through substitute", async () => { game.override.moveset([MoveId.INSTRUCT, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.changeMoveset(enemy, [MoveId.SONIC_BOOM, MoveId.SUBSTITUTE]); game.move.select(MoveId.SPLASH); @@ -90,8 +90,8 @@ describe("Moves - Instruct", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); - instructSuccess(game.scene.getEnemyPokemon()!, MoveId.SONIC_BOOM); - expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); + instructSuccess(game.field.getEnemyPokemon(), MoveId.SONIC_BOOM); + expect(game.field.getPlayerPokemon().getInverseHp()).toBe(40); }); it("should repeat ally's attack on enemy", async () => { @@ -116,7 +116,7 @@ describe("Moves - Instruct", () => { game.override.moveset(MoveId.INSTRUCT).enemyLevel(5); await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.changeMoveset(enemy, [MoveId.GIGATON_HAMMER, MoveId.BLOOD_MOON]); game.move.select(MoveId.INSTRUCT); @@ -124,7 +124,7 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("BerryPhase"); instructSuccess(enemy, MoveId.GIGATON_HAMMER); - expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(2); + expect(game.field.getPlayerPokemon().turnData.attacksReceived.length).toBe(2); }); it("should add moves to move queue for copycat", async () => { @@ -141,7 +141,7 @@ describe("Moves - Instruct", () => { instructSuccess(enemy1, MoveId.WATER_GUN); // amoonguss gets hit by water gun thrice; once by original attack, once by instructed use and once by copycat - expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(3); + expect(game.field.getPlayerPokemon().turnData.attacksReceived.length).toBe(3); }); it("should fail on metronomed moves, even if also in moveset", async () => { @@ -175,16 +175,16 @@ describe("Moves - Instruct", () => { await game.move.forceStatusActivation(false); await game.phaseInterceptor.to("TurnEndPhase", false); - const moveHistory = game.scene.getEnemyPokemon()?.getLastXMoves(-1)!; + const moveHistory = game.field.getEnemyPokemon().getLastXMoves(-1)!; expect(moveHistory.map(m => m.move)).toEqual([MoveId.SONIC_BOOM, MoveId.NONE, MoveId.SONIC_BOOM]); - expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); + expect(game.field.getPlayerPokemon().getInverseHp()).toBe(40); }); it("should not repeat enemy's out of pp move", async () => { game.override.moveset(MoveId.INSTRUCT).enemySpecies(SpeciesId.UNOWN); await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.changeMoveset(enemyPokemon, MoveId.HIDDEN_POWER); const moveUsed = enemyPokemon.moveset.find(m => m?.moveId === MoveId.HIDDEN_POWER)!; moveUsed.ppUsed = moveUsed.getMovePp() - 1; @@ -258,7 +258,7 @@ describe("Moves - Instruct", () => { game.override.enemyMoveset(MoveId.INSTRUCT).enemySpecies(SpeciesId.UNOWN); await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.TOXICROAK]); - const amoonguss = game.scene.getPlayerPokemon()!; + const amoonguss = game.field.getPlayerPokemon(); game.move.changeMoveset(amoonguss, MoveId.SEED_BOMB); amoonguss.pushMoveHistory({ @@ -284,7 +284,7 @@ describe("Moves - Instruct", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should attempt to call enemy's disabled move, but move use itself should fail", async () => { @@ -310,7 +310,7 @@ describe("Moves - Instruct", () => { game.override.moveset([MoveId.INSTRUCT]); await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.changeMoveset(enemy, MoveId.PROTECT); game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -325,8 +325,8 @@ describe("Moves - Instruct", () => { game.override.moveset([MoveId.INSTRUCT]).enemyMoveset([MoveId.SONIC_BOOM, MoveId.HYPER_BEAM]); await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.pushMoveHistory({ move: MoveId.SONIC_BOOM, targets: [BattlerIndex.PLAYER], @@ -353,7 +353,7 @@ describe("Moves - Instruct", () => { game.override.enemyMoveset(MoveId.INSTRUCT); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const regieleki = game.scene.getPlayerPokemon()!; + const regieleki = game.field.getPlayerPokemon(); regieleki.pushMoveHistory({ move: MoveId.ELECTRO_DRIFT, targets: [BattlerIndex.PLAYER], @@ -371,7 +371,7 @@ describe("Moves - Instruct", () => { game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]).moveset(MoveId.INSTRUCT); await game.classicMode.startBattle([SpeciesId.LUCARIO, SpeciesId.BANETTE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.pushMoveHistory({ move: MoveId.WHIRLWIND, targets: [BattlerIndex.PLAYER], @@ -387,7 +387,7 @@ describe("Moves - Instruct", () => { const instructedMove = enemyPokemon.getLastXMoves(-1)[1]; expect(instructedMove.result).toBe(MoveResult.SUCCESS); expect(instructedMove.move).toBe(MoveId.WHIRLWIND); - expect(game.scene.getPlayerPokemon()?.species.speciesId).toBe(SpeciesId.BANETTE); + expect(game.field.getPlayerPokemon().species.speciesId).toBe(SpeciesId.BANETTE); }); it("should respect moves' original priority for psychic terrain", async () => { @@ -559,7 +559,7 @@ describe("Moves - Instruct", () => { .enemyMoveset(MoveId.BULLET_SEED); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const bulbasaur = game.scene.getPlayerPokemon()!; + const bulbasaur = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); diff --git a/test/moves/jaw-lock.test.ts b/test/moves/jaw-lock.test.ts index 919e07ece9a..441c74c7356 100644 --- a/test/moves/jaw-lock.test.ts +++ b/test/moves/jaw-lock.test.ts @@ -42,8 +42,8 @@ describe("Moves - Jaw Lock", () => { it("should trap the move's user and target", async () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -63,8 +63,8 @@ describe("Moves - Jaw Lock", () => { game.override.enemyLevel(1); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -88,8 +88,8 @@ describe("Moves - Jaw Lock", () => { it("should only trap the user until the target faints", async () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -140,8 +140,8 @@ describe("Moves - Jaw Lock", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.JAW_LOCK); diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts index e6f4faacd09..ca4ed6726ed 100644 --- a/test/moves/last-resort.test.ts +++ b/test/moves/last-resort.test.ts @@ -13,7 +13,7 @@ describe("Moves - Last Resort", () => { let game: GameManager; function expectLastResortFail() { - expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( + expect(game.field.getPlayerPokemon().getLastXMoves()[0]).toEqual( expect.objectContaining({ move: MoveId.LAST_RESORT, result: MoveResult.FAIL, @@ -45,7 +45,7 @@ describe("Moves - Last Resort", () => { game.override.moveset([MoveId.LAST_RESORT, MoveId.SPLASH, MoveId.GROWL, MoveId.GROWTH]); await game.classicMode.startBattle([SpeciesId.BLISSEY]); - const blissey = game.scene.getPlayerPokemon()!; + const blissey = game.field.getPlayerPokemon(); expect(blissey).toBeDefined(); // Last resort by itself @@ -69,7 +69,7 @@ describe("Moves - Last Resort", () => { blissey.pushMoveHistory({ move: MoveId.GROWTH, targets: [BattlerIndex.PLAYER], useMode: MoveUseMode.NORMAL }); game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( + expect(game.field.getPlayerPokemon().getLastXMoves()[0]).toEqual( expect.objectContaining({ move: MoveId.LAST_RESORT, result: MoveResult.SUCCESS, @@ -114,7 +114,7 @@ describe("Moves - Last Resort", () => { game.move.select(MoveId.SLEEP_TALK); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.getLastXMoves(-1)).toEqual([ + expect(game.field.getPlayerPokemon().getLastXMoves(-1)).toEqual([ expect.objectContaining({ move: MoveId.LAST_RESORT, result: MoveResult.SUCCESS, @@ -136,15 +136,15 @@ describe("Moves - Last Resort", () => { await game.doKillOpponents(); await game.toNextWave(); - const oldMoveHistory = game.scene.getPlayerPokemon()?.summonData.moveHistory; + const oldMoveHistory = game.field.getPlayerPokemon().summonData.moveHistory; await game.reload.reloadSession(); - const newMoveHistory = game.scene.getPlayerPokemon()?.summonData.moveHistory; + const newMoveHistory = game.field.getPlayerPokemon().summonData.moveHistory; expect(oldMoveHistory).toEqual(newMoveHistory); // use last resort and it should kill the karp just fine game.move.select(MoveId.LAST_RESORT); - game.scene.getEnemyPokemon()!.hp = 1; + game.field.getEnemyPokemon().hp = 1; await game.phaseInterceptor.to("TurnEndPhase"); expect(game.isVictory()).toBe(true); diff --git a/test/moves/light-screen.test.ts b/test/moves/light-screen.test.ts index 04f7f59f184..c8282037f20 100644 --- a/test/moves/light-screen.test.ts +++ b/test/moves/light-screen.test.ts @@ -53,8 +53,8 @@ describe("Moves - Light Screen", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -72,8 +72,8 @@ describe("Moves - Light Screen", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -88,8 +88,8 @@ describe("Moves - Light Screen", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -106,8 +106,8 @@ describe("Moves - Light Screen", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); expect(mockedDmg).toBe(allMoves[moveToUse].power); diff --git a/test/moves/lucky-chant.test.ts b/test/moves/lucky-chant.test.ts index 1128f79b1d2..7be75631494 100644 --- a/test/moves/lucky-chant.test.ts +++ b/test/moves/lucky-chant.test.ts @@ -37,7 +37,7 @@ describe("Moves - Lucky Chant", () => { game.override.criticalHits(true); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const charizard = game.scene.getPlayerPokemon()!; + const charizard = game.field.getPlayerPokemon(); expect(charizard).toBeDefined(); const critSpy = vi.spyOn(charizard, "getCriticalHitResult"); // called on the defender (ie player) @@ -59,7 +59,7 @@ describe("Moves - Lucky Chant", () => { game.override.enemyMoveset(MoveId.FLOWER_TRICK); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const charizard = game.scene.getPlayerPokemon()!; + const charizard = game.field.getPlayerPokemon(); expect(charizard).toBeDefined(); game.move.select(MoveId.SPLASH); @@ -79,7 +79,7 @@ describe("Moves - Lucky Chant", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const charizard = game.scene.getPlayerPokemon()!; + const charizard = game.field.getPlayerPokemon(); expect(charizard).toBeDefined(); game.move.select(MoveId.FOLLOW_ME, BattlerIndex.PLAYER); diff --git a/test/moves/magic-coat.test.ts b/test/moves/magic-coat.test.ts index 2ed09499e95..7c1c703119d 100644 --- a/test/moves/magic-coat.test.ts +++ b/test/moves/magic-coat.test.ts @@ -43,7 +43,7 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getEnemyPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if called again in the same turn due to moves like instruct", async () => { @@ -52,7 +52,7 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.INSTRUCT); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getEnemyPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should not reflect moves used on the next turn", async () => { @@ -68,7 +68,7 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.GROWL); await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should reflect basic status moves", async () => { @@ -77,7 +77,7 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should individually bounce back multi-target moves when used by both targets in doubles", async () => { @@ -110,13 +110,13 @@ describe("Moves - Magic Coat", () => { it("should still bounce back a move that would otherwise fail", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); + game.field.getEnemyPokemon().setStatStage(Stat.ATK, -6); game.override.moveset([MoveId.GROWL]); game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce back a move that was just bounced", async () => { @@ -143,7 +143,7 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should still bounce back a move from a mold breaker user", async () => { @@ -153,8 +153,8 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(0); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should only bounce spikes back once when both targets use magic coat in doubles", async () => { @@ -175,7 +175,7 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); + expect(game.field.getEnemyPokemon().getTag(BattlerTagType.CURSED)).toBeDefined(); }); // TODO: encore is failing if the last move was virtual. @@ -186,7 +186,7 @@ describe("Moves - Magic Coat", () => { .enemyAbility(AbilityId.MAGIC_BOUNCE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // turn 1 game.move.select(MoveId.GROWL); @@ -226,7 +226,7 @@ describe("Moves - Magic Coat", () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(stomping_tantrum, "calculateBattlePower"); game.move.select(MoveId.SPORE); @@ -252,34 +252,34 @@ describe("Moves - Magic Coat", () => { // Turn 1 - thunder wave immunity test game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + expect(game.field.getPlayerPokemon().status).toBeUndefined(); // Turn 2 - soundproof immunity test game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(0); }); it("should bounce back a move before the accuracy check", async () => { game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const attacker = game.scene.getPlayerPokemon()!; + const attacker = game.field.getPlayerPokemon(); vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + expect(game.field.getPlayerPokemon().status?.effect).toBe(StatusEffect.SLEEP); }); it("should take the accuracy of the magic bounce user into account", async () => { game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const opponent = game.scene.getEnemyPokemon()!; + const opponent = game.field.getEnemyPokemon(); vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + expect(game.field.getPlayerPokemon().status).toBeUndefined(); }); }); diff --git a/test/moves/make-it-rain.test.ts b/test/moves/make-it-rain.test.ts index ab242d0c3a0..a75c1ae59f8 100644 --- a/test/moves/make-it-rain.test.ts +++ b/test/moves/make-it-rain.test.ts @@ -37,7 +37,7 @@ describe("Moves - Make It Rain", () => { it("should only lower SPATK stat stage by 1 once in a double battle", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.MAKE_IT_RAIN); game.move.select(MoveId.SPLASH, 1); @@ -54,8 +54,8 @@ describe("Moves - Make It Rain", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.MAKE_IT_RAIN); @@ -70,7 +70,7 @@ describe("Moves - Make It Rain", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const enemyPokemon = game.scene.getEnemyField(); game.move.select(MoveId.MAKE_IT_RAIN); @@ -85,7 +85,7 @@ describe("Moves - Make It Rain", () => { it("should lower SPATK stat stage by 1 if it only hits the second target", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.MAKE_IT_RAIN); game.move.select(MoveId.SPLASH, 1); diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index e39d24c81db..2215c18f451 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -44,8 +44,8 @@ describe("Moves - Metronome", () => { it("should have one semi-invulnerable turn and deal damage on the second turn when a semi-invulnerable move is called", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.DIVE); game.move.select(MoveId.METRONOME); @@ -60,7 +60,7 @@ describe("Moves - Metronome", () => { it("should apply secondary effects of a move", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.WOOD_HAMMER); game.move.select(MoveId.METRONOME); @@ -71,7 +71,7 @@ describe("Moves - Metronome", () => { it("should recharge after using recharge move", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.HYPER_BEAM); vi.spyOn(allMoves[MoveId.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); @@ -137,7 +137,7 @@ describe("Moves - Metronome", () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.ROAR); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.METRONOME); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/miracle-eye.test.ts b/test/moves/miracle-eye.test.ts index 9ed3824fc28..8ea6653eeb4 100644 --- a/test/moves/miracle-eye.test.ts +++ b/test/moves/miracle-eye.test.ts @@ -34,7 +34,7 @@ describe("Moves - Miracle Eye", () => { it("should allow Psychic moves to hit Dark types", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.CONFUSION); await game.toNextTurn(); diff --git a/test/moves/mirror-move.test.ts b/test/moves/mirror-move.test.ts index 0253932026b..50ea4274f49 100644 --- a/test/moves/mirror-move.test.ts +++ b/test/moves/mirror-move.test.ts @@ -56,7 +56,7 @@ describe("Moves - Mirror Move", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.SPDEF)).toBe(-2); + expect(game.field.getEnemyPokemon().getStatStage(Stat.SPDEF)).toBe(-2); }); it("should be able to copy status moves", async () => { @@ -67,7 +67,7 @@ describe("Moves - Mirror Move", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); it("should fail if the target has not used any moves", async () => { @@ -77,6 +77,6 @@ describe("Moves - Mirror Move", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); }); diff --git a/test/moves/nightmare.test.ts b/test/moves/nightmare.test.ts index 7b3772d8b71..0b7542f89d1 100644 --- a/test/moves/nightmare.test.ts +++ b/test/moves/nightmare.test.ts @@ -36,7 +36,7 @@ describe("Moves - Nightmare", () => { it("lowers enemy hp by 1/4 each turn while asleep", async () => { await game.classicMode.startBattle([SpeciesId.HYPNO]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const enemyMaxHP = enemyPokemon.hp; game.move.select(MoveId.NIGHTMARE); diff --git a/test/moves/obstruct.test.ts b/test/moves/obstruct.test.ts index 9abc60be129..bc03075b2cc 100644 --- a/test/moves/obstruct.test.ts +++ b/test/moves/obstruct.test.ts @@ -37,8 +37,8 @@ describe("Moves - Obstruct", () => { game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); expect(player.isFullHp()).toBe(true); expect(enemy.getStatStage(Stat.DEF)).toBe(-2); @@ -51,8 +51,8 @@ describe("Moves - Obstruct", () => { await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.isFullHp()).toBe(true); @@ -66,8 +66,8 @@ describe("Moves - Obstruct", () => { game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); expect(player.isFullHp()).toBe(true); expect(enemy.getStatStage(Stat.DEF)).toBe(0); @@ -80,7 +80,7 @@ describe("Moves - Obstruct", () => { game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); expect(player.getStatStage(Stat.ATK)).toBe(-1); }); @@ -92,6 +92,6 @@ describe("Moves - Obstruct", () => { game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.DEF)).toBe(0); + expect(game.field.getEnemyPokemon().getStatStage(Stat.DEF)).toBe(0); }); }); diff --git a/test/moves/octolock.test.ts b/test/moves/octolock.test.ts index 09992dd52c7..f51c972f169 100644 --- a/test/moves/octolock.test.ts +++ b/test/moves/octolock.test.ts @@ -37,7 +37,7 @@ describe("Moves - Octolock", () => { it("lowers DEF and SPDEF stat stages of the target Pokemon by 1 each turn", async () => { await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // use Octolock and advance to init phase of next turn to check for stat changes game.move.select(MoveId.OCTOLOCK); @@ -58,7 +58,7 @@ describe("Moves - Octolock", () => { game.override.enemyAbility(AbilityId.BIG_PECKS); await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // use Octolock and advance to init phase of next turn to check for stat changes game.move.select(MoveId.OCTOLOCK); @@ -72,7 +72,7 @@ describe("Moves - Octolock", () => { game.override.enemyAbility(AbilityId.WHITE_SMOKE); await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // use Octolock and advance to init phase of next turn to check for stat changes game.move.select(MoveId.OCTOLOCK); @@ -86,7 +86,7 @@ describe("Moves - Octolock", () => { game.override.enemyAbility(AbilityId.CLEAR_BODY); await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // use Octolock and advance to init phase of next turn to check for stat changes game.move.select(MoveId.OCTOLOCK); @@ -99,7 +99,7 @@ describe("Moves - Octolock", () => { it("traps the target pokemon", async () => { await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // before Octolock - enemy should not be trapped expect(enemyPokemon.findTag(t => t instanceof TrappedTag)).toBeUndefined(); @@ -115,7 +115,7 @@ describe("Moves - Octolock", () => { game.override.enemyMoveset(MoveId.OCTOLOCK); await game.classicMode.startBattle([SpeciesId.GASTLY]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // before Octolock - player should not be trapped expect(playerPokemon.findTag(t => t instanceof TrappedTag)).toBeUndefined(); @@ -132,7 +132,7 @@ describe("Moves - Octolock", () => { it("does not work on pokemon with added ghost type via Trick-or-Treat", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); // before Octolock - pokemon should not be trapped expect(enemy.findTag(t => t instanceof TrappedTag)).toBeUndefined(); diff --git a/test/moves/parting-shot.test.ts b/test/moves/parting-shot.test.ts index 7785bdd3a2f..660edc4565a 100644 --- a/test/moves/parting-shot.test.ts +++ b/test/moves/parting-shot.test.ts @@ -38,7 +38,7 @@ describe("Moves - Parting Shot", () => { game.override.enemySpecies(SpeciesId.POOCHYENA).ability(AbilityId.PRANKSTER); await game.classicMode.startBattle([SpeciesId.MURKROW, SpeciesId.MEOWTH]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon).toBeDefined(); game.move.select(MoveId.PARTING_SHOT); @@ -53,7 +53,7 @@ describe("Moves - Parting Shot", () => { game.override.enemySpecies(SpeciesId.GHOLDENGO).enemyAbility(AbilityId.GOOD_AS_GOLD); await game.classicMode.startBattle([SpeciesId.MURKROW, SpeciesId.MEOWTH]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon).toBeDefined(); game.move.select(MoveId.PARTING_SHOT); @@ -97,7 +97,7 @@ describe("Moves - Parting Shot", () => { // set up done await game.phaseInterceptor.to(TurnInitPhase, false); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon).toBeDefined(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-6); @@ -120,7 +120,7 @@ describe("Moves - Parting Shot", () => { game.override.enemySpecies(SpeciesId.ALTARIA).enemyAbility(AbilityId.NONE).enemyMoveset([MoveId.MIST]); await game.classicMode.startBattle([SpeciesId.SNORLAX, SpeciesId.MEOWTH]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon).toBeDefined(); game.move.select(MoveId.PARTING_SHOT); @@ -139,7 +139,7 @@ describe("Moves - Parting Shot", () => { game.override.enemySpecies(SpeciesId.TENTACOOL).enemyAbility(AbilityId.CLEAR_BODY); await game.classicMode.startBattle([SpeciesId.SNORLAX, SpeciesId.MEOWTH]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon).toBeDefined(); game.move.select(MoveId.PARTING_SHOT); @@ -157,7 +157,7 @@ describe("Moves - Parting Shot", () => { async () => { await game.classicMode.startBattle([SpeciesId.MURKROW]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon).toBeDefined(); game.move.select(MoveId.PARTING_SHOT); @@ -186,7 +186,7 @@ describe("Moves - Parting Shot", () => { game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(0); expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MEOWTH); diff --git a/test/moves/plasma-fists.test.ts b/test/moves/plasma-fists.test.ts index 569fb1d5c0d..fb6e46feffa 100644 --- a/test/moves/plasma-fists.test.ts +++ b/test/moves/plasma-fists.test.ts @@ -60,8 +60,8 @@ describe("Moves - Plasma Fists", () => { await game.classicMode.startBattle([SpeciesId.ONIX]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "getMoveType"); game.move.select(MoveId.PLASMA_FISTS); @@ -78,8 +78,8 @@ describe("Moves - Plasma Fists", () => { await game.classicMode.startBattle([SpeciesId.DUSCLOPS]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); vi.spyOn(enemyPokemon, "getMoveType"); game.move.select(MoveId.PLASMA_FISTS); diff --git a/test/moves/pledge-moves.test.ts b/test/moves/pledge-moves.test.ts index c67519d417b..7a9c4112d7d 100644 --- a/test/moves/pledge-moves.test.ts +++ b/test/moves/pledge-moves.test.ts @@ -89,8 +89,8 @@ describe("Moves - Pledge Moves", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.FIRE_PLEDGE); diff --git a/test/moves/pollen-puff.test.ts b/test/moves/pollen-puff.test.ts index ecd208f777b..76732a39c43 100644 --- a/test/moves/pollen-puff.test.ts +++ b/test/moves/pollen-puff.test.ts @@ -53,7 +53,7 @@ describe("Moves - Pollen Puff", () => { game.override.moveset([MoveId.POLLEN_PUFF]).ability(AbilityId.PARENTAL_BOND).enemyLevel(100); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const target = game.scene.getEnemyPokemon()!; + const target = game.field.getEnemyPokemon(); game.move.select(MoveId.POLLEN_PUFF); diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 17f64a95179..cbf70feebe6 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -41,7 +41,7 @@ describe("Moves - Powder", () => { game.override.enemyMoveset([]); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.changeMoveset(enemyPokemon, MoveId.EMBER); game.move.select(MoveId.POWDER); @@ -66,7 +66,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -80,7 +80,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -94,7 +94,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -108,7 +108,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -122,7 +122,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -137,7 +137,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -152,8 +152,8 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); // Turn 1: Roar away 1 opponent game.move.select(MoveId.ROAR, 0, BattlerIndex.ENEMY_2); @@ -184,8 +184,8 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -200,7 +200,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -214,7 +214,7 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER); @@ -227,7 +227,7 @@ describe("Moves - Powder", () => { game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.GRASS_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, 1); @@ -244,7 +244,7 @@ describe("Moves - Powder", () => { game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, 1); @@ -261,7 +261,7 @@ describe("Moves - Powder", () => { game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, 1); diff --git a/test/moves/power-shift.test.ts b/test/moves/power-shift.test.ts index adfd1f0aaa9..84bf6e230d4 100644 --- a/test/moves/power-shift.test.ts +++ b/test/moves/power-shift.test.ts @@ -32,7 +32,7 @@ describe("Moves - Power Shift", () => { it("switches the user's raw Attack stat with its raw Defense stat", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.setStat(Stat.ATK, 10, false); playerPokemon.setStat(Stat.DEF, 20, false); diff --git a/test/moves/power-split.test.ts b/test/moves/power-split.test.ts index 1eaabf6090d..9af57ebb191 100644 --- a/test/moves/power-split.test.ts +++ b/test/moves/power-split.test.ts @@ -36,8 +36,8 @@ describe("Moves - Power Split", () => { game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.INDEEDEE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); @@ -56,8 +56,8 @@ describe("Moves - Power Split", () => { game.override.enemyMoveset([MoveId.POWER_SPLIT]); await game.classicMode.startBattle([SpeciesId.INDEEDEE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); diff --git a/test/moves/power-swap.test.ts b/test/moves/power-swap.test.ts index b25db40e64c..74cf37e33a5 100644 --- a/test/moves/power-swap.test.ts +++ b/test/moves/power-swap.test.ts @@ -36,8 +36,8 @@ describe("Moves - Power Swap", () => { it("should swap the user's ATK and SPATK stat stages with the target's", async () => { await game.classicMode.startBattle([SpeciesId.INDEEDEE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); diff --git a/test/moves/power-trick.test.ts b/test/moves/power-trick.test.ts index 3ddd27212e1..a8013f1882b 100644 --- a/test/moves/power-trick.test.ts +++ b/test/moves/power-trick.test.ts @@ -37,7 +37,7 @@ describe("Moves - Power Trick", () => { it("swaps the user's ATK and DEF stats", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); const baseATK = player.getStat(Stat.ATK, false); const baseDEF = player.getStat(Stat.DEF, false); @@ -53,7 +53,7 @@ describe("Moves - Power Trick", () => { it("resets initial ATK and DEF stat swap when used consecutively", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); const baseATK = player.getStat(Stat.ATK, false); const baseDEF = player.getStat(Stat.DEF, false); @@ -74,7 +74,7 @@ describe("Moves - Power Trick", () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); await game.override.moveset([MoveId.POWER_TRICK, MoveId.BATON_PASS]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.addTag(BattlerTagType.POWER_TRICK); game.move.select(MoveId.BATON_PASS); @@ -82,7 +82,7 @@ describe("Moves - Power Trick", () => { await game.phaseInterceptor.to(TurnEndPhase); - const switchedPlayer = game.scene.getPlayerPokemon()!; + const switchedPlayer = game.field.getPlayerPokemon(); const baseATK = switchedPlayer.getStat(Stat.ATK); const baseDEF = switchedPlayer.getStat(Stat.DEF); @@ -95,14 +95,14 @@ describe("Moves - Power Trick", () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); await game.override.moveset([MoveId.POWER_TRICK, MoveId.TRANSFORM]); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); player.addTag(BattlerTagType.POWER_TRICK); game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); const baseATK = enemy.getStat(Stat.ATK); const baseDEF = enemy.getStat(Stat.DEF); diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index 7da54f268e0..9a4856d0d99 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -1,15 +1,14 @@ -import { ArenaTrapTag } from "#data/arena-tag"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { MoveResult } from "#enums/move-result"; +import { MoveUseMode } from "#enums/move-use-mode"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Protect", () => { let phaserGame: Phaser.Game; @@ -27,90 +26,210 @@ describe("Moves - Protect", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override .battleStyle("single") - .moveset([MoveId.PROTECT]) + .moveset([MoveId.PROTECT, MoveId.SPIKY_SHIELD, MoveId.ENDURE, MoveId.SPLASH]) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset([MoveId.TACKLE]) + .enemyMoveset(MoveId.LUMINA_CRASH) .startingLevel(100) .enemyLevel(100); }); - test("should protect the user from attacks", async () => { + it("should protect the user from attacks and their secondary effects", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const charizard = game.field.getPlayerPokemon(); game.move.select(MoveId.PROTECT); - await game.phaseInterceptor.to("BerryPhase", false); - expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); + expect(charizard.hp).toBe(charizard.getMaxHp()); + expect(charizard.getStatStage(Stat.SPDEF)).toBe(0); + expect(charizard); }); - test("should prevent secondary effects from the opponent's attack", async () => { - game.override.enemyMoveset([MoveId.CEASELESS_EDGE]); - vi.spyOn(allMoves[MoveId.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); - + it.each<{ numTurns: number; chance: number }>([ + { numTurns: 1, chance: 3 }, + { numTurns: 2, chance: 9 }, + { numTurns: 3, chance: 27 }, + { numTurns: 4, chance: 81 }, + ])("should have a 1/$chance success rate after $numTurns successful uses", async ({ numTurns, chance }) => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const charizard = game.scene.getPlayerPokemon()!; + + // mock RNG roll to suceed unless exactly the desired chance is hit + vi.spyOn(charizard, "randBattleSeedInt").mockImplementation(range => (range !== chance ? 0 : 1)); + const conditionSpy = vi.spyOn(allMoves[MoveId.PROTECT]["conditions"][0], "apply"); + + // click protect many times + for (let x = 0; x < numTurns; x++) { + game.move.select(MoveId.PROTECT); + await game.toNextTurn(); + + expect(charizard.hp).toBe(charizard.getMaxHp()); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(conditionSpy).toHaveLastReturnedWith(true); + } game.move.select(MoveId.PROTECT); + await game.toNextTurn(); - await game.phaseInterceptor.to("BerryPhase", false); - - expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); - expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeUndefined(); + expect(charizard.hp).toBeLessThan(charizard.getMaxHp()); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(conditionSpy).toHaveLastReturnedWith(false); }); - test("should protect the user from status moves", async () => { - game.override.enemyMoveset([MoveId.CHARM]); - + it("should share fail chance with all move variants", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const charizard = game.field.getPlayerPokemon(); + charizard.summonData.moveHistory = [ + { move: MoveId.ENDURE, result: MoveResult.SUCCESS, targets: [BattlerIndex.PLAYER], useMode: MoveUseMode.NORMAL }, + { + move: MoveId.SPIKY_SHIELD, + result: MoveResult.SUCCESS, + targets: [BattlerIndex.PLAYER], + useMode: MoveUseMode.NORMAL, + }, + ]; + // force protect to fail on anything >=2 uses (1/9 chance) + vi.spyOn(charizard, "randBattleSeedInt").mockImplementation(range => (range >= 9 ? 1 : 0)); game.move.select(MoveId.PROTECT); + await game.toNextTurn(); - await game.phaseInterceptor.to("BerryPhase", false); - - expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); - test("should stop subsequent hits of a multi-hit move", async () => { + it("should reset fail chance on move failure", async () => { + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); + + const charizard = game.scene.getPlayerPokemon()!; + // force protect to always fail if RNG roll attempt is made + vi.spyOn(charizard, "randBattleSeedInt").mockReturnValue(1); + + game.move.select(MoveId.PROTECT); + await game.toNextTurn(); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + + game.move.select(MoveId.SPIKY_SHIELD); + await game.toNextTurn(); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + + game.move.select(MoveId.SPIKY_SHIELD); + await game.toNextTurn(); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + }); + + it("should reset fail chance on using another move", async () => { + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); + + const charizard = game.scene.getPlayerPokemon()!; + // force protect to always fail if RNG roll attempt is made + vi.spyOn(charizard, "randBattleSeedInt").mockReturnValue(1); + + game.move.select(MoveId.PROTECT); + await game.toNextTurn(); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + + game.move.select(MoveId.SPLASH); + await game.toNextTurn(); + + game.move.select(MoveId.PROTECT); + await game.toNextTurn(); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + }); + + it("should reset fail chance on starting a new wave", async () => { + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); + + const charizard = game.field.getPlayerPokemon(); + // force protect to always fail if RNG roll attempt is made + vi.spyOn(charizard, "randBattleSeedInt").mockReturnValue(1); + + game.move.select(MoveId.PROTECT); + // Wait until move end phase to kill opponent to ensure protect doesn't fail due to going last + await game.phaseInterceptor.to("MoveEndPhase"); + await game.doKillOpponents(); + await game.toNextWave(); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + + game.move.select(MoveId.SPIKY_SHIELD); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + }); + + it("should not be blocked by Psychic Terrain", async () => { + game.override.ability(AbilityId.PSYCHIC_SURGE); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); + + const charizard = game.scene.getPlayerPokemon()!; + game.move.select(MoveId.PROTECT); + await game.toNextTurn(); + + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + }); + + it("should stop subsequent hits of multi-hit moves", async () => { game.override.enemyMoveset([MoveId.TACHYON_CUTTER]); - await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const charizard = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.PROTECT); - await game.phaseInterceptor.to("BerryPhase", false); - expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); + expect(charizard.hp).toBe(charizard.getMaxHp()); expect(enemyPokemon.turnData.hitCount).toBe(1); }); - test("should fail if the user is the last to move in the turn", async () => { - game.override.enemyMoveset([MoveId.PROTECT]); - + it("should fail if the user moves last in the turn", async () => { + game.override.enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const charizard = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.PROTECT); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(leadPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); + + it("should not block Protection-bypassing moves or Future Sight", async () => { + game.override.enemyMoveset([MoveId.FUTURE_SIGHT, MoveId.MIGHTY_CLEAVE, MoveId.SPORE]); + await game.classicMode.startBattle([SpeciesId.AGGRON]); + + const aggron = game.scene.getPlayerPokemon()!; + vi.spyOn(aggron, "randBattleSeedInt").mockReturnValue(0); + + // Turn 1: setup future sight + game.move.select(MoveId.PROTECT); + await game.move.forceEnemyMove(MoveId.FUTURE_SIGHT); + await game.toNextTurn(); + + // Turn 2: mighty cleave + game.move.select(MoveId.PROTECT); + await game.move.forceEnemyMove(MoveId.MIGHTY_CLEAVE); + await game.toNextTurn(); + + expect(aggron.hp).toBeLessThan(aggron.getMaxHp()); + + aggron.hp = aggron.getMaxHp(); + + // turn 3: Future Sight hits + game.move.select(MoveId.PROTECT); + await game.move.forceEnemyMove(MoveId.SPORE); + await game.toNextTurn(); + + expect(aggron.hp).toBeLessThan(aggron.getMaxHp()); + expect(aggron.status?.effect).toBeUndefined(); // check that protect actually worked + }); + + // TODO: Add test + it.todo("should not reset counter when throwing balls"); }); diff --git a/test/moves/psycho-shift.test.ts b/test/moves/psycho-shift.test.ts index f2e762f1381..9e63798773c 100644 --- a/test/moves/psycho-shift.test.ts +++ b/test/moves/psycho-shift.test.ts @@ -37,13 +37,14 @@ describe("Moves - Psycho Shift", () => { it("If Psycho Shift is used on a Pokémon with Synchronize, the user of Psycho Shift will already be afflicted with a status condition when Synchronize activates", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const playerPokemon = game.scene.getPlayerPokemon(); - const enemyPokemon = game.scene.getEnemyPokemon(); - expect(enemyPokemon?.status).toBeUndefined(); + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); + expect(playerPokemon.status).toBeDefined(); + expect(enemyPokemon.status).toBeFalsy(); game.move.select(MoveId.PSYCHO_SHIFT); await game.phaseInterceptor.to("TurnEndPhase"); - expect(playerPokemon?.status).toBeNull(); - expect(enemyPokemon?.status).toBeDefined(); + expect(playerPokemon.status).toBeNull(); + expect(enemyPokemon.status).toBeDefined(); }); }); diff --git a/test/moves/purify.test.ts b/test/moves/purify.test.ts index 88e0da802a3..1f3102616b5 100644 --- a/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -38,8 +38,8 @@ describe("Moves - Purify", () => { test("Purify heals opponent status effect and restores user hp", async () => { await game.classicMode.startBattle(); - const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - const playerPokemon: PlayerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon: EnemyPokemon = game.field.getEnemyPokemon(); + const playerPokemon: PlayerPokemon = game.field.getPlayerPokemon(); playerPokemon.hp = playerPokemon.getMaxHp() - 1; enemyPokemon.status = new Status(StatusEffect.BURN); @@ -55,7 +55,7 @@ describe("Moves - Purify", () => { test("Purify does not heal if opponent doesnt have any status effect", async () => { await game.classicMode.startBattle(); - const playerPokemon: PlayerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon: PlayerPokemon = game.field.getPlayerPokemon(); playerPokemon.hp = playerPokemon.getMaxHp() - 1; const playerInitialHp = playerPokemon.hp; diff --git a/test/moves/quick-guard.test.ts b/test/moves/quick-guard.test.ts index d14eada2445..173d45b412f 100644 --- a/test/moves/quick-guard.test.ts +++ b/test/moves/quick-guard.test.ts @@ -3,10 +3,9 @@ import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { MoveResult } from "#enums/move-result"; import { SpeciesId } from "#enums/species-id"; -import { Stat } from "#enums/stat"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Quick Guard", () => { let phaserGame: Phaser.Game; @@ -27,74 +26,72 @@ describe("Moves - Quick Guard", () => { game.override .battleStyle("double") - .moveset([MoveId.QUICK_GUARD, MoveId.SPLASH, MoveId.FOLLOW_ME]) + .moveset([MoveId.QUICK_GUARD, MoveId.SPLASH, MoveId.SPIKY_SHIELD]) .enemySpecies(SpeciesId.SNORLAX) - .enemyMoveset([MoveId.QUICK_ATTACK]) - .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.QUICK_ATTACK) + .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(100) .enemyLevel(100); }); - test("should protect the user and allies from priority moves", async () => { + it("should protect the user and allies from priority moves", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerField(); - - game.move.select(MoveId.QUICK_GUARD); - game.move.select(MoveId.SPLASH, 1); + const [charizard, blastoise] = game.scene.getPlayerField(); + game.move.select(MoveId.QUICK_GUARD, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.QUICK_ATTACK, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.QUICK_ATTACK, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase", false); - playerPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); + expect(charizard.hp).toBe(charizard.getMaxHp()); + expect(blastoise.hp).toBe(blastoise.getMaxHp()); }); - test("should protect the user and allies from Prankster-boosted moves", async () => { - game.override.enemyAbility(AbilityId.PRANKSTER).enemyMoveset([MoveId.GROWL]); - + it.each<{ name: string; move: MoveId; ability: AbilityId }>([ + { name: "Prankster", move: MoveId.SPORE, ability: AbilityId.PRANKSTER }, + { name: "Gale Wings", move: MoveId.BRAVE_BIRD, ability: AbilityId.GALE_WINGS }, + ])("should protect the user and allies from $name-boosted moves", async ({ move, ability }) => { + game.override.enemyMoveset(move).enemyAbility(ability); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerField(); - - game.move.select(MoveId.QUICK_GUARD); - game.move.select(MoveId.SPLASH, 1); + const [charizard, blastoise] = game.scene.getPlayerField(); + game.move.select(MoveId.QUICK_GUARD, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(move, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(move, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase", false); - playerPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); + expect(charizard.hp).toBe(charizard.getMaxHp()); + expect(blastoise.hp).toBe(blastoise.getMaxHp()); + expect(charizard.status?.effect).toBeUndefined(); + expect(blastoise.status?.effect).toBeUndefined(); }); - test("should stop subsequent hits of a multi-hit priority move", async () => { - game.override.enemyMoveset([MoveId.WATER_SHURIKEN]); - - await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - - const playerPokemon = game.scene.getPlayerField(); - const enemyPokemon = game.scene.getEnemyField(); - - game.move.select(MoveId.QUICK_GUARD); - game.move.select(MoveId.FOLLOW_ME, 1); - - await game.phaseInterceptor.to("BerryPhase", false); - - playerPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); - enemyPokemon.forEach(p => expect(p.turnData.hitCount).toBe(1)); - }); - - test("should fail if the user is the last to move in the turn", async () => { - game.override.battleStyle("single").enemyMoveset([MoveId.QUICK_GUARD]); - + it("should increment (but not respect) other protection moves' fail counters", async () => { + game.override.battleStyle("single"); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const charizard = game.scene.getPlayerPokemon()!; + // force protect to fail on anything >0 uses + vi.spyOn(charizard, "randBattleSeedInt").mockReturnValue(1); game.move.select(MoveId.QUICK_GUARD); + await game.toNextTurn(); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - await game.phaseInterceptor.to("BerryPhase", false); + game.move.select(MoveId.QUICK_GUARD); + await game.toNextTurn(); - expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + // ignored fail chance + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + + game.move.select(MoveId.SPIKY_SHIELD); + await game.toNextTurn(); + + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); }); diff --git a/test/moves/rage-fist.test.ts b/test/moves/rage-fist.test.ts index 8ed0a71306b..61164b5710c 100644 --- a/test/moves/rage-fist.test.ts +++ b/test/moves/rage-fist.test.ts @@ -65,7 +65,7 @@ describe("Moves - Rage Fist", () => { await game.phaseInterceptor.to("TurnEndPhase"); // hit 8 times, but nothing else - expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(8); + expect(game.field.getPlayerPokemon().battleData.hitCount).toBe(8); expect(move.calculateBattlePower).toHaveLastReturnedWith(350); }); @@ -80,7 +80,7 @@ describe("Moves - Rage Fist", () => { await game.toNextTurn(); // no increase due to substitute - expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(0); + expect(game.field.getPlayerPokemon().battleData.hitCount).toBe(0); // remove substitute and get confused game.move.select(MoveId.TIDY_UP); @@ -95,7 +95,7 @@ describe("Moves - Rage Fist", () => { await game.toNextTurn(); // didn't go up from hitting ourself - expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(0); + expect(game.field.getPlayerPokemon().battleData.hitCount).toBe(0); }); it("should maintain hits recieved between wild waves", async () => { @@ -105,20 +105,20 @@ describe("Moves - Rage Fist", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(2); + expect(game.field.getPlayerPokemon().battleData.hitCount).toBe(2); game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(4); + expect(game.field.getPlayerPokemon().battleData.hitCount).toBe(4); expect(move.calculateBattlePower).toHaveLastReturnedWith(250); }); it("should reset hits recieved before trainer battles", async () => { await game.classicMode.startBattle([SpeciesId.IRON_HANDS]); - const ironHands = game.scene.getPlayerPokemon()!; + const ironHands = game.field.getPlayerPokemon(); expect(ironHands).toBeDefined(); // beat up a magikarp @@ -184,7 +184,7 @@ describe("Moves - Rage Fist", () => { game.move.select(MoveId.RAGE_FIST); await game.phaseInterceptor.to("MoveEndPhase"); - const charizard = game.scene.getPlayerPokemon()!; + const charizard = game.field.getPlayerPokemon(); expect(charizard).toBeDefined(); expect(charizard.species.speciesId).toBe(SpeciesId.CHARIZARD); expect(move.calculateBattlePower).toHaveLastReturnedWith(150); diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 228730e9fb6..b8fa2b1ce80 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -52,8 +52,8 @@ describe("Moves - Reflect", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -71,8 +71,8 @@ describe("Moves - Reflect", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -88,8 +88,8 @@ describe("Moves - Reflect", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -105,8 +105,8 @@ describe("Moves - Reflect", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -122,8 +122,8 @@ describe("Moves - Reflect", () => { await game.phaseInterceptor.to(TurnEndPhase); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); expect(mockedDmg).toBe(allMoves[moveToUse].power); diff --git a/test/moves/relic-song.test.ts b/test/moves/relic-song.test.ts index 62069ac3cd3..c834ccbee24 100644 --- a/test/moves/relic-song.test.ts +++ b/test/moves/relic-song.test.ts @@ -34,7 +34,7 @@ describe("Moves - Relic Song", () => { it("swaps Meloetta's form between Aria and Pirouette", async () => { await game.classicMode.startBattle([SpeciesId.MELOETTA]); - const meloetta = game.scene.getPlayerPokemon()!; + const meloetta = game.field.getPlayerPokemon(); game.move.select(MoveId.RELIC_SONG); await game.toNextTurn(); @@ -51,7 +51,7 @@ describe("Moves - Relic Song", () => { game.challengeMode.addChallenge(Challenges.SINGLE_TYPE, PokemonType.PSYCHIC + 1, 0); await game.challengeMode.startBattle([SpeciesId.MELOETTA]); - const meloetta = game.scene.getPlayerPokemon()!; + const meloetta = game.field.getPlayerPokemon(); expect(meloetta.formIndex).toBe(0); @@ -66,7 +66,7 @@ describe("Moves - Relic Song", () => { game.override.starterForms({ [SpeciesId.MELOETTA]: 1 }).startingWave(10); await game.classicMode.startBattle([SpeciesId.MELOETTA]); - const meloetta = game.scene.getPlayerPokemon()!; + const meloetta = game.field.getPlayerPokemon(); game.move.select(MoveId.SPLASH); await game.doKillOpponents(); diff --git a/test/moves/revival-blessing.test.ts b/test/moves/revival-blessing.test.ts index 89a1996fe03..d14fa89c738 100644 --- a/test/moves/revival-blessing.test.ts +++ b/test/moves/revival-blessing.test.ts @@ -41,7 +41,7 @@ describe("Moves - Revival Blessing", () => { game.doSelectPartyPokemon(1, "SwitchPhase"); await game.toNextTurn(); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); expect(player.species.speciesId).toBe(SpeciesId.MAGIKARP); game.move.select(MoveId.REVIVAL_BLESSING); @@ -82,7 +82,7 @@ describe("Moves - Revival Blessing", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase", false); - const player = game.scene.getPlayerPokemon()!; + const player = game.field.getPlayerPokemon(); expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); diff --git a/test/moves/role-play.test.ts b/test/moves/role-play.test.ts index af9fc68efa4..ff5d487ddf0 100644 --- a/test/moves/role-play.test.ts +++ b/test/moves/role-play.test.ts @@ -38,7 +38,7 @@ describe("Moves - Role Play", () => { game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.field.getPlayerPokemon().getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should activate post-summon abilities", async () => { @@ -48,6 +48,6 @@ describe("Moves - Role Play", () => { game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(-1); }); }); diff --git a/test/moves/roost.test.ts b/test/moves/roost.test.ts index e4ea09e245c..bb567a41cd0 100644 --- a/test/moves/roost.test.ts +++ b/test/moves/roost.test.ts @@ -49,7 +49,7 @@ describe("Moves - Roost", () => { test("Non flying type uses roost -> no type change, took damage", async () => { await game.classicMode.startBattle([SpeciesId.DUNSPARCE]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerPokemonStartingHP = playerPokemon.hp; game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -73,7 +73,7 @@ describe("Moves - Roost", () => { test("Pure flying type -> becomes normal after roost and takes damage from ground moves -> regains flying", async () => { await game.classicMode.startBattle([SpeciesId.TORNADUS]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerPokemonStartingHP = playerPokemon.hp; game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -97,7 +97,7 @@ describe("Moves - Roost", () => { test("Dual X/flying type -> becomes type X after roost and takes damage from ground moves -> regains flying", async () => { await game.classicMode.startBattle([SpeciesId.HAWLUCHA]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerPokemonStartingHP = playerPokemon.hp; game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -122,7 +122,7 @@ describe("Moves - Roost", () => { test("Pokemon with levitate after using roost should lose flying type but still be unaffected by ground moves", async () => { game.override.starterForms({ [SpeciesId.ROTOM]: 4 }); await game.classicMode.startBattle([SpeciesId.ROTOM]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerPokemonStartingHP = playerPokemon.hp; game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -146,7 +146,7 @@ describe("Moves - Roost", () => { test("A fire/flying type that uses burn up, then roost should be typeless until end of turn", async () => { await game.classicMode.startBattle([SpeciesId.MOLTRES]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerPokemonStartingHP = playerPokemon.hp; game.move.select(MoveId.BURN_UP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -182,7 +182,7 @@ describe("Moves - Roost", () => { test("An electric/flying type that uses double shock, then roost should be typeless until end of turn", async () => { game.override.enemySpecies(SpeciesId.ZEKROM); await game.classicMode.startBattle([SpeciesId.ZAPDOS]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); const playerPokemonStartingHP = playerPokemon.hp; game.move.select(MoveId.DOUBLE_SHOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -223,7 +223,7 @@ describe("Moves - Roost", () => { MoveId.TRICK_OR_TREAT, ]); await game.classicMode.startBattle([SpeciesId.MOLTRES]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.ROOST); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index 19b56cd759f..2157f01fee4 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -37,7 +37,7 @@ describe("Moves - Safeguard", () => { it("protects from damaging moves with additional effects", async () => { await game.classicMode.startBattle(); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.NUZZLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -48,7 +48,7 @@ describe("Moves - Safeguard", () => { it("protects from status moves", async () => { await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SPORE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -60,7 +60,7 @@ describe("Moves - Safeguard", () => { it("protects from confusion", async () => { game.override.moveset([MoveId.CONFUSE_RAY]); await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -89,7 +89,7 @@ describe("Moves - Safeguard", () => { it("protects from Yawn", async () => { await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.YAWN); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -100,7 +100,7 @@ describe("Moves - Safeguard", () => { it("doesn't protect from already existing Yawn", async () => { await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.YAWN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -115,7 +115,7 @@ describe("Moves - Safeguard", () => { it("doesn't protect from self-inflicted status from Rest or Flame Orb", async () => { game.override.enemyHeldItems([{ name: "FLAME_ORB" }]); await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.hp = 1; game.move.select(MoveId.SPLASH); diff --git a/test/moves/scale-shot.test.ts b/test/moves/scale-shot.test.ts index 7e5c60577ce..4a3369ce9fc 100644 --- a/test/moves/scale-shot.test.ts +++ b/test/moves/scale-shot.test.ts @@ -42,7 +42,7 @@ describe("Moves - Scale Shot", () => { game.override.enemySpecies(SpeciesId.FORRETRESS); await game.classicMode.startBattle([SpeciesId.MINCCINO]); - const minccino = game.scene.getPlayerPokemon()!; + const minccino = game.field.getPlayerPokemon(); game.move.select(MoveId.SCALE_SHOT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -70,7 +70,7 @@ describe("Moves - Scale Shot", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([SpeciesId.MINCCINO]); - const minccino = game.scene.getPlayerPokemon()!; + const minccino = game.field.getPlayerPokemon(); game.move.select(MoveId.SCALE_SHOT); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/moves/secret-power.test.ts b/test/moves/secret-power.test.ts index 16090bebcbe..b8f713f59cf 100644 --- a/test/moves/secret-power.test.ts +++ b/test/moves/secret-power.test.ts @@ -43,7 +43,7 @@ describe("Moves - Secret Power", () => { vi.spyOn(allMoves[MoveId.SECRET_POWER], "chance", "get").mockReturnValue(100); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); // No Terrain + BiomeId.VOLCANO --> Burn game.move.select(MoveId.SECRET_POWER); diff --git a/test/moves/shed-tail.test.ts b/test/moves/shed-tail.test.ts index ff2b29e846d..b53af269875 100644 --- a/test/moves/shed-tail.test.ts +++ b/test/moves/shed-tail.test.ts @@ -34,14 +34,14 @@ describe("Moves - Shed Tail", () => { it("transfers a Substitute doll to the switched in Pokemon", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const magikarp = game.scene.getPlayerPokemon()!; + const magikarp = game.field.getPlayerPokemon(); game.move.select(MoveId.SHED_TAIL); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase", false); - const feebas = game.scene.getPlayerPokemon()!; + const feebas = game.field.getPlayerPokemon(); const substituteTag = feebas.getTag(SubstituteTag); expect(feebas).not.toBe(magikarp); @@ -55,7 +55,7 @@ describe("Moves - Shed Tail", () => { it("should fail if no ally is available to switch in", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const magikarp = game.scene.getPlayerPokemon()!; + const magikarp = game.field.getPlayerPokemon(); expect(game.scene.getPlayerParty().length).toBe(1); game.move.select(MoveId.SHED_TAIL); diff --git a/test/moves/shell-trap.test.ts b/test/moves/shell-trap.test.ts index d2908278d93..5ecad3116af 100644 --- a/test/moves/shell-trap.test.ts +++ b/test/moves/shell-trap.test.ts @@ -133,8 +133,8 @@ describe("Moves - Shell Trap", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SHELL_TRAP); diff --git a/test/moves/simple-beam.test.ts b/test/moves/simple-beam.test.ts index f45c19c690e..a5ad6c5af8f 100644 --- a/test/moves/simple-beam.test.ts +++ b/test/moves/simple-beam.test.ts @@ -37,6 +37,6 @@ describe("Moves - Simple Beam", () => { game.move.select(MoveId.SIMPLE_BEAM); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.SIMPLE); + expect(game.field.getEnemyPokemon().getAbility().id).toBe(AbilityId.SIMPLE); }); }); diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index fff9be97e2d..ed010b8a883 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -38,7 +38,7 @@ describe("Moves - Sketch", () => { it("Sketch should not fail even if a previous Sketch failed to retrieve a valid move and ran out of PP", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // can't use normal moveset override because we need to check moveset changes playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH), new PokemonMove(MoveId.SKETCH)]; @@ -60,8 +60,8 @@ describe("Moves - Sketch", () => { it("Sketch should retrieve the most recent valid move from its target history", async () => { game.override.enemyStatusEffect(StatusEffect.PARALYSIS); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH), new PokemonMove(MoveId.GROWL)]; game.move.select(MoveId.GROWL); @@ -88,7 +88,7 @@ describe("Moves - Sketch", () => { game.override.enemyMoveset([MoveId.METRONOME]); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH)]; // Opponent uses Metronome -> False Swipe, then player uses Sketch, which should sketch Metronome diff --git a/test/moves/skill-swap.test.ts b/test/moves/skill-swap.test.ts index 50a0a232f6e..1b3c0255895 100644 --- a/test/moves/skill-swap.test.ts +++ b/test/moves/skill-swap.test.ts @@ -39,8 +39,8 @@ describe("Moves - Skill Swap", () => { game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.ADAPTABILITY); + expect(game.field.getPlayerPokemon().getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.field.getEnemyPokemon().getAbility().id).toBe(AbilityId.ADAPTABILITY); }); it("should activate post-summon abilities", async () => { @@ -51,6 +51,6 @@ describe("Moves - Skill Swap", () => { await game.phaseInterceptor.to("BerryPhase"); // player atk should be -1 after opponent gains intimidate and it activates - expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)).toBe(-1); }); }); diff --git a/test/moves/sleep-talk.test.ts b/test/moves/sleep-talk.test.ts index 8593f4b4d07..9e8db2e3615 100644 --- a/test/moves/sleep-talk.test.ts +++ b/test/moves/sleep-talk.test.ts @@ -42,7 +42,7 @@ describe("Moves - Sleep Talk", () => { game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if the user has no valid moves", async () => { @@ -51,7 +51,7 @@ describe("Moves - Sleep Talk", () => { game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should call a random valid move if the user is asleep", async () => { @@ -60,7 +60,7 @@ describe("Moves - Sleep Talk", () => { game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)); + expect(game.field.getPlayerPokemon().getStatStage(Stat.ATK)); }); it("should apply secondary effects of a move", async () => { @@ -70,6 +70,6 @@ describe("Moves - Sleep Talk", () => { game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // Wood Hammer recoil effect should be applied + expect(game.field.getPlayerPokemon().isFullHp()).toBeFalsy(); // Wood Hammer recoil effect should be applied }); }); diff --git a/test/moves/solar-beam.test.ts b/test/moves/solar-beam.test.ts index f4347493de5..6a413776972 100644 --- a/test/moves/solar-beam.test.ts +++ b/test/moves/solar-beam.test.ts @@ -38,8 +38,8 @@ describe("Moves - Solar Beam", () => { it("should deal damage in two turns if no weather is active", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SOLAR_BEAM); @@ -66,8 +66,8 @@ describe("Moves - Solar Beam", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SOLAR_BEAM); diff --git a/test/moves/sparkly-swirl.test.ts b/test/moves/sparkly-swirl.test.ts index 6e43211ed50..7cda68438e1 100644 --- a/test/moves/sparkly-swirl.test.ts +++ b/test/moves/sparkly-swirl.test.ts @@ -36,7 +36,7 @@ describe("Moves - Sparkly Swirl", () => { game.override.battleStyle("double").statusEffect(StatusEffect.BURN); await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getPlayerParty(); - const leftOpp = game.scene.getEnemyPokemon()!; + const leftOpp = game.field.getEnemyPokemon(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); diff --git a/test/moves/spectral-thief.test.ts b/test/moves/spectral-thief.test.ts index dd988ac667a..45005ccf32d 100644 --- a/test/moves/spectral-thief.test.ts +++ b/test/moves/spectral-thief.test.ts @@ -36,8 +36,8 @@ describe("Moves - Spectral Thief", () => { it("should steal max possible positive stat changes and ignore negative ones.", async () => { await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 6); enemy.setStatStage(Stat.DEF, -6); @@ -69,8 +69,8 @@ describe("Moves - Spectral Thief", () => { game.override.enemySpecies(SpeciesId.MAGIKARP).enemyLevel(50); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const moveToCheck = allMoves[MoveId.SPECTRAL_THIEF]; const dmgBefore = enemy.getAttackDamage({ source: player, move: moveToCheck }).damage; @@ -88,8 +88,8 @@ describe("Moves - Spectral Thief", () => { game.override.ability(AbilityId.CONTRARY); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 6); @@ -106,8 +106,8 @@ describe("Moves - Spectral Thief", () => { game.override.ability(AbilityId.SIMPLE); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 3); @@ -124,8 +124,8 @@ describe("Moves - Spectral Thief", () => { game.override.enemyAbility(AbilityId.CLEAR_BODY); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 3); @@ -142,8 +142,8 @@ describe("Moves - Spectral Thief", () => { game.override.enemyAbility(AbilityId.WHITE_SMOKE); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 3); @@ -160,8 +160,8 @@ describe("Moves - Spectral Thief", () => { game.override.enemyAbility(AbilityId.HYPER_CUTTER); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 3); @@ -178,8 +178,8 @@ describe("Moves - Spectral Thief", () => { game.override.enemyMoveset(MoveId.SUBSTITUTE); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 3); @@ -198,8 +198,8 @@ describe("Moves - Spectral Thief", () => { game.override.enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle(); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); enemy.setStatStage(Stat.ATK, 3); diff --git a/test/moves/speed-swap.test.ts b/test/moves/speed-swap.test.ts index b67ad68746a..1b8e1d24a61 100644 --- a/test/moves/speed-swap.test.ts +++ b/test/moves/speed-swap.test.ts @@ -36,8 +36,8 @@ describe("Moves - Speed Swap", () => { it("should swap the user's SPD and the target's SPD stats", async () => { await game.classicMode.startBattle([SpeciesId.INDEEDEE]); - const player = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const playerSpd = player.getStat(Stat.SPD, false); const enemySpd = enemy.getStat(Stat.SPD, false); diff --git a/test/moves/spit-up.test.ts b/test/moves/spit-up.test.ts index 22722cfed2b..8b110b0ea04 100644 --- a/test/moves/spit-up.test.ts +++ b/test/moves/spit-up.test.ts @@ -50,7 +50,7 @@ describe("Moves - Spit Up", () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); pokemon.addTag(BattlerTagType.STOCKPILING); const stockpilingTag = pokemon.getTag(StockpilingTag)!; @@ -72,7 +72,7 @@ describe("Moves - Spit Up", () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); pokemon.addTag(BattlerTagType.STOCKPILING); pokemon.addTag(BattlerTagType.STOCKPILING); @@ -95,7 +95,7 @@ describe("Moves - Spit Up", () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); pokemon.addTag(BattlerTagType.STOCKPILING); pokemon.addTag(BattlerTagType.STOCKPILING); pokemon.addTag(BattlerTagType.STOCKPILING); @@ -117,7 +117,7 @@ describe("Moves - Spit Up", () => { it("fails without stacks", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeUndefined(); @@ -128,7 +128,7 @@ describe("Moves - Spit Up", () => { expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SPIT_UP, result: MoveResult.FAIL, - targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], + targets: [game.field.getEnemyPokemon().getBattlerIndex()], }); expect(spitUp.calculateBattlePower).not.toHaveBeenCalled(); @@ -138,7 +138,7 @@ describe("Moves - Spit Up", () => { it("decreases stats based on stored values (both boosts equal)", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); pokemon.addTag(BattlerTagType.STOCKPILING); const stockpilingTag = pokemon.getTag(StockpilingTag)!; @@ -155,7 +155,7 @@ describe("Moves - Spit Up", () => { expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, - targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], + targets: [game.field.getEnemyPokemon().getBattlerIndex()], }); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -169,7 +169,7 @@ describe("Moves - Spit Up", () => { it("decreases stats based on stored values (different boosts)", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); pokemon.addTag(BattlerTagType.STOCKPILING); const stockpilingTag = pokemon.getTag(StockpilingTag)!; @@ -187,7 +187,7 @@ describe("Moves - Spit Up", () => { expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, - targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], + targets: [game.field.getEnemyPokemon().getBattlerIndex()], }); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); diff --git a/test/moves/spite.test.ts b/test/moves/spite.test.ts new file mode 100644 index 00000000000..56c1be76198 --- /dev/null +++ b/test/moves/spite.test.ts @@ -0,0 +1,126 @@ +import { AbilityId } from "#enums/ability-id"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveId } from "#enums/move-id"; +import { MoveResult } from "#enums/move-result"; +import { MoveUseMode } from "#enums/move-use-mode"; +import { SpeciesId } from "#enums/species-id"; +import { GameManager } from "#test/test-utils/game-manager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Spite", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(AbilityId.BALL_FETCH) + .battleStyle("single") + .criticalHits(false) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .startingLevel(100) + .enemyLevel(100); + }); + + it("should reduce the PP of the target's last used move by 4", async () => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + const karp = game.field.getEnemyPokemon(); + game.move.changeMoveset(karp, [MoveId.SPLASH, MoveId.TACKLE]); + + game.move.use(MoveId.SPITE); + await game.move.selectEnemyMove(MoveId.TACKLE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toNextTurn(); + + expect(karp).toHaveUsedPP(MoveId.TACKLE, 1); + + game.move.use(MoveId.SPITE); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toEndOfTurn(); + + expect(karp).toHaveUsedPP(MoveId.TACKLE, 4 + 1); + }); + + it("should fail if the target has not used a move", async () => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + const karp = game.field.getEnemyPokemon(); + game.move.changeMoveset(karp, [MoveId.SPLASH, MoveId.TACKLE]); + + game.move.use(MoveId.SPITE); + await game.move.selectEnemyMove(MoveId.TACKLE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toEndOfTurn(); + + const feebas = game.field.getPlayerPokemon(); + expect(feebas).toHaveUsedMove({ move: MoveId.SPITE, result: MoveResult.FAIL }); + }); + + it("should fail if the target's last used move is out of PP", async () => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + const karp = game.field.getEnemyPokemon(); + game.move.changeMoveset(karp, [MoveId.TACKLE]); + karp.moveset[0].ppUsed = 0; + + game.move.use(MoveId.SPITE); + await game.move.selectEnemyMove(MoveId.TACKLE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toEndOfTurn(); + + const feebas = game.field.getPlayerPokemon(); + expect(feebas).toHaveUsedMove({ move: MoveId.SPITE, result: MoveResult.FAIL }); + }); + + it("should fail if the target's last used move is not in their moveset", async () => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + const karp = game.field.getEnemyPokemon(); + game.move.changeMoveset(karp, [MoveId.TACKLE]); + // Fake magikarp having used Splash the turn prior + karp.pushMoveHistory({ move: MoveId.SPLASH, targets: [BattlerIndex.ENEMY], useMode: MoveUseMode.NORMAL }); + + game.move.use(MoveId.SPITE); + await game.move.selectEnemyMove(MoveId.TACKLE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toEndOfTurn(); + + const feebas = game.field.getPlayerPokemon(); + expect(feebas).toHaveUsedMove({ move: MoveId.SPITE, result: MoveResult.FAIL }); + }); + + it("should ignore virtual and Dancer-induced moves", async () => { + game.override.battleStyle("double").enemyAbility(AbilityId.DANCER); + game.move.forceMetronomeMove(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + const [karp1, karp2] = game.scene.getEnemyField(); + game.move.changeMoveset(karp1, [MoveId.SPLASH, MoveId.METRONOME, MoveId.SWORDS_DANCE]); + game.move.changeMoveset(karp2, [MoveId.SWORDS_DANCE, MoveId.TACKLE]); + + game.move.use(MoveId.SPITE); + await game.move.selectEnemyMove(MoveId.METRONOME); + await game.move.selectEnemyMove(MoveId.SWORDS_DANCE); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); + await game.toEndOfTurn(); + + // Spite ignored virtual splash and swords dance, instead only docking from metronome + expect(karp1).toHaveUsedPP(MoveId.SPLASH, 0); + expect(karp1).toHaveUsedPP(MoveId.SWORDS_DANCE, 0); + expect(karp1).toHaveUsedPP(MoveId.METRONOME, 5); + }); +}); diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index 2219b95e733..75b2b66560e 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -32,12 +32,12 @@ describe("Moves - Steamroller", () => { game.override.enemySpecies(SpeciesId.DITTO).enemyMoveset(MoveId.MINIMIZE); await game.classicMode.startBattle([SpeciesId.IRON_BOULDER]); - const ditto = game.scene.getEnemyPokemon()!; + const ditto = game.field.getEnemyPokemon(); vi.spyOn(ditto, "getAttackDamage"); ditto.hp = 5000; const steamroller = allMoves[MoveId.STEAMROLLER]; vi.spyOn(steamroller, "calculateBattleAccuracy"); - const ironBoulder = game.scene.getPlayerPokemon()!; + const ironBoulder = game.field.getPlayerPokemon(); vi.spyOn(ironBoulder, "getAccuracyMultiplier"); // Turn 1 game.move.select(MoveId.STEAMROLLER); diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 5b170c10fcb..2da1285ace2 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -38,7 +38,7 @@ describe("Moves - Stockpile", () => { it("gains a stockpile stack and raises user's DEF and SPDEF stat stages by 1 on each use, fails at max stacks (3)", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); // Unfortunately, Stockpile stacks are not directly queryable (i.e. there is no pokemon.getStockpileStacks()), // we just have to know that they're implemented as a BattlerTag. @@ -78,7 +78,7 @@ describe("Moves - Stockpile", () => { it("gains a stockpile stack even if user's DEF and SPDEF stat stages are at +6", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); user.setStatStage(Stat.DEF, 6); user.setStatStage(Stat.SPDEF, 6); diff --git a/test/moves/struggle.test.ts b/test/moves/struggle.test.ts index 21c4e204974..cba049e7277 100644 --- a/test/moves/struggle.test.ts +++ b/test/moves/struggle.test.ts @@ -35,7 +35,7 @@ describe("Moves - Struggle", () => { game.override.moveset([MoveId.STRUGGLE]).ability(AbilityId.ADAPTABILITY); await game.classicMode.startBattle([SpeciesId.RATTATA]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.STRUGGLE); const stabSpy = vi.spyOn(enemy, "calculateStabMultiplier"); @@ -49,7 +49,7 @@ describe("Moves - Struggle", () => { game.override.moveset([MoveId.STRUGGLE]); await game.classicMode.startBattle([SpeciesId.GASTLY]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.STRUGGLE); const moveEffectivenessSpy = vi.spyOn(enemy, "getMoveEffectiveness"); diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 15fd770805a..89018a8d592 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -49,7 +49,7 @@ describe("Moves - Substitute", () => { it("should cause the user to take damage", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -63,7 +63,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.SKARMORY]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -86,7 +86,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -107,7 +107,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -122,7 +122,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -142,7 +142,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -160,7 +160,7 @@ describe("Moves - Substitute", () => { it("shouldn't block the user's own status moves", async () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -179,7 +179,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); vi.spyOn(leadPokemon, "getMoveEffectiveness"); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -197,7 +197,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); vi.spyOn(leadPokemon, "getMoveEffectiveness"); game.move.select(MoveId.SUBSTITUTE); @@ -233,8 +233,8 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -251,7 +251,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -268,7 +268,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -284,7 +284,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -301,7 +301,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -317,7 +317,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, enemyPokemon.id); const enemyNumItems = enemyPokemon.getHeldItems().length; @@ -334,8 +334,8 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -355,7 +355,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -372,7 +372,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -389,7 +389,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const leadPokemon = game.scene.getPlayerPokemon()!; + const leadPokemon = game.field.getPlayerPokemon(); leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); @@ -400,7 +400,7 @@ describe("Moves - Substitute", () => { await game.phaseInterceptor.to("MovePhase", false); - const switchedPokemon = game.scene.getPlayerPokemon()!; + const switchedPokemon = game.field.getPlayerPokemon(); const subTag = switchedPokemon.getTag(SubstituteTag)!; expect(subTag).toBeDefined(); expect(subTag.hp).toBe(Math.floor((leadPokemon.getMaxHp() * 1) / 4)); @@ -411,7 +411,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SUBSTITUTE); @@ -428,8 +428,8 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); @@ -446,7 +446,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); @@ -462,8 +462,8 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); @@ -479,8 +479,8 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); @@ -497,7 +497,7 @@ describe("Moves - Substitute", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index 1ae31517cb6..f896a4c9c77 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -43,7 +43,7 @@ describe("Moves - Swallow", () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); pokemon["hp"] = 1; @@ -70,7 +70,7 @@ describe("Moves - Swallow", () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); pokemon["hp"] = 1; @@ -98,7 +98,7 @@ describe("Moves - Swallow", () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); pokemon["hp"] = 0.0001; @@ -125,7 +125,7 @@ describe("Moves - Swallow", () => { it("fails without stacks", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeUndefined(); @@ -144,7 +144,7 @@ describe("Moves - Swallow", () => { it("decreases stats based on stored values (both boosts equal)", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); pokemon.addTag(BattlerTagType.STOCKPILING); const stockpilingTag = pokemon.getTag(StockpilingTag)!; @@ -173,7 +173,7 @@ describe("Moves - Swallow", () => { it("lower stat stages based on stored values (different boosts)", async () => { await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); pokemon.addTag(BattlerTagType.STOCKPILING); const stockpilingTag = pokemon.getTag(StockpilingTag)!; diff --git a/test/moves/synchronoise.test.ts b/test/moves/synchronoise.test.ts index 3cfeaf04af9..98178b66d00 100644 --- a/test/moves/synchronoise.test.ts +++ b/test/moves/synchronoise.test.ts @@ -34,8 +34,8 @@ describe("Moves - Synchronoise", () => { it("should consider the user's tera type if it is terastallized", async () => { await game.classicMode.startBattle([SpeciesId.BIDOOF]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); // force the player to be terastallized playerPokemon.teraType = PokemonType.WATER; diff --git a/test/moves/syrup-bomb.test.ts b/test/moves/syrup-bomb.test.ts index 3e5bddf1e7b..75f76595730 100644 --- a/test/moves/syrup-bomb.test.ts +++ b/test/moves/syrup-bomb.test.ts @@ -40,7 +40,7 @@ describe("Moves - SYRUP BOMB", () => { it("decreases the target Pokemon's speed stat once per turn for 3 turns", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const targetPokemon = game.scene.getEnemyPokemon()!; + const targetPokemon = game.field.getEnemyPokemon(); expect(targetPokemon.getStatStage(Stat.SPD)).toBe(0); game.move.select(MoveId.SYRUP_BOMB); @@ -65,7 +65,7 @@ describe("Moves - SYRUP BOMB", () => { game.override.enemyAbility(AbilityId.BULLETPROOF); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const targetPokemon = game.scene.getEnemyPokemon()!; + const targetPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.SYRUP_BOMB); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -87,6 +87,6 @@ describe("Moves - SYRUP BOMB", () => { game.doSwitchPokemon(1); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.SPD)).toBe(-1); + expect(game.field.getEnemyPokemon().getStatStage(Stat.SPD)).toBe(-1); }); }); diff --git a/test/moves/tail-whip.test.ts b/test/moves/tail-whip.test.ts index c872b2535e3..8d2dfbda096 100644 --- a/test/moves/tail-whip.test.ts +++ b/test/moves/tail-whip.test.ts @@ -39,7 +39,7 @@ describe("Moves - Tail whip", () => { const moveToUse = MoveId.TAIL_WHIP; await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.MIGHTYENA]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); game.move.select(moveToUse); diff --git a/test/moves/tailwind.test.ts b/test/moves/tailwind.test.ts index 436c854066f..5c91a37f786 100644 --- a/test/moves/tailwind.test.ts +++ b/test/moves/tailwind.test.ts @@ -81,8 +81,8 @@ describe("Moves - Tailwind", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const ally = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const ally = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); const allySpd = ally.getStat(Stat.SPD); const enemySpd = enemy.getStat(Stat.SPD); diff --git a/test/moves/tar-shot.test.ts b/test/moves/tar-shot.test.ts index 719b5e4c7fe..d8da8c3437e 100644 --- a/test/moves/tar-shot.test.ts +++ b/test/moves/tar-shot.test.ts @@ -36,7 +36,7 @@ describe("Moves - Tar Shot", () => { it("lowers the target's Speed stat by one stage and doubles the effectiveness of Fire-type moves used on the target", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); @@ -57,7 +57,7 @@ describe("Moves - Tar Shot", () => { it("will not double the effectiveness of Fire-type moves used on a target that is already under the effect of Tar Shot (but may still lower its Speed)", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); @@ -86,7 +86,7 @@ describe("Moves - Tar Shot", () => { game.override.enemySpecies(SpeciesId.SPRIGATITO); await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); enemy.teraType = PokemonType.GRASS; enemy.isTerastallized = true; @@ -110,7 +110,7 @@ describe("Moves - Tar Shot", () => { game.override.enemySpecies(SpeciesId.SPRIGATITO); await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getMoveEffectiveness"); diff --git a/test/moves/taunt.test.ts b/test/moves/taunt.test.ts index f16a019ce2c..6ac158d3a8f 100644 --- a/test/moves/taunt.test.ts +++ b/test/moves/taunt.test.ts @@ -33,7 +33,7 @@ describe("Moves - Taunt", () => { it("Pokemon should not be able to use Status Moves", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // First turn, Player Pokemon succeeds using Growl without Taunt game.move.select(MoveId.GROWL); diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index 4c452c24ec6..f14c42d1dcc 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -37,7 +37,7 @@ describe("Moves - Telekinesis", () => { it("Telekinesis makes the affected vulnerable to most attacking moves regardless of accuracy", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyOpponent = game.scene.getEnemyPokemon()!; + const enemyOpponent = game.field.getEnemyPokemon(); game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); @@ -54,7 +54,7 @@ describe("Moves - Telekinesis", () => { it("Telekinesis makes the affected airborne and immune to most Ground-moves", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyOpponent = game.scene.getEnemyPokemon()!; + const enemyOpponent = game.field.getEnemyPokemon(); game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); @@ -72,7 +72,7 @@ describe("Moves - Telekinesis", () => { game.override.enemyMoveset(MoveId.TRANSFORM); await game.classicMode.startBattle([SpeciesId.DIGLETT]); - const enemyOpponent = game.scene.getEnemyPokemon()!; + const enemyOpponent = game.field.getEnemyPokemon(); game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); @@ -84,7 +84,7 @@ describe("Moves - Telekinesis", () => { it("Moves like Smack Down and 1000 Arrows remove all effects of Telekinesis from the target Pokemon", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyOpponent = game.scene.getEnemyPokemon()!; + const enemyOpponent = game.field.getEnemyPokemon(); game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); @@ -102,8 +102,8 @@ describe("Moves - Telekinesis", () => { game.override.enemyMoveset([MoveId.SPLASH, MoveId.INGRAIN]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyOpponent = game.scene.getEnemyPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); + const enemyOpponent = game.field.getEnemyPokemon(); game.move.select(MoveId.TELEKINESIS); await game.move.selectEnemyMove(MoveId.SPLASH); @@ -134,6 +134,6 @@ describe("Moves - Telekinesis", () => { game.doSelectPartyPokemon(1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.getTag(BattlerTagType.TELEKINESIS)).toBeUndefined(); + expect(game.field.getPlayerPokemon().getTag(BattlerTagType.TELEKINESIS)).toBeUndefined(); }); }); diff --git a/test/moves/tera-blast.test.ts b/test/moves/tera-blast.test.ts index 37dd8f53eaf..c23c990ec87 100644 --- a/test/moves/tera-blast.test.ts +++ b/test/moves/tera-blast.test.ts @@ -49,10 +49,10 @@ describe("Moves - Tera Blast", () => { it("changes type to match user's tera type", async () => { game.override.enemySpecies(SpeciesId.FURRET); await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.teraType = PokemonType.FIGHTING; playerPokemon.isTerastallized = true; @@ -66,7 +66,7 @@ describe("Moves - Tera Blast", () => { it("increases power if user is Stellar tera type", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; @@ -80,11 +80,11 @@ describe("Moves - Tera Blast", () => { it("is super effective against terastallized targets if user is Stellar tera type", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); enemyPokemon.isTerastallized = true; @@ -98,7 +98,7 @@ describe("Moves - Tera Blast", () => { it("uses the higher ATK for damage calculation", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.stats[Stat.ATK] = 100; playerPokemon.stats[Stat.SPATK] = 1; playerPokemon.isTerastallized = true; @@ -113,7 +113,7 @@ describe("Moves - Tera Blast", () => { it("uses the higher SPATK for damage calculation", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.stats[Stat.ATK] = 1; playerPokemon.stats[Stat.SPATK] = 100; @@ -128,7 +128,7 @@ describe("Moves - Tera Blast", () => { game.override.enemyMoveset([MoveId.CHARM]); await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.stats[Stat.ATK] = 51; playerPokemon.stats[Stat.SPATK] = 50; @@ -146,7 +146,7 @@ describe("Moves - Tera Blast", () => { .starterSpecies(SpeciesId.CUBONE); await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.stats[Stat.ATK] = 50; playerPokemon.stats[Stat.SPATK] = 51; @@ -164,7 +164,7 @@ describe("Moves - Tera Blast", () => { game.override.ability(AbilityId.HUGE_POWER); await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.stats[Stat.ATK] = 50; playerPokemon.stats[Stat.SPATK] = 51; @@ -179,7 +179,7 @@ describe("Moves - Tera Blast", () => { it("causes stat drops if user is Stellar tera type", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; @@ -199,14 +199,14 @@ describe("Moves - Tera Blast", () => { ])("should be $ty type if the user has $ab", async ({ ab_id, ty_id }) => { game.override.ability(ab_id).moveset([MoveId.TERA_BLAST]).enemyAbility(AbilityId.BALL_FETCH); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getMoveType(allMoves[MoveId.TERA_BLAST])).toBe(ty_id); }); it("should not be affected by normalize when the user is terastallized with tera normal", async () => { game.override.moveset([MoveId.TERA_BLAST]).ability(AbilityId.NORMALIZE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // override the tera state for the pokemon playerPokemon.isTerastallized = true; playerPokemon.teraType = PokemonType.NORMAL; diff --git a/test/moves/tera-starstorm.test.ts b/test/moves/tera-starstorm.test.ts index d13ab3fb3b0..869cf597dde 100644 --- a/test/moves/tera-starstorm.test.ts +++ b/test/moves/tera-starstorm.test.ts @@ -36,7 +36,7 @@ describe("Moves - Tera Starstorm", () => { game.override.battleStyle("single"); await game.classicMode.startBattle([SpeciesId.TERAPAGOS]); - const terapagos = game.scene.getPlayerPokemon()!; + const terapagos = game.field.getPlayerPokemon(); terapagos.isTerastallized = true; vi.spyOn(terapagos, "getMoveType"); diff --git a/test/moves/thousand-arrows.test.ts b/test/moves/thousand-arrows.test.ts index e42e92d35d2..47bdce8476c 100644 --- a/test/moves/thousand-arrows.test.ts +++ b/test/moves/thousand-arrows.test.ts @@ -36,7 +36,7 @@ describe("Moves - Thousand Arrows", () => { it("move should hit and ground Flying-type targets", async () => { await game.classicMode.startBattle([SpeciesId.ILLUMISE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THOUSAND_ARROWS); @@ -55,7 +55,7 @@ describe("Moves - Thousand Arrows", () => { await game.classicMode.startBattle([SpeciesId.ILLUMISE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THOUSAND_ARROWS); @@ -74,7 +74,7 @@ describe("Moves - Thousand Arrows", () => { await game.classicMode.startBattle([SpeciesId.ILLUMISE]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); enemyPokemon.addTag(BattlerTagType.FLOATING, undefined, MoveId.MAGNET_RISE); diff --git a/test/moves/throat-chop.test.ts b/test/moves/throat-chop.test.ts index f5e6a978e3d..a4f090b2de1 100644 --- a/test/moves/throat-chop.test.ts +++ b/test/moves/throat-chop.test.ts @@ -34,7 +34,7 @@ describe("Moves - Throat Chop", () => { it("prevents the target from using sound-based moves for two turns", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/thunder-wave.test.ts b/test/moves/thunder-wave.test.ts index 84408ace7e9..9c630852d48 100644 --- a/test/moves/thunder-wave.test.ts +++ b/test/moves/thunder-wave.test.ts @@ -36,7 +36,7 @@ describe("Moves - Thunder Wave", () => { game.override.enemySpecies(SpeciesId.MAGIKARP); await game.classicMode.startBattle(); - const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon: EnemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); @@ -49,7 +49,7 @@ describe("Moves - Thunder Wave", () => { game.override.enemySpecies(SpeciesId.DIGLETT); await game.classicMode.startBattle(); - const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon: EnemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); @@ -62,7 +62,7 @@ describe("Moves - Thunder Wave", () => { game.override.enemySpecies(SpeciesId.MAGIKARP).enemyStatusEffect(StatusEffect.BURN); await game.classicMode.startBattle(); - const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon: EnemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); @@ -75,7 +75,7 @@ describe("Moves - Thunder Wave", () => { game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.DIGLETT); await game.classicMode.startBattle(); - const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon: EnemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); @@ -88,7 +88,7 @@ describe("Moves - Thunder Wave", () => { game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.HAUNTER); await game.classicMode.startBattle(); - const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon: EnemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); diff --git a/test/moves/tidy-up.test.ts b/test/moves/tidy-up.test.ts index 8dd74e4ab78..51399552a08 100644 --- a/test/moves/tidy-up.test.ts +++ b/test/moves/tidy-up.test.ts @@ -92,7 +92,7 @@ describe("Moves - Tidy Up", () => { game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); - const pokemon = [game.scene.getPlayerPokemon()!, game.scene.getEnemyPokemon()!]; + const pokemon = [game.field.getPlayerPokemon(), game.field.getEnemyPokemon()]; pokemon.forEach(p => { expect(p).toBeDefined(); expect(p!.getTag(SubstituteTag)).toBeUndefined(); @@ -102,7 +102,7 @@ describe("Moves - Tidy Up", () => { it("user's stats are raised with no traps set", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); diff --git a/test/moves/torment.test.ts b/test/moves/torment.test.ts index 1ed4529fcbd..cdefd8ef005 100644 --- a/test/moves/torment.test.ts +++ b/test/moves/torment.test.ts @@ -36,7 +36,7 @@ describe("Moves - Torment", () => { it("Pokemon should not be able to use the same move consecutively", async () => { await game.classicMode.startBattle([SpeciesId.CHANSEY]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); // First turn, Player Pokemon uses Tackle successfully game.move.select(MoveId.TACKLE); diff --git a/test/moves/toxic-spikes.test.ts b/test/moves/toxic-spikes.test.ts index 1315eaa31c3..0a0bf8baefc 100644 --- a/test/moves/toxic-spikes.test.ts +++ b/test/moves/toxic-spikes.test.ts @@ -86,7 +86,7 @@ describe("Moves - Toxic Spikes", () => { it("should be removed if a grounded poison pokemon switches in", async () => { await game.classicMode.runToSummon([SpeciesId.MUK, SpeciesId.PIDGEY]); - const muk = game.scene.getPlayerPokemon()!; + const muk = game.field.getPlayerPokemon(); game.move.select(MoveId.TOXIC_SPIKES); await game.toNextTurn(); diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index 13af6cf48fd..8044d2f9a90 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -37,7 +37,7 @@ describe("Moves - Toxic", () => { game.move.select(MoveId.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.TOXIC); }); it("may miss if user is not Poison-type", async () => { @@ -47,7 +47,7 @@ describe("Moves - Toxic", () => { game.move.select(MoveId.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); - expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); + expect(game.field.getEnemyPokemon().status).toBeUndefined(); }); it("should hit semi-invulnerable targets if user is Poison-type", async () => { @@ -59,7 +59,7 @@ describe("Moves - Toxic", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); - expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); + expect(game.field.getEnemyPokemon().status?.effect).toBe(StatusEffect.TOXIC); }); it("should miss semi-invulnerable targets if user is not Poison-type", async () => { @@ -71,7 +71,7 @@ describe("Moves - Toxic", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); - expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); + expect(game.field.getEnemyPokemon().status).toBeUndefined(); }); it("moves other than Toxic should not hit semi-invulnerable targets even if user is Poison-type", async () => { @@ -82,7 +82,7 @@ describe("Moves - Toxic", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); }); }); diff --git a/test/moves/trick-or-treat.test.ts b/test/moves/trick-or-treat.test.ts index 095cda873e0..3e32c877b9e 100644 --- a/test/moves/trick-or-treat.test.ts +++ b/test/moves/trick-or-treat.test.ts @@ -35,13 +35,13 @@ describe("Moves - Trick Or Treat", () => { it("will replace added type from Forest's Curse", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemyPokemon = game.scene.getEnemyPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); game.move.select(MoveId.FORESTS_CURSE); await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemyPokemon!.summonData.addedType).toBe(PokemonType.GRASS); + expect(enemyPokemon.summonData.addedType).toBe(PokemonType.GRASS); game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemyPokemon?.summonData.addedType).toBe(PokemonType.GHOST); + expect(enemyPokemon.summonData.addedType).toBe(PokemonType.GHOST); }); }); diff --git a/test/moves/u-turn.test.ts b/test/moves/u-turn.test.ts index fb34490fdf4..25c333e58e1 100644 --- a/test/moves/u-turn.test.ts +++ b/test/moves/u-turn.test.ts @@ -37,7 +37,7 @@ describe("Moves - U-turn", () => { const playerHp = 1; game.override.ability(AbilityId.REGENERATOR); await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); - game.scene.getPlayerPokemon()!.hp = playerHp; + game.field.getPlayerPokemon().hp = playerHp; // act game.move.select(MoveId.U_TURN); @@ -49,7 +49,7 @@ describe("Moves - U-turn", () => { Math.floor(game.scene.getPlayerParty()[1].getMaxHp() * 0.33 + playerHp), ); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.SHUCKLE); + expect(game.field.getPlayerPokemon().species.speciesId).toBe(SpeciesId.SHUCKLE); }); it("triggers rough skin on the u-turn user before a new pokemon is switched in", async () => { @@ -63,9 +63,9 @@ describe("Moves - U-turn", () => { await game.phaseInterceptor.to("SwitchPhase", false); // assert - const playerPkm = game.scene.getPlayerPokemon()!; + const playerPkm = game.field.getPlayerPokemon(); expect(playerPkm.hp).not.toEqual(playerPkm.getMaxHp()); - expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated + expect(game.field.getEnemyPokemon().waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(playerPkm.species.speciesId).toEqual(SpeciesId.RAICHU); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); }); @@ -74,24 +74,24 @@ describe("Moves - U-turn", () => { // arrange game.override.enemyAbility(AbilityId.POISON_POINT); await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); - vi.spyOn(game.scene.getEnemyPokemon()!, "randBattleSeedInt").mockReturnValue(0); + vi.spyOn(game.field.getEnemyPokemon(), "randBattleSeedInt").mockReturnValue(0); // act game.move.select(MoveId.U_TURN); await game.phaseInterceptor.to("SwitchPhase", false); // assert - const playerPkm = game.scene.getPlayerPokemon()!; + const playerPkm = game.field.getPlayerPokemon(); expect(playerPkm.status?.effect).toEqual(StatusEffect.POISON); expect(playerPkm.species.speciesId).toEqual(SpeciesId.RAICHU); - expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated + expect(game.field.getEnemyPokemon().waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); }); it("still forces a switch if u-turn KO's the opponent", async () => { game.override.startingLevel(1000); // Ensure that U-Turn KO's the opponent await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); // KO the opponent with U-Turn game.move.select(MoveId.U_TURN); @@ -101,6 +101,6 @@ describe("Moves - U-turn", () => { // Check that U-Turn forced a switch expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.SHUCKLE); + expect(game.field.getPlayerPokemon().species.speciesId).toBe(SpeciesId.SHUCKLE); }); }); diff --git a/test/moves/upper-hand.test.ts b/test/moves/upper-hand.test.ts index 91f3a34b9c6..b2e8dca2afc 100644 --- a/test/moves/upper-hand.test.ts +++ b/test/moves/upper-hand.test.ts @@ -38,8 +38,8 @@ describe("Moves - Upper Hand", () => { it("should flinch the opponent before they use a priority attack", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const feebas = game.scene.getPlayerPokemon()!; - const magikarp = game.scene.getEnemyPokemon()!; + const feebas = game.field.getPlayerPokemon(); + const magikarp = game.field.getEnemyPokemon(); game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); @@ -57,7 +57,7 @@ describe("Moves - Upper Hand", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const feebas = game.scene.getPlayerPokemon()!; + const feebas = game.field.getPlayerPokemon(); game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); @@ -70,8 +70,8 @@ describe("Moves - Upper Hand", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const feebas = game.scene.getPlayerPokemon()!; - const magikarp = game.scene.getEnemyPokemon()!; + const feebas = game.field.getPlayerPokemon(); + const magikarp = game.field.getEnemyPokemon(); game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); @@ -86,7 +86,7 @@ describe("Moves - Upper Hand", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const feebas = game.scene.getPlayerPokemon()!; + const feebas = game.field.getPlayerPokemon(); game.move.select(MoveId.UPPER_HAND); diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index 90bbf722224..bbb2afe621a 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -48,7 +48,7 @@ describe("Moves - Whirlwind", () => { // Must have a pokemon in the back so that the move misses instead of fails. await game.classicMode.startBattle([SpeciesId.STARAPTOR, SpeciesId.MAGIKARP]); - const staraptor = game.scene.getPlayerPokemon()!; + const staraptor = game.field.getPlayerPokemon(); game.move.select(move); await game.move.selectEnemyMove(MoveId.WHIRLWIND); @@ -56,7 +56,7 @@ describe("Moves - Whirlwind", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(staraptor.findTag(t => t.tagType === BattlerTagType.FLYING)).toBeDefined(); - expect(game.scene.getEnemyPokemon()!.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); + expect(game.field.getEnemyPokemon().getLastXMoves(1)[0].result).toBe(MoveResult.MISS); }); it("should force switches randomly", async () => { @@ -206,9 +206,9 @@ describe("Moves - Whirlwind", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.TOTODILE]); // expect the enemy to have at least 4 pokemon, necessary for this check to even work - expect(game.scene.getEnemyParty().length, "enemy must have exactly 4 pokemon").toBe(4); + expect(game.scene.getEnemyParty().length, "enemy must have exactly 4 pokemon").toBeGreaterThanOrEqual(4); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); console.log(user.getMoveset(false)); @@ -219,7 +219,7 @@ describe("Moves - Whirlwind", () => { await game.toNextTurn(); // Get the enemy pokemon id so we can check if is the same after switch. - const enemy_id = game.scene.getEnemyPokemon()!.id; + const enemy_id = game.field.getEnemyPokemon().id; // Hit the enemy that fainted with whirlwind. game.move.select(MoveId.WHIRLWIND, 0, BattlerIndex.ENEMY); @@ -231,7 +231,7 @@ describe("Moves - Whirlwind", () => { await game.toNextTurn(); // Expect the enemy pokemon to not have switched out. - expect(game.scene.getEnemyPokemon()!.id).toBe(enemy_id); + expect(game.field.getEnemyPokemon().id).toBe(enemy_id); }); it("should force a wild pokemon to flee", async () => { @@ -242,7 +242,7 @@ describe("Moves - Whirlwind", () => { .ability(AbilityId.BALL_FETCH); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const user = game.scene.getPlayerPokemon()!; + const user = game.field.getPlayerPokemon(); game.move.select(MoveId.WHIRLWIND); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/wide-guard.test.ts b/test/moves/wide-guard.test.ts index e599829e1b9..b45b7327265 100644 --- a/test/moves/wide-guard.test.ts +++ b/test/moves/wide-guard.test.ts @@ -1,11 +1,12 @@ import { AbilityId } from "#enums/ability-id"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; +import { MoveResult } from "#enums/move-result"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; -import { BerryPhase } from "#phases/berry-phase"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Wide Guard", () => { let phaserGame: Phaser.Game; @@ -26,71 +27,84 @@ describe("Moves - Wide Guard", () => { game.override .battleStyle("double") - .moveset([MoveId.WIDE_GUARD, MoveId.SPLASH, MoveId.SURF]) + .moveset([MoveId.WIDE_GUARD, MoveId.SPLASH, MoveId.SURF, MoveId.SPIKY_SHIELD]) .enemySpecies(SpeciesId.SNORLAX) - .enemyMoveset(MoveId.SWIFT) + .enemyMoveset([MoveId.SWIFT, MoveId.GROWL, MoveId.TACKLE]) .enemyAbility(AbilityId.INSOMNIA) .startingLevel(100) .enemyLevel(100); }); - test("should protect the user and allies from multi-target attack moves", async () => { + it("should protect the user and allies from multi-target attack and status moves", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); + const [charizard, blastoise] = game.scene.getPlayerField(); - const leadPokemon = game.scene.getPlayerField(); + game.move.select(MoveId.WIDE_GUARD, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.SWIFT); + await game.move.forceEnemyMove(MoveId.GROWL); + await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(MoveId.WIDE_GUARD); - game.move.select(MoveId.SPLASH, 1); - - await game.phaseInterceptor.to(BerryPhase, false); - - leadPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); + expect(charizard.hp).toBe(charizard.getMaxHp()); + expect(blastoise.hp).toBe(blastoise.getMaxHp()); + expect(charizard.getStatStage(Stat.ATK)).toBe(0); + expect(blastoise.getStatStage(Stat.ATK)).toBe(0); }); - test("should protect the user and allies from multi-target status moves", async () => { - game.override.enemyMoveset([MoveId.GROWL]); - + it("should not protect the user and allies from single-target moves", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const [charizard, blastoise] = game.scene.getPlayerField(); + game.move.select(MoveId.WIDE_GUARD, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(MoveId.WIDE_GUARD); - game.move.select(MoveId.SPLASH, 1); - - await game.phaseInterceptor.to(BerryPhase, false); - - leadPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); + expect(charizard.hp).toBeLessThan(charizard.getMaxHp()); + expect(blastoise.hp).toBeLessThan(blastoise.getMaxHp()); }); - test("should not protect the user and allies from single-target moves", async () => { - game.override.enemyMoveset([MoveId.TACKLE]); + it("should protect the user from its ally's multi-target move", async () => { + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const charizard = game.scene.getPlayerPokemon()!; + const [snorlax1, snorlax2] = game.scene.getEnemyField(); - game.move.select(MoveId.WIDE_GUARD); - game.move.select(MoveId.SPLASH, 1); + game.move.select(MoveId.WIDE_GUARD, BattlerIndex.PLAYER); + game.move.select(MoveId.SURF, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(BerryPhase, false); - - expect(leadPokemon.some(p => p.hp < p.getMaxHp())).toBeTruthy(); + expect(charizard.hp).toBe(charizard.getMaxHp()); + expect(snorlax1.hp).toBeLessThan(snorlax1.getMaxHp()); + expect(snorlax2.hp).toBeLessThan(snorlax2.getMaxHp()); }); - test("should protect the user from its ally's multi-target move", async () => { - game.override.enemyMoveset([MoveId.SPLASH]); + it("should increment (but not respect) other protection moves' fail counters", async () => { + game.override.battleStyle("single"); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - - const leadPokemon = game.scene.getPlayerField(); - const enemyPokemon = game.scene.getEnemyField(); + const charizard = game.scene.getPlayerPokemon()!; + // force protect to fail on anything other than a guaranteed success + vi.spyOn(charizard, "randBattleSeedInt").mockReturnValue(1); game.move.select(MoveId.WIDE_GUARD); - game.move.select(MoveId.SURF, 1); + await game.toNextTurn(); - await game.phaseInterceptor.to(BerryPhase, false); + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(leadPokemon[0].hp).toBe(leadPokemon[0].getMaxHp()); - enemyPokemon.forEach(p => expect(p.hp).toBeLessThan(p.getMaxHp())); + // ignored fail chance + game.move.select(MoveId.WIDE_GUARD); + await game.toNextTurn(); + + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + + game.move.select(MoveId.SPIKY_SHIELD); + await game.toNextTurn(); + + // ignored fail chance + expect(charizard.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); }); diff --git a/test/moves/will-o-wisp.test.ts b/test/moves/will-o-wisp.test.ts index 5cb94c4617c..864413b0ce7 100644 --- a/test/moves/will-o-wisp.test.ts +++ b/test/moves/will-o-wisp.test.ts @@ -36,7 +36,7 @@ describe("Moves - Will-O-Wisp", () => { it("should burn the opponent", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; + const enemy = game.field.getEnemyPokemon(); game.move.select(MoveId.WILL_O_WISP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 3d29c04cab7..25116a89ec5 100644 --- a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -174,7 +174,7 @@ describe("Berries Abound - Mystery Encounter", () => { }); it("should start battle if fastest pokemon is slower than boss below wave 50", async () => { - game.override.startingWave(41); + game.override.startingWave(42); const encounterTextSpy = vi.spyOn(EncounterDialogueUtils, "showEncounterText"); await game.runToMysteryEncounter(MysteryEncounterType.BERRIES_ABOUND, defaultParty); diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 205bf996815..bed9d48d063 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -253,7 +253,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should start battle against the Bug-Type Superfan with wave 70 party template", async () => { - game.override.startingWave(61); + game.override.startingWave(63); await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); @@ -268,7 +268,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should start battle against the Bug-Type Superfan with wave 100 party template", async () => { - game.override.startingWave(81); + game.override.startingWave(83); await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); @@ -284,7 +284,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should start battle against the Bug-Type Superfan with wave 120 party template", async () => { - game.override.startingWave(111); + game.override.startingWave(113); await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); @@ -302,7 +302,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should start battle against the Bug-Type Superfan with wave 140 party template", async () => { - game.override.startingWave(131); + game.override.startingWave(133); await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); @@ -320,7 +320,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should start battle against the Bug-Type Superfan with wave 160 party template", async () => { - game.override.startingWave(151); + game.override.startingWave(153); await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); @@ -338,7 +338,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should start battle against the Bug-Type Superfan with wave 180 party template", async () => { - game.override.startingWave(171); + game.override.startingWave(173); await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); diff --git a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 8ec9b4cb345..a48422c459f 100644 --- a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -268,7 +268,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { await game.phaseInterceptor.to(SelectModifierPhase, false); expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); - const leadPokemonItems = scene.getPlayerParty()?.[0].getHeldItems() as PokemonHeldItemModifier[]; + const leadPokemonItems = scene.getPlayerParty()[0].getHeldItems() as PokemonHeldItemModifier[]; const item = leadPokemonItems.find(i => i instanceof AttackTypeBoosterModifier); expect(item).toBeDefined; }); diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index b66d0e95ad0..3025b08b8b6 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -144,9 +144,9 @@ describe("Fun And Games! - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); - expect(scene.getEnemyPokemon()?.species.speciesId).toBe(SpeciesId.WOBBUFFET); - expect(scene.getEnemyPokemon()?.ivs).toEqual([0, 0, 0, 0, 0, 0]); - expect(scene.getEnemyPokemon()?.nature).toBe(Nature.MILD); + expect(game.field.getEnemyPokemon().species.speciesId).toBe(SpeciesId.WOBBUFFET); + expect(game.field.getEnemyPokemon().ivs).toEqual([0, 0, 0, 0, 0, 0]); + expect(game.field.getEnemyPokemon().nature).toBe(Nature.MILD); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); @@ -206,7 +206,7 @@ describe("Fun And Games! - Mystery Encounter", () => { }); // Skip minigame - const wobbuffet = scene.getEnemyPokemon()!; + const wobbuffet = game.field.getEnemyPokemon(); wobbuffet.hp = Math.floor(0.2 * wobbuffet.getMaxHp()); scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); @@ -236,7 +236,7 @@ describe("Fun And Games! - Mystery Encounter", () => { }); // Skip minigame - const wobbuffet = scene.getEnemyPokemon()!; + const wobbuffet = game.field.getEnemyPokemon(); wobbuffet.hp = Math.floor(0.1 * wobbuffet.getMaxHp()); scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); @@ -266,7 +266,7 @@ describe("Fun And Games! - Mystery Encounter", () => { }); // Skip minigame - const wobbuffet = scene.getEnemyPokemon()!; + const wobbuffet = game.field.getEnemyPokemon(); wobbuffet.hp = 1; scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); diff --git a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 43d497c57bb..ff4f73cfbde 100644 --- a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -79,14 +79,6 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { expect(TeleportingHijinksEncounter.options.length).toBe(3); }); - it("should run in waves that are X1", async () => { - game.override.startingWave(11).mysteryEncounterTier(MysteryEncounterTier.COMMON); - - await game.runToMysteryEncounter(); - - expect(scene.currentBattle?.mysteryEncounter?.encounterType).toBe(MysteryEncounterType.TELEPORTING_HIJINKS); - }); - it("should run in waves that are X2", async () => { game.override.startingWave(32).mysteryEncounterTier(MysteryEncounterTier.COMMON); @@ -103,8 +95,16 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { expect(scene.currentBattle?.mysteryEncounter?.encounterType).toBe(MysteryEncounterType.TELEPORTING_HIJINKS); }); - it("should NOT run in waves that are not X1, X2, or X3", async () => { - game.override.startingWave(54); + it("should run in waves that are X4", async () => { + game.override.startingWave(54).mysteryEncounterTier(MysteryEncounterTier.COMMON); + + await game.runToMysteryEncounter(); + + expect(scene.currentBattle?.mysteryEncounter?.encounterType).toBe(MysteryEncounterType.TELEPORTING_HIJINKS); + }); + + it("should NOT run in waves that are not X2, X3, or X4", async () => { + game.override.startingWave(67); await game.runToMysteryEncounter(); diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index e9fcc9797d1..ed0d612e967 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -147,12 +147,13 @@ describe("Weird Dream - Mystery Encounter", () => { const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; - expect(modifierSelectHandler.options.length).toEqual(5); + expect(modifierSelectHandler.options.length).toEqual(6); expect(modifierSelectHandler.options[0].modifierTypeOption.type.id).toEqual("MEMORY_MUSHROOM"); expect(modifierSelectHandler.options[1].modifierTypeOption.type.id).toEqual("ROGUE_BALL"); expect(modifierSelectHandler.options[2].modifierTypeOption.type.id).toEqual("MINT"); expect(modifierSelectHandler.options[3].modifierTypeOption.type.id).toEqual("MINT"); - expect(modifierSelectHandler.options[3].modifierTypeOption.type.id).toEqual("MINT"); + expect(modifierSelectHandler.options[4].modifierTypeOption.type.id).toEqual("MINT"); + expect(modifierSelectHandler.options[5].modifierTypeOption.type.id).toEqual("MINT"); }); it("should leave encounter without battle", async () => { diff --git a/test/mystery-encounter/mystery-encounter.test.ts b/test/mystery-encounter/mystery-encounter.test.ts index 71bc9aec008..ec27f7c6a48 100644 --- a/test/mystery-encounter/mystery-encounter.test.ts +++ b/test/mystery-encounter/mystery-encounter.test.ts @@ -24,7 +24,7 @@ describe("Mystery Encounters", () => { beforeEach(() => { game = new GameManager(phaserGame); scene = game.scene; - game.override.startingWave(11).mysteryEncounterChance(100); + game.override.startingWave(12).mysteryEncounterChance(100); }); it("Spawns a mystery encounter", async () => { @@ -37,12 +37,20 @@ describe("Mystery Encounters", () => { expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(MysteryEncounterPhase.name); }); + it("Encounters should not run on X1 waves", async () => { + game.override.startingWave(11); + + await game.runToMysteryEncounter(); + + expect(scene.currentBattle.mysteryEncounter).toBeUndefined(); + }); + it("Encounters should not run below wave 10", async () => { game.override.startingWave(9); await game.runToMysteryEncounter(); - expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.MYSTERIOUS_CHALLENGERS); + expect(scene.currentBattle.mysteryEncounter).toBeUndefined(); }); it("Encounters should not run above wave 180", async () => { diff --git a/test/phases/frenzy-move-reset.test.ts b/test/phases/frenzy-move-reset.test.ts index 93406ddd577..feedd1b5865 100644 --- a/test/phases/frenzy-move-reset.test.ts +++ b/test/phases/frenzy-move-reset.test.ts @@ -52,7 +52,7 @@ describe("Frenzy Move Reset", () => { it("should cancel frenzy move if move fails turn 2", async () => { await game.classicMode.startBattle(); - const playerPokemon = game.scene.getPlayerPokemon()!; + const playerPokemon = game.field.getPlayerPokemon(); game.move.select(MoveId.THRASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts index 77902a0d959..3181f9238dd 100644 --- a/test/phases/learn-move-phase.test.ts +++ b/test/phases/learn-move-phase.test.ts @@ -29,7 +29,7 @@ describe("Learn Move Phase", () => { it("If Pokemon has less than 4 moves, its newest move will be added to the lowest empty index", async () => { game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const pokemon = game.scene.getPlayerPokemon()!; + const pokemon = game.field.getPlayerPokemon(); const newMovePos = pokemon?.getMoveset().length; game.move.select(MoveId.SPLASH); await game.doKillOpponents(); @@ -43,7 +43,7 @@ describe("Learn Move Phase", () => { it("If a pokemon has 4 move slots filled, the chosen move will be deleted and replaced", async () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const bulbasaur = game.scene.getPlayerPokemon()!; + const bulbasaur = game.field.getPlayerPokemon(); const prevMoveset = [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]; const moveSlotNum = 3; @@ -74,7 +74,7 @@ describe("Learn Move Phase", () => { it("selecting the newly deleted move will reject it and keep old moveset", async () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const bulbasaur = game.scene.getPlayerPokemon()!; + const bulbasaur = game.field.getPlayerPokemon(); const prevMoveset = [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]; game.move.changeMoveset(bulbasaur, [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]); diff --git a/test/phases/mystery-encounter-phase.test.ts b/test/phases/mystery-encounter-phase.test.ts index ad71a4151ac..2b6105c7034 100644 --- a/test/phases/mystery-encounter-phase.test.ts +++ b/test/phases/mystery-encounter-phase.test.ts @@ -27,7 +27,7 @@ describe("Mystery Encounter Phases", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.startingWave(11).mysteryEncounterChance(100).seed("test"); // Seed guarantees wild encounter to be replaced by ME + game.override.startingWave(12).mysteryEncounterChance(100).seed("test"); // Seed guarantees wild encounter to be replaced by ME }); describe("MysteryEncounterPhase", () => { diff --git a/test/test-utils/game-manager-utils.ts b/test/test-utils/game-manager-utils.ts index db758cfe64d..89e352cdbdc 100644 --- a/test/test-utils/game-manager-utils.ts +++ b/test/test-utils/game-manager-utils.ts @@ -3,7 +3,6 @@ import type { BattleScene } from "#app/battle-scene"; import { getGameMode } from "#app/game-mode"; import { getDailyRunStarters } from "#data/daily-run"; import { Gender } from "#data/gender"; -import { getPokemonSpeciesForm } from "#data/pokemon-species"; import { BattleType } from "#enums/battle-type"; import { GameModes } from "#enums/game-modes"; import type { MoveId } from "#enums/move-id"; @@ -11,7 +10,7 @@ import type { SpeciesId } from "#enums/species-id"; import { PlayerPokemon } from "#field/pokemon"; import type { StarterMoveset } from "#system/game-data"; import type { Starter } from "#ui/starter-select-ui-handler"; -import { getPokemonSpecies } from "#utils/pokemon-utils"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; /** Function to convert Blob to string */ export function blobToString(blob) { @@ -87,17 +86,6 @@ function getTestRunStarters(seed: string, species?: SpeciesId[]): Starter[] { return starters; } -export function waitUntil(truth): Promise { - return new Promise(resolve => { - const interval = setInterval(() => { - if (truth()) { - clearInterval(interval); - resolve(true); - } - }, 1000); - }); -} - /** * Useful for populating party, wave index, etc. without having to spin up and run through an entire EncounterPhase */ diff --git a/test/test-utils/game-manager.ts b/test/test-utils/game-manager.ts index 23a2e6240f8..f952557bb69 100644 --- a/test/test-utils/game-manager.ts +++ b/test/test-utils/game-manager.ts @@ -31,7 +31,7 @@ import { TurnEndPhase } from "#phases/turn-end-phase"; import { TurnInitPhase } from "#phases/turn-init-phase"; import { TurnStartPhase } from "#phases/turn-start-phase"; import { ErrorInterceptor } from "#test/test-utils/error-interceptor"; -import { generateStarter, waitUntil } from "#test/test-utils/game-manager-utils"; +import { generateStarter } from "#test/test-utils/game-manager-utils"; import { GameWrapper } from "#test/test-utils/game-wrapper"; import { ChallengeModeHelper } from "#test/test-utils/helpers/challenge-mode-helper"; import { ClassicModeHelper } from "#test/test-utils/helpers/classic-mode-helper"; @@ -85,30 +85,22 @@ export class GameManager { constructor(phaserGame: Phaser.Game, bypassLogin = true) { localStorage.clear(); ErrorInterceptor.getInstance().clear(); - BattleScene.prototype.randBattleSeedInt = (range, min = 0) => min + range - 1; // This simulates a max roll + // Simulate max rolls on RNG functions + // TODO: Create helpers for disabling/enabling battle RNG + BattleScene.prototype.randBattleSeedInt = (range, min = 0) => min + range - 1; this.gameWrapper = new GameWrapper(phaserGame, bypassLogin); - let firstTimeScene = false; + // TODO: Figure out a way to optimize and re-use the same game manager for each test + // Re-use an existing `globalScene` if present, or else create a new scene from scratch. if (globalScene) { this.scene = globalScene; + this.phaseInterceptor = new PhaseInterceptor(this.scene); + this.resetScene(); } else { this.scene = new BattleScene(); + this.phaseInterceptor = new PhaseInterceptor(this.scene); this.gameWrapper.setScene(this.scene); - firstTimeScene = true; - } - - this.phaseInterceptor = new PhaseInterceptor(this.scene); - - if (!firstTimeScene) { - this.scene.reset(false, true); - (this.scene.ui.handlers[UiMode.STARTER_SELECT] as StarterSelectUiHandler).clearStarterPreferences(); - - // Must be run after phase interceptor has been initialized. - this.scene.phaseManager.toTitleScreen(true); - this.scene.phaseManager.shiftPhase(); - - this.gameWrapper.scene = this.scene; } this.textInterceptor = new TextInterceptor(this.scene); @@ -122,10 +114,30 @@ export class GameManager { this.modifiers = new ModifierHelper(this); this.field = new FieldHelper(this); + this.initDefaultOverrides(); + + // TODO: remove `any` assertion + global.fetch = vi.fn(MockFetch) as any; + } + + /** Reset a prior `BattleScene` instance to the proper initial state. */ + private resetScene(): void { + this.scene.reset(false, true); + (this.scene.ui.handlers[UiMode.STARTER_SELECT] as StarterSelectUiHandler).clearStarterPreferences(); + + this.gameWrapper.scene = this.scene; + + this.scene.phaseManager.toTitleScreen(true); + this.scene.phaseManager.shiftPhase(); + } + + /** + * Initialize various default overrides for starting tests, typically to alleviate randomness. + */ + // TODO: This should not be here + private initDefaultOverrides(): void { // Disables Mystery Encounters on all tests (can be overridden at test level) this.override.mysteryEncounterChance(0); - - global.fetch = vi.fn(MockFetch) as any; } /** @@ -141,15 +153,13 @@ export class GameManager { * @param mode - The mode to wait for. * @returns A promise that resolves when the mode is set. */ - waitMode(mode: UiMode): Promise { - return new Promise(async resolve => { - await waitUntil(() => this.scene.ui?.getMode() === mode); - return resolve(); - }); + // TODO: This is unused + async waitMode(mode: UiMode): Promise { + await vi.waitUntil(() => this.scene.ui?.getMode() === mode); } /** - * Ends the current phase. + * End the currently running phase immediately. */ endPhase() { this.scene.phaseManager.getCurrentPhase()?.end(); @@ -283,11 +293,14 @@ export class GameManager { .getPokemon() .getMoveset() [movePosition].getMove(); - if (!move.isMultiTarget()) { - handler.setCursor(targetIndex !== undefined ? targetIndex : BattlerIndex.ENEMY); - } - if (move.isMultiTarget() && targetIndex !== undefined) { - expect.fail(`targetIndex was passed to selectMove() but move ("${move.name}") is not targetted`); + + // Multi target attacks do not select a target + if (move.isMultiTarget()) { + if (targetIndex !== undefined) { + expect.fail(`targetIndex was passed to selectMove() but move ("${move.name}") is not targeted`); + } + } else { + handler.setCursor(targetIndex ?? BattlerIndex.ENEMY); } handler.processInput(Button.ACTION); }, diff --git a/test/test-utils/helpers/move-helper.ts b/test/test-utils/helpers/move-helper.ts index 041df916cbf..6a01e4110da 100644 --- a/test/test-utils/helpers/move-helper.ts +++ b/test/test-utils/helpers/move-helper.ts @@ -143,7 +143,7 @@ export class MoveHelper extends GameManagerHelper { } } - /** Helper function to get the index of the selected move in the selected part member's moveset. */ + /** Helper function to get the index of the selected move in the selected party member's moveset. */ private getMovePosition(pokemonIndex: BattlerIndex.PLAYER | BattlerIndex.PLAYER_2, move: MoveId): number { const playerPokemon = this.game.scene.getPlayerField()[pokemonIndex]; const moveset = playerPokemon.getMoveset(); @@ -153,17 +153,18 @@ export class MoveHelper extends GameManagerHelper { } /** - * Modifies a player pokemon's moveset to contain only the selected move and then + * Modifies a player pokemon's moveset to contain only the selected move, and then * selects it to be used during the next {@linkcode CommandPhase}. * - * Warning: Will disable the player moveset override if it is enabled! + * **Warning**: Will disable the player moveset override if it is enabled, as well as any mid-battle moveset changes! * - * Note: If you need to check for changes in the player's moveset as part of the test, it may be - * best to use {@linkcode changeMoveset} and {@linkcode select} instead. - * @param moveId - the move to use - * @param pkmIndex - The {@linkcode BattlerIndex} of the player Pokemon using the move. Relevant for double battles only and defaults to {@linkcode BattlerIndex.PLAYER} if not specified. - * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves; should be omitted for multi-target moves. - * @param useTera - If `true`, the Pokemon will attempt to Terastallize even without a Tera Orb; default `false`. + * @param moveId - The {@linkcode MoveId} to use + * @param pkmIndex - The {@linkcode BattlerIndex} of the player Pokemon using the move. Relevant for double battles only and defaults to {@linkcode BattlerIndex.PLAYER} if not specified + * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves; should be omitted for multi-target moves + * @param useTera - If `true`, the Pokemon will attempt to Terastallize even without a Tera Orb; default `false` + * @remarks + * If you need to check for changes in the player's moveset as part of the test, it may be + * better to use {@linkcode changeMoveset} and {@linkcode select} instead. */ public use( moveId: MoveId, @@ -176,8 +177,11 @@ export class MoveHelper extends GameManagerHelper { console.warn("Warning: `MoveHelper.use` overwriting player pokemon moveset and disabling moveset override!"); } + // Clear out both the normal and temporary movesets before setting the move. const pokemon = this.game.scene.getPlayerField()[pkmIndex]; - pokemon.moveset = [new PokemonMove(moveId)]; + pokemon.moveset.splice(0); + pokemon.summonData.moveset?.splice(0); + pokemon.setMove(0, moveId); if (useTera) { this.selectWithTera(moveId, pkmIndex, targetIndex); @@ -211,7 +215,7 @@ export class MoveHelper extends GameManagerHelper { /** * Changes a pokemon's moveset to the given move(s). * - * Used when the normal moveset override can't be used (such as when it's necessary to check or update properties of the moveset). + * Useful when normal moveset overrides can't be used (such as when it's necessary to check or update properties of the moveset). * * **Note**: Will disable the moveset override matching the pokemon's party. * @param pokemon - The {@linkcode Pokemon} being modified @@ -232,8 +236,8 @@ export class MoveHelper extends GameManagerHelper { moveset = coerceArray(moveset); expect(moveset.length, "Cannot assign more than 4 moves to a moveset!").toBeLessThanOrEqual(4); pokemon.moveset = []; - moveset.forEach(move => { - pokemon.moveset.push(new PokemonMove(move)); + moveset.forEach((move, i) => { + pokemon.setMove(i, move); }); const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); console.log(`Pokemon ${pokemon.species.name}'s moveset manually set to ${movesetStr} (=[${moveset.join(", ")}])!`); diff --git a/test/test-utils/matchers/to-equal-array-unsorted.ts b/test/test-utils/matchers/to-equal-array-unsorted.ts index 0627623bbd9..846ea9e7779 100644 --- a/test/test-utils/matchers/to-equal-array-unsorted.ts +++ b/test/test-utils/matchers/to-equal-array-unsorted.ts @@ -1,43 +1,47 @@ +import { getOnelineDiffStr } from "#test/test-utils/string-utils"; import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; /** - * Matcher to check if an array contains exactly the given items, disregarding order. - * @param received - The object to check. Should be an array of elements. - * @returns The result of the matching + * Matcher that checks if an array contains exactly the given items, disregarding order. + * @param received - The received value. Should be an array of elements + * @param expected - The array to check equality with + * @returns Whether the matcher passed */ -export function toEqualArrayUnsorted(this: MatcherState, received: unknown, expected: unknown): SyncExpectationResult { +export function toEqualArrayUnsorted( + this: MatcherState, + received: unknown, + expected: unknown[], +): SyncExpectationResult { if (!Array.isArray(received)) { return { - pass: this.isNot, + pass: false, message: () => `Expected an array, but got ${this.utils.stringify(received)}!`, }; } - if (!Array.isArray(expected)) { - return { - pass: this.isNot, - message: () => `Expected to recieve an array, but got ${this.utils.stringify(expected)}!`, - }; - } - if (received.length !== expected.length) { return { - pass: this.isNot, - message: () => `Expected to recieve array of length ${received.length}, but got ${expected.length}!`, + pass: false, + message: () => `Expected to receive array of length ${received.length}, but got ${expected.length} instead!`, actual: received, expected, }; } - const gotSorted = received.slice().sort(); - const wantSorted = expected.slice().sort(); - const pass = this.equals(gotSorted, wantSorted, [...this.customTesters, this.utils.iterableEquality]); + const actualSorted = received.slice().sort(); + const expectedSorted = expected.slice().sort(); + const pass = this.equals(actualSorted, expectedSorted, [...this.customTesters, this.utils.iterableEquality]); + + const actualStr = getOnelineDiffStr.call(this, actualSorted); + const expectedStr = getOnelineDiffStr.call(this, expectedSorted); return { - pass: this.isNot !== pass, + pass, message: () => - `Expected ${this.utils.stringify(received)} to exactly equal ${this.utils.stringify(expected)} without order!`, - actual: gotSorted, - expected: wantSorted, + pass + ? `Expected ${actualStr} to NOT exactly equal ${expectedStr} without order, but it did!` + : `Expected ${actualStr} to exactly equal ${expectedStr} without order, but it didn't!`, + expected: expectedSorted, + actual: actualSorted, }; } diff --git a/test/test-utils/matchers/to-have-ability-applied.ts b/test/test-utils/matchers/to-have-ability-applied.ts new file mode 100644 index 00000000000..a3921e6371c --- /dev/null +++ b/test/test-utils/matchers/to-have-ability-applied.ts @@ -0,0 +1,43 @@ +/* biome-ignore-start lint/correctness/noUnusedImports: tsdoc imports */ +import type { Pokemon } from "#field/pokemon"; +/* biome-ignore-end lint/correctness/noUnusedImports: tsdoc imports */ + +import { getPokemonNameWithAffix } from "#app/messages"; +import { AbilityId } from "#enums/ability-id"; +import { getEnumStr } from "#test/test-utils/string-utils"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if a {@linkcode Pokemon} has applied a specific {@linkcode AbilityId}. + * @param received - The object to check. Should be a {@linkcode Pokemon} + * @param expectedAbility - The {@linkcode AbilityId} to check for + * @returns Whether the matcher passed + */ +export function toHaveAbilityApplied( + this: MatcherState, + received: unknown, + expectedAbilityId: AbilityId, +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to recieve a Pokemon, but got ${receivedStr(received)}!`, + }; + } + + const pass = received.waveData.abilitiesApplied.has(expectedAbilityId); + + const pkmName = getPokemonNameWithAffix(received); + const expectedAbilityStr = getEnumStr(AbilityId, expectedAbilityId); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have applied ${expectedAbilityStr}, but it did!` + : `Expected ${pkmName} to have applied ${expectedAbilityStr}, but it didn't!`, + expected: expectedAbilityId, + actual: received.waveData.abilitiesApplied, + }; +} diff --git a/test/test-utils/matchers/to-have-battler-tag.ts b/test/test-utils/matchers/to-have-battler-tag.ts new file mode 100644 index 00000000000..af405d7da39 --- /dev/null +++ b/test/test-utils/matchers/to-have-battler-tag.ts @@ -0,0 +1,43 @@ +/* biome-ignore-start lint/correctness/noUnusedImports: tsdoc imports */ +import type { Pokemon } from "#field/pokemon"; +/* biome-ignore-end lint/correctness/noUnusedImports: tsdoc imports */ + +import { getPokemonNameWithAffix } from "#app/messages"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { getEnumStr } from "#test/test-utils/string-utils"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if a {@linkcode Pokemon} has a specific {@linkcode BattlerTagType}. + * @param received - The object to check. Should be a {@linkcode Pokemon} + * @param expectedBattlerTagType - The {@linkcode BattlerTagType} to check for + * @returns Whether the matcher passed + */ +export function toHaveBattlerTag( + this: MatcherState, + received: unknown, + expectedBattlerTagType: BattlerTagType, +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: this.isNot, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const pass = !!received.getTag(expectedBattlerTagType); + const pkmName = getPokemonNameWithAffix(received); + // "BattlerTagType.SEEDED (=1)" + const expectedTagStr = getEnumStr(BattlerTagType, expectedBattlerTagType, { prefix: "BattlerTagType." }); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have ${expectedTagStr}, but it did!` + : `Expected ${pkmName} to have ${expectedTagStr}, but it didn't!`, + expected: expectedBattlerTagType, + actual: received.summonData.tags.map(t => t.tagType), + }; +} diff --git a/test/test-utils/matchers/to-have-effective-stat.ts b/test/test-utils/matchers/to-have-effective-stat.ts new file mode 100644 index 00000000000..bc10a646c02 --- /dev/null +++ b/test/test-utils/matchers/to-have-effective-stat.ts @@ -0,0 +1,66 @@ +import { getPokemonNameWithAffix } from "#app/messages"; +import type { EffectiveStat } from "#enums/stat"; +import type { Pokemon } from "#field/pokemon"; +import type { Move } from "#moves/move"; +import { getStatName } from "#test/test-utils/string-utils"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +export interface ToHaveEffectiveStatMatcherOptions { + /** + * The target {@linkcode Pokemon} + * @see {@linkcode Pokemon.getEffectiveStat} + */ + enemy?: Pokemon; + /** + * The {@linkcode Move} being used + * @see {@linkcode Pokemon.getEffectiveStat} + */ + move?: Move; + /** + * Whether a critical hit occurred or not + * @see {@linkcode Pokemon.getEffectiveStat} + * @defaultValue `false` + */ + isCritical?: boolean; +} + +/** + * Matcher that checks if a {@linkcode Pokemon}'s effective stat equals a certain value. + * @param received - The object to check. Should be a {@linkcode Pokemon} + * @param stat - The {@linkcode EffectiveStat} to check + * @param expectedValue - The expected value of the {@linkcode stat} + * @param options - The {@linkcode ToHaveEffectiveStatMatcherOptions} + * @returns Whether the matcher passed + */ +export function toHaveEffectiveStat( + this: MatcherState, + received: unknown, + stat: EffectiveStat, + expectedValue: number, + { enemy, move, isCritical = false }: ToHaveEffectiveStatMatcherOptions = {}, +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + // TODO: Change once getEffectiveStat is refactored to take an object literal + const actualValue = received.getEffectiveStat(stat, enemy, move, undefined, undefined, undefined, isCritical); + const pass = actualValue === expectedValue; + + const pkmName = getPokemonNameWithAffix(received); + const statName = getStatName(stat); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have ${expectedValue} ${statName}, but it did!` + : `Expected ${pkmName} to have ${expectedValue} ${statName}, but got ${actualValue} instead!`, + expected: expectedValue, + actual: actualValue, + }; +} diff --git a/test/test-utils/matchers/to-have-fainted.ts b/test/test-utils/matchers/to-have-fainted.ts new file mode 100644 index 00000000000..73ca96a31b5 --- /dev/null +++ b/test/test-utils/matchers/to-have-fainted.ts @@ -0,0 +1,35 @@ +import { getPokemonNameWithAffix } from "#app/messages"; +// biome-ignore lint/correctness/noUnusedImports: TSDoc +import type { Pokemon } from "#field/pokemon"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if a {@linkcode Pokemon} has fainted. + * @param received - The object to check. Should be a {@linkcode Pokemon} + * @returns Whether the matcher passed + */ +export function toHaveFainted(this: MatcherState, received: unknown): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const pass = received.isFainted(); + + const hp = received.hp; + const maxHp = received.getMaxHp(); + const pkmName = getPokemonNameWithAffix(received); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have fainted, but it did!` + : `Expected ${pkmName} to have fainted, but it didn't! (${hp}/${maxHp} HP)`, + expected: 0, + actual: hp, + }; +} diff --git a/test/test-utils/matchers/to-have-full-hp.ts b/test/test-utils/matchers/to-have-full-hp.ts new file mode 100644 index 00000000000..3d7c8f9458d --- /dev/null +++ b/test/test-utils/matchers/to-have-full-hp.ts @@ -0,0 +1,35 @@ +import { getPokemonNameWithAffix } from "#app/messages"; +// biome-ignore lint/correctness/noUnusedImports: TSDoc +import type { Pokemon } from "#field/pokemon"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if a {@linkcode Pokemon} is at full hp. + * @param received - The object to check. Should be a {@linkcode Pokemon}. + * @returns Whether the matcher passed + */ +export function toHaveFullHp(this: MatcherState, received: unknown): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const pass = received.isFullHp(); + + const hp = received.hp; + const maxHp = received.getMaxHp(); + const pkmName = getPokemonNameWithAffix(received); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have full hp, but it did!` + : `Expected ${pkmName} to have full hp, but it didn't! (${hp}/${maxHp} HP)`, + expected: maxHp, + actual: hp, + }; +} diff --git a/test/test-utils/matchers/to-have-hp.ts b/test/test-utils/matchers/to-have-hp.ts new file mode 100644 index 00000000000..20d171b23ce --- /dev/null +++ b/test/test-utils/matchers/to-have-hp.ts @@ -0,0 +1,35 @@ +import { getPokemonNameWithAffix } from "#app/messages"; +// biome-ignore lint/correctness/noUnusedImports: TSDoc +import type { Pokemon } from "#field/pokemon"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if a Pokemon has a specific amount of HP. + * @param received - The object to check. Should be a {@linkcode Pokemon}. + * @param expectedHp - The expected amount of HP the {@linkcode Pokemon} has + * @returns Whether the matcher passed + */ +export function toHaveHp(this: MatcherState, received: unknown, expectedHp: number): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const actualHp = received.hp; + const pass = actualHp === expectedHp; + + const pkmName = getPokemonNameWithAffix(received); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have ${expectedHp} HP, but it did!` + : `Expected ${pkmName} to have ${expectedHp} HP, but got ${actualHp} HP instead!`, + expected: expectedHp, + actual: actualHp, + }; +} diff --git a/test/test-utils/matchers/to-have-stat-stage.ts b/test/test-utils/matchers/to-have-stat-stage.ts new file mode 100644 index 00000000000..feecd650bef --- /dev/null +++ b/test/test-utils/matchers/to-have-stat-stage.ts @@ -0,0 +1,53 @@ +/** biome-ignore-start lint/correctness/noUnusedImports: TSDoc imports */ +import type { Pokemon } from "#field/pokemon"; +/** biome-ignore-end lint/correctness/noUnusedImports: TSDoc imports */ + +import { getPokemonNameWithAffix } from "#app/messages"; +import type { BattleStat } from "#enums/stat"; +import { getStatName } from "#test/test-utils/string-utils"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if a Pokemon has a specific {@linkcode BattleStat | Stat} stage. + * @param received - The object to check. Should be a {@linkcode Pokemon}. + * @param stat - The {@linkcode BattleStat | Stat} to check + * @param expectedStage - The expected numerical value of {@linkcode stat}; should be within the range `[-6, 6]` + * @returns Whether the matcher passed + */ +export function toHaveStatStage( + this: MatcherState, + received: unknown, + stat: BattleStat, + expectedStage: number, +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + if (expectedStage < -6 || expectedStage > 6) { + return { + pass: false, + message: () => `Expected ${expectedStage} to be within the range [-6, 6]!`, + }; + } + + const actualStage = received.getStatStage(stat); + const pass = actualStage === expectedStage; + + const pkmName = getPokemonNameWithAffix(received); + const statName = getStatName(stat); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName}'s ${statName} stat stage to NOT be ${expectedStage}, but it was!` + : `Expected ${pkmName}'s ${statName} stat stage to be ${expectedStage}, but got ${actualStage} instead!`, + expected: expectedStage, + actual: actualStage, + }; +} diff --git a/test/test-utils/matchers/to-have-status-effect.ts b/test/test-utils/matchers/to-have-status-effect.ts new file mode 100644 index 00000000000..a46800632f3 --- /dev/null +++ b/test/test-utils/matchers/to-have-status-effect.ts @@ -0,0 +1,83 @@ +/* biome-ignore-start lint/correctness/noUnusedImports: tsdoc imports */ +import type { Status } from "#data/status-effect"; +import type { Pokemon } from "#field/pokemon"; +/* biome-ignore-end lint/correctness/noUnusedImports: tsdoc imports */ + +import { getPokemonNameWithAffix } from "#app/messages"; +import { StatusEffect } from "#enums/status-effect"; +import { getEnumStr, getOnelineDiffStr } from "#test/test-utils/string-utils"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +export type expectedStatusType = + | StatusEffect + | { effect: StatusEffect.TOXIC; toxicTurnCount: number } + | { effect: StatusEffect.SLEEP; sleepTurnsRemaining: number }; + +/** + * Matcher that checks if a Pokemon's {@linkcode StatusEffect} is as expected + * @param received - The actual value received. Should be a {@linkcode Pokemon} + * @param expectedStatus - The {@linkcode StatusEffect} the Pokemon is expected to have, + * or a partially filled {@linkcode Status} containing the desired properties + * @returns Whether the matcher passed + */ +export function toHaveStatusEffect( + this: MatcherState, + received: unknown, + expectedStatus: expectedStatusType, +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const pkmName = getPokemonNameWithAffix(received); + const actualEffect = received.status?.effect ?? StatusEffect.NONE; + + // Check exclusively effect equality first, coercing non-matching status effects to numbers. + if (actualEffect !== (expectedStatus as Exclude)?.effect) { + // This is actually 100% safe as `expectedStatus?.effect` will evaluate to `undefined` if a StatusEffect was passed, + // which will never match actualEffect by definition + expectedStatus = (expectedStatus as Exclude).effect; + } + + if (typeof expectedStatus === "number") { + const pass = this.equals(actualEffect, expectedStatus, [...this.customTesters, this.utils.iterableEquality]); + + const actualStr = getEnumStr(StatusEffect, actualEffect, { prefix: "StatusEffect." }); + const expectedStr = getEnumStr(StatusEffect, expectedStatus, { prefix: "StatusEffect." }); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have ${expectedStr}, but it did!` + : `Expected ${pkmName} to have status effect ${expectedStr}, but got ${actualStr} instead!`, + expected: expectedStatus, + actual: actualEffect, + }; + } + + // Check for equality of all fields (for toxic turn count/etc) + const actualStatus = received.status; + const pass = this.equals(received, expectedStatus, [ + ...this.customTesters, + this.utils.subsetEquality, + this.utils.iterableEquality, + ]); + + const expectedStr = getOnelineDiffStr.call(this, expectedStatus); + const actualStr = getOnelineDiffStr.call(this, actualStatus); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName}'s status to NOT match ${expectedStr}, but it did!` + : `Expected ${pkmName}'s status to match ${expectedStr}, but got ${actualStr} instead!`, + expected: expectedStatus, + actual: actualStatus, + }; +} diff --git a/test/test-utils/matchers/to-have-taken-damage.ts b/test/test-utils/matchers/to-have-taken-damage.ts new file mode 100644 index 00000000000..77c60ae836a --- /dev/null +++ b/test/test-utils/matchers/to-have-taken-damage.ts @@ -0,0 +1,46 @@ +/** biome-ignore-start lint/correctness/noUnusedImports: TSDoc imports */ +import type { Pokemon } from "#field/pokemon"; +/** biome-ignore-end lint/correctness/noUnusedImports: TSDoc imports */ + +import { getPokemonNameWithAffix } from "#app/messages"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import { toDmgValue } from "#utils/common"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if a Pokemon has taken a specific amount of damage. + * Unless specified, will run the expected damage value through {@linkcode toDmgValue} + * to round it down and make it a minimum of 1. + * @param received - The object to check. Should be a {@linkcode Pokemon}. + * @param expectedDamageTaken - The expected amount of damage the {@linkcode Pokemon} has taken + * @param roundDown - Whether to round down {@linkcode expectedDamageTaken} with {@linkcode toDmgValue}; default `true` + * @returns Whether the matcher passed + */ +export function toHaveTakenDamage( + this: MatcherState, + received: unknown, + expectedDamageTaken: number, + roundDown = true, +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const expectedDmgValue = roundDown ? toDmgValue(expectedDamageTaken) : expectedDamageTaken; + const actualDmgValue = received.getInverseHp(); + const pass = actualDmgValue === expectedDmgValue; + const pkmName = getPokemonNameWithAffix(received); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have taken ${expectedDmgValue} damage, but it did!` + : `Expected ${pkmName} to have taken ${expectedDmgValue} damage, but got ${actualDmgValue} instead!`, + expected: expectedDmgValue, + actual: actualDmgValue, + }; +} diff --git a/test/test-utils/matchers/to-have-terrain.ts b/test/test-utils/matchers/to-have-terrain.ts new file mode 100644 index 00000000000..292c32abafc --- /dev/null +++ b/test/test-utils/matchers/to-have-terrain.ts @@ -0,0 +1,62 @@ +/** biome-ignore-start lint/correctness/noUnusedImports: TSDoc imports */ +import type { GameManager } from "#test/test-utils/game-manager"; +/** biome-ignore-end lint/correctness/noUnusedImports: TSDoc imports */ + +import { TerrainType } from "#app/data/terrain"; +import { getEnumStr } from "#test/test-utils/string-utils"; +import { isGameManagerInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if the {@linkcode TerrainType} is as expected + * @param received - The object to check. Should be an instance of {@linkcode GameManager}. + * @param expectedTerrainType - The expected {@linkcode TerrainType}, or {@linkcode TerrainType.NONE} if no terrain should be active + * @returns Whether the matcher passed + */ +export function toHaveTerrain( + this: MatcherState, + received: unknown, + expectedTerrainType: TerrainType, +): SyncExpectationResult { + if (!isGameManagerInstance(received)) { + return { + pass: false, + message: () => `Expected GameManager, but got ${receivedStr(received)}!`, + }; + } + + if (!received.scene?.arena) { + return { + pass: false, + message: () => `Expected GameManager.${received.scene ? "scene" : "scene.arena"} to be defined!`, + }; + } + + const actual = received.scene.arena.getTerrainType(); + const pass = actual === expectedTerrainType; + const actualStr = toTerrainStr(actual); + const expectedStr = toTerrainStr(expectedTerrainType); + + return { + pass, + message: () => + pass + ? `Expected Arena to NOT have ${expectedStr} active, but it did!` + : `Expected Arena to have ${expectedStr} active, but got ${actualStr} instead!`, + expected: expectedTerrainType, + actual, + }; +} + +/** + * Get a human readable string of the current {@linkcode TerrainType}. + * @param terrainType - The {@linkcode TerrainType} to transform + * @returns A human readable string + */ +function toTerrainStr(terrainType: TerrainType) { + if (terrainType === TerrainType.NONE) { + return "no terrain"; + } + // "Electric Terrain (=2)" + return getEnumStr(TerrainType, terrainType, { casing: "Title", suffix: " Terrain" }); +} diff --git a/test/test-utils/matchers/to-have-types.ts b/test/test-utils/matchers/to-have-types.ts index d09f4fc5f76..3f16f740583 100644 --- a/test/test-utils/matchers/to-have-types.ts +++ b/test/test-utils/matchers/to-have-types.ts @@ -1,6 +1,9 @@ +import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonType } from "#enums/pokemon-type"; -import { Pokemon } from "#field/pokemon"; +import type { Pokemon } from "#field/pokemon"; +import { stringifyEnumArray } from "#test/test-utils/string-utils"; import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; +import { isPokemonInstance, receivedStr } from "../test-utils"; export interface toHaveTypesOptions { /** @@ -15,7 +18,7 @@ export interface toHaveTypesOptions { } /** - * Matcher to check if an array contains exactly the given items, disregarding order. + * Matcher that checks if an array contains exactly the given items, disregarding order. * @param received - The object to check. Should be an array of one or more {@linkcode PokemonType}s. * @param options - The {@linkcode toHaveTypesOptions | options} for this matcher * @returns The result of the matching @@ -23,42 +26,36 @@ export interface toHaveTypesOptions { export function toHaveTypes( this: MatcherState, received: unknown, - expected: unknown, + expected: [PokemonType, ...PokemonType[]], options: toHaveTypesOptions = {}, ): SyncExpectationResult { - if (!(received instanceof Pokemon)) { + if (!isPokemonInstance(received)) { return { - pass: this.isNot, - message: () => `Expected a Pokemon, but got ${this.utils.stringify(received)}!`, + pass: false, + message: () => `Expected to recieve a Pokémon, but got ${receivedStr(received)}!`, }; } - if (!Array.isArray(expected) || expected.length === 0) { - return { - pass: this.isNot, - message: () => `Expected to recieve an array with length >=1, but got ${this.utils.stringify(expected)}!`, - }; - } + const actualTypes = received.getTypes(...(options.args ?? [])).sort(); + const expectedTypes = expected.slice().sort(); - if (!expected.every((t): t is PokemonType => t in PokemonType)) { - return { - pass: this.isNot, - message: () => `Expected to recieve array of PokemonTypes but got ${this.utils.stringify(expected)}!`, - }; - } + // Exact matches do not care about subset equality + const matchers = options.exact + ? [...this.customTesters, this.utils.iterableEquality] + : [...this.customTesters, this.utils.subsetEquality, this.utils.iterableEquality]; + const pass = this.equals(actualTypes, expectedTypes, matchers); - const gotSorted = pkmnTypeToStr(received.getTypes(...(options.args ?? []))); - const wantSorted = pkmnTypeToStr(expected.slice()); - const pass = this.equals(gotSorted, wantSorted, [...this.customTesters, this.utils.iterableEquality]); + const actualStr = stringifyEnumArray(PokemonType, actualTypes); + const expectedStr = stringifyEnumArray(PokemonType, expectedTypes); + const pkmName = getPokemonNameWithAffix(received); return { - pass: this.isNot !== pass, - message: () => `Expected ${received.name} to have types ${this.utils.stringify(wantSorted)}, but got ${gotSorted}!`, - actual: gotSorted, - expected: wantSorted, + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have types ${expectedStr}, but it did!` + : `Expected ${pkmName} to have types ${expectedStr}, but got ${actualStr} instead!`, + expected: expectedTypes, + actual: actualTypes, }; } - -function pkmnTypeToStr(p: PokemonType[]): string[] { - return p.sort().map(type => PokemonType[type]); -} diff --git a/test/test-utils/matchers/to-have-used-move.ts b/test/test-utils/matchers/to-have-used-move.ts new file mode 100644 index 00000000000..ef90e4dbad9 --- /dev/null +++ b/test/test-utils/matchers/to-have-used-move.ts @@ -0,0 +1,70 @@ +/** biome-ignore-start lint/correctness/noUnusedImports: TSDoc imports */ +import type { Pokemon } from "#field/pokemon"; +/** biome-ignore-end lint/correctness/noUnusedImports: TSDoc imports */ + +import { getPokemonNameWithAffix } from "#app/messages"; +import type { MoveId } from "#enums/move-id"; +import { getOnelineDiffStr, getOrdinal } from "#test/test-utils/string-utils"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { TurnMove } from "#types/turn-move"; +import type { AtLeastOne } from "#types/type-helpers"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher to check the contents of a {@linkcode Pokemon}'s move history. + * @param received - The actual value received. Should be a {@linkcode Pokemon} + * @param expectedValue - The {@linkcode MoveId} the Pokemon is expected to have used, + * or a partially filled {@linkcode TurnMove} containing the desired properties to check + * @param index - The index of the move history entry to check, in order from most recent to least recent. + * Default `0` (last used move) + * @returns Whether the matcher passed + */ +export function toHaveUsedMove( + this: MatcherState, + received: unknown, + expectedResult: MoveId | AtLeastOne, + index = 0, +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const move: TurnMove | undefined = received.getLastXMoves(-1)[index]; + const pkmName = getPokemonNameWithAffix(received); + + if (move === undefined) { + return { + pass: false, + message: () => `Expected ${pkmName} to have used ${index + 1} moves, but it didn't!`, + actual: received.getLastXMoves(-1), + }; + } + + // Coerce to a `TurnMove` + if (typeof expectedResult === "number") { + expectedResult = { move: expectedResult }; + } + + const moveIndexStr = index === 0 ? "last move" : `${getOrdinal(index)} most recent move`; + + const pass = this.equals(move, expectedResult, [ + ...this.customTesters, + this.utils.subsetEquality, + this.utils.iterableEquality, + ]); + + const expectedStr = getOnelineDiffStr.call(this, expectedResult); + return { + pass, + message: () => + pass + ? `Expected ${pkmName}'s ${moveIndexStr} to NOT match ${expectedStr}, but it did!` + : // Replace newlines with spaces to preserve one-line ness + `Expected ${pkmName}'s ${moveIndexStr} to match ${expectedStr}, but it didn't!`, + expected: expectedResult, + actual: move, + }; +} diff --git a/test/test-utils/matchers/to-have-used-pp.ts b/test/test-utils/matchers/to-have-used-pp.ts new file mode 100644 index 00000000000..3b606a535bc --- /dev/null +++ b/test/test-utils/matchers/to-have-used-pp.ts @@ -0,0 +1,77 @@ +// biome-ignore-start lint/correctness/noUnusedImports: TSDoc imports +import type { Pokemon } from "#field/pokemon"; +// biome-ignore-end lint/correctness/noUnusedImports: TSDoc imports + +import { getPokemonNameWithAffix } from "#app/messages"; +import Overrides from "#app/overrides"; +import { MoveId } from "#enums/move-id"; +import { getEnumStr } from "#test/test-utils/string-utils"; +import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import { coerceArray } from "#utils/common"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher to check the amount of PP consumed by a {@linkcode Pokemon}. + * @param received - The actual value received. Should be a {@linkcode Pokemon} + * @param expectedValue - The {@linkcode MoveId} that should have consumed PP + * @param ppUsed - The numerical amount of PP that should have been consumed, + * or `all` to indicate the move should be _out_ of PP + * @returns Whether the matcher passed + * @remarks + * If the same move appears in the Pokemon's moveset multiple times, this will fail the test! + */ +export function toHaveUsedPP( + this: MatcherState, + received: unknown, + expectedMove: MoveId, + ppUsed: number | "all", +): SyncExpectationResult { + if (!isPokemonInstance(received)) { + return { + pass: false, + message: () => `Expected to receive a Pokémon, but got ${receivedStr(received)}!`, + }; + } + + const override = received.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; + if (coerceArray(override).length > 0) { + return { + pass: false, + message: () => + `Cannot test for PP consumption with ${received.isPlayer() ? "player" : "enemy"} moveset overrides active!`, + }; + } + + const pkmName = getPokemonNameWithAffix(received); + const moveStr = getEnumStr(MoveId, expectedMove); + + const movesetMoves = received.getMoveset().filter(pm => pm.moveId === expectedMove); + if (movesetMoves.length !== 1) { + return { + pass: false, + message: () => + `Expected MoveId.${moveStr} to appear in ${pkmName}'s moveset exactly once, but got ${movesetMoves.length} times!`, + expected: expectedMove, + actual: received.getMoveset(), + }; + } + + const move = movesetMoves[0]; // will be the only move in the array + + let ppStr: string = ppUsed.toString(); + if (typeof ppUsed === "string") { + ppStr = "all its"; + ppUsed = move.getMovePp(); + } + const pass = move.ppUsed === ppUsed; + + return { + pass, + message: () => + pass + ? `Expected ${pkmName}'s ${moveStr} to NOT have used ${ppStr} PP, but it did!` + : `Expected ${pkmName}'s ${moveStr} to have used ${ppStr} PP, but got ${move.ppUsed} instead!`, + expected: ppUsed, + actual: move.ppUsed, + }; +} diff --git a/test/test-utils/matchers/to-have-weather.ts b/test/test-utils/matchers/to-have-weather.ts new file mode 100644 index 00000000000..49433b2137b --- /dev/null +++ b/test/test-utils/matchers/to-have-weather.ts @@ -0,0 +1,62 @@ +/** biome-ignore-start lint/correctness/noUnusedImports: TSDoc imports */ +import type { GameManager } from "#test/test-utils/game-manager"; +/** biome-ignore-end lint/correctness/noUnusedImports: TSDoc imports */ + +import { WeatherType } from "#enums/weather-type"; +import { isGameManagerInstance, receivedStr } from "#test/test-utils/test-utils"; +import { toTitleCase } from "#utils/strings"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if the {@linkcode WeatherType} is as expected + * @param received - The object to check. Expects an instance of {@linkcode GameManager}. + * @param expectedWeatherType - The expected {@linkcode WeatherType} + * @returns Whether the matcher passed + */ +export function toHaveWeather( + this: MatcherState, + received: unknown, + expectedWeatherType: WeatherType, +): SyncExpectationResult { + if (!isGameManagerInstance(received)) { + return { + pass: false, + message: () => `Expected GameManager, but got ${receivedStr(received)}!`, + }; + } + + if (!received.scene?.arena) { + return { + pass: false, + message: () => `Expected GameManager.${received.scene ? "scene" : "scene.arena"} to be defined!`, + }; + } + + const actual = received.scene.arena.getWeatherType(); + const pass = actual === expectedWeatherType; + const actualStr = toWeatherStr(actual); + const expectedStr = toWeatherStr(expectedWeatherType); + + return { + pass, + message: () => + pass + ? `Expected Arena to NOT have ${expectedStr} weather active, but it did!` + : `Expected Arena to have ${expectedStr} weather active, but got ${actualStr} instead!`, + expected: expectedWeatherType, + actual, + }; +} + +/** + * Get a human readable representation of the current {@linkcode WeatherType}. + * @param weatherType - The {@linkcode WeatherType} to transform + * @returns A human readable string + */ +function toWeatherStr(weatherType: WeatherType) { + if (weatherType === WeatherType.NONE) { + return "no weather"; + } + + return toTitleCase(WeatherType[weatherType]); +} diff --git a/test/test-utils/string-utils.ts b/test/test-utils/string-utils.ts new file mode 100644 index 00000000000..bd3dd7c2fa9 --- /dev/null +++ b/test/test-utils/string-utils.ts @@ -0,0 +1,183 @@ +import { getStatKey, type Stat } from "#enums/stat"; +import type { EnumOrObject, NormalEnum, TSNumericEnum } from "#types/enum-types"; +import type { ObjectValues } from "#types/type-helpers"; +import { enumValueToKey } from "#utils/enums"; +import { toTitleCase } from "#utils/strings"; +import type { MatcherState } from "@vitest/expect"; +import i18next from "i18next"; + +type Casing = "Preserve" | "Title"; + +interface getEnumStrOptions { + /** + * A string denoting the casing method to use. + * @defaultValue "Preserve" + */ + casing?: Casing; + /** + * If present, will be prepended to the beginning of the enum string. + */ + prefix?: string; + /** + * If present, will be added to the end of the enum string. + */ + suffix?: string; +} + +/** + * Return the name of an enum member or const object value, alongside its corresponding value. + * @param obj - The {@linkcode EnumOrObject} to source reverse mappings from + * @param enums - One of {@linkcode obj}'s values + * @param casing - A string denoting the casing method to use; default `Preserve` + * @param prefix - An optional string to be prepended to the enum's string representation + * @param suffix - An optional string to be appended to the enum's string representation + * @returns The stringified representation of `val` as dictated by the options. + * @example + * ```ts + * enum fakeEnum { + * ONE: 1, + * TWO: 2, + * THREE: 3, + * } + * getEnumStr(fakeEnum, fakeEnum.ONE); // Output: "ONE (=1)" + * getEnumStr(fakeEnum, fakeEnum.TWO, {casing: "Title", prefix: "fakeEnum.", suffix: "!!!"}); // Output: "fakeEnum.TWO!!! (=2)" + * ``` + */ +export function getEnumStr( + obj: E, + val: ObjectValues, + { casing = "Preserve", prefix = "", suffix = "" }: getEnumStrOptions = {}, +): string { + let casingFunc: ((s: string) => string) | undefined; + switch (casing) { + case "Preserve": + break; + case "Title": + casingFunc = toTitleCase; + break; + } + + let stringPart = + obj[val] !== undefined + ? // TS reverse mapped enum + (obj[val] as string) + : // Normal enum/`const object` + (enumValueToKey(obj as NormalEnum, val) as string); + + if (casingFunc) { + stringPart = casingFunc(stringPart); + } + + return `${prefix}${stringPart}${suffix} (=${val})`; +} + +/** + * Convert an array of enums or `const object`s into a readable string version. + * @param obj - The {@linkcode EnumOrObject} to source reverse mappings from + * @param enums - An array of {@linkcode obj}'s values + * @returns The stringified representation of `enums`. + * @example + * ```ts + * enum fakeEnum { + * ONE: 1, + * TWO: 2, + * THREE: 3, + * } + * console.log(stringifyEnumArray(fakeEnum, [fakeEnum.ONE, fakeEnum.TWO, fakeEnum.THREE])); // Output: "[ONE, TWO, THREE] (=[1, 2, 3])" + * ``` + */ +export function stringifyEnumArray(obj: E, enums: E[keyof E][]): string { + if (obj.length === 0) { + return "[]"; + } + + const vals = enums.slice(); + /** An array of string names */ + let names: string[]; + + if (obj[enums[0]] !== undefined) { + // Reverse mapping exists - `obj` is a `TSNumericEnum` and its reverse mapped counterparts are strings + names = enums.map(e => (obj as TSNumericEnum)[e] as string); + } else { + // No reverse mapping exists means `obj` is a `NormalEnum`. + // NB: This (while ugly) should be more ergonomic than doing a repeated lookup for large `const object`s + // as the `enums` array should be significantly shorter than the corresponding enum type. + names = []; + for (const [k, v] of Object.entries(obj as NormalEnum)) { + if (names.length === enums.length) { + // No more names to get + break; + } + // Find all matches for the given enum, assigning their keys to the names array + findIndices(enums, v).forEach(matchIndex => { + names[matchIndex] = k; + }); + } + } + return `[${names.join(", ")}] (=[${vals.join(", ")}])`; +} + +/** + * Return the indices of all occurrences of a value in an array. + * @param arr - The array to search + * @param searchElement - The value to locate in the array + * @param fromIndex - The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0 + */ +function findIndices(arr: T[], searchElement: T, fromIndex = 0): number[] { + const indices: number[] = []; + const arrSliced = arr.slice(fromIndex); + for (const [index, value] of arrSliced.entries()) { + if (value === searchElement) { + indices.push(index); + } + } + return indices; +} + +/** + * Convert a number into an English ordinal + * @param num - The number to convert into an ordinal + * @returns The ordinal representation of {@linkcode num}. + * @example + * ```ts + * console.log(getOrdinal(1)); // Output: "1st" + * console.log(getOrdinal(12)); // Output: "12th" + * console.log(getOrdinal(24)); // Output: "24th" + * ``` + */ +export function getOrdinal(num: number): string { + const tens = num % 10; + const hundreds = num % 100; + if (tens === 1 && hundreds !== 11) { + return num + "st"; + } + if (tens === 2 && hundreds !== 12) { + return num + "nd"; + } + if (tens === 3 && hundreds !== 13) { + return num + "rd"; + } + return num + "th"; +} + +/** + * Get the localized name of a {@linkcode Stat}. + * @param s - The {@linkcode Stat} to check + * @returns - The proper name for s, retrieved from the translations. + */ +export function getStatName(s: Stat): string { + return i18next.t(getStatKey(s)); +} + +/** + * Convert an object into a oneline diff to be shown in an error message. + * @param obj - The object to return the oneline diff of + * @returns The updated diff + */ +export function getOnelineDiffStr(this: MatcherState, obj: unknown): string { + return this.utils + .stringify(obj, undefined, { maxLength: 35, indent: 0, printBasicPrototype: false }) + .replace(/\n/g, " ") // Replace newlines with spaces + .replace(/,(\s*)}$/g, "$1}"); +} diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 40e4bbe8775..b9e73c3e9da 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -1,3 +1,5 @@ +import { Pokemon } from "#field/pokemon"; +import type { GameManager } from "#test/test-utils/game-manager"; import i18next, { type ParseKeys } from "i18next"; import { vi } from "vitest"; @@ -29,3 +31,54 @@ export function arrayOfRange(start: number, end: number) { export function getApiBaseUrl() { return import.meta.env.VITE_SERVER_URL ?? "http://localhost:8001"; } + +type TypeOfResult = "undefined" | "object" | "boolean" | "number" | "bigint" | "string" | "symbol" | "function"; + +/** + * Helper to determine the actual type of the received object as human readable string + * @param received - The received object + * @returns A human readable string of the received object (type) + */ +export function receivedStr(received: unknown, expectedType: TypeOfResult = "object"): string { + if (received === null) { + return "null"; + } + if (received === undefined) { + return "undefined"; + } + if (typeof received !== expectedType) { + return typeof received; + } + if (expectedType === "object") { + return received.constructor.name; + } + + return "unknown"; +} + +/** + * Helper to check if the received object is an {@linkcode object} + * @param received - The object to check + * @returns Whether the object is an {@linkcode object}. + */ +function isObject(received: unknown): received is object { + return received !== null && typeof received === "object"; +} + +/** + * Helper function to check if a given object is a {@linkcode Pokemon}. + * @param received - The object to check + * @return Whether `received` is a {@linkcode Pokemon} instance. + */ +export function isPokemonInstance(received: unknown): received is Pokemon { + return isObject(received) && received instanceof Pokemon; +} + +/** + * Checks if an object is a {@linkcode GameManager} instance + * @param received - The object to check + * @returns Whether the object is a {@linkcode GameManager} instance. + */ +export function isGameManagerInstance(received: unknown): received is GameManager { + return isObject(received) && (received as GameManager).constructor.name === "GameManager"; +} diff --git a/test/types/type-helpers.test-d.ts b/test/types/type-helpers.test-d.ts new file mode 100644 index 00000000000..29f957890fc --- /dev/null +++ b/test/types/type-helpers.test-d.ts @@ -0,0 +1,38 @@ +import type { AtLeastOne } from "#types/type-helpers"; +import { describe, it } from "node:test"; +import { expectTypeOf } from "vitest"; + +type fakeObj = { + foo: number; + bar: string; + baz: number | string; +}; + +type optionalObj = { + foo: number; + bar: string; + baz?: number | string; +}; + +describe("AtLeastOne", () => { + it("should accept an object with at least 1 of its defined parameters", () => { + expectTypeOf<{ foo: number }>().toExtend>(); + expectTypeOf<{ bar: string }>().toExtend>(); + expectTypeOf<{ baz: number | string }>().toExtend>(); + }); + + it("should convert to a partial intersection with the union of all individual single properties", () => { + expectTypeOf>().branded.toEqualTypeOf< + Partial & ({ foo: number } | { bar: string } | { baz: number | string }) + >(); + }); + + it("should treat optional properties as required", () => { + expectTypeOf>().branded.toEqualTypeOf>(); + }); + + it("should not accept empty objects, even if optional properties are present", () => { + expectTypeOf>().not.toExtend>(); + expectTypeOf>().not.toExtend>(); + }); +}); diff --git a/test/ui/item-manage-button.test.ts b/test/ui/item-manage-button.test.ts new file mode 100644 index 00000000000..a7ea76918a5 --- /dev/null +++ b/test/ui/item-manage-button.test.ts @@ -0,0 +1,172 @@ +import { BerryType } from "#enums/berry-type"; +import { Button } from "#enums/buttons"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { UiMode } from "#enums/ui-mode"; +import type { Pokemon } from "#field/pokemon"; +import { GameManager } from "#test/test-utils/game-manager"; +import type { ModifierSelectUiHandler } from "#ui/modifier-select-ui-handler"; +import type { PartyUiHandler } from "#ui/party-ui-handler"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("UI - Transfer Items", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(async () => { + game = new GameManager(phaserGame); + game.override + .battleStyle("single") + .startingLevel(100) + .startingHeldItems([ + { name: "BERRY", count: 1, type: BerryType.SITRUS }, + { name: "BERRY", count: 2, type: BerryType.APICOT }, + { name: "BERRY", count: 2, type: BerryType.LUM }, + ]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); + + await game.classicMode.startBattle([SpeciesId.RAYQUAZA, SpeciesId.RAYQUAZA, SpeciesId.RAYQUAZA]); + + game.move.use(MoveId.DRAGON_CLAW); + + await game.phaseInterceptor.to("SelectModifierPhase"); + }); + + it("manage button exists in the proper screen", async () => { + let handlerLength: Phaser.GameObjects.GameObject[] | undefined; + + await new Promise(resolve => { + //select manage items menu + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; + + handler.processInput(Button.DOWN); + handler.setCursor(1); + handler.processInput(Button.ACTION); + }); + + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + handler.processInput(Button.DOWN); + handler.processInput(Button.ACTION); + handlerLength = handler.optionsContainer.list; + + handler.processInput(Button.CANCEL); + + resolve(); + }); + }); + + expect(handlerLength).toHaveLength(0); // should select manage button, which has no menu + }); + + it("manage button doesn't exist in the other screens", async () => { + let handlerLength: Phaser.GameObjects.GameObject[] | undefined; + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; + + handler.processInput(Button.DOWN); + handler.setCursor(2); + handler.processInput(Button.ACTION); + }); + + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + handler.processInput(Button.DOWN); + handler.processInput(Button.ACTION); + handlerLength = handler.optionsContainer.list; + + handler.processInput(Button.CANCEL); + handler.processInput(Button.CANCEL); + + resolve(); + }); + }); + + expect(handlerLength).toHaveLength(6); // should select 2nd pokemon (length is 5 options + image) + }); + + // Test that the manage button actually discards items, needs proofreading + it("should discard items when button is selected", async () => { + let pokemon: Pokemon | undefined; + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; + + handler.processInput(Button.DOWN); + handler.setCursor(1); + handler.processInput(Button.ACTION); + }); + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + // Enter discard mode and select first party member + handler.setCursor(7); + handler.processInput(Button.ACTION); + handler.setCursor(0); + handler.processInput(Button.ACTION); + pokemon = game.field.getPlayerPokemon(); + + resolve(); + }); + }); + + expect(pokemon).toBeDefined(); + if (pokemon) { + expect(pokemon.getHeldItems()).toHaveLength(3); + expect(pokemon.getHeldItems().map(h => h.stackCount)).toEqual([1, 2, 2]); + } + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + handler.processInput(Button.ACTION); + resolve(); + }); + }); + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + handler.processInput(Button.ACTION); + + pokemon = game.field.getPlayerPokemon(); + + handler.processInput(Button.CANCEL); + resolve(); + }); + }); + + expect(pokemon).toBeDefined(); + if (pokemon) { + // Sitrus berry was discarded, leaving 2 stacks of 2 berries behind + expect(pokemon.getHeldItems()).toHaveLength(2); + expect(pokemon.getHeldItems().map(h => h.stackCount)).toEqual([2, 2]); + } + }); +});